diff --git a/.github/workflows/dockerfile_version_check.yaml b/.github/workflows/dockerfile_version_check.yaml new file mode 100644 index 00000000..2f716186 --- /dev/null +++ b/.github/workflows/dockerfile_version_check.yaml @@ -0,0 +1,86 @@ +name: Dockerfile Version Check + +on: + pull_request: + paths: + - "docker/Dockerfile.*" + - "docker/docker-compose.yaml" + +jobs: + check-docker-version: + runs-on: ubuntu-latest + + steps: + # Checkout the code + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + # Fetch base branch (e.g., 'main') for comparison + - name: Fetch base branch for comparison + run: | + git fetch origin +refs/heads/${{ github.base_ref }}:refs/remotes/origin/${{ github.base_ref }} + + # Define a function to check version increment for a given image_name + - name: Check Dockerfile changes and version increment for each image_name + run: | + # List the image_names and their corresponding Dockerfiles + cd docker/ + declare -A image_name_to_dockerfile + image_name_to_dockerfile=( + ["isaac-sim_ros-humble"]="Dockerfile.isaac-ros" + ["airstack-dev"]="Dockerfile.airstack-dev" + # Add more mappings here + ) + + # Compare the current branch with the base branch + changes=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) + + # Loop through each image_name and its Dockerfile + for image_name in "${!image_name_to_dockerfile[@]}"; do + dockerfile="${image_name_to_dockerfile[$image_name]}" + + # If the Dockerfile for this image_name has been changed + if echo "$changes" | grep -q "$dockerfile"; then + echo "Dockerfile for $image_name has changed." + + # Check if the docker-compose.yaml contains an image version for this image_name (vX.Y.Z) + if grep -qE "image: .*/$image_name:.*v[0-9]+\.[0-9]+\.[0-9]+" docker-compose.yaml; then + # Extract the full version (vX.Y.Z) + current_version=$(grep -oP "image: .*/$image_name:v\K[0-9]+\.[0-9]+\.[0-9]+" docker-compose.yaml) + echo "current_version=$current_version" + + # Split current version into major, minor, patch + IFS='.' read -r current_major current_minor current_patch <<< "$current_version" + + # Check if the image version for this image_name has been incremented in this PR + new_version=$(git diff origin/${{ github.base_ref }}...HEAD -- docker-compose.yaml | grep -oP "image: .*/$image_name:v\K[0-9]+\.[0-9]+\.[0-9]+") || echo "No new version found." + + if [ -z "$new_version" ]; then + echo "::error::Dockerfile for $image_name was modified but image version in docker-compose.yaml was not updated." + exit 1 + fi + + echo "new_version=$new_version" + + # Split new version into major, minor, patch + IFS='.' read -r new_major new_minor new_patch <<< "$new_version" + + # Check if the new version is higher than the current one + if [ "$new_major" -gt "$current_major" ] || \ + ([ "$new_major" -eq "$current_major" ] && [ "$new_minor" -gt "$current_minor" ]) || \ + ([ "$new_major" -eq "$current_major" ] && [ "$new_minor" -eq "$current_minor" ] && [ "$new_patch" -gt "$current_patch" ]); then + echo "Image version for $image_name has been incremented in docker-compose.yaml." + else + echo "::error::Dockerfile for $image_name was modified but the image version in docker-compose.yaml was not correctly incremented." + exit 1 + fi + else + echo "::error::No valid image version (vX.Y.Z) found in docker-compose.yaml for $image_name." + exit 1 + fi + else + echo "No changes to Dockerfile for $image_name." + fi + done diff --git a/docker/airstack-dev.dockerfile b/docker/Dockerfile.airstack-dev similarity index 93% rename from docker/airstack-dev.dockerfile rename to docker/Dockerfile.airstack-dev index f3e6eff0..b5027345 100644 --- a/docker/airstack-dev.dockerfile +++ b/docker/Dockerfile.airstack-dev @@ -4,15 +4,6 @@ FROM osrf/ros:humble-desktop-full WORKDIR /root/AirStack RUN apt update -# Install dev tools -RUN apt install -y \ - vim nano wget curl tree \ - cmake build-essential \ - less htop jq \ - python3-pip - -# Install ROS2 packages - # Package dependencies # perform ROS dependency installation for our workspace. COPY ros_ws/src /tmp/ros_ws/src diff --git a/docker/isaac-sim/Dockerfile b/docker/Dockerfile.isaac-ros similarity index 93% rename from docker/isaac-sim/Dockerfile rename to docker/Dockerfile.isaac-ros index 8a6a733e..009bcb7d 100644 --- a/docker/isaac-sim/Dockerfile +++ b/docker/Dockerfile.isaac-ros @@ -10,13 +10,6 @@ RUN echo 'Etc/UTC' > /etc/timezone && \ apt-get install -q -y --no-install-recommends tzdata && \ rm -rf /var/lib/apt/lists/* -# install packages -RUN apt-get update && apt-get install -q -y --no-install-recommends \ - dirmngr \ - gnupg2 \ - unzip \ - && rm -rf /var/lib/apt/lists/* - # setup keys RUN set -eux; \ key='C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654'; \ diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index f7b83cf8..a25ad1b4 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -4,10 +4,10 @@ services: isaac-sim: build: context: ../ - dockerfile: docker/isaac-sim/Dockerfile + dockerfile: docker/Dockerfile.isaac-ros tags: - - airlab-storage.andrew.cmu.edu:5001/shared/isaac-sim-4.1.0_ros-humble:latest - image: airlab-storage.andrew.cmu.edu:5001/shared/isaac-sim-4.1.0_ros-humble:latest + - airlab-storage.andrew.cmu.edu:5001/shared/isaac-sim_ros-humble:v1.0.0 + image: airlab-storage.andrew.cmu.edu:5001/shared/isaac-sim_ros-humble:v1.0.0 container_name: isaac-sim entrypoint: bash # Interactive shell @@ -93,11 +93,11 @@ services: robot: build: context: ../ - dockerfile: docker/airstack-dev.dockerfile + dockerfile: docker/Dockerfile.airstack-dev tags: - airlab-storage.andrew.cmu.edu:5001/shared/airstack-dev:latest - - airlab-storage.andrew.cmu.edu:5001/shared/airstack-dev:0.3.0 - image: airlab-storage.andrew.cmu.edu:5001/shared/airstack-dev:latest + - airlab-storage.andrew.cmu.edu:5001/shared/airstack-dev:v0.4.0 + image: airlab-storage.andrew.cmu.edu:5001/shared/airstack-dev:v0.4.0 # container_name: robot-1 entrypoint: bash -c "service ssh restart && bash" # Interactive shell