Repository navigation
86 lines (80 loc) · 2.71 KB
/
Copy pathrelease.yml
File metadata and controls
86 lines (80 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
name: release
on:
push:
branches: [main, "release/v*"]
pull_request:
types: [closed]
branches: [main]
workflow_dispatch:
permissions: {}
jobs:
# 1. On every push to main: open/update a draft `release/vX.Y.Z` PR from the
# conventional commits since the last tag. A push to that release branch
# (a hand-edited version) updates the PR too.
pr:
if: |
github.event_name == 'push'
&& (
github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
|| startsWith(github.ref, 'refs/heads/release/v')
)
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: danielroe/uppt/pr@6ec27140623aa835e362f866d8ab0018ab057f4d # v0.6.11
with:
token: ${{ secrets.GITHUB_TOKEN }}
# 2. When the release PR is merged: tag the merge commit, publish the GitHub
# Release, and dispatch this workflow again at the new tag.
release:
if: |
github.event_name == 'pull_request'
&& github.event.pull_request.merged == true
&& startsWith(github.event.pull_request.head.ref, 'release/v')
&& github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
concurrency:
group: release-${{ github.event.pull_request.number }}
cancel-in-progress: false
permissions:
contents: write
actions: write
steps:
- uses: danielroe/uppt/release@6ec27140623aa835e362f866d8ab0018ab057f4d # v0.6.11
with:
token: ${{ secrets.GITHUB_TOKEN }}
# 3. At the new tag: install (--ignore-scripts), run prepack + `pnpm pack`,
# upload the tarball as an artifact.
pack:
if: github.event_name == 'workflow_dispatch' && startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
concurrency:
group: pack-${{ github.ref }}
cancel-in-progress: false
permissions: {}
outputs:
files: ${{ steps.pack.outputs.files }}
steps:
- id: pack
uses: danielroe/uppt/pack@6ec27140623aa835e362f866d8ab0018ab057f4d # v0.6.11
# 4. Stage the tarball to npm via OIDC trusted publishing. Runs in the `npm`
# environment; the staged publish waits for maintainer 2FA approval.
publish:
if: |
github.event_name == 'workflow_dispatch'
&& startsWith(github.ref, 'refs/tags/v')
&& needs.pack.outputs.files != '[]'
needs: pack
runs-on: ubuntu-latest
concurrency:
group: publish-${{ github.ref }}
cancel-in-progress: false
permissions:
id-token: write
environment: npm
steps:
- uses: danielroe/uppt/publish@6ec27140623aa835e362f866d8ab0018ab057f4d # v0.6.11
with:
files: ${{ needs.pack.outputs.files }}