Update Dockerfile #49
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: Docker Image Build and Push | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- main | |
paths: | |
- 'action.yml' | |
- .github/workflows/build-and-push.yml | |
- 'draft_images/py-rocket-2/**' | |
- 'draft_images/coastwatch-qgis/**' | |
- 'draft_images/test/**' | |
env: | |
WATCHED_DIRECTORIES: | | |
draft_images/py-rocket-2 | |
draft_images/coastwatch-qgis | |
draft_images/test/test | |
jobs: | |
find-changes: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix_dirs: ${{ steps.find-changes.outputs.matrix_dirs }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 2 | |
- name: Find changed directories | |
id: find-changes | |
run: | | |
# Prepare the watched directories list as a single line with | separator | |
watched_dirs=$(echo "${WATCHED_DIRECTORIES}" | tr '\n' '|') | |
all_changed_dirs=$(git diff --name-only HEAD^ HEAD | grep -E "^(${watched_dirs})" | sort -u) | |
echo "Debugging: all_changed_dirs is $all_changed_dirs" | |
# Now apply sed to reduce each path to the top-level watched directory | |
dirs=$(echo "$all_changed_dirs" | while read -r path; do | |
# Match the path to one of the watched directories, preserving only the matched part | |
for watched in ${WATCHED_DIRECTORIES}; do | |
if [[ "$path" == $watched* ]]; then | |
echo "$watched" | |
fi | |
done | |
done | sort -u | uniq) | |
echo "Filtered directories: $dirs" | |
echo "Debugging: all_changed_dirs is $dirs" | |
if [ -z "$dirs" ]; then | |
echo "No changed directories" | |
echo "::set-output name=matrix_dirs::[]" # Set an empty array to handle no changes | |
exit 0 | |
fi | |
# Convert to JSON array for matrix strategy | |
matrix_dirs=$(echo "$dirs" | jq -R -s -c 'split("\n") | map(select(. != ""))') | |
echo "::set-output name=matrix_dirs::$matrix_dirs" | |
echo "Debugging: matrix_dirs output is $matrix_dirs" | |
# Build job using matrix | |
build: | |
runs-on: ubuntu-latest | |
needs: find-changes | |
if: needs.find-changes.outputs.matrix_dirs != '[]' # Only run if there are changed directories | |
strategy: | |
matrix: | |
dir: ${{ fromJson(needs.find-changes.outputs.matrix_dirs) }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Extract image name | |
id: extract-name | |
shell: bash | |
run: | | |
full_image_name="${{ github.event.repository.name }}/$(basename ${{ matrix.dir }})" | |
echo "image_name=$full_image_name" >> $GITHUB_ENV | |
echo "Full image name set to: $full_image_name" | |
- name: Use reusable action for each directory | |
uses: nmfs-opensci/container-images@main | |
with: | |
image_dir: ${{ matrix.dir }} | |
image_name: ${{ env.image_name }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |