-
Notifications
You must be signed in to change notification settings - Fork 36
219 lines (194 loc) · 9.35 KB
/
packaging.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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# Unique name for this workflow
name: Packaging
# Workflow starts when receiving custom event sent by CI workflow or manually
on:
workflow_dispatch:
inputs:
isBasePackageRelease:
description: 'Package base app?'
required: false
type: boolean
isSitePackageRelease:
description: 'Package site?'
required: false
type: boolean
repository_dispatch:
types: [start-packaging]
# Workflow environment variables
env:
# Should the base package be released
IS_BASE_PACKAGE_RELEASE: ${{ github.event.client_payload.isBasePackageRelease == 'true' || inputs.isBasePackageRelease }}
# Should the site package be released
IS_SITE_PACKAGE_RELEASE: ${{ github.event.client_payload.isSitePackageRelease == 'true' || inputs.isSitePackageRelease }}
# Jobs to be executed
jobs:
release-package-version:
runs-on: trailheadapps-Ubuntu
steps:
# Install Salesforce CLI
- name: 'Install Salesforce CLI'
run: |
npm install @salesforce/cli --location=global
nodeInstallPath=$(npm config get prefix)
echo "$nodeInstallPath/bin" >> $GITHUB_PATH
sf --version
# Checkout the source code
- name: 'Checkout source code'
uses: actions/checkout@v4
with:
ref: ${{ github.event.client_payload.ref }}
# Store secret for dev hub
- name: 'Populate auth file with DEVHUB_SFDX_URL secret'
shell: bash
run: |
echo ${{ secrets.DEVHUB_SFDX_URL }} > ./DEVHUB_SFDX_URL.txt
secretFileSize=$(wc -c "./DEVHUB_SFDX_URL.txt" | awk '{print $1}')
if [ $secretFileSize == 1 ]; then
echo "Missing DEVHUB_SFDX_URL secret. Is this workflow running on a fork?";
exit 1;
fi
# Authenticate dev hub
- name: 'Authenticate Dev Hub'
run: sf org login sfdx-url -f ./DEVHUB_SFDX_URL.txt -a devhub -d
# Remove auth file
- name: 'Remove auth file'
run: rm -f ./DEVHUB_SFDX_URL.txt
# Bump base package minor version
- name: 'Bump base package minor version'
if: ${{ env.IS_BASE_PACKAGE_RELEASE }}
run: node bin/packaging/bump-package-minor-version.js "Coral Cloud - Base"
# Bump site package minor version
- name: 'Bump site package minor version'
if: ${{ env.IS_SITE_PACKAGE_RELEASE }}
run: node bin/packaging/bump-package-minor-version.js "Coral Cloud - Site"
# Bump site package dependencies
- name: 'Bump site package dependencies'
if: ${{ env.IS_SITE_PACKAGE_RELEASE }}
run: node bin/packaging/bump-package-dependencies.js "Coral Cloud - Site"
# Create base package version
- name: 'Create base package version'
if: ${{ env.IS_BASE_PACKAGE_RELEASE }}
run: |
set +e
json=$(sf package version create -p "Coral Cloud - Base" -c -x -w 60 --json)
echo $json
status=$(echo $json | jq '.status')
if [ $status == "0" ]; then
packageVersionId=$(echo $json | jq -r '.result.SubscriberPackageVersionId')
echo "BASE_PACKAGE_VERSION_ID=$packageVersionId" >> $GITHUB_ENV
else
echo "Failed to create package version"
fi
exit $status
# Create site package version
- name: 'Create site package version'
if: ${{ env.IS_SITE_PACKAGE_RELEASE }}
run: |
set +e
json=$(sf package version create -p "Coral Cloud - Site" -c -x -w 60 --json)
echo $json
status=$(echo $json | jq '.status')
if [ $status == "0" ]; then
packageVersionId=$(echo $json | jq -r '.result.SubscriberPackageVersionId')
echo "SITE_PACKAGE_VERSION_ID=$packageVersionId" >> $GITHUB_ENV
else
echo "Failed to create package version"
fi
exit $status
# Wait for package replication
- name: 'Wait for package replication (360s)'
run: sleep 360s
# Get latest base package version
- name: 'Get latest base package version'
if: ${{ !env.IS_BASE_PACKAGE_RELEASE }}
run: |
set +e
json=$(sf package version list -r -o MajorVersion,MinorVersion,PatchVersion -p "Coral Cloud - Base" --json)
echo $json
status=$(echo $json | jq '.status')
if [ $status == "0" ]; then
packageVersionId=$(echo $json | jq -r '.result[-1].SubscriberPackageVersionId')
echo "BASE_PACKAGE_VERSION_ID=$packageVersionId" >> $GITHUB_ENV
else
echo "Failed to read package versions"
fi
exit $status
# Get latest site package version
- name: 'Get latest site package version'
if: ${{ !env.IS_SITE_PACKAGE_RELEASE }}
run: |
set +e
json=$(sf package version list -r -o MajorVersion,MinorVersion,PatchVersion -p "Coral Cloud - Site" --json)
echo $json
status=$(echo $json | jq '.status')
if [ $status == "0" ]; then
packageVersionId=$(echo $json | jq -r '.result[-1].SubscriberPackageVersionId')
echo "SITE_PACKAGE_VERSION_ID=$packageVersionId" >> $GITHUB_ENV
else
echo "Failed to read package versions"
fi
exit $status
# Create scratch org
- name: 'Create scratch org'
run: sf org create scratch -f config/cc-base-project-scratch-def.json -a scratch-org -d -y 1
# Install base package in scratch org
- name: 'Install base package in scratch org'
run: sf package install -p ${{ env.BASE_PACKAGE_VERSION_ID }} -w 10 -o scratch-org -r
# Install site package in scratch org
- name: 'Install site package in scratch org'
run: sf package install -p ${{ env.SITE_PACKAGE_VERSION_ID }} -w 10 -o scratch-org -r
# Promote base package version
- name: 'Promote base package version'
if: ${{ env.IS_BASE_PACKAGE_RELEASE }}
run: sf package version promote -p ${{ env.BASE_PACKAGE_VERSION_ID }} -n
# Promote site package version
- name: 'Promote site package version'
if: ${{ env.IS_SITE_PACKAGE_RELEASE }}
run: sf package version promote -p ${{ env.SITE_PACKAGE_VERSION_ID }} -n
# Prepare PR title and body
- name: 'Prepare PR title and body'
id: prepare-pr
run: |
title="Released new package version(s):"
body="Released new package version(s):\n"
if [ ${{ env.IS_BASE_PACKAGE_RELEASE }} ]; then
title="$title Base"
body="$body- Base: \`${{ env.BASE_PACKAGE_VERSION_ID }}\`\n"
fi
if [ ${{ env.IS_SITE_PACKAGE_RELEASE }} ]; then
body="$body- Site: \`${{ env.SITE_PACKAGE_VERSION_ID }}\`"
if [ ${{ env.IS_BASE_PACKAGE_RELEASE }} ]; then
title="$title, Site"
else
title="$title Site"
fi
fi
echo "title=$title" >> $GITHUB_OUTPUT
echo "body=$body" >> $GITHUB_OUTPUT
# Create PR for new package versions
- name: 'Create PR for new package versions'
id: create-pr
uses: peter-evans/create-pull-request@v6
with:
title: ${{ steps.prepare-pr.outputs.title }}
body: ${{ steps.prepare-pr.outputs.body }}
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit-message: ${{ steps.prepare-pr.outputs.body }}
branch: 'auto/release-package-version'
token: ${{ secrets.BOT_ACCESS_TOKEN }}
# Wait for PR to stabilize (auto skip CI)
- name: 'Wait for PR to stabilize (60s)'
run: sleep 60s
# Approve and mark PR for auto merge
- name: 'Approve and mark PR for auto merge'
continue-on-error: true
run: |
gh pr review --approve "$PR_NUMBER"
gh pr merge --auto --squash "$PR_NUMBER"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
# Housekeeping
- name: 'Delete scratch org'
if: always()
run: sf org delete scratch -p -o scratch-org