Files
docker-php-fpm/.github/workflows/action.yml
2022-12-09 09:47:46 +01:00

366 lines
15 KiB
YAML

---
# -------------------------------------------------------------------------------------------------
# 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 }}