# # # @type github workflow # @desc publishes a new release # @author Aetherinox # @url https://github.com/Aetherinox # # name: "๐Ÿ“ฆ Release โ€บ Publish" run-name: "๐Ÿ“ฆ Release โ€บ Publish" # # # Triggers # # on: workflow_dispatch: inputs: # # # Name of the plugin to use when creating the release zip filename # e.g: tvapp2-v1.0.0.zip # # PROJECT_NAME: description: "๐Ÿ“ฆ Name of App" required: true default: 'tvapp2' type: string # # # ENABLE: the changelog generated in releases tab will only display single commits. # DISABLE: the changelog shows pull requests completed based on their labels # # CHANGELOG_MODE_COMMIT: description: "๐Ÿ“‘ Use Commits Instead of PRs" required: true default: true type: boolean # # # ENABLE: Will show all types of commits, including uncategorized # DISABLE: WIll only show actions that have been categorized using the format # type(scope): description # type: description # # SHOW_UNCATEGORIZED: description: "๐Ÿ—‚๏ธ Show Uncategorized Commits" required: true default: false type: boolean # # # ENABLE: released version will be marked as pre-release # DISABLE: release version will be marked as stable / normal release # # PRERELEASE: 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 # # VERSION_RC: description: "๐Ÿงช RC (Pre-release) Ver (tvapp2-rc.v1)" required: false 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 # # jobs: # # # Jobs โ€บ Initialize # # job-initialize: name: >- ๐Ÿ“ฆ Initialize runs-on: ubuntu-latest outputs: package_version: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }} permissions: contents: write packages: write steps: # # # Initialize โ€บ Start # # - name: "โœ… Start" id: task_initialize_start run: | echo "Starting build" # # # Initialize โ€บ Set Env Variables # # - name: >- ๐Ÿ•› Get Timestamp id: task_initialize_label_set_timestamp 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 # # # Initialize โ€บ Checkout # # - name: "โ˜‘๏ธ Checkout" id: task_initialize_checkout uses: actions/checkout@v4 with: fetch-depth: 0 # # # Initialize โ€บ Get version from package.json VERSION value # # - name: "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ Package Version โ€บ Set" id: task_initialize_package_getversion run: | VER=$(cat tvapp2/package.json | jq -r '.version') echo "PACKAGE_VERSION=$VER" >> $GITHUB_OUTPUT - name: "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ Package Version โ€บ Get" id: task_initialize_package_version_get run: | echo "VERSION: ${{ steps.task_initialize_package_getversion.outputs.PACKAGE_VERSION }}" # # # Job โ€บ Release โ€บ Github # # job-release: name: >- ๐Ÿ“ฆ Publish โ€บ Release runs-on: ubuntu-latest needs: [ job-initialize ] env: PACKAGE_VERSION: ${{ needs.job-initialize.outputs.package_version }} outputs: guid: ${{ steps.task_release_dotenv_get.outputs.GUID }} uuid: ${{ steps.task_release_dotenv_get.outputs.UUID }} permissions: contents: write packages: write steps: # # # Release โ€บ Checkout # # - name: "โ˜‘๏ธ Checkout" id: task_release_checkout uses: actions/checkout@v4 with: fetch-depth: 0 # # # Release โ€บ Set Env Variables # # - name: >- ๐Ÿ•› Get Timestamp id: task_release_label_set_timestamp 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 # # # Release โ€บ Print Version Debug # # - name: "๐Ÿชช Test Next Job Version" id: task_release_debug_print_ver run: | echo "VERSION: ${{ env.PACKAGE_VERSION }}" # # # Release โ€บ Install package via NPM # # - name: "๐Ÿชช NPM โ€บ Install" id: task_release_npm_install working-directory: ./tvapp2 run: | npm ci env: NODE_AUTH_TOKEN: ${{ secrets.SELF_TOKEN_CL }} # # # Release โ€บ Execute npm generate so that a uuid and guid can be created # # - name: "๐Ÿชช Generate IDs" id: task_release_npm_env_generate working-directory: ./tvapp2 run: | npm run root:generate # # # .ENV โ€บ Get # Get guid and uuid from env variable generated by npm # # - name: "๐Ÿชช .ENV โ€บ Get" id: task_release_dotenv_get uses: falti/dotenv-action@v1 with: path: "./tvapp2/.env" # # # .ENV โ€บ Print (Debug) # Show guid and uuid from env variable generated by npm # # - name: "๐Ÿชช .ENV โ€บ Read" id: task_dotenv_debug_print run: | echo "GUID: ${{ steps.task_release_dotenv_get.outputs.GUID }}" echo "UUID: ${{ steps.task_release_dotenv_get.outputs.UUID }}" # # # Build Project & Create Zip # # - name: "๐Ÿ”จ Build โ€บ Stable ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip )" id: task_release_build_st if: ${{ startsWith( inputs.PRERELEASE, false ) }} run: | echo Building STABLE Package .zip ${{ env.PACKAGE_VERSION }} 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 ( ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip )" id: task_release_build_rc if: ${{ startsWith( inputs.PRERELEASE, true ) }} run: | echo Building PRE-RELEASE Package .zip ${{ env.PACKAGE_VERSION }} 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 ---------------------------------------------------------------" # # # Upload artifacts > release files # # - name: >- ๐Ÿ“‹ Upload Artifacts โ€บ ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip id: task_release_artifact uses: actions/upload-artifact@v4 if: always() with: name: "release" path: ${{ env.PROJECT_NAME }}-${{ env.PACKAGE_VERSION }}.zip retention-days: 30 # # # 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="${{ 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 "This is the main release. It contains all required docker files, and the TVApp2 `package.json`" >> $GITHUB_STEP_SUMMARY echo "| File | Result |" >> $GITHUB_STEP_SUMMARY echo "| ------------------------------- | ----------------------- |" >> $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