Search map splitting #25
Workflow file for this run
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
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 |