name: Build docker image on: pull_request: branches: - "main" paths: - api/Dockerfile - web/Dockerfile permissions: contents: read concurrency: group: docker-build-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: check-changes: runs-on: ubuntu-latest outputs: api: ${{ steps.changes.outputs.api }} web: ${{ steps.changes.outputs.web }} steps: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 2 persist-credentials: false - name: Check changed files id: changes uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 with: filters: | api: - 'api/Dockerfile' web: - 'web/Dockerfile' build-api: name: Build API Docker Image needs: check-changes if: needs.check-changes.outputs.api == 'true' runs-on: ubuntu-latest steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Build Docker Image uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0 with: push: false context: "{{defaultContext}}:api" file: Dockerfile platforms: linux/amd64 cache-from: type=gha,scope=api-pr cache-to: type=gha,mode=max,scope=api-pr build-web: name: Build Web Docker Image needs: check-changes if: needs.check-changes.outputs.web == 'true' runs-on: ubuntu-latest steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Build Docker Image uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0 with: push: false context: "{{defaultContext}}:web" file: Dockerfile platforms: linux/amd64 cache-from: type=gha,scope=web-pr cache-to: type=gha,mode=max,scope=web-pr