Auto publish updates #18
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: | |
'Build, Publish and Release' | |
# | |
# Automatically publish beta releases on pushes, require a manual workflow action for production releases | |
# | |
# Does the following | |
# 1 - Run the documentation script against the package | |
# 2 - Create the npm package using the package.json version tag ( or for beta releases, adds a beta tag and increments as needed ) | |
# 3 - Publish the npm package | |
# 4 - For releases against the latest branch, create a github release as well | |
on: | |
push: | |
branches: [beta-*.*.*, beta] | |
workflow_dispatch: | |
jobs: | |
get_tags: | |
runs-on: ubuntu-latest | |
steps: | |
# checkout repo | |
- uses: actions/checkout@v4 | |
# get branch / tag name | |
- name: Get Branch / Tag Name | |
id: get_branch | |
run: | | |
export BRANCH_NAME=$(if [[ ${GITHUB_REF} =~ "refs/tags/" ]]; then echo ${GITHUB_REF/refs\/tags\//}; else echo ${GITHUB_REF/refs\/heads\//}; fi) | |
echo $BRANCH_NAME | |
echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_OUTPUT | |
# generate the image tag | |
- name: Get Image Tag | |
id: get_tag | |
run: | | |
export TARGET_IMAGE_TAG=$(if [ "${{ steps.get_branch.outputs.BRANCH_NAME }}" = "main" ]; then echo "main"; else echo "${{ steps.get_branch.outputs.BRANCH_NAME }}" | awk -F- '{ print $1 }'; fi) | |
echo $TARGET_IMAGE_TAG | |
echo "TARGET_IMAGE_TAG=${TARGET_IMAGE_TAG}" >> $GITHUB_OUTPUT | |
outputs: | |
BRANCH_NAME: ${{ steps.get_branch.outputs.BRANCH_NAME }} | |
TARGET_IMAGE_TAG: ${{ steps.get_tag.outputs.TARGET_IMAGE_TAG }} | |
create_documentation: | |
runs-on: ubuntu-latest | |
steps: | |
# checkout repo | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token. | |
fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository. | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
- name: Retrieve github-markdown-toc | |
run: | | |
wget -q https://raw.githubusercontent.com/ekalinin/github-markdown-toc/master/gh-md-toc | |
chmod a+x gh-md-toc | |
- name: Create Table of Contents | |
run: | | |
npm run-script document --if-present | |
rm gh-md-toc | |
- name: Commit files | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
git add * || true | |
git commit -a -m "Update TOC" || true | |
- name: Push changes | |
uses: ad-m/github-push-action@master | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
branch: ${{ github.ref }} | |
publish_prod_release: | |
permissions: | |
id-token: write | |
needs: [get_tags, create_documentation] | |
name: Publish Release Version | |
if: ${{ needs.get_tags.outputs.BRANCH_NAME == 'main' }} | |
uses: homebridge/.github/.github/workflows/npm-publish.yml@latest | |
with: | |
install_cmd: npm ci | |
secrets: | |
npm_auth_token: ${{ secrets.NPM_TOKEN }} | |
publish_test_release: | |
permissions: | |
id-token: write | |
needs: [get_tags, create_documentation] | |
name: Publish Test Version - ${{ needs.get_tags.outputs.BRANCH_NAME }} | |
if: ${{ needs.get_tags.outputs.BRANCH_NAME != 'main' }} | |
uses: homebridge/.github/.github/workflows/npm-publish.yml@latest | |
with: | |
tag: ${{ needs.get_tags.outputs.TARGET_IMAGE_TAG }} | |
dynamically_adjust_version: true | |
npm_version_command: pre | |
pre_id: ${{ needs.get_tags.outputs.TARGET_IMAGE_TAG }} | |
install_cmd: npm ci | |
secrets: | |
npm_auth_token: ${{ secrets.NPM_TOKEN }} | |
publish_github_release: | |
needs: [publish_prod_release] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Create Release | |
uses: softprops/action-gh-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ needs.publish_prod_release.outputs.NPM_VERSION }} | |
name: Release ${{ needs.publish_prod_release.outputs.NPM_VERSION }} | |
generate_release_notes: true | |
draft: false | |
prerelease: false |