77 - release/*
88 pull_request :
99 paths :
10- - .ci/docker/**
1110 - .ci/scripts/setup-ios.sh
1211 - .github/workflows/apple.yml
1312 - install_requirements.sh
2120 - extension/benchmark/apple/**
2221 - extension/module/**
2322 workflow_dispatch :
23+ schedule :
24+ - cron : ' 0 10 * * *' # Runs daily at 2 AM PST
2425
2526concurrency :
2627 group : ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.event_name == 'workflow_dispatch' }}-${{ github.event_name == 'schedule' }}
2728 cancel-in-progress : true
2829
2930jobs :
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+
3043 build-demo-ios :
3144 name : build-demo-ios
3245 uses : pytorch/test-infra/.github/workflows/macos_job.yml@main
4053 secrets-env : BUILD_CERTIFICATE_BASE64 EXECUTORCH_DEMO_BUILD_PROVISION_PROFILE_BASE64 KEYCHAIN_PASSWORD
4154 upload-artifact : ios-apps
4255 script : |
56+ set -eux
57+
4358 BUILD_TOOL=cmake
4459
4560 .ci/scripts/setup-conda.sh
5873
5974 # Build and test iOS Demo App
6075 PYTHON_EXECUTABLE=python ${CONDA_RUN} --no-capture-output \
61- build/test_ios_ci.sh ${ARTIFACTS_DIR_NAME}
76+ build/test_ios_ci.sh " ${ARTIFACTS_DIR_NAME}"
6277
6378 # Upload the test demo app to S3
6479 upload-demo-ios :
7691 shell : bash
7792 working-directory : ${{ runner.temp }}/artifacts/
7893 run : |
94+ set -eux
7995 ls -lah ./
8096
8197 - name : Upload the artifacts to S3
@@ -113,6 +129,7 @@ jobs:
113129
114130 build-frameworks-ios :
115131 name : build-frameworks-ios
132+ needs : set-version
116133 uses : pytorch/test-infra/.github/workflows/macos_job.yml@main
117134 with :
118135 runner : macos-latest-xlarge
@@ -122,8 +139,10 @@ jobs:
122139 upload-artifact : executorch-frameworks-ios
123140 timeout : 90
124141 script : |
142+ set -eux
143+
125144 BUILD_TOOL=cmake
126- VERSION="latest "
145+ VERSION="${{ needs.set-version.outputs.version }} "
127146 FRAMEWORKS=(
128147 "executorch"
129148 "backend_coreml"
@@ -172,13 +191,17 @@ jobs:
172191
173192 upload-frameworks-ios :
174193 runs-on : ubuntu-22.04
175- needs : build-frameworks-ios
194+ needs : [ build-frameworks-ios, set-version]
176195 timeout-minutes : 30
196+ environment : ${{ github.ref == 'refs/heads/main' && 'cherry-pick-bot' || '' }}
177197 permissions :
178198 id-token : write
179- contents : read
199+ contents : write
180200 steps :
181201 - uses : actions/checkout@v3
202+ with :
203+ fetch-depth : 0
204+ token : ${{ secrets.GH_PYTORCHBOT_CHERRY_PICK_TOKEN || secrets.GITHUB_TOKEN }}
182205 - uses : actions/setup-python@v4
183206 with :
184207 python-version : ' 3.11'
@@ -195,15 +218,15 @@ jobs:
195218 name : executorch-frameworks-ios
196219 path : ${{ runner.temp }}/frameworks-ios/
197220 - name : Only push to S3 when running the workflow manually from main branch
198- 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' }}
199222 shell : bash
200223 run : |
201- set -eux
202224 echo "UPLOAD_ON_MAIN=1" >> "${GITHUB_ENV}"
203225 - name : Upload the artifact to ossci-ios S3 bucket
204226 shell : bash
205227 run : |
206228 set -eux
229+ VERSION="${{ needs.set-version.outputs.version }}"
207230
208231 pip install awscli==1.32.18
209232
@@ -214,9 +237,44 @@ jobs:
214237
215238 for FILENAME in "${RUNNER_TEMP}"/frameworks-ios/*.zip; do
216239 [ -e "${FILENAME}" ] || continue
217- shasum -a 256 "${FILENAME}"
240+ FRAMEWORK_NAME=$(basename "${FILENAME}" | sed "s/-${VERSION}.zip//")
241+ CHECKSUM=$(shasum -a 256 "${FILENAME}" | cut -d ' ' -f1)
242+ echo "${FRAMEWORK_NAME} ${CHECKSUM}" >> "${RUNNER_TEMP}/checksums.txt"
218243 ${AWS_CMD} "${FILENAME}" s3://ossci-ios/executorch/ --acl public-read
219244 done
245+ - name : Update SwiftPM
246+ shell : bash
247+ run : |
248+ set -eux
249+ VERSION="${{ needs.set-version.outputs.version }}"
250+ BRANCH="swiftpm-${VERSION}"
251+
252+ git checkout swiftpm
253+
254+ if git show-ref --verify --quiet refs/heads/${BRANCH}; then
255+ git checkout "${BRANCH}"
256+ else
257+ git checkout -b "${BRANCH}"
258+ fi
259+
260+ [[ -f Package.swift ]] || mv Package.swift.template Package.swift
261+
262+ sed -i "s/__VERSION__/${VERSION}/g" Package.swift
263+
264+ while read -r FRAMEWORK CHECKSUM; do
265+ sed -i "s/__SHA256_${FRAMEWORK}__/${CHECKSUM}/g" Package.swift
266+ done < "${RUNNER_TEMP}/checksums.txt"
267+
268+ if [[ "${UPLOAD_ON_MAIN:-0}" == "1" ]]; then
269+ git config --global user.name "PyTorch Bot"
270+ git config --global user.email "[email protected] " 271+ git add Package.swift
272+ git commit -am "${VERSION}"
273+ git push -f origin "${BRANCH}"
274+ else
275+ echo "Draft Package.swift:"
276+ cat Package.swift
277+ fi
220278
221279 build-benchmark-app :
222280 name : build-benchmark-app
@@ -282,5 +340,5 @@ jobs:
282340 echo "::group::Build ExecuTorch benchmark app"
283341 mkdir -p extension/benchmark/apple/Benchmark/Models
284342 ${CONDA_RUN} --no-capture-output \
285- build/build_apple_llm_demo.sh ${ARTIFACTS_DIR_NAME}
343+ build/build_apple_llm_demo.sh " ${ARTIFACTS_DIR_NAME}"
286344 echo "::endgroup::"
0 commit comments