From 43d097ca93f8c1a9c482ff5aa5df864652fdd1b7 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Thu, 21 May 2026 22:16:10 -0400 Subject: [PATCH 1/2] feat(infra): build firestore internal via manual workflow dispatch --- .github/workflows/release.zip.yml | 42 +++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.zip.yml b/.github/workflows/release.zip.yml index 8c14c0c8698..9e7a1d797c4 100644 --- a/.github/workflows/release.zip.yml +++ b/.github/workflows/release.zip.yml @@ -48,6 +48,10 @@ on: description: 'Run ID of a previous successful zip workflow to use for quickstart testing' required: false default: '' + build_firestore_only: + description: 'Build only FirebaseFirestoreInternal XCFramework' + required: false + default: 'false' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} @@ -58,6 +62,7 @@ jobs: runs-on: ubuntu-latest outputs: should_package: ${{ steps.check.outputs.should_package }} + build_firestore_only: ${{ steps.check.outputs.build_firestore_only }} steps: - name: Fail workflow if PINNED_RUN_ID is set on a schedule if: github.event_name == 'schedule' && env.PINNED_RUN_ID != '' @@ -68,11 +73,17 @@ jobs: id: check env: ZIP_RUN_ID: ${{ github.event.inputs.zip_run_id }} + BUILD_FIRESTORE_ONLY: ${{ github.event.inputs.build_firestore_only }} run: | - if [[ -n "${{ env.PINNED_RUN_ID }}" || -n "$ZIP_RUN_ID" ]]; then + if [[ "${BUILD_FIRESTORE_ONLY}" == "true" ]]; then + echo "should_package=false" >> "$GITHUB_OUTPUT" + echo "build_firestore_only=true" >> "$GITHUB_OUTPUT" + elif [[ -n "${{ env.PINNED_RUN_ID }}" || -n "$ZIP_RUN_ID" ]]; then echo "should_package=false" >> "$GITHUB_OUTPUT" + echo "build_firestore_only=false" >> "$GITHUB_OUTPUT" else echo "should_package=true" >> "$GITHUB_OUTPUT" + echo "build_firestore_only=false" >> "$GITHUB_OUTPUT" fi package-release: @@ -108,6 +119,33 @@ jobs: # name of. path: release_zip_dir + build-firestore-xcframework: + needs: should_package + if: needs.should_package.outputs.build_firestore_only == 'true' + runs-on: macos-26 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + persist-credentials: false + - name: Xcode + run: sudo xcode-select -s /Applications/${{ env.MIN_XCODE }}.app/Contents/Developer + - name: Build Firestore XCFramework + # The version '12.14.0' below is a placeholder value to trick ZipBuilder into thinking versions were specified. + # This prevents it from auto-including all other local podspecs in the repo. + # The actual local podspec will still be used because we pass `--local-podspec-path ..`. + run: | + mkdir -p firestore_xcframework_dir + cd ReleaseTooling + echo '[{"name": "FirebaseAppCheckInterop", "version": "12.14.0", "platforms": ["ios", "macos", "tvos"]}]' > pods.json + swift run zip-builder --zip-pods pods.json --disable-build-dependencies --output-dir ../firestore_xcframework_dir --local-podspec-path .. --platforms ios macos tvos + - name: Unpack XCFramework + run: | + unzip firestore_xcframework_dir/Frameworks.zip -d unpack_dir + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + with: + name: FirebaseAppCheckInterop + path: unpack_dir/Binaries/FirebaseAppCheckInterop.xcframework + build: needs: should_package # Don't run on private repo unless it is a PR. @@ -163,7 +201,7 @@ jobs: packaging_done: runs-on: ubuntu-latest needs: [package-head] - if: always() + if: always() && github.event.inputs.build_firestore_only != 'true' outputs: run_id: ${{ steps.get_run_id.outputs.run_id }} steps: From 564f039b37fb293fc7f86aaf988f8594e410b541 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 22 May 2026 11:16:51 -0400 Subject: [PATCH 2/2] Update release.zip.yml --- .github/workflows/release.zip.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.zip.yml b/.github/workflows/release.zip.yml index 9e7a1d797c4..714ed92079a 100644 --- a/.github/workflows/release.zip.yml +++ b/.github/workflows/release.zip.yml @@ -138,13 +138,15 @@ jobs: cd ReleaseTooling echo '[{"name": "FirebaseAppCheckInterop", "version": "12.14.0", "platforms": ["ios", "macos", "tvos"]}]' > pods.json swift run zip-builder --zip-pods pods.json --disable-build-dependencies --output-dir ../firestore_xcframework_dir --local-podspec-path .. --platforms ios macos tvos - - name: Unpack XCFramework + - name: Repackage XCFramework with symlinks run: | unzip firestore_xcframework_dir/Frameworks.zip -d unpack_dir - - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + cd unpack_dir/Binaries + zip --symlinks -q -r -dg ../../FirebaseAppCheckInterop.zip FirebaseAppCheckInterop.xcframework + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: FirebaseAppCheckInterop - path: unpack_dir/Binaries/FirebaseAppCheckInterop.xcframework + path: FirebaseAppCheckInterop.zip + archive: false build: needs: should_package