Skip to content

Commit 05b165d

Browse files
committed
ci: automatic CLI release PR
1 parent f329567 commit 05b165d

File tree

5 files changed

+114
-72
lines changed

5 files changed

+114
-72
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: Resolve version
2+
description: Read "version" of "@tutorialkit/astro" to "steps.resolve-release-version.outputs.version"
3+
4+
outputs:
5+
version:
6+
description: 'Version of @tutorialkit/astro'
7+
value: ${{ steps.resolve-release-version.outputs.version }}
8+
9+
runs:
10+
using: composite
11+
12+
steps:
13+
- name: Resolve release version
14+
id: resolve-release-version
15+
shell: bash
16+
run: >
17+
echo "$(
18+
node -e "
19+
const fs = require('fs');
20+
const pkg = fs.readFileSync('./packages/astro/package.json', 'utf8');
21+
const version = JSON.parse(pkg).version
22+
console.log('version=' + version);
23+
"
24+
)" >> $GITHUB_OUTPUT
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Integration Tests CLI
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
8+
jobs:
9+
cli-integration-test:
10+
name: CLI Integration Tests
11+
# Note: `prepare-release.yaml` sets this commit message
12+
if: ${{ contains(github.event.head_commit.message, 'release tutorialkit CLI') }}
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 0
19+
20+
- uses: ./.github/actions/setup-and-build
21+
22+
- name: Update template's versions
23+
working-directory: ./packages/cli
24+
run: pnpm update-template
25+
26+
- name: Integration Tests
27+
working-directory: ./integration
28+
run: pnpm test

.github/workflows/prepare-release.yaml

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@ on:
44
workflow_dispatch:
55
inputs:
66
version:
7-
description: 'Version to publish'
7+
description: 'Version to publish, e.g. 0.0.1'
88
required: true
9-
default: patch
9+
default: '0.0.1'
1010
type: string
11-
release-type:
12-
type: choice
13-
description: Packages
14-
options:
15-
- '@tutorialkit/* and create-tutorial'
16-
- tutorialkit CLI
11+
12+
# CLI release PRs are done after other packages have been released
13+
workflow_run:
14+
workflows: [Publish release]
15+
types:
16+
- completed
1717

1818
jobs:
1919
prepare_release:
2020
name: Prepare release PR
21-
if: ${{ contains(inputs.release-type, 'create-tutorial') }}
21+
if: ${{ github.event_name == 'workflow_dispatch' }}
2222
runs-on: ubuntu-latest
2323
steps:
2424
- name: Checkout
@@ -53,7 +53,7 @@ jobs:
5353

5454
prepare_release_CLI:
5555
name: Prepare release PR CLI
56-
if: ${{ contains(inputs.release-type, 'tutorialkit CLI') }}
56+
if: ${{ github.event_name == 'workflow_run' }}
5757
runs-on: ubuntu-latest
5858
steps:
5959
- name: Checkout
@@ -63,20 +63,15 @@ jobs:
6363

6464
- uses: ./.github/actions/setup-and-build
6565

