Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Basic Release Management #964

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion .github/workflows/check-dist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,33 @@
# expected from the build.
name: Check Transpiled JavaScript

# This workflow will only run on PRs targeting `main` and direct pushes to
# `main`. It will only run if the listed files/paths are modified (e.g. there is
# no need to run this workflow when documentation files are modified).
on:
pull_request:
branches:
- main
paths:
- src/**
- .node-version
- .prettierrc.json
- package.json
- package-lock.json
- tsconfig.json
push:
branches:
- main
paths:
- src/**
- .node-version
- .prettierrc.json
- package.json
- package-lock.json
- tsconfig.json

permissions:
checks: write
contents: read

jobs:
Expand Down Expand Up @@ -47,7 +65,7 @@ jobs:

# This will fail the workflow if the `dist/` directory is different than
# expected.
- name: Compare Directories
- name: Compare Expected and Actual Directories
id: diff
run: |
if [ ! -d dist/ ]; then
Expand Down
60 changes: 60 additions & 0 deletions .github/workflows/continuous-delivery.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# This workflow creates a new release any time a PR is merged that includes an
# update to the version listed in `package.json`. This ensures that the releases
# are always in sync with the version listed in the package manifest.
name: Continuous Delivery

on:
pull_request:
types:
- closed
branches:
- main
workflow_dispatch:

permissions:
contents: write

jobs:
release:
name: Release Version
runs-on: ubuntu-latest

# Only run this job if the workflow was triggered manually or a
# non-Dependabot PR was merged.
if: |
github.event_name == 'workflow_dispatch' ||
(github.event.pull_request.merged == true &&
startsWith(github.head_ref, 'dependabot/') == false)

steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true

# Parse the version from package.json and, if not already present,
# publish a new action version.
- name: Tag
id: tag
uses: issue-ops/semver@v2
with:
manifest-path: package.json
workspace: ${{ github.workspace }}
ref: main

# Always overwrite if the workflow was triggered manually.
overwrite: ${{ github.event_name == 'workflow_dispatch' }}

# Create a release using the tag from the previous step. The release will
# always be created if the workflow was triggered manually, but will only
# be created on PR merge if the tag step ran successfully.
- if: |
github.event_name == 'workflow_dispatch' ||
steps.tag.outcome == 'success'
name: Create Release
id: release
uses: issue-ops/releaser@v2
with:
tag: v${{ steps.tag.outputs.version }}
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# This workflow performs CI tests to ensure that the code reaching `main`
# has been tested and validated.
name: Continuous Integration

on:
Expand All @@ -9,6 +11,7 @@ on:
- main

permissions:
checks: write
contents: read

jobs:
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/version-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# This workflow checks the version of the action that will be published by the
# current pull request. If the version has already been published, the workflow
# fails in order to prevent PRs from being merged until the version has been
# incremented in the package.json manifest file.
name: Version Check

on:
pull_request:
branches:
- main

env:
MANIFEST_PATH: package.json

permissions:
checks: write
contents: read
pull-requests: write

jobs:
check-version:
name: Version Check
runs-on: ubuntu-latest

# Skips Dependabot PRs
if: ${{ startsWith(github.head_ref, 'dependabot/') == false }}

steps:
- name: Checkout
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true

- name: Check Version
id: check-version
uses: issue-ops/semver@v2
with:
check-only: true
manifest-path: ${{ env.MANIFEST_PATH }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,6 @@ __tests__/runner/*
# IDE files
.idea
*.code-workspace

# Jest JUnit files
reports/
46 changes: 22 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,27 +237,25 @@ steps:

## Publishing a New Release

This project includes a helper script, [`script/release`](./script/release)
designed to streamline the process of tagging and pushing new releases for
GitHub Actions.

GitHub Actions allows users to select a specific version of the action to use,
based on release tags. This script simplifies this process by performing the
following steps:

1. **Retrieving the latest release tag:** The script starts by fetching the most
recent SemVer release tag of the current branch, by looking at the local data
available in your repository.
1. **Prompting for a new release tag:** The user is then prompted to enter a new
release tag. To assist with this, the script displays the tag retrieved in
the previous step, and validates the format of the inputted tag (vX.X.X). The
user is also reminded to update the version field in package.json.
1. **Tagging the new release:** The script then tags a new release and syncs the
separate major tag (e.g. v1, v2) with the new release tag (e.g. v1.0.0,
v2.1.2). When the user is creating a new major release, the script
auto-detects this and creates a `releases/v#` branch for the previous major
version.
1. **Pushing changes to remote:** Finally, the script pushes the necessary
commits, tags and branches to the remote repository. From here, you will need
to create a new release in GitHub so users can easily reference the new tags
in their workflows.
This project includes two workflow files, `continuous-integration.yml` and
`continuous-delivery.yml` that are used to build, test, and publish new releases
of the action.

The `continuous-integration.yml` workflow is triggered on every push to a pull
request branch. It will run unit tests and add a comment to the pull request
with the test results.

The `continuous-delivery.yml` workflow is triggered when a pull request is
merged to the `main` branch. It will create a new release of the action based on
the version specified in the `version` property of the `package.json` file.

The steps to publish a new version are as follows:

1. Create a feature branch
1. Make changes to the action code
1. Add tests for the changes
1. Update the `version` property in the `package.json` file
1. Commit and push the changes to the feature branch
1. Open a pull request to merge the changes to the `main` branch

After the pull request is merged, a new release will be created automatically.
126 changes: 0 additions & 126 deletions script/release

This file was deleted.

Loading