diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 163289a..95de4a9 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -2,37 +2,15 @@ name: Build and Push Docker Images on: push: - branches: [ main ] + branches: [ main, master ] paths: - '*/Dockerfile' - '.gitea/workflows/docker-build.yml' jobs: - detect-changes: - runs-on: ubuntu-latest - container: git.hofer.link/philipp/ci-images:rust-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Detect changed directories - id: set-matrix - run: | - CHANGED_DIRS=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep 'Dockerfile' | xargs -L1 dirname | sort | uniq | jq -R -s -c 'split("\n") | map(select(length > 0))') - echo "matrix=${CHANGED_DIRS}" >> $GITHUB_OUTPUT - build: - needs: detect-changes - if: ${{ needs.detect-changes.outputs.matrix != '[]' && needs.detect-changes.outputs.matrix != '' }} runs-on: ubuntu-latest container: git.hofer.link/philipp/ci-images:rust-latest - strategy: - matrix: - image_dir: ${{ fromJson(needs.detect-changes.outputs.matrix) }} steps: - name: Checkout code uses: actions/checkout@v3 @@ -44,16 +22,26 @@ jobs: username: ${{ secrets.GITEA_USERNAME }} password: ${{ secrets.GITEA_PASSWORD }} - - name: Extract image name from directory - id: image-name + - name: Find changed Dockerfiles + id: find-changes run: | - IMAGE_NAME=$(basename ${{ matrix.image_dir }}) - echo "name=${IMAGE_NAME}" >> $GITHUB_OUTPUT + # Get list of changed files + CHANGED_FILES=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} || git diff --name-only HEAD~1 HEAD) + + # Find directories with changed Dockerfiles + for file in $CHANGED_FILES; do + if [[ $file == */Dockerfile ]]; then + dir=$(echo $file | sed 's/\/Dockerfile$//') + echo "Building image for directory: $dir" + + # Extract image name from directory + IMAGE_NAME=$(basename $dir) + echo "Building image: $IMAGE_NAME" + + # Build and push the Docker image + docker build -t git.hofer.link/philipp/ci-images:$IMAGE_NAME $dir + docker push git.hofer.link/philipp/ci-images:$IMAGE_NAME + fi + done - - name: Build and push - uses: docker/build-push-action@v4 - with: - context: ${{ matrix.image_dir }} - push: true - tags: git.hofer.link/philipp/ci-images:${{ steps.image-name.outputs.name }}