-
Notifications
You must be signed in to change notification settings - Fork 280
154 lines (134 loc) · 5.5 KB
/
changesets.yml
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
153
154
name: Changesets
on:
push:
branches:
- main
concurrency:
group: changeset-${{ github.head_ref }}
cancel-in-progress: true
jobs:
changelog:
runs-on: ubuntu-latest
if: github.repository_owner == 'shopify'
name: Changelog PR or Release
outputs:
published: ${{ steps.changesets.outputs.published }}
# A JSON array to present the published packages. The format is [{"name": "@xx/xx", "version": "1.2.0"}, {"name": "@xx/xy", "version": "0.8.9"}]
publishedPackages: ${{ steps.changesets.outputs.publishedPackages }}
latest: ${{ env.latest }}
latestBranch: ${{ env.latestBranch }}
steps:
- name: Flags
id: flags
run: |
# IMPORTANT: Update this latestBranch whenever we move to a new major version:
echo "latestBranch=2024-10" >> $GITHUB_ENV
echo "latest=${{ github.ref_name == 'main' }}" >> $GITHUB_ENV
- name: Checkout the code
uses: actions/checkout@v4
# This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits
with:
fetch-depth: 0
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
cache-dependency-path: '**/package-lock.json'
- name: Install the packages
run: npm ci --legacy-peer-deps
- name: Format release with Prettier
run: npm run format
- name: Build the dist code
run: npm run build
- name: Create Release Pull Request or Publish (for latest release)
if: env.latest == 'true'
id: changesets
uses: changesets/action@v1
with:
version: npm run version
publish: npm run changeset publish
# we use the commit message in next release workflow file. This avoid a next release when an actual release is happening
commit: '[ci] release ${{ env.latestBranch }}'
title: '[ci] release ${{ env.latestBranch }}'
env:
GITHUB_TOKEN: ${{ secrets.SHOPIFY_GH_ACCESS_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
compile:
needs: changelog
# Only compile templates if a release was published, and we're on the "latest" release branch
if: needs.changelog.outputs.published == 'true' && needs.changelog.outputs.latest == 'true'
runs-on: ubuntu-latest
name: Compile the typescript templates and push them to main
steps:
- name: Checkout the code
uses: actions/checkout@v4
- name: Install the packages
run: npm install --frozen-lockfile --ignore-engines
- name: Build the dist code
run: npm run build
- name: Compile skeleton
run: |
node scripts/compile-template-for-dist.mjs skeleton
(cd templates/skeleton-js && npm i --package-lock-only --workspaces false)
(cd templates/skeleton-ts && npm i --package-lock-only --workspaces false)
- name: Update templates in the dist branch
run: |
git add .
git status
git config user.email "[email protected]"
git config user.name "Hydrogen Bot"
git show-ref
git commit -m "Update templates for dist"
git push origin HEAD:dist --force
slack_announcement:
needs: changelog
# Only announce if a release was published, and we're on the "latest" release branch
if: needs.changelog.outputs.published == 'true' && needs.changelog.outputs.latest == 'true'
runs-on: ubuntu-latest
steps:
# Extract the Hydrogen version from published packages
- name: Extract Hydrogen version
id: extract_version
run: |
PACKAGES='${{ needs.changelog.outputs.publishedPackages }}'
HYDROGEN_VERSION=$(echo $PACKAGES | jq -r '.[] | select(.name == "@shopify/hydrogen") | .version')
echo "HYDROGEN_VERSION=$HYDROGEN_VERSION" >> $GITHUB_ENV
- name: Post release announcement on Partner Slack
# Only post if a Hydrogen version was included in the release
if: env.HYDROGEN_VERSION != ''
id: slack
uses: fjogeleit/http-request-action@v1
with:
url: ${{ secrets.SLACK_NOTIFICATION_URL }}
method: 'POST'
customHeaders: '{"Content-Type": "application/json"}'
data: "{\"version\": \"${{ env.HYDROGEN_VERSION }}\"}"
# sync_latest:
# needs: changelog
# # Only update package-lock.json if a release was published, and we're on the "latest" release branch
# if: needs.changelog.outputs.published == 'true' && needs.changelog.outputs.latest == 'true'
# runs-on: ubuntu-latest
# name: Sync latest to version branch
# steps:
# - name: Checkout the code
# uses: actions/checkout@v4
# - name: Update package-lock.json
# run: npm install --package-lock-only --ignore-engines
# TODO: Figure out how to push to protected branch
# - name: Push commit to main branch
# run: |
# git add .
# git status
# git config user.email "[email protected]"
# git config user.name "Hydrogen Bot"
# git show-ref
# git commit -m "[ci] Update package-lock.json"
# git push origin HEAD:main
# - name: Sync latest to version branch
# run: |
# git config user.email "[email protected]"
# git config user.name "Hydrogen Bot"
# git show-ref
# git commit -m "[ci] release ${{ needs.changelog.outputs.latestBranch }}"
# git push origin main:${{ needs.changelog.outputs.latestBranch }} --force