-
Notifications
You must be signed in to change notification settings - Fork 1.4k
152 lines (132 loc) · 5.76 KB
/
release.yaml
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
name: "Release"
on:
push:
branches:
- master
- release/*
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
release:
runs-on: ubuntu-latest
environment: fuel-fuels-ts-bot
permissions: write-all
# First check ensures that the workflow runs only when the changesets PR commit is pushed into the branch.
# Second check ensures that the workflow runs only after a commit is pushed into the branch,
# and not when the branch is created.
# This is to avoid running the workflow when a release/* branch is created.
if: |
github.event.head_commit.message == 'ci(release): versioning packages and changesets' &&
github.event.before != '0000000000000000000000000000000000000000'
steps:
- name: Create Fuel Docs GitHub Token
uses: actions/create-github-app-token@v1
id: docs-token
with:
app-id: ${{ vars.FUEL_DOCS_BOT_APP_ID }}
private-key: ${{ secrets.FUEL_DOCS_BOT_APP_KEY }}
owner: ${{ github.repository_owner }}
repositories: |
docs-hub
migrations-and-disclosures
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref }}
- name: CI Setup
uses: ./.github/actions/ci-setup
# if there are changesets present, package.json will be bumped
- name: Bump and Collect Versions
run: |
pnpm changeset version
echo "RELEASE_VERSION=v$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' packages/fuels/package.json)" >> $GITHUB_ENV
echo "FUEL_CORE_VERSION=$(cat ./internal/fuel-core/VERSION)" >> $GITHUB_ENV
echo "FORC_VERSION=$(cat ./internal/forc/VERSION)" >> $GITHUB_ENV
git reset --hard
- name: Ensure NPM access
run: npm whoami
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_DEPLOY_TOKEN }}
- name: Build
run: pnpm build
- name: Get latest release
run: |
LATEST_RELEASE=$(pnpm run --silent changeset:get-latest-release)
echo "LATEST_RELEASE=$LATEST_RELEASE" >> $GITHUB_ENV
pnpm add --global semver
echo "RELEASE_VERSION_HIGHER_THAN_LATEST=$(semver $LATEST_RELEASE $RELEASE_VERSION | tail -n1 | grep ${RELEASE_VERSION#v} --silent && echo true || echo false)" >> $GITHUB_ENV
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to npm
uses: FuelLabs/changesets-action@main
with:
publish: pnpm changeset:publish ${{ env.RELEASE_VERSION }} ${{ github.ref_name }}
createGithubReleases: aggregate
githubReleaseName: ${{ env.RELEASE_VERSION }}
githubTagName: ${{ env.RELEASE_VERSION }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_DEPLOY_TOKEN }}
- name: Prettify changelog
run: pnpm changeset:update-changelog
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ env.RELEASE_VERSION }}
PUBLISHED: "true"
REF_NAME: ${{ github.ref_name }}
LATEST_RELEASE: ${{ env.LATEST_RELEASE }}
RELEASE_VERSION_HIGHER_THAN_LATEST: ${{ env.RELEASE_VERSION_HIGHER_THAN_LATEST }}
# nightly docs API gets updated on every merge to master
# and is configured in the vercel dashboard
# stable docs API gets updated only when a new release is published
- name: Update Docs API (stable)
if: |
github.ref_name == 'master' &&
env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'true'
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_TS_DOCS_API_PROJECT_ID }}
run: |
pnpm install --global vercel@latest
vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
- name: Update docs
if: github.ref_name == 'master'
uses: benc-uk/workflow-dispatch@v1
with:
workflow: update-nightly.yml
ref: master
repo: FuelLabs/docs-hub
token: ${{ steps.docs-token.outputs.token }}
- name: Create PR to apply latest release to master
if: |
startsWith(github.ref_name, 'release/') &&
env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'true'
run: |
PR_TITLE_TEXT='apply `latest` release to `master`'
if [ ${RELEASE_VERSION#v} = "$(semver "$LATEST_VERSION" --increment minor)" ]; then
PR_TITLE="build!: $PR_TITLE_TEXT"
else
PR_TITLE="build: $PR_TITLE_TEXT"
fi
PR_BODY='Automatically created when `latest` published release is newer than `master` due to publishing done via `release/*` branches.'
gh pr create -B master -H $GITHUB_REF_NAME --title "$PR_TITLE" --body "$PR_BODY"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_VERSION: ${{ env.RELEASE_VERSION }}
LATEST_VERSION: ${{ env.LATEST_VERSION }}
- name: Delete the release branch
# We check env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'false'
# because we don't want to delete the branch that is used in the "Create PR to apply latest release to master" step above
if: |
startsWith(github.ref_name, 'release/') &&
env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'false'
run: git push origin --delete ${{ github.ref_name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Notify migrations and disclosures of the new release (breaking changes)
uses: benc-uk/workflow-dispatch@v1
with:
workflow: migrations.yml
ref: master
repo: FuelLabs/migrations-and-disclosures
token: ${{ steps.docs-token.outputs.token }}