diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e86b0cd4..1b09aeb3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -74,6 +74,19 @@ on: type: string default: "1" +# # +# environment variables +# # + +env: + PROJECT_NAME: ${{ github.event.inputs.PROJECT_NAME || 'tvapp2' }} + CHANGELOG_MODE_COMMIT: true + SHOW_UNCATEGORIZED: false + PRERELEASE: false + VERSION_RC: '1' + BOT_NAME_1: EuropaServ + BOT_NAME_DEPENDABOT: dependabot[bot] + # # # Jobs # # @@ -199,8 +212,8 @@ jobs: - name: "🪪 NPM › Install" id: task_release_npm_install + working-directory: ./tvapp2 run: | - cd ./tvapp2 npm ci env: NODE_AUTH_TOKEN: ${{ secrets.SELF_TOKEN_CL }} @@ -211,8 +224,8 @@ jobs: - name: "🪪 Generate IDs" id: task_release_npm_env_generate + working-directory: ./tvapp2 run: | - cd ./tvapp2 npm run root:generate # # @@ -241,26 +254,338 @@ jobs: # Build Project & Create Zip # # - - name: "🔨 Build › Stable ( ${{ inputs.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 ) }} run: | - ls echo Building STABLE Package .zip ${{ env.PACKAGE_VERSION }} - zip -r ${{ inputs.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip package.json README.md LICENSE dist/** - ls + zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip Dockerfile Dockerfile.aarch64 docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE env: NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} - - name: "🔨 Build › RC ( ${{ inputs.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip )" + - name: "🔨 Build › RC ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip )" id: task_release_build_rc if: ${{ startsWith( inputs.PRERELEASE, true ) }} run: | - cd ./tvapp2 - ls echo Building PRE-RELEASE Package .zip ${{ env.PACKAGE_VERSION }} - zip -r ${{ inputs.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip package.json README.md LICENSE dist/** - ls + zip -r ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip Dockerfile Dockerfile.aarch64 docker-entrypoint.sh root/ tvapp2/package.json README.md LICENSE env: NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} + # # + # [ Tag ]: Pre Create + # + # in order to use the changelog github action, you must pre-create the tag otherwise + # the changelog action will have no idea what tag you are going to be creating and + # the list of commits will not be for the correct release. + # # + + - name: "🔖 Tag › Pre Create ${{ env.PACKAGE_VERSION }}" + id: task_release_tag_create + uses: rickstaa/action-create-tag@v1 + with: + tag: ${{ env.PACKAGE_VERSION }} + tag_exists_error: false + message: "Latest release" + gpg_private_key: ${{ secrets.ADMINSERV_GPG_KEY_ASC }} + gpg_passphrase: ${{ secrets.ADMINSERV_GPG_PASSPHRASE }} + + # # + # [ Tag ]: Confirm + # + # check if tag already exists + # # + + - name: "🔖 Tag › Confirm ${{ env.PACKAGE_VERSION }}" + id: task_release_tag_get + run: | + echo "Tag already present: ${{ env.TAG_EXISTS }}" + echo "Tag already present: ${{ steps.task_release_tag_create.outputs.tag_exists }}" + + # # + # Checksum › Generate + # # + + - name: "🆔 Checksum › Stable" + id: task_release_checksum_st_set + if: ${{ startsWith( inputs.PRERELEASE, false ) }} + run: | + filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip" + sha256="$(shasum --algorithm 256 ${filename_zip} | awk '{ print $1 }')" + shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt + echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV + echo "SHA256SUM=${sha256}" >> $GITHUB_ENV + + - name: "🆔 Checksum › RC" + id: task_release_checksum_rc_set + if: ${{ startsWith( inputs.PRERELEASE, true ) }} + run: | + filename_zip="${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip" + sha256="$(shasum --algorithm 256 ${filename_zip} | awk '{ print $1 }')" + shasum --algorithm 256 ${filename_zip} > SHA256SUMS.txt + echo "FILE_ZIP=${filename_zip}" >> $GITHUB_ENV + echo "SHA256SUM=${sha256}" >> $GITHUB_ENV + + # # + # Checksum › Print + # # + + - name: "🆔 Checksum › Print" + id: task_release_checksum_st_get + run: | + echo ${{ env.SHA256SUM }} + + # # + # Contributor Images + # # + + - name: "🥸 Contributors › Generate" + id: task_release_contribs_generate + uses: jaywcjlove/github-action-contributors@main + with: + filter-author: (renovate\[bot\]|renovate-bot|dependabot\[bot\]) + output: CONTRIBUTORS.svg + avatarSize: 42 + + # # + # Checksum › Add to ZIP file + # # + + - 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 SHA256SUMS.txt + ls + + - 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 SHA256SUMS.txt + ls + + # # + # Changelog › Generate + # + # 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)" + id: task_release_changelog_categorized_sha_set + run: | + echo "TAG_LAST=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV + echo "COMMIT_LAST=$(git rev-parse HEAD)" >> $GITHUB_ENV + + - name: "📝 Changelog › Build (Categorized)" + id: task_release_changelog_categorized + if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }} + uses: mikepenz/release-changelog-builder-action@v5 + with: + token: ${{ secrets.ADMINSERV_TOKEN }} + #fromTag: "${{ env.TAG_LAST }}" + #toTag: "${{ github.ref }}" + configuration: ".github/changelog-configuration.json" + ignorePreReleases: false + commitMode: ${{ inputs.CHANGELOG_MODE_COMMIT }} + fetchReleaseInformation: true + fetchViaCommits: true + configurationJson: | + { + "template": "## Release Info \n| Item | Value |\n| --- | --- |\n|📄 ${{ env.FILE_ZIP }}|Contains the latest version of the favicon cloudflare worker|\n|🏷️ SHA256|`${{ env.SHA256SUM }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🕟 Stamp|`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`|\n|📅 Last Release|`#{{DAYS_SINCE}} days ago`|\n\n
\n\n---\n\n
\n\n### What's New\nThis release contains the following changes:\n\n
\n\n---\n\n
\n\n### Statistics\nHow the files have changed:\n\n\n
\n\n---\n\n
\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n
\n\n---\n\n
\n\n" + } + env: + GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} + + # # + # shows only categorized commits using the commit standards + # type(scope): description + # type: description + # # + + - name: "📝 Changelog › Build (Uncategorized)" + id: task_release_changelog_uncategorized + if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, true ) }} + uses: mikepenz/release-changelog-builder-action@v5 + with: + token: ${{ secrets.ADMINSERV_TOKEN }} + #fromTag: "${{ env.TAG_LAST }}" + #toTag: "${{ github.ref }}" + configuration: ".github/changelog-configuration.json" + ignorePreReleases: false + commitMode: ${{ inputs.CHANGELOG_MODE_COMMIT }} + fetchReleaseInformation: true + fetchViaCommits: true + configurationJson: | + { + "template": "## Release Info \n| Item | Value |\n| --- | --- |\n|📄 ${{ env.FILE_ZIP }}|Contains the latest version of the favicon cloudflare worker|\n|🏷️ SHA256|`${{ env.SHA256SUM }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🏷️ GUID|`${{ steps.task_release_dotenv_get.outputs.GUID }}`|\n|🕟 Stamp|`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`|\n|📅 Last Release|`#{{DAYS_SINCE}} days ago`|\n\n
\n\n---\n\n
\n\n### What's New\nThis release contains the following changes:\n\n
\n\n---\n\n
\n\n### Statistics\nHow the files have changed:\n\n\n
\n\n---\n\n
\n\n### Commits (#{{UNCATEGORIZED_COUNT}})\nThe following commits are uncategorized:\n#{{UNCATEGORIZED}}\n\n
\n\n---\n\n
\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n
\n\n" + } + env: + GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} + + # # + # Changelog › Fetch + # # + + - name: "📝 Changelog › Print (Categorized)" + if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }} + run: | + echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}" + + - name: "📝 Changelog › Print (Uncategorized)" + if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, true ) }} + run: | + echo "${{ steps.task_release_changelog_uncategorized.outputs.changelog }}" + + # # + # [ Release ]: Post Release + # + # outputs: + # [RELEASE ID]: + # ${{ steps.task_release_bundle_rc.outputs.id + # ${{ steps.task_release_bundle_st.outputs.id + # # + + - name: "🏳️ Post › Stable" + if: ${{ startsWith( inputs.PRERELEASE, false ) }} + uses: softprops/action-gh-release@v2 + id: task_release_bundle_st + env: + GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }} + with: + token: ${{ secrets.ADMINSERV_TOKEN_CL }} + name: v${{ env.PACKAGE_VERSION }} + tag_name: ${{ env.PACKAGE_VERSION }} + target_commitish: ${{ github.event.inputs.branch }} + draft: false + generate_release_notes: false + files: | + ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip + SHA256SUMS.txt + prerelease: false + body: | + ${{ steps.task_release_changelog_categorized.outputs.changelog }} + ${{ steps.task_release_changelog_uncategorized.outputs.changelog }} + + - name: "🏳️ Post › Release Candidate" + if: ${{ startsWith( inputs.PRERELEASE, true ) }} + uses: softprops/action-gh-release@v2 + id: task_release_bundle_rc + env: + GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }} + with: + token: ${{ secrets.ADMINSERV_TOKEN }} + name: v${{ env.PACKAGE_VERSION }} + tag_name: ${{ env.PACKAGE_VERSION }} + target_commitish: ${{ github.event.inputs.branch }} + draft: false + generate_release_notes: false + files: | + ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip + SHA256SUMS.txt + prerelease: false + body: | + > [!WARNING] + > This is a **release candidate**, which means it is not a stable release and could contain bugs. You should download it at your own risk. + + ${{ steps.task_release_changelog_categorized.outputs.changelog }} + ${{ steps.task_release_changelog_uncategorized.outputs.changelog }} + + # # + # Print Status + # # + + - name: "🎛️ Status › Print" + id: task_release_status_print + run: | + echo "Printing Variables" + echo + echo "---- CHANGELOG ---------------------------------------------------------------" + echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}" + echo "${{ steps.task_changelog_uncategorized.outputs.changelog }}" + echo "---- CHANGELOG ---------------------------------------------------------------" + echo "" + echo "" + echo "---- VARIABLES ---------------------------------------------------------------" + echo "Package Version ............ ${{ env.PACKAGE_VERSION }}" + echo "Tag: Previous .............. ${{ env.TAG_LAST }}" + echo "Tag: Now.... ............... ${{ github.ref }}" + echo "Last Commit ................ ${{ env.COMMIT_LAST }}" + echo "ST Output ID ............... ${{ steps.task_release_bundle_st.outputs.id }}" + echo "RC Output ID ............... ${{ steps.task_release_bundle_rc.outputs.id }}" + echo "---- CHANGELOG ---------------------------------------------------------------" + + # # + # Job › Complete + # # + + job-complete: + name: >- + 🆗 Successful Deployment + runs-on: ubuntu-latest + needs: [ job-initialize, job-release ] + env: + PACKAGE_VERSION: ${{ needs.job-initialize.outputs.package_version }} + GUID: ${{ needs.job-release.outputs.guid }} + UUID: ${{ needs.job-release.outputs.uuid }} + steps: + + # # + # Job › Complete › Download Artifacts + # # + + - name: "📁 Download › Saved Artifacts" + id: task_complete_artifacts_download + uses: actions/download-artifact@v4 + + # # + # Job › Complete › Get publish timestamp + # # + + - name: >- + 🕛 Get Timestamp + id: task_complete_timestamp_get + 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 + + # # + # Job > Complete > Set ENVs + # # + + - name: "🕛 Get Env Vars" + id: task_complete_set_envs + run: | + release_stable_file="release/${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip" + release_stable_sha256="$(shasum --algorithm 256 ${release_stable_file} | awk '{ print $1 }')" + + echo "FILE_STABLE=${release_stable_file}" >> $GITHUB_ENV + echo "SHA_STABLE=${release_stable_sha256}" >> $GITHUB_ENV + + # # + # Job › Complete › Summary of publish + # # + + - name: "🆗 Completed: ${{ env.NOW }}" + id: task_complete_summary + run: | + echo "" + echo "" + echo "| File | Result |" >> $GITHUB_STEP_SUMMARY + echo "| ------------------------------- | ----------------------- |" >> $GITHUB_STEP_SUMMARY + echo "| **Project** | ${{ env.PROJECT_NAME }} |" >> $GITHUB_STEP_SUMMARY + echo "| **Deploy Time** | ${{ env.NOW }} |" >> $GITHUB_STEP_SUMMARY + echo "" + echo "### File (${{ env.FILE_STABLE }}) |" >> $GITHUB_STEP_SUMMARY" + echo "| **SHA256** | ${{ env.SHA_STABLE }} |" >> $GITHUB_STEP_SUMMARY + echo "| **GUID** | ${{ env.GUID }} |" >> $GITHUB_STEP_SUMMARY + echo "| **UUID** | ${{ env.UUID }} |" >> $GITHUB_STEP_SUMMARY +