66+
# Sets steps.resolve-release-version.outputs.version
67+
- uses: ./.github/actions/resolve-release-version
68+
id: resolve-release-version
69+
6670
- name: Bump version
6771
run: >
6872
pnpm --recursive
6973
--filter tutorialkit
70-
exec npm version --no-git-tag-version --allow-same-version ${{ inputs.version }}
71-
72-
# Run integration tests for CLI before making the release PR.
73-
# We'll re-run these tests just in case before actual release publishing.
74-
- name: Pre Tests
75-
run: |
76-
cd packages/cli
77-
pnpm update-template
78-
cd ../../integration
79-
pnpm test
74+
exec npm version --no-git-tag-version --allow-same-version ${{ steps.resolve-release-version.outputs.version }}
8075
8176
- name: Generage changelog
8277
run: |
@@ -89,9 +84,9 @@ jobs:
8984
uses: peter-evans/create-pull-request@v6
9085
with:
9186
# Note: `publish-release.yaml` checks explicitly for this commit message
92-
commit-message: 'chore: release tutorialkit CLI, version: ${{ inputs.version }}'
93-
title: 'chore: release tutorialkit CLI, version: ${{ inputs.version }}'
94-
body: 'Bump tutorialkit CLI to version ${{ inputs.version }} and generate changelog'
87+
commit-message: 'chore: release tutorialkit CLI, version: ${{ steps.resolve-release-version.outputs.version }}'
88+
title: 'chore: release tutorialkit CLI, version: ${{ steps.resolve-release-version.outputs.version }}'
89+
body: 'Bump tutorialkit CLI to version ${{ steps.resolve-release-version.outputs.version }} and generate changelog'
9590
#reviewers: SamVerschueren,d3lm,Nemikolh,AriPerkkio
9691
reviewers: AriPerkkio
97-
branch: chore/release-cli-${{ inputs.version }}
92+
branch: chore/release-cli-${{ steps.resolve-release-version.outputs.version }}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Publish release CLI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
publish_release_CLI:
10+
name: Publish release CLI
11+
runs-on: ubuntu-latest
12+
# Note: `prepare-release.yaml` sets this commit message
13+
if: ${{ contains(github.event.head_commit.message, 'release tutorialkit CLI') }}
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 0
19+
20+
- uses: ./.github/actions/setup-and-build
21+
22+
- name: Update template's versions
23+
working-directory: ./packages/cli
24+
run: pnpm update-template
25+
26+
- name: Integration Tests
27+
working-directory: ./integration
28+
run: pnpm test
29+
30+
# TODO: Remove --dry-run
31+
- name: Publish to npm
32+
run: pnpm --recursive --filter tutorialkit exec pnpm publish --provenance --dry-run
33+
env:
34+
NODE_AUTH_TOKEN: fail-and-prevent-release
35+
# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

.github/workflows/publish-release.yaml

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ on:
44
push:
55
branches:
66
- main
7-
workflow_dispatch: # Debug only
87

98
jobs:
109
publish_release:
@@ -20,27 +19,9 @@ jobs:
2019

2120
- uses: ./.github/actions/setup-and-build
2221

23-
# Read "version" of "@tutorialkit/astro" to "steps.resolve-release-version.outputs.PACKAGE_VERSION"
24-
- name: Resolve release version
22+
# Sets steps.resolve-release-version.outputs.version
23+
- uses: ./.github/actions/resolve-release-version
2524
id: resolve-release-version
26-
shell: bash
27-
run: >
28-
echo "$(
29-
node -e "
30-
const fs = require('fs');
31-
const pkg = fs.readFileSync('./packages/astro/package.json', 'utf8');
32-
const version = JSON.parse(pkg).version
33-
console.log('PACKAGE_VERSION=' + version);
34-
"
35-
)" >> $GITHUB_OUTPUT
36-
37-
- name: Create and push git tag
38-
run: |
39-
git config --global user.name 'github-actions'
40-
git config --global user.email '[email protected]'
41-
# TODO: Remove, this works OK
42-
# git tag ${{ steps.resolve-release-version.outputs.PACKAGE_VERSION }}
43-
# git push origin ${{ steps.resolve-release-version.outputs.PACKAGE_VERSION }}
4425

4526
# TODO: Remove --dry-run
4627
- name: Publish to npm
@@ -53,30 +34,9 @@ jobs:
5334
NODE_AUTH_TOKEN: fail-and-prevent-release
5435
# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
5536

56-
publish_release_CLI:
57-
name: Publish release CLI
58-
runs-on: ubuntu-latest
59-
# Note: `prepare-release.yaml` sets this commit message
60-
if: ${{ contains(github.event.head_commit.message, 'release tutorialkit CLI') || (github.event_name == 'workflow_dispatch') }}
61-
steps:
62-
- name: Checkout
63-
uses: actions/checkout@v4
64-
with:
65-
fetch-depth: 0
66-
67-
- uses: ./.github/actions/setup-and-build
68-
69-
- name: Update template's versions
70-
working-directory: ./packages/cli
71-
run: pnpm update-template
72-
73-
- name: Integration Tests
74-
working-directory: ./integration
75-
run: pnpm test
76-
77-
# TODO: Remove --dry-run
78-
- name: Publish to npm
79-
run: pnpm --recursive --filter tutorialkit exec pnpm publish --provenance --dry-run
80-
env:
81-
NODE_AUTH_TOKEN: fail-and-prevent-release
82-
# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
37+
- name: Create and push git tag
38+
run: |
39+
git config --global user.name 'github-actions'
40+
git config --global user.email '[email protected]'
41+
git tag v${{ steps.resolve-release-version.outputs.version }}
42+
git push origin v${{ steps.resolve-release-version.outputs.version }}

0 commit comments

Comments
 (0)