--- # ------------------------------------------------------------------------------------------------- # Job Name # ------------------------------------------------------------------------------------------------- name: build # ------------------------------------------------------------------------------------------------- # When to run # ------------------------------------------------------------------------------------------------- on: # Push or pull_request will be determined in jobs.configure.enabled push: pull_request: # Dispatch: allows for manual trigger via GH UI workflow_dispatch: jobs: # ----------------------------------------------------------------------------------------------- # (1/9) Determine parameter settings # ----------------------------------------------------------------------------------------------- params: uses: ./.github/workflows/params.yml # ----------------------------------------------------------------------------------------------- # (2/9) Configure Build and Deploy Matrices # ----------------------------------------------------------------------------------------------- configure: needs: [params] uses: devilbox/github-actions/.github/workflows/docker-multistage-configure.yml@master with: enabled: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && (github.event.pull_request.user.login != 'cytopia')) }} can_deploy: ${{ (github.repository == 'devilbox/docker-php-fpm') && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/heads/release-')) }} versions: ${{ needs.params.outputs.versions }} refs: ${{ needs.params.outputs.refs }} secrets: dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # ----------------------------------------------------------------------------------------------- # (3/9) Build & Test base # ----------------------------------------------------------------------------------------------- build-base: needs: - configure uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master with: has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} run_tests: false upload_artifact: true pull_base_image: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} stage: base stage_prev: '' # test-base: # needs: # - configure # - build-base # uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master # with: # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: base # ----------------------------------------------------------------------------------------------- # (4/9) Build & Test mods # ----------------------------------------------------------------------------------------------- build-mods: needs: - configure - build-base uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master with: has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} run_tests: false upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} stage: mods stage_prev: base # test-mods: # needs: # - configure # - build-mods # uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master # with: # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: mods # ----------------------------------------------------------------------------------------------- # (5/9) Build & Test prod # ----------------------------------------------------------------------------------------------- build-prod: needs: - configure - build-mods uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master with: has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} run_tests: false upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} stage: prod stage_prev: mods # test-prod: # needs: # - configure # - build-prod # uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master # with: # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: prod # ----------------------------------------------------------------------------------------------- # (6/9) Build & Test slim # ----------------------------------------------------------------------------------------------- build-slim: needs: - configure - build-prod uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master with: has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} run_tests: false upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} stage: slim stage_prev: prod # test-slim: # needs: # - configure # - build-slim # uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master # with: # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: slim # ----------------------------------------------------------------------------------------------- # (7/9) Build & Test work # ----------------------------------------------------------------------------------------------- build-work: needs: - configure - build-slim uses: devilbox/github-actions/.github/workflows/docker-multistage-build.yml@master with: has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} run_tests: false upload_artifact: true matrix: ${{ needs.configure.outputs.matrix_build }} artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} stage: work stage_prev: slim # test-work: # needs: # - configure # - build-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-test.yml@master # with: # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: work # ----------------------------------------------------------------------------------------------- # (8/9) Push images # ----------------------------------------------------------------------------------------------- # push-base: # needs: # - configure # - test-base # - test-mods # - test-prod # - test-slim # - test-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: base # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # push-mods: # needs: # - configure # - test-base # - test-mods # - test-prod # - test-slim # - test-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: mods # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # push-prod: # needs: # - configure # - test-base # - test-mods # - test-prod # - test-slim # - test-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: prod # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # push-slim: # needs: # - configure # - test-base # - test-mods # - test-prod # - test-slim # - test-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: slim # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # push-work: # needs: # - configure # - test-base # - test-mods # - test-prod # - test-slim # - test-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-image.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_build }} # artifact_prefix: ${{ needs.configure.outputs.artifact_prefix }} # stage: work # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # # # ----------------------------------------------------------------------------------------------- # # (9/9) Push Manifests # # ----------------------------------------------------------------------------------------------- # manifest-base: # needs: # - configure # - push-base # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_deploy }} # versions: ${{ needs.configure.outputs.versions }} # stage: base # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # manifest-mods: # needs: # - configure # - push-mods # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_deploy }} # versions: ${{ needs.configure.outputs.versions }} # stage: mods # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # manifest-prod: # needs: # - configure # - push-prod # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_deploy }} # versions: ${{ needs.configure.outputs.versions }} # stage: prod # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # manifest-slim: # needs: # - configure # - push-slim # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_deploy }} # versions: ${{ needs.configure.outputs.versions }} # stage: slim # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }} # # manifest-work: # needs: # - configure # - push-work # uses: devilbox/github-actions/.github/workflows/docker-multistage-push-manifest.yml@master # with: # can_deploy: ${{ needs.configure.outputs.can_login == 'true' && needs.configure.outputs.can_push == 'true' }} # has_refs: ${{ needs.configure.outputs.has_refs == 'true' }} # matrix: ${{ needs.configure.outputs.matrix_deploy }} # versions: ${{ needs.configure.outputs.versions }} # stage: work # secrets: # dockerhub_username: ${{ secrets.DOCKERHUB_USERNAME }} # dockerhub_password: ${{ secrets.DOCKERHUB_PASSWORD }}