Skip to content

Commit bdcc5de

Browse files
authored
Automate SwiftPM updates.
Let's make the versioning daily and create a new dedicated branch with swiftpm packages for it, so that the clients can pin themselves to a specific version and never run into checksum mismatch issues when we overwrite the binaries on S3.
1 parent 6c944db commit bdcc5de

File tree

1 file changed

+67
-14
lines changed

1 file changed

+67
-14
lines changed

.github/workflows/apple.yml

Lines changed: 67 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,28 @@ on:
2020
- extension/benchmark/apple/**
2121
- extension/module/**
2222
workflow_dispatch:
23+
schedule:
24+
- cron: '0 10 * * *' # Runs daily at 2 AM PST
2325

2426
concurrency:
2527
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.event_name == 'workflow_dispatch' }}-${{ github.event_name == 'schedule' }}
2628
cancel-in-progress: true
2729

2830
jobs:
31+
set-version:
32+
runs-on: ubuntu-22.04
33+
outputs:
34+
version: ${{ steps.set_version.outputs.version }}
35+
steps:
36+
- name: Set VERSION variable
37+
id: set_version
38+
shell: bash
39+
run: |
40+
VERSION="0.4.0.$(TZ='PST8PDT' date +%Y%m%d)"
41+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
42+
2943
build-demo-ios:
3044
name: build-demo-ios
31-
# NB: Don't run this on fork PRs because they won't have access to the secret and would fail anyway
32-
if: ${{ !github.event.pull_request.head.repo.fork }}
3345
uses: pytorch/test-infra/.github/workflows/macos_job.yml@main
3446
secrets: inherit
3547
with:
@@ -41,6 +53,8 @@ jobs:
4153
secrets-env: BUILD_CERTIFICATE_BASE64 EXECUTORCH_DEMO_BUILD_PROVISION_PROFILE_BASE64 KEYCHAIN_PASSWORD
4254
upload-artifact: ios-apps
4355
script: |
56+
set -eux
57+
4458
BUILD_TOOL=cmake
4559
4660
.ci/scripts/setup-conda.sh
@@ -59,7 +73,7 @@ jobs:
5973
6074
# Build and test iOS Demo App
6175
PYTHON_EXECUTABLE=python ${CONDA_RUN} --no-capture-output \
62-
build/test_ios_ci.sh ${ARTIFACTS_DIR_NAME}
76+
build/test_ios_ci.sh "${ARTIFACTS_DIR_NAME}"
6377
6478
# Upload the test demo app to S3
6579
upload-demo-ios:
@@ -77,6 +91,7 @@ jobs:
7791
shell: bash
7892
working-directory: ${{ runner.temp }}/artifacts/
7993
run: |
94+
set -eux
8095
ls -lah ./
8196
8297
- name: Upload the artifacts to S3
@@ -114,6 +129,7 @@ jobs:
114129

115130
build-frameworks-ios:
116131
name: build-frameworks-ios
132+
needs: set-version
117133
uses: pytorch/test-infra/.github/workflows/macos_job.yml@main
118134
with:
119135
runner: macos-latest-xlarge
@@ -123,8 +139,10 @@ jobs:
123139
upload-artifact: executorch-frameworks-ios
124140
timeout: 90
125141
script: |
142+
set -eux
143+
126144
BUILD_TOOL=cmake
127-
VERSION="latest"
145+
VERSION="${{ needs.set-version.outputs.version }}"
128146
FRAMEWORKS=(
129147
"executorch"
130148
"backend_coreml"
@@ -173,13 +191,17 @@ jobs:
173191
174192
upload-frameworks-ios:
175193
runs-on: ubuntu-22.04
176-
needs: build-frameworks-ios
194+
needs: [build-frameworks-ios, set-version]
177195
timeout-minutes: 30
196+
environment: ${{ github.ref == 'refs/heads/main' && 'cherry-pick-bot' || '' }}
178197
permissions:
179198
id-token: write
180-
contents: read
199+
contents: write
181200
steps:
182201
- uses: actions/checkout@v3
202+
with:
203+
fetch-depth: 0
204+
token: ${{ secrets.GH_PYTORCHBOT_CHERRY_PICK_TOKEN || secrets.GITHUB_TOKEN }}
183205
- uses: actions/setup-python@v4
184206
with:
185207
python-version: '3.11'
@@ -196,15 +218,15 @@ jobs:
196218
name: executorch-frameworks-ios
197219
path: ${{ runner.temp }}/frameworks-ios/
198220
- name: Only push to S3 when running the workflow manually from main branch
199-
if: ${{ github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' }}
221+
if: ${{ (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' }}
200222
shell: bash
201223
run: |
202-
set -eux
203224
echo "UPLOAD_ON_MAIN=1" >> "${GITHUB_ENV}"
204225
- name: Upload the artifact to ossci-ios S3 bucket
205226
shell: bash
206227
run: |
207228
set -eux
229+
VERSION="${{ needs.set-version.outputs.version }}"
208230
209231
pip install awscli==1.32.18
210232
@@ -214,15 +236,46 @@ jobs:
214236
fi
215237
216238
for FILENAME in "${RUNNER_TEMP}"/frameworks-ios/*.zip; do
217-
[ -e "${FILENAME}" ] || continue
218-
shasum -a 256 "${FILENAME}"
219-
${AWS_CMD} "${FILENAME}" s3://ossci-ios/executorch/ --acl public-read
239+
FRAMEWORK_NAME=$(basename "${FILENAME}" | sed "s/-${VERSION}.zip//")
240+
CHECKSUM=$(shasum -a 256 "${FILENAME}" | cut -d ' ' -f1)
241+
echo "${FRAMEWORK_NAME} ${CHECKSUM}" >> "${RUNNER_TEMP}/checksums.txt"
220242
done
243+
- name: Update SwiftPM
244+
shell: bash
245+
run: |
246+
set -eux
247+
VERSION="${{ needs.set-version.outputs.version }}"
248+
BRANCH="swiftpm-${VERSION}"
249+
250+
git checkout swiftpm
251+
252+
if git show-ref --verify --quiet refs/heads/${BRANCH}; then
253+
git checkout "${BRANCH}"
254+
else
255+
git checkout -b "${BRANCH}"
256+
fi
257+
258+
[[ -f Package.swift ]] || mv Package.swift.template Package.swift
259+
260+
sed -i "s/__VERSION__/${VERSION}/g" Package.swift
261+
262+
while read -r FRAMEWORK CHECKSUM; do
263+
sed -i "s/__SHA256_${FRAMEWORK}__/${CHECKSUM}/g" Package.swift
264+
done < "${RUNNER_TEMP}/checksums.txt"
265+
266+
if [[ "${UPLOAD_ON_MAIN:-0}" == "1" ]]; then
267+
git config --global user.name "PyTorch Bot"
268+
git config --global user.email "[email protected]"
269+
git add Package.swift
270+
git commit -m "${VERSION}"
271+
git push origin "${BRANCH}"
272+
else
273+
echo "Draft Package.swift:"
274+
cat Package.swift
275+
fi
221276
222277
build-benchmark-app:
223278
name: build-benchmark-app
224-
# NB: Don't run this on fork PRs because they won't have access to the secret and would fail anyway
225-
if: ${{ !github.event.pull_request.head.repo.fork }}
226279
uses: pytorch/test-infra/.github/workflows/macos_job.yml@main
227280
secrets: inherit
228281
with:
@@ -285,5 +338,5 @@ jobs:
285338
echo "::group::Build ExecuTorch benchmark app"
286339
mkdir -p extension/benchmark/apple/Benchmark/Models
287340
${CONDA_RUN} --no-capture-output \
288-
build/build_apple_llm_demo.sh ${ARTIFACTS_DIR_NAME}
341+
build/build_apple_llm_demo.sh "${ARTIFACTS_DIR_NAME}"
289342
echo "::endgroup::"

0 commit comments

Comments
 (0)