Skip to content

📦 Plugin › Release #8

📦 Plugin › Release

📦 Plugin › Release #8

Workflow file for this run

# ---------------------------------------------------------------------------------------
# @parent : github workflow
# @desc : obsidian plugin release
# @author : Aetherinox
# @url : https://github.com/Aetherinox
# ---------------------------------------------------------------------------------------
name: "📦 Plugin › Release"
run-name: "📦 Plugin › Release"
on:
workflow_dispatch:
inputs:
# ---------------------------------------------------------------------------------------
# Name of the plugin to use when creating the release zip filename
# e.g: gistr-v1.0.0.zip
# ---------------------------------------------------------------------------------------
PLUGIN_NAME:
description: "📦 Name of Plugin"
required: true
default: 'gistr'
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: gistr-v1.0.0-rc.1
# ---------------------------------------------------------------------------------------
VERSION_RC:
description: "🧪 RC (Pre-release) Ver (plugin-rc.v1)"
required: false
type: string
default: "1"
# ---------------------------------------------------------------------------------------
# environment variables
# ---------------------------------------------------------------------------------------
env:
PLUGIN_NAME: gistr
ASSIGN_USER: Aetherinox
BOT_NAME_1: AdminServ
BOT_NAME_2: AdminServX
BOT_NAME_DEPENDABOT: dependabot[bot]
# ---------------------------------------------------------------------------------------
# jobs
# ---------------------------------------------------------------------------------------
jobs:
push-release:
name: "Push Release"
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: "☑️ Checkout"
uses: actions/checkout@v4
id: task_release_checkout
with:
fetch-depth: 0
- name: "⚙️ Setup Node"
id: task_release_node_setup
uses: actions/setup-node@v4
with:
node-version: "20.x"
registry-url: https://npm.pkg.github.com/
# ---------------------------------------------------------------------------------------
# Get version from package.json VERSION value
# ---------------------------------------------------------------------------------------
- name: "👁️‍🗨️ Package Version › Set"
id: task_release_package_version_set
run: echo "PACKAGE_VERSION=$(cat package.json | jq -r '.version')" >> $GITHUB_ENV
- name: "👁️‍🗨️ Package Version › Get"
id: task_release_package_version_get
run: |
echo "VERSION: ${{ env.PACKAGE_VERSION }}"
# ---------------------------------------------------------------------------------------
# Dist Releases > Run pretty and lint
# no need to run npm run generate here since build does it already
# ---------------------------------------------------------------------------------------
- name: "🪪 Run Build"
id: task_release_npm_build
run: |
npm install
npm update rollup
npm run build
# ---------------------------------------------------------------------------------------
# Get guid and uuid from env variable
# generated by npm
# ---------------------------------------------------------------------------------------
- name: "🪪 .ENV › Get"
id: task_release_dotenv_get
uses: falti/dotenv-action@v1
- name: "🪪 .ENV › Read"
id: task_release_dotenv_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 ( ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip )"
id: task_release_build_st
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
run: |
echo Building STABLE Package .zip PACKAGE_VERSION
zip -jr ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip main.js styles.css manifest.json
ls
env:
NODE_AUTH_TOKEN: ${{ secrets.ADMINSERV_TOKEN_CL }}
- name: "🔨 Build › Release Candidate ( ${{ inputs.PLUGIN_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 PACKAGE_VERSION
zip -jr ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip main.js styles.css manifest.json
ls
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 }}"
uses: rickstaa/action-create-tag@v1
id: task_release_tag
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
# ---------------------------------------------------------------------------------------
- name: "🔖 Tag › Confirm ${{ env.PACKAGE_VERSION }}"
run: |
echo "Tag already present: ${{ env.TAG_EXISTS }}"
echo "Tag already present: ${{ steps.task_release_tag.outputs.tag_exists }}"
# ---------------------------------------------------------------------------------------
# [ Release Candidate ]: Checksum
# ---------------------------------------------------------------------------------------
- name: "🆔 Checksum › Stable"
id: task_release_checksum_st
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
run: |
filename_zip="${{ inputs.PLUGIN_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 › Release Candidate"
id: task_release_checksum_rc
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
run: |
filename_zip="${{ inputs.PLUGIN_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_print
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
# ---------------------------------------------------------------------------------------
# [ ZIP ] : Stable
# ---------------------------------------------------------------------------------------
- name: "📦 Zip › Add Checksum › Stable"
id: task_release_zip_st
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
run: |
echo Zipping STABLE Package .zip PACKAGE_VERSION
zip -jr ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip SHA256SUMS.txt
ls
env:
NODE_AUTH_TOKEN: ${{ secrets.GH_PAT }}
- name: "📦 Zip › Add Checksum › Release Candidate"
id: task_release_zip_rc
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
run: |
echo Zipping PRE-RELEASE Package .zip PACKAGE_VERSION
zip -jr ${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip SHA256SUMS.txt
ls
env:
NODE_AUTH_TOKEN: ${{ secrets.GH_PAT }}
# ---------------------------------------------------------------------------------------
# Generate Changelog
#
# 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_commits_tags_print
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 <sup>(${{ steps.task_release_dotenv_get.outputs.UUID }})</sup>\n| Item | Value |\n| --- | --- |\n|<sub>SHA256</sub>|<sub>${{ env.SHA256SUM }} 🔺 ${{ env.FILE_ZIP }}</sub>|\n|<sub>GUID</sub>|<sub>`${{ steps.task_release_dotenv_get.outputs.GUID }}`</sub>|\n|<sub>UUID</sub>|<sub>`${{ steps.task_release_dotenv_get.outputs.UUID }}`</sub>|\n|<sub>Stamp</sub>|<sub>`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`</sub>|\n|<sub>Last Release</sub>|<sub>`#{{DAYS_SINCE}} days ago`</sub>|\n\n<br>\n\n---\n\n<br>\n\n### What's New\nThis release contains the following changes:\n\n<br>\n\n---\n\n<br>\n\n### Statistics\nHow the files have changed:\n<ul><li><a href='#{{RELEASE_DIFF}}'>Changed files</a> : <b>#{{CHANGED_FILES}}</b> </li><li>Changes : <b>#{{CHANGES}}</b> </li><li>Commits : <b>#{{COMMITS}}</b> </li><li>Additions : <b>#{{ADDITIONS}}</b></li><li>Deletions : <b>#{{DELETIONS}}</b></li><li>PRs (categorized) : <b>#{{CATEGORIZED_COUNT}}</b></li><li>PRs (uncategorized) : <b>#{{UNCATEGORIZED_COUNT}}</b></li><li>PRs (open) : <b>#{{OPEN_COUNT}}</b></li>\n<br />\n</ul>\n\n<br>\n\n---\n\n<br>\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n<br>\n\n---\n\n<br>\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": "## Gistr Release Info <sup>(${{ steps.task_release_dotenv_get.outputs.UUID }})</sup>\n- <sub>**Version began on**: <sub>........</sub>`#{{FROM_TAG_DATE}}`</sub>\n- <sub>**SHA256**: <sub>................................</sub>`${{ env.SHA256SUM }} 🔺 ${{ env.FILE_ZIP }}`</sub>\n- <sub>**GUID**: <sub>.......................................</sub>`${{ steps.task_release_dotenv_get.outputs.GUID }}`</sub>\n- <sub>**UUID**: <sub>.......................................</sub>`${{ steps.task_release_dotenv_get.outputs.UUID }}`</sub>\n- <sub>**Stamp**: <sub>....................................</sub>`#{{FROM_TAG}}-#{{FROM_TAG_DATE}} 🔺 #{{TO_TAG}}-#{{TO_TAG_DATE}}`</sub>\n- <sub>**Last Release**: <sub>......................</sub>`#{{DAYS_SINCE}} days ago`\n</sup>\n\n<br>\n\n---\n\n<br>\n\n### What's New\nThis release contains the following changes:\n\n<br>\n\n---\n\n<br>\n\n### Statistics\nHow the files have changed:\n<ul><li><a href='#{{RELEASE_DIFF}}'>Changed files</a> : <b>#{{CHANGED_FILES}}</b> </li><li>Changes : <b>#{{CHANGES}}</b> </li><li>Commits : <b>#{{COMMITS}}</b> </li><li>Additions : <b>#{{ADDITIONS}}</b></li><li>Deletions : <b>#{{DELETIONS}}</b></li><li>PRs (categorized) : <b>#{{CATEGORIZED_COUNT}}</b></li><li>PRs (uncategorized) : <b>#{{UNCATEGORIZED_COUNT}}</b></li><li>PRs (open) : <b>#{{OPEN_COUNT}}</b></li>\n<br />\n</ul>\n\n<br>\n\n---\n\n<br>\n\n### Commits (#{{UNCATEGORIZED_COUNT}})\nThe following commits are uncategorized:\n#{{UNCATEGORIZED}}\n\n<br>\n\n---\n\n<br>\n\n### Pull Requests\nThis release is associated with the following pull requests:\n#{{CHANGELOG}}\n\n<br>\n\n---\n\n<br>\n\n"
}
env:
GITHUB_TOKEN: ${{ secrets.ADMINSERV_TOKEN }}
# ---------------------------------------------------------------------------------------
# Fetch Changelog
# ---------------------------------------------------------------------------------------
- name: "📝 Changelog › Print (Categorized)"
id: task_release_changelog_print_categorized
if: ${{ startsWith( inputs.SHOW_UNCATEGORIZED, false ) }}
run: |
echo "${{ steps.task_release_changelog_categorized.outputs.changelog }}"
- name: "📝 Changelog › Print (Uncategorized)"
id: task_release_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"
id: task_release_bundle_st
if: ${{ startsWith( inputs.PRERELEASE, false ) }}
uses: softprops/action-gh-release@v2
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: |
${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}.zip
main.js
manifest.json
styles.css
SHA256SUMS.txt
prerelease: false
body: |
${{ steps.task_release_changelog_categorized.outputs.changelog }}
${{ steps.task_release_changelog_uncategorized.outputs.changelog }}
- name: "🏳️ Post › Release Candidate"
id: task_release_bundle_rc
if: ${{ startsWith( inputs.PRERELEASE, true ) }}
uses: softprops/action-gh-release@v2
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: |
${{ inputs.PLUGIN_NAME }}-${{ env.PACKAGE_VERSION }}-rc.${{ inputs.VERSION_RC }}.zip
main.js
manifest.json
styles.css
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_release_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 ---------------------------------------------------------------"