Skip to content

Commit

Permalink
Update automated release process to latest version (#705)
Browse files Browse the repository at this point in the history
### Changes

Update the workflow to incorporate the latest, and hopefully final,
changes.

### Checklist

- [x] I have read the [Auth0 general contribution
guidelines](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md)
- [x] I have read the [Auth0 Code of
Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md)
- [x] All code quality tools/guidelines have been run/followed

---------

Signed-off-by: Frederik Prijck <frederik.prijck@gmail.com>
  • Loading branch information
frederikprijck authored Dec 15, 2023
1 parent b28167a commit 8a9684d
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 70 deletions.
4 changes: 2 additions & 2 deletions .github/actions/get-release-notes/action.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Return the release notes extracted from the PR body
name: Return the release notes extracted from the body of the PR associated with the release.

#
# Returns the release notes from the content of a pull request linked to a release branch. It expects the branch name to be in the format release/vX.Y.Z, release/X.Y.Z, release/vX.Y.Z-beta.N. etc.
Expand Down Expand Up @@ -39,4 +39,4 @@ runs:
GITHUB_TOKEN: ${{ inputs.token }}
REPO_OWNER: ${{ inputs.repo_owner }}
REPO_NAME: ${{ inputs.repo_name }}
VERSION: ${{ inputs.version }}
VERSION: ${{ inputs.version }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Publish release to package manager
name: Publish release to npm

inputs:
node-version:
Expand All @@ -7,6 +7,8 @@ inputs:
required: true
version:
required: true
require-build:
default: true
release-directory:
default: './'

Expand All @@ -24,10 +26,14 @@ runs:
cache: 'npm'
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies
shell: bash
run: npm ci --include=dev

- name: Build package
uses: ./.github/actions/build
with:
node: ${{ inputs.node-version }}
if: inputs.require-build == 'true'
shell: bash
run: npm run build

- name: Publish release to NPM
shell: bash
Expand All @@ -43,4 +49,4 @@ runs:
npm publish --provenance --tag $TAG
env:
NODE_AUTH_TOKEN: ${{ inputs.npm-token }}
VERSION: ${{ inputs.version }}
VERSION: ${{ inputs.version }}
80 changes: 80 additions & 0 deletions .github/workflows/npm-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Create npm and GitHub Release

on:
workflow_call:
inputs:
node-version:
required: true
type: string
require-build:
default: true
type: string
release-directory:
default: './'
type: string
secrets:
github-token:
required: true
npm-token:
required: true

jobs:
release:
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.merged && startsWith(github.event.pull_request.head.ref, 'release/'))
runs-on: ubuntu-latest
environment: release

steps:
# Checkout the code
- uses: actions/checkout@v4
with:
fetch-depth: 0

# Get the version from the branch name
- id: get_version
uses: ./get-version

# Get the prerelease flag from the branch name
- id: get_prerelease
uses: ./get-prerelease
with:
version: ${{ steps.get_version.outputs.version }}

# Get the release notes
- id: get_release_notes
uses: ./get-release-notes
with:
token: ${{ secrets.github-token }}
version: ${{ steps.get_version.outputs.version }}
repo_owner: ${{ github.repository_owner }}
repo_name: ${{ github.event.repository.name }}

# Check if the tag already exists
- id: tag_exists
uses: ./tag-exists
with:
tag: ${{ steps.get_version.outputs.version }}
token: ${{ secrets.github-token }}

# If the tag already exists, exit with an error
- if: steps.tag_exists.outputs.exists == 'true'
run: exit 1

# Publish the release to our package manager
- uses: ./npm-publish
with:
node-version: ${{ inputs.node-version }}
require-build: ${{ inputs.require-build }}
version: ${{ steps.get_version.outputs.version }}
npm-token: ${{ secrets.npm-token }}
release-directory: ${{ inputs.release-directory }}

# Create a release for the tag
- uses: ./release-create
with:
token: ${{ secrets.github-token }}
name: ${{ steps.get_version.outputs.version }}
body: ${{ steps.get_release_notes.outputs.release-notes }}
tag: ${{ steps.get_version.outputs.version }}
commit: ${{ github.sha }}
prerelease: ${{ steps.get_prerelease.outputs.prerelease }}
74 changes: 11 additions & 63 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Create GitHub Release
name: Create npm and GitHub Release

on:
pull_request:
Expand All @@ -10,68 +10,16 @@ permissions:
contents: write
id-token: write # For publishing to npm using --provenance

env:
NODE_VERSION: 18

### TODO: Replace instances of './.github/actions/' w/ `auth0/dx-sdk-actions/` and append `@latest` after the common `dx-sdk-actions` repo is made public.
### TODO: Also remove `get-prerelease`, `get-version`, `release-create`, `tag-create` and `tag-exists` actions from this repo's .github/actions folder once the repo is public.
### TODO: Replace instances of './.github/workflows/' w/ `auth0/dx-sdk-actions/workflows/` and append `@latest` after the common `dx-sdk-actions` repo is made public.
### TODO: Also remove `get-prerelease`, `get-release-notes`, `get-version`, `npm-publish`, `release-create`, and `tag-exists` actions from this repo's .github/actions folder once the repo is public.
### TODO: Also remove `npm-release` workflow from this repo's .github/workflows folder once the repo is public.

jobs:
release:
if: github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.merged && startsWith(github.event.pull_request.head.ref, 'release/'))
runs-on: ubuntu-latest
environment: release

steps:
# Checkout the code
- uses: actions/checkout@v4
with:
fetch-depth: 0

# Get the version from the branch name
- id: get_version
uses: ./.github/actions/get-version

# Get the prerelease flag from the branch name
- id: get_prerelease
uses: ./.github/actions/get-prerelease
with:
version: ${{ steps.get_version.outputs.version }}

# Get the release notes
# This will expose the release notes as env.RELEASE_NOTES
- id: get_release_notes
uses: ./.github/actions/get-release-notes
with:
token: ${{ secrets.GITHUB_TOKEN }}
version: ${{ steps.get_version.outputs.version }}
repo_owner: ${{ github.repository_owner }}
repo_name: ${{ github.event.repository.name }}

# Check if the tag already exists
- id: tag_exists
uses: ./.github/actions/tag-exists
with:
tag: ${{ steps.get_version.outputs.version }}
token: ${{ secrets.GITHUB_TOKEN }}

# If the tag already exists, exit with an error
- if: steps.tag_exists.outputs.exists == 'true'
run: exit 1

# Publish the release to our package manager
- uses: ./.github/actions/publish-package
with:
node-version: ${{ env.NODE_VERSION }}
version: ${{ steps.get_version.outputs.version }}
npm-token: ${{ secrets.NPM_TOKEN }}

# Create a release for the tag
- uses: ./.github/actions/release-create
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ steps.get_version.outputs.version }}
body: ${{ steps.get_release_notes.outputs.release-notes }}
tag: ${{ steps.get_version.outputs.version }}
commit: ${{ github.sha }}
prerelease: ${{ steps.get_prerelease.outputs.prerelease }}
uses: ./.github/workflows/npm-release.yml
with:
node-version: 18
require-build: true
secrets:
npm-token: ${{ secrets.NPM_TOKEN }}
github-token: ${{ secrets.GITHUB_TOKEN }}

0 comments on commit 8a9684d

Please sign in to comment.