Skip to content

Commit 559b8e4

Browse files
authored
ci: release workflow (#106)
1 parent 2bc577b commit 559b8e4

22 files changed

+672
-137
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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: echo "version=$(jq -r .version ./packages/astro/package.json)" >> $GITHUB_OUTPUT
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: Setup and build
2+
description: Generic setup action
3+
inputs:
4+
node-version:
5+
required: false
6+
description: Node version for setup-node
7+
default: 20.x
8+
9+
runs:
10+
using: composite
11+
12+
steps:
13+
- name: Set node version to ${{ inputs.node-version }}
14+
uses: actions/setup-node@v4
15+
with:
16+
node-version: ${{ inputs.node-version }}
17+
18+
- name: Install pnpm
19+
uses: pnpm/action-setup@v2
20+
21+
- name: Install & Build
22+
shell: bash
23+
run: |
24+
pnpm install
25+
pnpm build

.github/workflows/ci.yaml

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
name: CI
2+
23
on:
34
push:
45
branches:
56
- main
67
pull_request:
8+
79
jobs:
810
test:
911
name: Test
@@ -21,17 +23,14 @@ jobs:
2123
steps:
2224
- name: Checkout
2325
uses: actions/checkout@v4
24-
- uses: actions/setup-node@v4
26+
27+
- uses: ./.github/actions/setup-and-build
2528
with:
2629
node-version: ${{ matrix.node-version }}
27-
- name: Setup
28-
uses: pnpm/action-setup@v4
29-
- name: Install dependencies
30-
run: pnpm install
30+
3131
- name: Lint
3232
run: pnpm lint
33-
- name: Build
34-
run: pnpm build
33+
3534
- name: Test
3635
run: pnpm test
3736

@@ -41,12 +40,9 @@ jobs:
4140
steps:
4241
- name: Checkout
4342
uses: actions/checkout@v4
44-
- name: Setup
45-
uses: pnpm/action-setup@v4
46-
- name: Install dependencies
47-
run: pnpm install
48-
- name: Build
49-
run: pnpm build
43+
44+
- uses: ./.github/actions/setup-and-build
45+
5046
- name: Build docs
5147
run: |
5248
pnpm run docs:build
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: CLI Integration Tests
2+
3+
on:
4+
pull_request:
5+
workflow_dispatch:
6+
7+
jobs:
8+
cli-integration-test:
9+
name: CLI Integration Tests
10+
# Note: `prepare-release.yaml` sets this commit message
11+
if: ${{ contains(github.event.pull_request.title, 'release tutorialkit CLI') || github.event_name == 'workflow_dispatch' }}
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0
18+
19+
- uses: ./.github/actions/setup-and-build
20+
21+
- name: Update template's versions
22+
working-directory: ./packages/cli
23+
run: pnpm build-release
24+
25+
- name: Integration Tests
26+
working-directory: ./integration
27+
run: pnpm test
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Prepare Release PR
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: 'Version to publish, e.g. 0.0.1'
8+
required: true
9+
default: '0.0.1'
10+
type: string
11+
12+
jobs:
13+
prepare_release:
14+
name: Prepare Release PR
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout
18+
uses: actions/checkout@v4
19+
with:
20+
fetch-depth: 0
21+
22+
- uses: ./.github/actions/setup-and-build
23+
24+
- name: Bump versions
25+
run: >
26+
pnpm --recursive
27+
--filter "@tutorialkit/*"
28+
exec pnpm version --no-git-tag-version --allow-same-version ${{ inputs.version }}
29+
30+
- name: Generage changelog
31+
run: pnpm run changelog
32+
33+
- name: Create Pull Request
34+
uses: peter-evans/create-pull-request@v6
35+
with:
36+
# Note: `publish-release.yaml` checks explicitly for this commit message
37+
commit-message: 'chore: release @tutorialkit packages, version: ${{ inputs.version }}'
38+
title: 'chore: release @tutorialkit packages, version: ${{ inputs.version }}'
39+
body: 'Bump packages to version ${{ inputs.version }} and generate changelogs'
40+
reviewers: SamVerschueren,d3lm,Nemikolh,AriPerkkio
41+
branch: chore/release-${{ inputs.version }}
+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
name: Publish Release
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
publish_release:
10+
name: Publish Release
11+
runs-on: ubuntu-latest
12+
permissions:
13+
contents: write
14+
id-token: write
15+
# Note: `prepare-release.yaml` sets this commit message
16+
if: ${{ contains(github.event.head_commit.message, 'release @tutorialkit packages') }}
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 0
22+
23+
- uses: ./.github/actions/setup-and-build
24+
25+
# sets steps.resolve-release-version.outputs.version
26+
- uses: ./.github/actions/resolve-release-version
27+
id: resolve-release-version
28+
29+
- name: Publish to npm
30+
run: >
31+
pnpm --recursive
32+
--filter "@tutorialkit/*"
33+
exec pnpm publish --provenance
34+
env:
35+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
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+
git tag v${{ steps.resolve-release-version.outputs.version }}
42+
git push origin v${{ steps.resolve-release-version.outputs.version }}
43+
44+
prepare_cli_release:
45+
name: Prepare Release for CLI
46+
needs: [publish_release]
47+
runs-on: ubuntu-latest
48+
steps:
49+
- name: Checkout
50+
uses: actions/checkout@v4
51+
with:
52+
fetch-depth: 0
53+
54+
- uses: ./.github/actions/setup-and-build
55+
56+
# sets steps.resolve-release-version.outputs.version
57+
- uses: ./.github/actions/resolve-release-version
58+
id: resolve-release-version
59+
60+
- name: Bump version
61+
run: >
62+
pnpm --recursive
63+
--filter tutorialkit
64+
--filter create-tutorial
65+
exec npm version --no-git-tag-version --allow-same-version ${{ steps.resolve-release-version.outputs.version }}
66+
67+
- name: Create Pull Request
68+
uses: peter-evans/create-pull-request@v6
69+
with:
70+
# Note: `publish-release.yaml` checks explicitly for this commit message
71+
commit-message: 'chore: release tutorialkit CLI, version: ${{ steps.resolve-release-version.outputs.version }}'
72+
title: 'chore: release tutorialkit CLI, version: ${{ steps.resolve-release-version.outputs.version }}'
73+
body: 'Bump tutorialkit CLI to version ${{ steps.resolve-release-version.outputs.version }}'
74+
reviewers: SamVerschueren,d3lm,Nemikolh,AriPerkkio
75+
branch: chore/release-cli-${{ steps.resolve-release-version.outputs.version }}
76+
77+
publish_release_CLI:
78+
name: Publish Release CLI
79+
runs-on: ubuntu-latest
80+
permissions:
81+
contents: write
82+
id-token: write
83+
# Note: `prepare-release.yaml` sets this commit message
84+
if: ${{ contains(github.event.head_commit.message, 'release tutorialkit CLI') }}
85+
steps:
86+
- name: Checkout
87+
uses: actions/checkout@v4
88+
with:
89+
fetch-depth: 0
90+
91+
- uses: ./.github/actions/setup-and-build
92+
93+
- name: Update template's versions
94+
working-directory: ./packages/cli
95+
run: pnpm build-release
96+
97+
- name: Integration Tests
98+
working-directory: ./integration
99+
run: pnpm test
100+
101+
- name: Publish to npm
102+
run: >
103+
pnpm --recursive
104+
--filter tutorialkit
105+
--filter create-tutorial
106+
exec pnpm publish --provenance
107+
env:
108+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ dist-ssr
1818
*.sln
1919
*.sw?
2020
.pnpm-store
21-
/tutorialkit/template
21+
/packages/cli/template
2222
tsconfig.tsbuildinfo
2323
tsconfig.build.tsbuildinfo
2424
.tmp

.prettierignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ pnpm-lock.yaml
22
.astro
33
**/*.md
44
**/*.mdx
5+
__snapshots__
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
[
2+
".gitignore",
3+
".vscode",
4+
".vscode/extensions.json",
5+
".vscode/launch.json",
6+
".vscode/settings.json",
7+
"README.md",
8+
"astro.config.ts",
9+
"icons",
10+
"icons/languages",
11+
"icons/languages/css.svg",
12+
"icons/languages/html.svg",
13+
"icons/languages/js.svg",
14+
"icons/languages/json.svg",
15+
"icons/languages/markdown.svg",
16+
"icons/languages/sass.svg",
17+
"icons/languages/ts.svg",
18+
"package-lock.json",
19+
"package.json",
20+
"public",
21+
"public/favicon.svg",
22+
"public/logo-dark.svg",
23+
"public/logo.svg",
24+
"src",
25+
"src/content",
26+
"src/content/config.ts",
27+
"src/content/tutorial",
28+
"src/content/tutorial/1-basics",
29+
"src/content/tutorial/1-basics/1-introduction",
30+
"src/content/tutorial/1-basics/1-introduction/1-welcome",
31+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_files",
32+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_files/counter.js",
33+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_solution",
34+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_solution/counter.js",
35+
"src/content/tutorial/1-basics/1-introduction/1-welcome/content.md",
36+
"src/content/tutorial/1-basics/1-introduction/meta.md",
37+
"src/content/tutorial/1-basics/meta.md",
38+
"src/content/tutorial/meta.md",
39+
"src/env.d.ts",
40+
"src/templates",
41+
"src/templates/default",
42+
"src/templates/default/.gitignore",
43+
"src/templates/default/counter.js",
44+
"src/templates/default/index.html",
45+
"src/templates/default/javascript.svg",
46+
"src/templates/default/main.js",
47+
"src/templates/default/package-lock.json",
48+
"src/templates/default/package.json",
49+
"src/templates/default/public",
50+
"src/templates/default/public/vite.svg",
51+
"src/templates/default/style.css",
52+
"tsconfig.json",
53+
"uno.config.ts"
54+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
[
2+
".gitignore",
3+
".vscode",
4+
".vscode/extensions.json",
5+
".vscode/launch.json",
6+
".vscode/settings.json",
7+
"README.md",
8+
"astro.config.ts",
9+
"icons",
10+
"icons/languages",
11+
"icons/languages/css.svg",
12+
"icons/languages/html.svg",
13+
"icons/languages/js.svg",
14+
"icons/languages/json.svg",
15+
"icons/languages/markdown.svg",
16+
"icons/languages/sass.svg",
17+
"icons/languages/ts.svg",
18+
"package.json",
19+
"pnpm-lock.yaml",
20+
"public",
21+
"public/favicon.svg",
22+
"public/logo-dark.svg",
23+
"public/logo.svg",
24+
"src",
25+
"src/content",
26+
"src/content/config.ts",
27+
"src/content/tutorial",
28+
"src/content/tutorial/1-basics",
29+
"src/content/tutorial/1-basics/1-introduction",
30+
"src/content/tutorial/1-basics/1-introduction/1-welcome",
31+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_files",
32+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_files/counter.js",
33+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_solution",
34+
"src/content/tutorial/1-basics/1-introduction/1-welcome/_solution/counter.js",
35+
"src/content/tutorial/1-basics/1-introduction/1-welcome/content.md",
36+
"src/content/tutorial/1-basics/1-introduction/meta.md",
37+
"src/content/tutorial/1-basics/meta.md",
38+
"src/content/tutorial/meta.md",
39+
"src/env.d.ts",
40+
"src/templates",
41+
"src/templates/default",
42+
"src/templates/default/.gitignore",
43+
"src/templates/default/counter.js",
44+
"src/templates/default/index.html",
45+
"src/templates/default/javascript.svg",
46+
"src/templates/default/main.js",
47+
"src/templates/default/package-lock.json",
48+
"src/templates/default/package.json",
49+
"src/templates/default/public",
50+
"src/templates/default/public/vite.svg",
51+
"src/templates/default/style.css",
52+
"tsconfig.json",
53+
"uno.config.ts"
54+
]

0 commit comments

Comments
 (0)