From d690256369fef7ac62f9a343249940dc57f6f374 Mon Sep 17 00:00:00 2001 From: Aetherinox Date: Sun, 1 Jun 2025 09:44:36 -0700 Subject: [PATCH] ci: update workflows --- .github/workflows/deploy-docker-dockerhub.yml | 61 +++-- .github/workflows/deploy-docker-gitea.yml | 63 +++-- .github/workflows/deploy-docker-github.yml | 120 ++++----- .github/workflows/release.yml | 231 ++++++++++++------ 4 files changed, 294 insertions(+), 181 deletions(-) diff --git a/.github/workflows/deploy-docker-dockerhub.yml b/.github/workflows/deploy-docker-dockerhub.yml index 216ee75c..fe109ebd 100755 --- a/.github/workflows/deploy-docker-dockerhub.yml +++ b/.github/workflows/deploy-docker-dockerhub.yml @@ -280,6 +280,7 @@ jobs: echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV # 02-25-2025 12:49 echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV # 20250225 echo "NOW_DOCKER_TS=$(date -u +'%FT%T.%3NZ')" >> $GITHUB_ENV # 2025-02-25T12:50:11.569Z + echo "GITHUB_SHA1=`git rev-parse HEAD`" >> ${GITHUB_ENV} # # # Release › Dockerhub › Install Dependencies @@ -421,6 +422,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=dockerhub org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} annotations: | org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }} org.opencontainers.image.version=${{ env.IMAGE_VERSION }} @@ -431,6 +434,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=dockerhub org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} # # # Release › Dockerhub › Build and Push › Amd64 @@ -455,6 +460,7 @@ jobs: RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }} VERSION=${{ env.IMAGE_VERSION }} BUILDDATE=${{ env.NOW_DOCKER_LABEL }} + GIT_SHA1=${{ env.GITHUB_SHA1 }} # # # Release › Dockerhub › Export Digest › Amd64 @@ -507,6 +513,7 @@ jobs: RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }} VERSION=${{ env.IMAGE_VERSION }} BUILDDATE=${{ env.NOW_DOCKER_LABEL }} + GIT_SHA1=${{ env.GITHUB_SHA1 }} # # # Release › Dockerhub › Export Digest › Arm64 @@ -536,22 +543,6 @@ jobs: if-no-files-found: error retention-days: 10 - # # - # Release › Dockerhub › Push Manifest - # # - - - name: '📦 Push Manifest' - id: task_release_dh_manifest - uses: int128/docker-manifest-create-action@v2 - with: - tags: | - ${{ steps.task_release_dh_meta.outputs.tags }} - sources: | - ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_dh_push_amd64.outputs.digest }} - ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_dh_push_arm64.outputs.digest }} - index-annotations: | - ${{ steps.task_release_dh_meta.outputs.labels }} - # # # Release › Dockerhub › Checkpoint › Amd64 # # @@ -560,23 +551,24 @@ jobs: id: task_release_dh_checkpoint run: | echo "" - echo "[ GITHUB ] ---------------------------------------------------------------------------------------------" + echo "---- [ GITHUB ] ----------------------------------------------------------------------------------------" echo "github.actor.............................. ${{ github.actor }}" echo "github.ref ............................... ${{ github.ref }}" echo "github.ref_name .......................... ${{ github.ref_name }}" echo "github.event_name ........................ ${{ github.event_name }}" echo "github.repository_owner .................. ${{ github.repository_owner }}" echo "github.repository ........................ ${{ github.repository }}" - echo "" - echo "[ INPUTS ] ---------------------------------------------------------------------------------------------" + echo "github.sha ............................... ${{ github.sha }}" + echo -e "" + echo "---- [ INPUTS ] ----------------------------------------------------------------------------------------" echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}" echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}" echo "inputs.IMAGE_DOCKERHUB_AUTHOR ............ ${{ inputs.IMAGE_DOCKERHUB_AUTHOR }}" echo "inputs.IMAGE_DOCKERHUB_USERNAME .......... ${{ inputs.IMAGE_DOCKERHUB_USERNAME }}" echo "inputs.DEV_RELEASE ....................... ${{ inputs.DEV_RELEASE }}" echo "inputs.DRY_RUN ........................... ${{ inputs.DRY_RUN }}" - echo "" - echo "[ ENV ] ------------------------------------------------------------------------------------------------" + echo -e "" + echo "---- [ ENV ] -------------------------------------------------------------------------------------------" echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}" echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}" echo "env.IMAGE_VERSION_1DIGIT ................. ${{ env.IMAGE_VERSION_1DIGIT }}" @@ -591,22 +583,39 @@ jobs: echo "env.REGISTRY_REPO_ORG_AUTHOR_LC .......... ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}" echo "env.REGISTRY_REPO_AUTHOR_LC .............. ${{ env.REGISTRY_REPO_AUTHOR_LC }}" echo "env.DOCKER_SHA ........................... ${{ env.DOCKER_SHA }}" - echo "" - echo "[ DOCKER IMAGES ] --------------------------------------------------------------------------------------" + echo "env.GITHUB_SHA1 .......................... ${{ env.GITHUB_SHA1 }}" + echo -e "" + echo "---- [ DOCKER IMAGES ] ---------------------------------------------------------------------------------" echo "registry ................................. Dockerhub" echo "tags ..................................... ${{ steps.task_release_dh_meta.outputs.tags }}" echo "labels ................................... ${{ steps.task_release_dh_meta.outputs.labels }}" echo "digest ................................... ${{ steps.task_release_dh_push_amd64.outputs.digest }}" - echo "" + echo -e "" echo "(release) tags ........................... ${{ steps.task_release_dh_meta.outputs.tags }}" echo "(release) labels ......................... ${{ steps.task_release_dh_meta.outputs.labels }}" - echo "" - echo "[ DOCKER DIGESTS ] -------------------------------------------------------------------------------------" + echo -e "" + echo "---- [ DOCKER DIGESTS ] --------------------------------------------------------------------------------" echo "docker image id (amd64) .................. ${{ steps.task_release_dh_push_amd64.outputs.imageid }}" echo "docker digest (amd64) .................... ${{ steps.task_release_dh_push_amd64.outputs.digest }}" echo "docker image id (arm64) .................. ${{ steps.task_release_dh_push_arm64.outputs.imageid }}" echo "docker digest (arm64) .................... ${{ steps.task_release_dh_push_arm64.outputs.digest }}" + # # + # Release › Dockerhub › Push Manifest + # # + + - name: '📦 Push Manifest' + id: task_release_dh_manifest + uses: int128/docker-manifest-create-action@v2 + with: + tags: | + ${{ steps.task_release_dh_meta.outputs.tags }} + sources: | + ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_dh_push_amd64.outputs.digest }} + ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_dh_push_arm64.outputs.digest }} + index-annotations: | + ${{ steps.task_release_dh_meta.outputs.labels }} + # # # Release › Dockerhub › Get Weekly Commits # # diff --git a/.github/workflows/deploy-docker-gitea.yml b/.github/workflows/deploy-docker-gitea.yml index 6be8f14a..4a4137bb 100755 --- a/.github/workflows/deploy-docker-gitea.yml +++ b/.github/workflows/deploy-docker-gitea.yml @@ -292,6 +292,7 @@ jobs: echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV # 02-25-2025 12:49 echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV # 20250225 echo "NOW_DOCKER_TS=$(date -u +'%FT%T.%3NZ')" >> $GITHUB_ENV # 2025-02-25T12:50:11.569Z + echo "GITHUB_SHA1=`git rev-parse HEAD`" >> ${GITHUB_ENV} # # # Release › Gitea › Install Dependencies @@ -437,6 +438,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=gitea org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} annotations: | org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }} org.opencontainers.image.version=${{ env.IMAGE_VERSION }} @@ -447,6 +450,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=gitea org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} # # # Release › Gitea › Meta › arm64 @@ -485,6 +490,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=gitea org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} annotations: | org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }} org.opencontainers.image.version=${{ env.IMAGE_VERSION }} @@ -495,6 +502,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=gitea org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} # # # Release › Gitea › Meta › Release @@ -579,6 +588,7 @@ jobs: RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }} VERSION=${{ env.IMAGE_VERSION }} BUILDDATE=${{ env.NOW_DOCKER_LABEL }} + GIT_SHA1=${{ env.GITHUB_SHA1 }} # # # Release › Gitea › Export Digest › Amd64 @@ -631,6 +641,7 @@ jobs: RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }} VERSION=${{ env.IMAGE_VERSION }} BUILDDATE=${{ env.NOW_DOCKER_LABEL }} + GIT_SHA1=${{ env.GITHUB_SHA1 }} # # # Release › Gitea › Export Digest › Arm64 @@ -660,22 +671,6 @@ jobs: if-no-files-found: error retention-days: 10 - # # - # Release › Gitea › Push Manifest - # # - - - name: '📦 Push Manifest' - id: task_release_gi_manifest - uses: int128/docker-manifest-create-action@v2 - with: - tags: | - ${{ steps.task_release_gi_meta_release.outputs.tags }} - sources: | - ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gi_push_amd64.outputs.digest }} - ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gi_push_arm64.outputs.digest }} - index-annotations: | - ${{ steps.task_release_gi_meta_release.outputs.labels }} - # # # Release › Gitea › Checkpoint # # @@ -684,15 +679,16 @@ jobs: id: task_release_gi_checkpoint run: | echo "" - echo "[ GITHUB ] ---------------------------------------------------------------------------------------------" + echo "---- [ GITHUB ] ----------------------------------------------------------------------------------------" echo "github.actor.............................. ${{ github.actor }}" echo "github.ref ............................... ${{ github.ref }}" echo "github.ref_name .......................... ${{ github.ref_name }}" echo "github.event_name ........................ ${{ github.event_name }}" echo "github.repository_owner .................. ${{ github.repository_owner }}" echo "github.repository ........................ ${{ github.repository }}" - echo "" - echo "[ INPUTS ] ---------------------------------------------------------------------------------------------" + echo "github.sha ............................... ${{ github.sha }}" + echo -e "" + echo "---- [ INPUTS ] ----------------------------------------------------------------------------------------" echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}" echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}" echo "inputs.IMAGE_GITEA_USERNAME .............. ${{ inputs.IMAGE_GITEA_AUTHOR }}" @@ -700,8 +696,8 @@ jobs: echo "inputs.IMAGE_GITEA_WEBSITE ............... ${{ inputs.IMAGE_GITEA_WEBSITE }}" echo "inputs.DEV_RELEASE ....................... ${{ inputs.DEV_RELEASE }}" echo "inputs.DRY_RUN ........................... ${{ inputs.DRY_RUN }}" - echo "" - echo "[ ENV ] ------------------------------------------------------------------------------------------------" + echo -e "" + echo "---- [ ENV ] -------------------------------------------------------------------------------------------" echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}" echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}" echo "env.IMAGE_VERSION_1DIGIT ................. ${{ env.IMAGE_VERSION_1DIGIT }}" @@ -717,8 +713,9 @@ jobs: echo "env.REGISTRY_REPO_ORG_AUTHOR_LC .......... ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}" echo "env.REGISTRY_REPO_AUTHOR_LC .............. ${{ env.REGISTRY_REPO_AUTHOR_LC }}" echo "env.DOCKER_SHA ........................... ${{ env.DOCKER_SHA }}" - echo "" - echo "[ DOCKER IMAGES ] --------------------------------------------------------------------------------------" + echo "env.GITHUB_SHA1 .......................... ${{ env.GITHUB_SHA1 }}" + echo -e "" + echo "---- [ DOCKER IMAGES ] ---------------------------------------------------------------------------------" echo "registry ................................. Gitea" echo "(amd64) tags ............................. ${{ steps.task_release_gi_meta_amd64.outputs.tags }}" echo "(amd64) labels ........................... ${{ steps.task_release_gi_meta_amd64.outputs.labels }}" @@ -730,13 +727,29 @@ jobs: echo "" echo "(release) tags ........................... ${{ steps.task_release_gi_meta_release.outputs.tags }}" echo "(release) labels ......................... ${{ steps.task_release_gi_meta_release.outputs.labels }}" - echo "" - echo "[ DOCKER DIGESTS ] -------------------------------------------------------------------------------------" + echo -e "" + echo "---- [ DOCKER DIGESTS ] --------------------------------------------------------------------------------" echo "docker image id (amd64) .................. ${{ steps.task_release_gi_push_amd64.outputs.imageid }}" echo "docker digest (amd64) .................... ${{ steps.task_release_gi_push_amd64.outputs.digest }}" echo "docker image id (arm64) .................. ${{ steps.task_release_gi_push_arm64.outputs.imageid }}" echo "docker digest (arm64) .................... ${{ steps.task_release_gi_push_arm64.outputs.digest }}" + # # + # Release › Gitea › Push Manifest + # # + + - name: '📦 Push Manifest' + id: task_release_gi_manifest + uses: int128/docker-manifest-create-action@v2 + with: + tags: | + ${{ steps.task_release_gi_meta_release.outputs.tags }} + sources: | + ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gi_push_amd64.outputs.digest }} + ${{ env.IMAGE_GITEA_WEBSITE }}/${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}@${{ steps.task_release_gi_push_arm64.outputs.digest }} + index-annotations: | + ${{ steps.task_release_gi_meta_release.outputs.labels }} + # # # Release › Gitea › Get Weekly Commits # # diff --git a/.github/workflows/deploy-docker-github.yml b/.github/workflows/deploy-docker-github.yml index f91472a8..d2728bfa 100755 --- a/.github/workflows/deploy-docker-github.yml +++ b/.github/workflows/deploy-docker-github.yml @@ -277,6 +277,7 @@ jobs: echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV # 02-25-2025 12:49 echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV # 20250225 echo "NOW_DOCKER_TS=$(date -u +'%FT%T.%3NZ')" >> $GITHUB_ENV # 2025-02-25T12:50:11.569Z + echo "GITHUB_SHA1=`git rev-parse HEAD`" >> ${GITHUB_ENV} # # # Release › Github › Install Dependencies @@ -419,6 +420,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=github org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} annotations: | org.opencontainers.image.created=${{ env.NOW_DOCKER_TS }} org.opencontainers.image.version=${{ env.IMAGE_VERSION }} @@ -429,6 +432,8 @@ jobs: org.opencontainers.image.development=${{ inputs.DEV_RELEASE == true && 'true' || 'false' }} org.opencontainers.image.registry=github org.tvapp2.image.build-version="Version:- ${{ env.IMAGE_VERSION }} Date:- ${{ env.NOW_DOCKER_LABEL }}" + org.tvapp2.image.build-release="${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }}" + org.tvapp2.image.build-sha1=${GITHUB_SHA1} # # # Release › Github › Build and Push › Amd64 @@ -458,6 +463,7 @@ jobs: RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }} VERSION=${{ env.IMAGE_VERSION }} BUILDDATE=${{ env.NOW_DOCKER_LABEL }} + GIT_SHA1=${{ env.GITHUB_SHA1 }} # # # Release › Github › Export Digest › Amd64 @@ -515,6 +521,7 @@ jobs: RELEASE=${{ inputs.DEV_RELEASE == true && 'development' || 'stable' }} VERSION=${{ env.IMAGE_VERSION }} BUILDDATE=${{ env.NOW_DOCKER_LABEL }} + GIT_SHA1=${{ env.GITHUB_SHA1 }} # # # Release › Github › Export Digest › Arm64 @@ -544,6 +551,63 @@ jobs: if-no-files-found: error retention-days: 10 + # # + # Release › Github › Checkpoint + # # + + - name: '⚠️ Checkpoint' + id: task_release_gh_checkpoint + run: | + echo "" + echo "---- [ GITHUB ] ----------------------------------------------------------------------------------------" + echo "github.actor.............................. ${{ github.actor }}" + echo "github.ref ............................... ${{ github.ref }}" + echo "github.ref_name .......................... ${{ github.ref_name }}" + echo "github.event_name ........................ ${{ github.event_name }}" + echo "github.repository_owner .................. ${{ github.repository_owner }}" + echo "github.repository ........................ ${{ github.repository }}" + echo "github.sha ............................... ${{ github.sha }}" + echo -e "" + echo "---- [ INPUTS ] ----------------------------------------------------------------------------------------" + echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}" + echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}" + echo "inputs.IMAGE_GHCR_AUTHOR ................. ${{ inputs.IMAGE_GHCR_AUTHOR }}" + echo "inputs.IMAGE_GHCR_USERNAME ............... ${{ inputs.IMAGE_GHCR_USERNAME }}" + echo "inputs.DEV_RELEASE ....................... ${{ inputs.DEV_RELEASE }}" + echo "inputs.DRY_RUN ........................... ${{ inputs.DRY_RUN }}" + echo -e "" + echo "---- [ ENV ] -------------------------------------------------------------------------------------------" + echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}" + echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}" + echo "env.IMAGE_VERSION_1DIGIT ................. ${{ env.IMAGE_VERSION_1DIGIT }}" + echo "env.IMAGE_VERSION_2DIGIT ................. ${{ env.IMAGE_VERSION_2DIGIT }}" + echo "env.IMAGE_GHCR_AUTHOR .................... ${{ env.IMAGE_GHCR_AUTHOR }}" + echo "env.IMAGE_GHCR_USERNAME .................. ${{ env.IMAGE_GHCR_USERNAME }}" + echo "env.NOW .................................. ${{ env.NOW }}" + echo "env.NOW_SHORT ............................ ${{ env.NOW_SHORT }}" + echo "env.NOW_LONG ............................. ${{ env.NOW_LONG }}" + echo "env.NOW_DOCKER_LABEL ..................... ${{ env.NOW_DOCKER_LABEL }}" + echo "env.NOW_DOCKER_TS ........................ ${{ env.NOW_DOCKER_TS }}" + echo "env.REGISTRY_REPO_ORG_AUTHOR_LC .......... ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}" + echo "env.REGISTRY_REPO_AUTHOR_LC .............. ${{ env.REGISTRY_REPO_AUTHOR_LC }}" + echo "env.DOCKER_SHA ........................... ${{ env.DOCKER_SHA }}" + echo "env.GITHUB_SHA1 .......................... ${{ env.GITHUB_SHA1 }}" + echo -e "" + echo "---- [ DOCKER IMAGES ] ---------------------------------------------------------------------------------" + echo "registry ................................. Github GHCR" + echo "tags ..................................... ${{ steps.task_release_gh_meta.outputs.tags }}" + echo "labels ................................... ${{ steps.task_release_gh_meta.outputs.labels }}" + echo "digest ................................... ${{ steps.task_release_gh_push_amd64.outputs.digest }}" + echo -e "" + echo "(release) tags ........................... ${{ steps.task_release_gh_meta.outputs.tags }}" + echo "(release) labels ......................... ${{ steps.task_release_gh_meta.outputs.labels }}" + echo -e "" + echo "---- [ DOCKER DIGESTS ] --------------------------------------------------------------------------------" + echo "docker image id (amd64) .................. ${{ steps.task_release_gh_push_amd64.outputs.imageid }}" + echo "docker digest (amd64) .................... ${{ steps.task_release_gh_push_amd64.outputs.digest }}" + echo "docker image id (arm64) .................. ${{ steps.task_release_gh_push_arm64.outputs.imageid }}" + echo "docker digest (arm64) .................... ${{ steps.task_release_gh_push_arm64.outputs.digest }}" + # # # Release › Github › Push Manifest # # @@ -561,62 +625,6 @@ jobs: index-annotations: | ${{ steps.task_release_gh_meta.outputs.labels }} - # # - # Release › Github › Checkpoint - # # - - - name: '⚠️ Checkpoint' - id: task_release_gh_checkpoint - run: | - echo "" - echo "[ GITHUB ] ---------------------------------------------------------------------------------------------" - echo "github.actor.............................. ${{ github.actor }}" - echo "github.ref ............................... ${{ github.ref }}" - echo "github.ref_name .......................... ${{ github.ref_name }}" - echo "github.event_name ........................ ${{ github.event_name }}" - echo "github.repository_owner .................. ${{ github.repository_owner }}" - echo "github.repository ........................ ${{ github.repository }}" - echo "" - echo "[ INPUTS ] ---------------------------------------------------------------------------------------------" - echo "inputs.IMAGE_NAME ........................ ${{ inputs.IMAGE_NAME }}" - echo "inputs.IMAGE_VERSION ..................... ${{ inputs.IMAGE_VERSION }}" - echo "inputs.IMAGE_GHCR_AUTHOR ................. ${{ inputs.IMAGE_GHCR_AUTHOR }}" - echo "inputs.IMAGE_GHCR_USERNAME ............... ${{ inputs.IMAGE_GHCR_USERNAME }}" - echo "inputs.DEV_RELEASE ....................... ${{ inputs.DEV_RELEASE }}" - echo "inputs.DRY_RUN ........................... ${{ inputs.DRY_RUN }}" - echo "" - echo "[ ENV ] ------------------------------------------------------------------------------------------------" - echo "env.IMAGE_NAME ........................... ${{ env.IMAGE_NAME }}" - echo "env.IMAGE_VERSION ........................ ${{ env.IMAGE_VERSION }}" - echo "env.IMAGE_VERSION_1DIGIT ................. ${{ env.IMAGE_VERSION_1DIGIT }}" - echo "env.IMAGE_VERSION_2DIGIT ................. ${{ env.IMAGE_VERSION_2DIGIT }}" - echo "env.IMAGE_GHCR_AUTHOR .................... ${{ env.IMAGE_GHCR_AUTHOR }}" - echo "env.IMAGE_GHCR_USERNAME .................. ${{ env.IMAGE_GHCR_USERNAME }}" - echo "env.NOW .................................. ${{ env.NOW }}" - echo "env.NOW_SHORT ............................ ${{ env.NOW_SHORT }}" - echo "env.NOW_LONG ............................. ${{ env.NOW_LONG }}" - echo "env.NOW_DOCKER_LABEL ..................... ${{ env.NOW_DOCKER_LABEL }}" - echo "env.NOW_DOCKER_TS ........................ ${{ env.NOW_DOCKER_TS }}" - echo "env.DOCKER_IMAGE ......................... ${{ env.DOCKER_IMAGE }}" - echo "env.REGISTRY_REPO_ORG_AUTHOR_LC .......... ${{ env.REGISTRY_REPO_ORG_AUTHOR_LC }}" - echo "env.REGISTRY_REPO_AUTHOR_LC .............. ${{ env.REGISTRY_REPO_AUTHOR_LC }}" - echo "env.DOCKER_SHA ........................... ${{ env.DOCKER_SHA }}" - echo "" - echo "[ DOCKER IMAGES ] --------------------------------------------------------------------------------------" - echo "registry ................................. Github GHCR" - echo "tags ..................................... ${{ steps.task_release_gh_meta.outputs.tags }}" - echo "labels ................................... ${{ steps.task_release_gh_meta.outputs.labels }}" - echo "digest ................................... ${{ steps.task_release_gh_push_amd64.outputs.digest }}" - echo "" - echo "(release) tags ........................... ${{ steps.task_release_gh_meta.outputs.tags }}" - echo "(release) labels ......................... ${{ steps.task_release_gh_meta.outputs.labels }}" - echo "" - echo "[ DOCKER DIGESTS ] -------------------------------------------------------------------------------------" - echo "docker image id (amd64) .................. ${{ steps.task_release_gh_push_amd64.outputs.imageid }}" - echo "docker digest (amd64) .................... ${{ steps.task_release_gh_push_amd64.outputs.digest }}" - echo "docker image id (arm64) .................. ${{ steps.task_release_gh_push_arm64.outputs.imageid }}" - echo "docker digest (arm64) .................... ${{ steps.task_release_gh_push_arm64.outputs.digest }}" - # # # Release › Github › Get Weekly Commits # # diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 25b7442f..b830e800 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -77,23 +77,23 @@ on: type: boolean # # - # ENABLE: released version will be marked as pre-release - # DISABLE: release version will be marked as stable / normal release + # true released version will be marked as a development build and will have the v1.x.x-development tag instead of -latest + # false release version will be marked with -latest docker tag # # - PRERELEASE: + RC_RELEASE: description: '🧪 Build RC (Pre-release)' required: true default: false type: boolean # # - # Release Candidate version number - # this will be added to the end of your released app in the releases page. - # e.g: tvapp2-v1.0.0-rc.1 + # only needed if env variable `RC_ONLY` = true + # sets the version number for the release candidate + # e.g: noxenv-v1.0.0-rc.1 # # - VERSION_RC: + RC_VERSION: description: '🧪 RC (Pre-release) Ver (tvapp2-rc.v1)' required: false type: string @@ -105,10 +105,10 @@ on: env: PROJECT_NAME: ${{ github.event.inputs.PROJECT_NAME || 'tvapp2' }} - CHANGELOG_MODE_COMMIT: true - SHOW_UNCATEGORIZED: false - PRERELEASE: false - VERSION_RC: '1' + CHANGELOG_MODE_COMMIT: ${{ github.event.inputs.CHANGELOG_MODE_COMMIT || true }} + SHOW_UNCATEGORIZED: ${{ github.event.inputs.SHOW_UNCATEGORIZED || false }} + RC_RELEASE: ${{ github.event.inputs.RC_RELEASE || false }} + RC_VERSION: ${{ github.event.inputs.RC_VERSION || '1' }} ASSIGN_USER: Aetherinox BOT_NAME_1: EuropaServ BOT_NAME_2: BinaryServ @@ -209,6 +209,20 @@ jobs: packages: write steps: + # # + # Release › Set Env Variables + # # + + - name: >- + 🕛 Get Timestamp + id: task_release_label_set_timestamp + run: | + echo "YEAR=$(date +'%Y')" >> $GITHUB_ENV + echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV + echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV + echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV + echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV + # # # Release › Checkout # # @@ -220,17 +234,22 @@ jobs: fetch-depth: 0 # # - # Release › Set Env Variables + # Release › Start # # - name: >- - 🕛 Get Timestamp - id: task_release_label_set_timestamp + ✅ Start + id: task_release_start run: | - echo "NOW=$(date +'%m-%d-%Y %H:%M:%S')" >> $GITHUB_ENV - echo "NOW_SHORT=$(date +'%m-%d-%Y')" >> $GITHUB_ENV - echo "NOW_LONG=$(date +'%m-%d-%Y %H:%M')" >> $GITHUB_ENV - echo "NOW_DOCKER_LABEL=$(date +'%Y%m%d')" >> $GITHUB_ENV + echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――" + echo " Starting Documentation Build script" + echo " Runner .............. ${{ runner.name }}" + echo " Workflow ............ ${{ github.workflow }} (#${{ github.workflow_ref }})" + echo " Run Number .......... #${{ github.run_number }}" + echo " Run ID .............. https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + echo " Triggered By ........ ${{ github.actor }}" + echo " Time ................ ${{ env.NOW_LONG }}" + echo "―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――" # # # Release › Print Version Debug @@ -290,9 +309,11 @@ jobs: # Release › Build › Stable # # - - name: '🔨 Build › Stable ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip )' + - name: '🔨 Build › Stable › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip' id: task_release_build_st - if: ${{ startsWith( inputs.PRERELEASE, false ) }} + if: | + startsWith( inputs.RC_RELEASE, false ) || + startsWith( env.RC_RELEASE, false ) run: | echo Building STABLE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip Dockerfile Dockerfile.aarch64 docker-compose.yml docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE @@ -306,15 +327,17 @@ jobs: # Release › Build › Release Candidate # # - - name: '🔨 Build › RC ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip )' + - name: '🔨 Build › Release Candidate › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}.zip' id: task_release_build_rc - if: ${{ startsWith( inputs.PRERELEASE, true ) }} + if: | + startsWith( inputs.RC_RELEASE, true ) || + startsWith( env.RC_RELEASE, true ) run: | - echo Building PRE-RELEASE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip - zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip Dockerfile Dockerfile.aarch64 docker-compose.yml docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE + echo Building PRE-RELEASE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}.zip + zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}.zip Dockerfile Dockerfile.aarch64 docker-compose.yml docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE - echo Building PRE-RELEASE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip - zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip docker-compose.yml README.md LICENSE + echo Building PRE-RELEASE Package ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}-docker-compose.zip + zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}-docker-compose.zip docker-compose.yml README.md LICENSE env: NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} @@ -349,15 +372,25 @@ jobs: echo "Tag already present: ${{ steps.task_release_tag_create.outputs.tag_exists }}" # # - # Release › GPG Key + # Release › GPG › Import Key (No Passphrase) + # + # requires your GPG private key, converted to base64 binary .gpg (not armored .asc) # # - - name: 'Import signing key' + - name: '🪪 GPG › Import Signing Key › W/o Passphrase' + id: task_release_gpg_import_nopass if: env.GPG_KEY_BASE64 != '' && env.GPG_KEY_PASSPHRASE == '' run: | echo $GPG_KEY_BASE64 | base64 -di | gpg --import - - name: 'Import signing key and strip passphrase' + # # + # Release › GPG › Import Key (With Passphrase) + # + # requires your GPG private key, converted to base64 binary .gpg (not armored .asc) + # # + + - name: '🪪 GPG › Import Signing Key › w/ Passphrase' + id: task_release_gpg_import_withpass if: env.GPG_KEY_BASE64 != '' && env.GPG_KEY_PASSPHRASE != '' run: | echo "$GPG_KEY_BASE64" | base64 -di > /tmp/signing-key.gpg @@ -370,7 +403,9 @@ jobs: - name: '🆔 Checksum › Stable' id: task_release_checksum_st_set - if: ${{ startsWith( inputs.PRERELEASE, false ) }} + if: | + startsWith( inputs.RC_RELEASE, false ) || + startsWith( env.RC_RELEASE, false ) run: | filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip" @@ -398,11 +433,13 @@ jobs: # Release › Checksum › Release Candidate # # - - name: '🆔 Checksum › RC' + - name: '🆔 Checksum › Release Candidate' id: task_release_checksum_rc_set - if: ${{ startsWith( inputs.PRERELEASE, true ) }} + if: | + startsWith( inputs.RC_RELEASE, true ) || + startsWith( env.RC_RELEASE, true ) run: | - filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip" + filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}.zip" # get sha1 and sha256 for .zip and .gz files find . -maxdepth 1 \( -name '*.zip' -o -name '*.gz' \) -printf '%P\n' | xargs -r sha1sum | gpg --digest-algo sha256 --clearsign > sha1sum.txt.asc @@ -420,7 +457,7 @@ jobs: # shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV - filename_compose_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip" + filename_compose_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}-docker-compose.zip" sha256_compose="$(shasum --algorithm 256 ${filename_compose_zip} | awk '{ print $1 }')" echo "FILE_COMPOSE_ZIP=${filename_compose_zip}" >> $GITHUB_ENV @@ -446,31 +483,13 @@ jobs: avatarSize: 42 # # - # Release › Checksum › Add (Stable) - # # - - - name: '📦 Zip › Add Checksum › Stable' - id: task_release_zip_st - if: ${{ startsWith( inputs.PRERELEASE, false ) }} - run: | - echo Zipping STABLE Package .zip ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip - zip -jr ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip sha1sum.txt.asc sha256sum.txt.asc - ls - - # # - # Release › Checksum › Add (Release Candidate) - # # - - - name: '📦 Zip › Add Checksum › RC' - id: task_release_zip_rc - if: ${{ startsWith( inputs.PRERELEASE, true ) }} - run: | - echo Zipping PRE-RELEASE Package .zip ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip - zip -jr ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip sha1sum.txt.asc sha256sum.txt.asc - ls - - # # - # Release › Generate Tags + # Release › Changelog › Generate Tags + # + # generates a changelog from the github api. requires a PREVIOUS_TAG in order to figure + # out the changes made between the two versions. + # + # outputs: + # ${{ steps.changelog.outputs.changelog }} # # - name: '📝 Changelog › Pre Setup (Categorized Commits)' @@ -585,14 +604,56 @@ jobs: echo "$CHANGELOG_UNCATEGORIZED" # # - # Release › List Tree + # Release › Verbose › List Tree # # - - name: '⚙️ Debug › Tree Listing' - id: task_release_debug_tree + - name: '⚙️ Verbose › Tree Listing' + id: task_release_verbose_tree run: | tree + # # + # Release › Verbose › Changelog › Print Categorized + # # + + - name: '⚙️ Verbose › Changelog › Categorized' + id: task_release_changelog_verbose_categorized + if: | + startsWith( inputs.SHOW_UNCATEGORIZED, false ) || + startsWith( env.SHOW_UNCATEGORIZED, false ) + env: + CHANGELOG_CATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + CHANGELOG_UNCATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + run: | + echo + echo "---- CHANGELOG [ Categorized ] -----------------------------------------------" + echo + echo "$CHANGELOG_CATEGORIZED" + echo + echo "---- CHANGELOG ---------------------------------------------------------------" + echo + + # # + # Release › Verbose › Changelog › Print Uncategorized + # # + + - name: '⚙️ Verbose › Changelog › Uncategorized' + id: task_release_changelog_verbose_uncategorized + if: | + startsWith( inputs.SHOW_UNCATEGORIZED, true ) || + startsWith( env.SHOW_UNCATEGORIZED, true ) + env: + CHANGELOG_CATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + CHANGELOG_UNCATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + run: | + echo + echo "---- CHANGELOG [ Uncategorized ] ---------------------------------------------" + echo + echo "$CHANGELOG_UNCATEGORIZED" + echo + echo "---- CHANGELOG ---------------------------------------------------------------" + echo + # # # Release › Post Release (Stable) # @@ -605,10 +666,12 @@ jobs: - name: '🏳️ Post › Stable' id: task_release_bundle_st if: | - startsWith( inputs.PRERELEASE, false ) || - startsWith( env.PRERELEASE, false ) + startsWith( inputs.RC_RELEASE, false ) || + startsWith( env.RC_RELEASE, false ) uses: softprops/action-gh-release@v2 env: + CHANGELOG_CATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + CHANGELOG_UNCATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} with: token: ${{ secrets.ADMINSERV_TOKEN_CL }} @@ -636,14 +699,16 @@ jobs: # ${{ steps.task_release_bundle_st.outputs.id # # - - name: "🏳️ Post › Release Candidate" + - name: '🏳️ Post › Release Candidate' id: task_release_bundle_rc if: | - startsWith( inputs.PRERELEASE, true ) || - startsWith( env.PRERELEASE, true ) + startsWith( inputs.RC_RELEASE, true ) || + startsWith( env.RC_RELEASE, true ) uses: softprops/action-gh-release@v2 env: - GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} + CHANGELOG_CATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + CHANGELOG_UNCATEGORIZED: ${{ steps.task_release_changelog_categorized.outputs.changelog }} + GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} with: token: ${{ secrets.ADMINSERV_TOKEN }} name: v${{ env.PACKAGE_VERSION }} @@ -652,8 +717,8 @@ jobs: draft: false generate_release_notes: false files: | - ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}-docker-compose.zip - ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip + ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}-docker-compose.zip + ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}.zip sha1sum.txt.asc sha256sum.txt.asc prerelease: false @@ -699,19 +764,37 @@ jobs: echo "---- CHANGELOG ---------------------------------------------------------------" # # - # Release › Upload Artifacts › Release Files + # Release › Upload Artifacts › Release Files › Stable # # - name: >- - 📋 Upload Artifacts › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip - id: task_release_artifact + 📋 Upload Artifacts › Stable › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip + id: task_release_artifact_stable uses: actions/upload-artifact@v4 - if: always() + if: | + startsWith( inputs.RC_RELEASE, false ) || + startsWith( env.RC_RELEASE, false ) with: name: "${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}" path: ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip retention-days: 30 + # # + # Release › Upload Artifacts › Release Files › Release Candidate + # # + + - name: >- + 📋 Upload Artifacts › RC › ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip + id: task_release_artifact_rc + uses: actions/upload-artifact@v4 + if: | + startsWith( inputs.RC_RELEASE, true ) || + startsWith( env.RC_RELEASE, true ) + with: + name: "${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}" + path: ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.RC_VERSION }}.zip + retention-days: 30 + # # # Job › Complete # #