-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add an automatic check to see if the docker image version is updated …
…when the dockerfile changes (#83) * Rename dockerfiles * GitHub action for docker version check
- Loading branch information
1 parent
b9e25d4
commit 23ab4e3
Showing
4 changed files
with
93 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
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@v4 | ||
with: | ||
fetch-depth: 0 | ||
sparse-checkout: docker/ | ||
|
||
# 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) | ||
version_on_main=$(git show origin/${{ github.base_ref }}:docker/docker-compose.yaml | grep -oP "image: .*/$image_name:v\K[0-9]+\.[0-9]+\.[0-9]+") | ||
echo "version_on_main=$version_on_main" | ||
# Split current version into major, minor, patch | ||
IFS='.' read -r current_major current_minor current_patch <<< "$version_on_main" | ||
# Check if the image version for this image_name has been incremented in this PR | ||
version_this_branch=$(grep -oP "image: .*/$image_name:v\K[0-9]+\.[0-9]+\.[0-9]+" docker-compose.yaml) | ||
if [ -z "$version_this_branch" ]; then | ||
echo "::error::Dockerfile for $image_name was modified but image version in docker-compose.yaml was not updated." | ||
exit 1 | ||
fi | ||
echo "version_this_branch=$version_this_branch" | ||
# Split new version into major, minor, patch | ||
IFS='.' read -r new_major new_minor new_patch <<< "$version_this_branch" | ||
# 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters