Skip to content

Commit c817c2c

Browse files
committed
Replace semantic release workflow
1 parent 2136129 commit c817c2c

10 files changed

Lines changed: 173 additions & 2119 deletions

File tree

Lines changed: 74 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
name: Build -> Test -> Release
22

33
on:
4-
push:
5-
branches:
6-
- main
7-
- next
8-
- alpha
9-
- beta
10-
- '*.x*'
4+
release:
5+
types:
6+
- published
117

128
env:
139
HUSKY: 0
@@ -16,18 +12,23 @@ jobs:
1612
release:
1713
name: Build -> Test -> Release
1814
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
id-token: write
1918

2019
steps:
2120
- name: Checkout
2221
uses: actions/checkout@v6
2322
with:
2423
fetch-depth: 0
24+
ref: ${{ github.event.release.tag_name }}
2525

2626
- name: Setup LTS Node
2727
uses: actions/setup-node@v6
2828
with:
2929
node-version: 'lts/*'
3030
cache: 'yarn'
31+
registry-url: 'https://registry.npmjs.org'
3132

3233
- name: Install dependencies
3334
run: yarn install
@@ -38,9 +39,70 @@ jobs:
3839
- name: Test
3940
run: yarn test:all
4041

41-
- name: Release
42-
if: ${{ success() && (github.event_name != 'pull_request' || github.event.action == 'closed' && github.event.pull_request.merged == true) }}
42+
- name: Resolve release metadata
43+
id: release_meta
44+
env:
45+
RELEASE_PRERELEASE: ${{ github.event.release.prerelease }}
46+
RELEASE_TAG: ${{ github.event.release.tag_name }}
47+
run: |
48+
set -euo pipefail
49+
50+
if [[ ! "${RELEASE_TAG}" =~ ^v([0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?)$ ]]; then
51+
echo "Release tag must match v<semver> or v<semver>-<prerelease>: ${RELEASE_TAG}" >&2
52+
exit 1
53+
fi
54+
55+
VERSION="${BASH_REMATCH[1]}"
56+
57+
if [[ "${VERSION}" == *-* ]]; then
58+
if [[ "${RELEASE_PRERELEASE}" != "true" ]]; then
59+
echo "Prerelease tag ${RELEASE_TAG} requires the GitHub Release to be marked as a prerelease." >&2
60+
exit 1
61+
fi
62+
63+
CHANNEL="${VERSION#*-}"
64+
CHANNEL="${CHANNEL%%.*}"
65+
CHANNEL="$(printf '%s' "${CHANNEL}" | tr '[:upper:]' '[:lower:]')"
66+
67+
case "${CHANNEL}" in
68+
alpha)
69+
DIST_TAG="alpha"
70+
;;
71+
beta)
72+
DIST_TAG="beta"
73+
;;
74+
*)
75+
DIST_TAG="next"
76+
;;
77+
esac
78+
else
79+
if [[ "${RELEASE_PRERELEASE}" == "true" ]]; then
80+
echo "Stable tag ${RELEASE_TAG} cannot be published from a prerelease GitHub Release." >&2
81+
exit 1
82+
fi
83+
84+
DIST_TAG="latest"
85+
fi
86+
87+
echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"
88+
echo "dist_tag=${DIST_TAG}" >> "${GITHUB_OUTPUT}"
89+
90+
- name: Prepare @trrack/core package
91+
env:
92+
RELEASE_VERSION: ${{ steps.release_meta.outputs.version }}
93+
run: |
94+
set -euo pipefail
95+
96+
cp packages/core/package.json packages/core/dist/package.json
97+
cp packages/core/README.md packages/core/dist/README.md
98+
cp packages/core/CHANGELOG.md packages/core/dist/CHANGELOG.md
99+
cp LICENSE packages/core/dist/LICENSE
100+
101+
npm pkg set version="${RELEASE_VERSION}" --prefix packages/core/dist
102+
npm pkg delete scripts --prefix packages/core/dist
103+
104+
- name: Publish @trrack/core
43105
env:
44-
GITHUB_TOKEN: ${{ secrets.TRRACK_GITHUB_TOKEN }}
45-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
46-
run: yarn workspace @trrack/core release
106+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
107+
run: npm publish --access public --provenance --tag "${{ steps.release_meta.outputs.dist_tag }}"
108+
working-directory: packages/core/dist

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,18 @@ This branch implements action based provenance tracking.
77
[![license](https://img.shields.io/github/license/trrack/trrackjs?style=plastic)](https://github.com/Trrack/trrackjs/blob/main/LICENSE)
88
[![npm latest version](https://img.shields.io/npm/v/@trrack/core?style=plastic)](https://www.npmjs.com/package/@trrack/core)
99
[![npm downloads](https://img.shields.io/npm/dt/@trrack/core?style=plastic)](https://www.npmjs.com/package/@trrack/core)
10-
[![Github Action](https://img.shields.io/github/actions/workflow/status/trrack/trrackjs/release.yml?branch=main)](https://github.com/Trrack/trrackjs/actions/workflows/release.yml?query=branch%3Amain)
10+
[![Github Action](https://img.shields.io/github/actions/workflow/status/trrack/trrackjs/build_test_release.yml)](https://github.com/Trrack/trrackjs/actions/workflows/build_test_release.yml)
11+
12+
## Releases
13+
14+
`@trrack/core` is published from a manually created GitHub Release.
15+
16+
1. Create a GitHub Release from the branch or commit you want to publish.
17+
2. Use a tag in the format `v<version>`, for example `v2.0.3`.
18+
3. Mark the GitHub Release as a prerelease when publishing alpha, beta, or other prerelease versions.
19+
4. Publish the GitHub Release.
20+
21+
The `build_test_release.yml` workflow checks out the release tag, builds and tests the repo, and publishes `@trrack/core` to npm.
1122

1223

1324
## Development

package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "trrack",
33
"version": "0.0.0",
4-
"license": "MIT",
4+
"license": "BSD-3-Clause",
55
"scripts": {
66
"dev:react": "yarn workspace react-trrack-example dev",
77
"dev:rtk": "yarn workspace rtk-trrack-example dev",
@@ -13,7 +13,6 @@
1313
"test:all": "yarn workspace @trrack/core test && yarn workspace @trrack/redux test",
1414
"test:all:watch": "yarn workspace @trrack/core test:watch & yarn workspace @trrack/redux test:watch",
1515
"lint:packages": "yarn workspace @trrack/core lint && yarn workspace @trrack/redux lint",
16-
"release": "yarn workspace @trrack/core release && yarn workspace @trrack/redux release",
1716
"docs:api": "yarn workspace @trrack/core docs && node scripts/generate-api-meta.mjs",
1817
"prepare": "husky install"
1918
},
@@ -69,8 +68,6 @@
6968
"react-hyper-tree": "^0.3.12",
7069
"react-redux": "8.0.5",
7170
"react-test-renderer": "18.2.0",
72-
"semantic-release-npm-github-publish": "^1.5.4",
73-
"semantic-release-plus": "^20.0.0",
7471
"sharp": "^0.31.2",
7572
"ts-node": "10.9.1",
7673
"typedoc": "^0.25.0",

packages/core/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
22
"name": "@trrack/core",
3-
"version": "0.0.0-semantic-release",
3+
"version": "1.4.0",
4+
"license": "BSD-3-Clause",
45
"main": "./index.js",
56
"types": "./index.d.ts",
67
"scripts": {
78
"build": "vite build",
89
"test": "vitest run",
910
"test:watch": "vitest",
1011
"lint": "eslint src --ext .ts",
11-
"docs": "typedoc",
12-
"release": "node ../../tools/scripts/prepare-release-package.mjs && npx semantic-release-plus --extends ./release.config.js"
12+
"docs": "typedoc"
1313
},
1414
"repository": {
1515
"type": "git",

packages/core/release.config.js

Lines changed: 0 additions & 40 deletions
This file was deleted.

packages/redux/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"name": "@trrack/redux",
3-
"version": "0.0.0-semantic-release",
3+
"version": "1.0.0",
4+
"license": "BSD-3-Clause",
45
"main": "./index.js",
56
"types": "./index.d.ts",
67
"scripts": {
78
"build": "vite build",
89
"test": "vitest run",
910
"test:watch": "vitest",
10-
"lint": "eslint src --ext .ts",
11-
"release": "node ../../tools/scripts/prepare-release-package.mjs && npx semantic-release-plus --extends ./release.config.js"
11+
"lint": "eslint src --ext .ts"
1212
},
1313
"repository": {
1414
"type": "git",

packages/redux/release.config.js

Lines changed: 0 additions & 40 deletions
This file was deleted.

release.config.base.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

tools/scripts/prepare-release-package.mjs

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)