Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

This PR adds an automatic check to see if the docker image version is updated when the dockerfile changes #83

Merged
merged 6 commits into from
Oct 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/dockerfile_version_check.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
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

# 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 service
- name: Check Dockerfile changes and version increment for each service
run: |
# List the services and their corresponding Dockerfiles
cd docker/
declare -A services
services=(
["isaac-sim"]="Dockerfile.isaac-ros"
["robot"]="Dockerfile.airstack-dev"
# Add more mappings here for other services
)

# Compare the current branch with the base branch
changes=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)

# Loop through each service and its Dockerfile
for service in "${!services[@]}"; do
dockerfile="${services[$service]}"

# If the Dockerfile for this service has been changed
if echo "$changes" | grep -q "$dockerfile"; then
echo "Dockerfile for $service has changed."

# Check if the docker-compose.yaml contains an image version for this service (vX.Y.Z)
if grep -qE "image: .*/$service:.*v[0-9]+\.[0-9]+\.[0-9]+" docker-compose.yaml; then
# Extract the full version (vX.Y.Z)
current_version=$(grep -oP "image: .*/$service:v\K[0-9]+\.[0-9]+\.[0-9]+" docker-compose.yaml)

# 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 service has been incremented in this PR
new_version=$(git diff origin/${{ github.base_ref }}...HEAD -- docker-compose.yaml | grep -oP "image: .*/$service:v\K[0-9]+\.[0-9]+\.[0-9]+")

if [ -z "$new_version" ]; then
echo "::error::Dockerfile for $service was modified but image version in docker-compose.yaml was not updated."
exit 1
fi

# 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 $service has been incremented in docker-compose.yaml."
else
echo "::error::Dockerfile for $service 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 $service."
exit 1
fi
else
echo "No changes to Dockerfile for $service."
fi
done
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ RUN apt install -y \
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
Expand Down
File renamed without changes.
12 changes: 6 additions & 6 deletions docker/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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-4.1.0_ros-humble:v1.0.0
image: airlab-storage.andrew.cmu.edu:5001/shared/isaac-sim-4.1.0_ros-humble:v1.0.0
container_name: isaac-sim
entrypoint: bash
# Interactive shell
Expand Down Expand Up @@ -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.5.0
image: airlab-storage.andrew.cmu.edu:5001/shared/airstack-dev:v0.5.0
# container_name: robot-1
entrypoint: bash -c "service ssh restart && bash"
# Interactive shell
Expand Down
Loading