-
Notifications
You must be signed in to change notification settings - Fork 22
291 lines (270 loc) · 14.6 KB
/
deploy-sdk.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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
name: Deploy SDK (testing)
on:
[pull_request]
# workflow_dispatch: # manually run this workflow. This allows you to manually deploy things like cococapods, not manually create a git tag. The tag needs to already be created to run this.
# inputs:
# existing-git-tag:
# description: 'Type name of existing git tag (example: 1.0.3) to checkout and manually deploy'
# required: true
# type: string
# push:
# branches: [beta, main, v1] # all branches where deployments currently occur. Make sure this list matches list of branches in `.releaserc` file.
permissions:
contents: write # access to push the git tag
jobs:
generate-sdk-size-report:
name: Generate SDK size report
runs-on: macos-14
outputs:
sdk-size-report: ${{ steps.generate-sdk-size-report.outputs.sdk-size-report }}
sdk-size-including-dependencies-report: ${{ steps.generate-sdk-size-report.outputs.sdk-size-including-dependencies-report }}
steps:
- uses: actions/checkout@v4
- name: Download the latest main sample app build to generate SDK size diff report
id: main-sample-app-build
uses: ./.github/actions/main-sample-app-build
- uses: ./.github/actions/generate-sdk-size-report
id: generate-sdk-size-report
with:
apn-app-xcarchive-name: ${{ steps.main-sample-app-build.outputs.apn-app-xcarchive-name }}
generate-main-diff-report: false
deploy-git-tag:
name: Deploy git tag
needs: [generate-sdk-size-report]
runs-on: ubuntu-latest
# outputs:
# new_release_git_head: ${{ steps.semantic-release.outputs.new_release_git_head }}
# new_release_published: ${{ steps.semantic-release.outputs.new_release_published }}
# new_release_version: ${{ steps.semantic-release.outputs.new_release_version }}
steps:
- uses: actions/checkout@v4
# CLI to replace strings in files. The CLI recommends using `cargo install` which is slow. This Action is fast because it downloads pre-built binaries.
# If using sd on macos, "brew install" works great. for Linux, this is the recommended way.
# - name: Install sd CLI to use later in the workflow
# # uses: kenji-miyake/setup-sd@v1
# uses: levibostian/setup-sd@add-file-extension # Using fork until upstream Action has bug fixed in it.
- name: Write SDK size reports to file, to include in the release
run: |
mkdir -p reports
echo "${{ needs.generate-sdk-size-report.outputs.sdk-size-report }}" > reports/sdk-binary-size.txt
echo "${{ needs.generate-sdk-size-report.outputs.sdk-size-including-dependencies-report }}" > reports/sdk-binary-size-including-dependencies.txt
- name: Verify the report files got written
run: |
echo "SDK binary size report:"
cat reports/sdk-binary-size.txt
echo "SDK binary size including dependencies report:"
cat reports/sdk-binary-size-including-dependencies.txt
# # Semantic-release tool is used to:
# # 1. Determine the next semantic version for the software during deployment.
# # For example, if the last deployment you made was version 1.3.5 and you are releasing a new feature
# # in this deployment, semantic release will automatically determine the version is 1.4.0 for this new release you're doing.
# # Semantic release is able to do this by viewing commit messages since the last release. That's why this project uses a
# # specific commit message format during pull requests.
# # 2. Updates metadata files. Such as updating the version number in package.json and adding entries to CHANGELOG.md file.
# # 3. Create git tag and push it to github.
# - name: Deploy git tag via semantic-release
# uses: cycjimmy/semantic-release-action@v4
# id: semantic-release
# with:
# # version numbers below can be in many forms: M, M.m, M.m.p
# # version should be greater than the 22.0.1 (https://github.com/semantic-release/semantic-release/releases/tag/v22.0.1)
# # because previous version had a bug in commit analyzer
# semantic_version: latest
# extra_plugins: |
# conventional-changelog-conventionalcommits
# @semantic-release/github
# @semantic-release/exec
# env:
# # Needs to push git commits to repo. Needs write access.
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: Notify team of git tag being created
# uses: slackapi/[email protected]
# if: steps.semantic-release.outputs.new_release_published == 'true' # only run if a git tag was made.
# with:
# # Use block kit for format of the JSON payloads: https://app.slack.com/block-kit-builder
# payload: |
# {
# "text": "iOS SDK git tag created",
# "username": "iOS deployment bot",
# "icon_url": "https://pngimg.com/uploads/apple_logo/apple_logo_PNG19687.png",
# "channel": "#mobile-deployments",
# "blocks": [
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "*iOS* SDK git tag created successfully and deployed to Swift Package Manager! (deployment step 1 of 2)"
# }
# },
# {
# "type": "divider"
# },
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "*Version ${{ steps.semantic-release.outputs.new_release_version }}*\niOS SDK deployment progress:\n ~1. <https://github.com/${{github.repository}}/releases/tag/${{steps.semantic-release.outputs.new_release_version}}|create git ta and deploy to Swift Package Manager>~\n2. deploy to cocoapods\n\n"
# }
# }
# ]
# }
# env:
# # Incoming webhook URL that sends message into the correct Slack channel.
# # Help on how to get the webhook URL: https://github.com/marketplace/actions/slack-send#setup-2
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_NOTIFY_RELEASES_WEBHOOK_URL }}
# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
# - name: Send Velocity Deployment
# uses: codeclimate/[email protected]
# if: steps.semantic-release.outputs.new_release_published == 'true' # only run if a git tag was made.
# with:
# token: ${{ secrets.VELOCITY_DEPLOYMENT_TOKEN }}
# version: ${{ steps.semantic-release.outputs.new_release_version }}
# environment: production
# - name: Notify team of failure
# uses: slackapi/[email protected]
# if: ${{ failure() }} # only run this if any previous step failed
# with:
# # Use block kit for format of the JSON payloads: https://app.slack.com/block-kit-builder
# payload: |
# {
# "text": "iOS SDK deployment failure",
# "username": "iOS deployment bot",
# "icon_url": "https://pngimg.com/uploads/apple_logo/apple_logo_PNG19687.png",
# "channel": "#mobile-deployments",
# "blocks": [
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "*iOS* SDK deployment :warning: failure :warning:"
# }
# },
# {
# "type": "divider"
# },
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "iOS SDK failed deployment during step *create git tag*. View <https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}|CI server logs> to learn why and fix the issue. <https://github.com/customerio/mobile/blob/main/GIT-WORKFLOW.md|Learn more about the deployment process and how to fix errors>."
# }
# }
# ]
# }
# env:
# # Incoming webhook URL that sends message into the correct Slack channel.
# # Help on how to get the webhook URL: https://github.com/marketplace/actions/slack-send#setup-2
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_NOTIFY_RELEASES_WEBHOOK_URL }}
# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
# deploy-cocoapods:
# name: Deploy SDK to Cocoapods
# needs: [deploy-git-tag] # run after git tag is made
# # Only run if we can find a git tag to checkout.
# if: ${{ needs.deploy-git-tag.outputs.new_release_published == 'true' || github.event_name == 'workflow_dispatch' }}
# env:
# COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
# runs-on: macos-14
# steps:
# - name: Checkout git tag that got created in previous step
# uses: actions/checkout@v4
# if: ${{ needs.deploy-git-tag.outputs.new_release_published == 'true' }}
# with:
# ref: ${{ needs.deploy-git-tag.outputs.new_release_git_head }}
# - name: Checkout git tag that was previously created
# uses: actions/checkout@v4
# if: ${{ github.event_name == 'workflow_dispatch' }}
# with:
# ref: ${{ inputs.existing-git-tag }}
# - uses: ./.github/actions/setup-ios
# - name: Install cocoapods
# run: gem install cocoapods
# - name: '⚠️ Note: Pushing to cocoapods is flaky. If you see some errors in these logs while deploying, re-run this GitHub Action to try deployment again and it might fix the issue.'
# run: echo ''
# - name: Push CustomerIOCommon
# run: ./scripts/push-cocoapod.sh CustomerIOCommon.podspec
# - name: Push CustomerIOTrackingMigration
# run: ./scripts/push-cocoapod.sh CustomerIOTrackingMigration.podspec
# - name: Push CustomerIODataPipelines
# run: ./scripts/push-cocoapod.sh CustomerIODataPipelines.podspec
# - name: Push CustomerIOMessagingPush
# run: ./scripts/push-cocoapod.sh CustomerIOMessagingPush.podspec
# - name: Push CustomerIOMessagingPushAPN
# run: ./scripts/push-cocoapod.sh CustomerIOMessagingPushAPN.podspec
# - name: Push CustomerIOMessagingPushFCM
# run: ./scripts/push-cocoapod.sh CustomerIOMessagingPushFCM.podspec
# - name: Push CustomerIOMessagingInApp
# run: ./scripts/push-cocoapod.sh CustomerIOMessagingInApp.podspec
# - name: Push CustomerIO
# run: ./scripts/push-cocoapod.sh CustomerIO.podspec
# - name: Notify team of successful deployment
# uses: slackapi/[email protected]
# if: ${{ success() }}
# with:
# # Use block kit for format of the JSON payloads: https://app.slack.com/block-kit-builder
# payload: |
# {
# "text": "iOS SDK deployed to CocoaPods",
# "username": "iOS deployment bot",
# "icon_url": "https://pngimg.com/uploads/apple_logo/apple_logo_PNG19687.png",
# "channel": "#mobile-deployments",
# "blocks": [
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "*iOS* SDK deployed to Cocoapods! (deployment step 2 of 2)"
# }
# },
# {
# "type": "divider"
# },
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "*Version ${{ github.event.release.tag_name }}*\n\niOS SDK deployment progress:\n ~1. <https://github.com/${{github.repository}}/releases/tag/${{ github.event.release.tag_name }}|create git tag and deploy to Swift Package Manager>~\n~2. deploy to cocoapods~\n\nBecause it's hard to automatically verify cocoapods get deployed, it's recommended to manually verify if cocoapods got deployed successfully by checking for cococapods emails or https://github.com/cocoaPods/specs to see if new commit was added for the release."
# }
# }
# ]
# }
# env:
# # Incoming webhook URL that sends message into the correct Slack channel.
# # Help on how to get the webhook URL: https://github.com/marketplace/actions/slack-send#setup-2
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_NOTIFY_RELEASES_WEBHOOK_URL }}
# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
# - name: Notify team of failure
# uses: slackapi/[email protected]
# if: ${{ failure() }} # only run this if any previous step failed
# with:
# # Use block kit for format of the JSON payloads: https://app.slack.com/block-kit-builder
# payload: |
# {
# "text": "iOS SDK deployment failure",
# "username": "iOS deployment bot",
# "icon_url": "https://pngimg.com/uploads/apple_logo/apple_logo_PNG19687.png",
# "channel": "#mobile-deployments",
# "blocks": [
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "*iOS* SDK deployment :warning: failure :warning:"
# }
# },
# {
# "type": "divider"
# },
# {
# "type": "section",
# "text": {
# "type": "mrkdwn",
# "text": "iOS SDK failed deployment during step *deploy to cocoapods*. View <https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}|CI server logs> to learn why and fix the issue. <https://github.com/customerio/mobile/blob/main/GIT-WORKFLOW.md|Learn more about the deployment process and how to fix errors>."
# }
# }
# ]
# }
# env:
# # Incoming webhook URL that sends message into the correct Slack channel.
# # Help on how to get the webhook URL: https://github.com/marketplace/actions/slack-send#setup-2
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_NOTIFY_RELEASES_WEBHOOK_URL }}
# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK