CI / PR 211 #1440
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| run-name: CI / ${{ github.event_name == 'pull_request' && format('PR {0}', github.event.number) || github.ref_name }} | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, reopened, closed] | |
| merge_group: | |
| types: [checks_requested] | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| inputs: | |
| wasm_target: | |
| description: WASM AOT target to build when WASM runtime inputs are affected | |
| required: true | |
| default: all | |
| type: choice | |
| options: | |
| - all | |
| - macos-arm64 | |
| - linux-x64-gnu | |
| - linux-arm64-gnu | |
| - windows-x64-msvc | |
| native_target: | |
| description: Native target, or mobile compatibility domain, for focused manual debugging | |
| required: true | |
| default: all | |
| type: choice | |
| options: | |
| - all | |
| - macos-arm64 | |
| - linux-x64-gnu | |
| - linux-arm64-gnu | |
| - windows-x64-msvc | |
| - android-arm64-v8a | |
| - android-x86_64 | |
| - ios-xcframework | |
| mobile_target: | |
| description: Mobile lane to run for focused manual debugging | |
| required: true | |
| default: all | |
| type: choice | |
| options: | |
| - all | |
| - android | |
| - ios | |
| - both | |
| save_heavy_caches: | |
| description: Write the bounded heavy build caches when manually qualifying main | |
| required: true | |
| default: false | |
| type: boolean | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.number) || format('sha-{0}', github.sha) }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| NODE_VERSION: 22.22.3 | |
| PNPM_VERSION: 11.5.0 | |
| NPM_VERSION: 11.18.0 | |
| BUN_VERSION: 1.3.14 | |
| DENO_VERSION: v2.8.1 | |
| ACTIONLINT_VERSION: 1.7.12 | |
| ASSET_PROFILE: release | |
| WASMER_LLVM_VERSION: "22.1" | |
| WASMER_LLVM_LINUX_X64_URL: https://github.com/wasmerio/llvm-custom-builds/releases/download/22.x/llvm-linux-amd64.tar.xz | |
| WASMER_LLVM_LINUX_X64_SHA256: 5fb1c687c5e895d517a23e7aabea9ec3557e3a3e33f8a8d3a8d21395157b3906 | |
| WASMER_LLVM_LINUX_X64_BYTES: 741670068 | |
| WASMER_LLVM_MACOS_ARM64_URL: https://github.com/wasmerio/llvm-custom-builds/releases/download/22.x/llvm-darwin-aarch64.tar.xz | |
| WASMER_LLVM_MACOS_ARM64_SHA256: f64460f6c8a28876737402542fc5b28bb1f4262cef85f799b65ce2a7ee6f8847 | |
| WASMER_LLVM_MACOS_ARM64_BYTES: 479103872 | |
| HEAVY_CACHE_SAVE_IF: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' && inputs.save_heavy_caches) }} | |
| MOON_BASE: ${{ github.event.pull_request.base.sha || github.event.before || github.event.merge_group.base_sha || '' }} | |
| MOON_HEAD: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha || github.sha }} | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| affected: | |
| name: Planning / Affected Work | |
| needs: | |
| - release-intent | |
| if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 10 | |
| outputs: | |
| builder_jobs: ${{ steps.plan.outputs.builder_jobs }} | |
| check_count: ${{ steps.target-matrices.outputs.check_count }} | |
| check_job_count: ${{ steps.target-matrices.outputs.check_job_count }} | |
| check_jobs: ${{ steps.target-matrices.outputs.check_jobs }} | |
| check_matrix: ${{ steps.target-matrices.outputs.check_matrix }} | |
| policy_count: ${{ steps.target-matrices.outputs.policy_count }} | |
| policy_matrix: ${{ steps.target-matrices.outputs.policy_matrix }} | |
| policy_requires_android_sdk: ${{ steps.target-matrices.outputs.policy_requires_android_sdk }} | |
| policy_requires_rust: ${{ steps.target-matrices.outputs.policy_requires_rust }} | |
| policy_requires_maintainer_tools: ${{ steps.target-matrices.outputs.policy_requires_maintainer_tools }} | |
| policy_requires_workspace: ${{ steps.target-matrices.outputs.policy_requires_workspace }} | |
| policy_requires_wasmer_llvm: ${{ steps.target-matrices.outputs.policy_requires_wasmer_llvm }} | |
| jobs: ${{ steps.plan.outputs.jobs }} | |
| e2e_jobs: ${{ steps.plan.outputs.e2e_jobs }} | |
| job_targets: ${{ steps.plan.outputs.job_targets }} | |
| broker_runtime_matrix: ${{ steps.plan.outputs.broker_runtime_matrix }} | |
| extension_artifacts_native_matrix: ${{ steps.plan.outputs.extension_artifacts_native_matrix }} | |
| extension_artifacts_wasix_matrix: ${{ steps.plan.outputs.extension_artifacts_wasix_matrix }} | |
| extension_package_products: ${{ steps.plan.outputs.extension_package_products }} | |
| extension_package_products_csv: ${{ steps.plan.outputs.extension_package_products_csv }} | |
| extension_package_sql_names: ${{ steps.plan.outputs.extension_package_sql_names }} | |
| extension_package_sql_names_csv: ${{ steps.plan.outputs.extension_package_sql_names_csv }} | |
| native_extension_lifecycle_sql_names: ${{ steps.plan.outputs.native_extension_lifecycle_sql_names }} | |
| native_extension_lifecycle_sql_names_csv: ${{ steps.plan.outputs.native_extension_lifecycle_sql_names_csv }} | |
| native_extension_lifecycle_matrix: ${{ steps.plan.outputs.native_extension_lifecycle_matrix }} | |
| native_extension_lifecycle_shard_count: ${{ steps.plan.outputs.native_extension_lifecycle_shard_count }} | |
| liboliphaunt_wasix_aot_runtime_matrix: ${{ steps.plan.outputs.liboliphaunt_wasix_aot_runtime_matrix }} | |
| liboliphaunt_wasix_postmaster_runtime_matrix: ${{ steps.plan.outputs.liboliphaunt_wasix_postmaster_runtime_matrix }} | |
| liboliphaunt_native_android_runtime_matrix: ${{ steps.plan.outputs.liboliphaunt_native_android_runtime_matrix }} | |
| liboliphaunt_native_desktop_runtime_matrix: ${{ steps.plan.outputs.liboliphaunt_native_desktop_runtime_matrix }} | |
| liboliphaunt_native_ios_runtime_matrix: ${{ steps.plan.outputs.liboliphaunt_native_ios_runtime_matrix }} | |
| mobile_extension_package_native_targets: ${{ steps.plan.outputs.mobile_extension_package_native_targets }} | |
| mobile_extension_package_native_targets_csv: ${{ steps.plan.outputs.mobile_extension_package_native_targets_csv }} | |
| react_native_android_mobile_app_matrix: ${{ steps.plan.outputs.react_native_android_mobile_app_matrix }} | |
| node_direct_runtime_matrix: ${{ steps.plan.outputs.node_direct_runtime_matrix }} | |
| wasix_napi_runtime_matrix: ${{ steps.plan.outputs.wasix_napi_runtime_matrix }} | |
| projects: ${{ steps.plan.outputs.projects }} | |
| tasks: ${{ steps.plan.outputs.tasks }} | |
| test_count: ${{ steps.target-matrices.outputs.test_count }} | |
| test_jobs: ${{ steps.target-matrices.outputs.test_jobs }} | |
| test_matrix: ${{ steps.target-matrices.outputs.test_matrix }} | |
| reason: ${{ steps.plan.outputs.reason }} | |
| qualification_mode: ${{ steps.plan.outputs.qualification_mode }} | |
| qualification_base_sha: ${{ steps.plan.outputs.qualification_base_sha }} | |
| qualification_head_sha: ${{ steps.plan.outputs.qualification_head_sha }} | |
| wasix_release_regression_required: ${{ contains(fromJson(steps.plan.outputs.jobs), 'liboliphaunt-wasix-runtime') && (github.event_name != 'workflow_dispatch' || inputs.wasm_target == 'all' || inputs.wasm_target == 'linux-x64-gnu') }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "false" | |
| - name: Plan artifact builder jobs | |
| id: plan | |
| env: | |
| GITHUB_EVENT_NAME: ${{ github.event_name }} | |
| MOON_BASE: ${{ github.event.pull_request.base.sha || github.event.before || github.event.merge_group.base_sha }} | |
| MOON_HEAD: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha || github.sha }} | |
| WASM_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.wasm_target || 'all' }} | |
| NATIVE_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.native_target || 'all' }} | |
| MOBILE_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.mobile_target || 'all' }} | |
| run: tools/dev/bun.sh tools/graph/ci_plan.mjs | |
| - name: Plan check and test jobs | |
| id: target-matrices | |
| env: | |
| MOON_BASE: ${{ github.event.pull_request.base.sha || github.event.before || github.event.merge_group.base_sha }} | |
| MOON_HEAD: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha || github.sha }} | |
| run: node .github/scripts/write-affected-moon-target-matrices.mjs | |
| - name: Upload build plan | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: artifact-build-plan | |
| path: target/graph/ci-plan.json | |
| if-no-files-found: error | |
| release-intent: | |
| name: Planning / Release Intent | |
| if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }} | |
| permissions: | |
| actions: read | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "false" | |
| - name: Check release intent | |
| env: | |
| PR_TITLE: ${{ github.event.pull_request.title }} | |
| BASE_REF: ${{ github.event.pull_request.base.sha || github.event.before || github.event.merge_group.base_sha || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' && format('{0}^', github.sha)) || 'origin/main' }} | |
| HEAD_REF: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha || github.sha }} | |
| HEAD_BRANCH: ${{ github.event.pull_request.head.ref || github.ref_name }} | |
| CI_EVENT_NAME: ${{ github.event_name }} | |
| CI_FULL_REF: ${{ github.ref }} | |
| run: | | |
| subject="${PR_TITLE:-}" | |
| if [ -z "$subject" ]; then | |
| subject="$(git log -1 --pretty=%s "$HEAD_REF")" | |
| fi | |
| .github/scripts/check-release-intent.sh "$subject" "$BASE_REF" "$HEAD_REF" "$HEAD_BRANCH" "$CI_EVENT_NAME" "$CI_FULL_REF" | |
| - name: Require normalized generated release | |
| id: generated_release_readiness | |
| if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref == 'release-please--branches--main' && github.event.pull_request.head.repo.full_name == github.repository }} | |
| run: tools/dev/bun.sh tools/release/sync-release-pr.mjs --check-generated-release | |
| check-targets: | |
| name: Checks / ${{ matrix.label }} | |
| needs: | |
| - affected | |
| if: ${{ needs.affected.outputs.check_count != '0' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.check_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: ${{ matrix.requires_workspace && 'true' || 'false' }} | |
| - name: Set up Rust | |
| if: ${{ matrix.requires_rust }} | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up Apple | |
| if: ${{ matrix.requires_apple }} | |
| uses: ./.github/actions/setup-apple | |
| - name: Set up Android | |
| if: ${{ matrix.requires_android_sdk }} | |
| uses: ./.github/actions/setup-android | |
| - name: Set up Wasmer LLVM | |
| if: ${{ matrix.requires_wasmer_llvm }} | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ runner.os == 'macOS' && env.WASMER_LLVM_MACOS_ARM64_URL || env.WASMER_LLVM_LINUX_X64_URL }} | |
| sha256: ${{ runner.os == 'macOS' && env.WASMER_LLVM_MACOS_ARM64_SHA256 || env.WASMER_LLVM_LINUX_X64_SHA256 }} | |
| bytes: ${{ runner.os == 'macOS' && env.WASMER_LLVM_MACOS_ARM64_BYTES || env.WASMER_LLVM_LINUX_X64_BYTES }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| - name: Install pinned maintainer tools | |
| if: ${{ matrix.requires_maintainer_tools }} | |
| run: tools/dev/bootstrap-tools.sh | |
| - name: Run checks | |
| env: | |
| MOON_TARGET_MATRIX_JSON: ${{ matrix.targets_json }} | |
| run: bun .github/scripts/run-moon-target-matrix.mjs | |
| policy-targets: | |
| name: Checks / Policy | |
| needs: | |
| - affected | |
| if: ${{ needs.affected.outputs.policy_count != '0' }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: ${{ needs.affected.outputs.policy_requires_workspace == 'true' && 'true' || 'false' }} | |
| - name: Set up Rust | |
| if: ${{ needs.affected.outputs.policy_requires_rust == 'true' }} | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up Android | |
| if: ${{ needs.affected.outputs.policy_requires_android_sdk == 'true' }} | |
| uses: ./.github/actions/setup-android | |
| - name: Set up Wasmer LLVM | |
| if: ${{ needs.affected.outputs.policy_requires_wasmer_llvm == 'true' }} | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ env.WASMER_LLVM_LINUX_X64_URL }} | |
| sha256: ${{ env.WASMER_LLVM_LINUX_X64_SHA256 }} | |
| bytes: ${{ env.WASMER_LLVM_LINUX_X64_BYTES }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| - name: Install pinned maintainer tools | |
| if: ${{ needs.affected.outputs.policy_requires_maintainer_tools == 'true' }} | |
| run: tools/dev/bootstrap-tools.sh | |
| - name: Run selected policy targets | |
| env: | |
| MOON_TARGET_MATRIX_JSON: ${{ needs.affected.outputs.policy_matrix }} | |
| run: bun .github/scripts/run-moon-target-matrix.mjs | |
| checks: | |
| name: Checks | |
| if: ${{ always() && (github.event_name != 'pull_request' || github.event.action != 'closed') }} | |
| needs: | |
| - affected | |
| - check-targets | |
| - policy-targets | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Bun | |
| uses: ./.github/actions/setup-bun | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| - name: Check selected check and policy jobs | |
| id: selected_checks_gate | |
| env: | |
| NEEDS_JSON: ${{ toJson(needs) }} | |
| SELECTED_JOBS_JSON: ${{ needs.affected.outputs.check_jobs }} | |
| GATE_LABEL: selected check and policy jobs | |
| run: bun .github/scripts/check-ci-gate.mjs selected | |
| test-targets: | |
| name: Tests / ${{ matrix.label }} | |
| needs: | |
| - affected | |
| if: ${{ needs.affected.outputs.test_count != '0' }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.test_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: ${{ matrix.requires_workspace && 'true' || 'false' }} | |
| - name: Set up Rust | |
| if: ${{ matrix.requires_rust }} | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| tools: cargo-nextest@0.9.137,cargo-llvm-cov@0.8.7 | |
| - name: Set up Apple | |
| if: ${{ matrix.requires_apple }} | |
| uses: ./.github/actions/setup-apple | |
| - name: Set up Android | |
| if: ${{ matrix.requires_android_sdk }} | |
| uses: ./.github/actions/setup-android | |
| - name: Set up Wasmer LLVM | |
| if: ${{ matrix.requires_wasmer_llvm }} | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ runner.os == 'macOS' && env.WASMER_LLVM_MACOS_ARM64_URL || env.WASMER_LLVM_LINUX_X64_URL }} | |
| sha256: ${{ runner.os == 'macOS' && env.WASMER_LLVM_MACOS_ARM64_SHA256 || env.WASMER_LLVM_LINUX_X64_SHA256 }} | |
| bytes: ${{ runner.os == 'macOS' && env.WASMER_LLVM_MACOS_ARM64_BYTES || env.WASMER_LLVM_LINUX_X64_BYTES }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| - name: Install pinned maintainer tools | |
| if: ${{ matrix.requires_maintainer_tools }} | |
| run: tools/dev/bootstrap-tools.sh | |
| - name: Run tests | |
| env: | |
| MOON_TARGET_MATRIX_JSON: ${{ matrix.targets_json }} | |
| run: bun .github/scripts/run-moon-target-matrix.mjs | |
| tests: | |
| name: Tests | |
| if: ${{ always() && (github.event_name != 'pull_request' || github.event.action != 'closed') }} | |
| needs: | |
| - affected | |
| - test-targets | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Bun | |
| uses: ./.github/actions/setup-bun | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| - name: Check selected test jobs | |
| id: selected_tests_gate | |
| env: | |
| NEEDS_JSON: ${{ toJson(needs) }} | |
| SELECTED_JOBS_JSON: ${{ needs.affected.outputs.test_jobs }} | |
| GATE_LABEL: selected test jobs | |
| run: bun .github/scripts/check-ci-gate.mjs selected | |
| extension-artifacts-native: | |
| name: Builds / Native Extension Artifacts (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'extension-artifacts-native') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.extension_artifacts_native_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 135 | |
| env: | |
| CCACHE_DIR: ${{ github.workspace }}/.ci-cache/ccache/native-extension/${{ matrix.target }} | |
| CCACHE_BASEDIR: ${{ github.workspace }} | |
| CCACHE_COMPILERCHECK: content | |
| CCACHE_COMPRESS: "true" | |
| OLIPHAUNT_CCACHE_MAX_SIZE: ${{ matrix.target == 'ios-xcframework' && '512M' || '2G' }} | |
| OLIPHAUNT_CCACHE_ZERO_STATS: "1" | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Apple | |
| if: ${{ runner.os == 'macOS' }} | |
| uses: ./.github/actions/setup-apple | |
| - name: Set up Android | |
| if: ${{ startsWith(matrix.target, 'android-') }} | |
| uses: ./.github/actions/setup-android | |
| with: | |
| gradle-cache: "false" | |
| - name: Set up MSVC | |
| if: ${{ runner.os == 'Windows' }} | |
| uses: ./.github/actions/setup-msvc | |
| - name: Verify Windows VC runtime atomic staging | |
| if: ${{ runner.os == 'Windows' }} | |
| run: tools/dev/bun.sh test tools/release/windows-vc-runtime-closure.test.mjs | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Prepare native compiler cache path | |
| if: ${{ matrix.target == 'ios-xcframework' }} | |
| run: mkdir -p "$CCACHE_DIR" | |
| - name: Restore native compiler cache | |
| id: restore_ios_extension_ccache | |
| if: ${{ matrix.target == 'ios-xcframework' }} | |
| uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 | |
| with: | |
| path: ${{ env.CCACHE_DIR }} | |
| key: liboliphaunt-native-extension-ccache-v2-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.github/actions/setup-apple/**', '.github/scripts/setup-native-build-tools.sh', 'src/postgres/versions/18/**', 'src/sources/third-party/shared/**', 'src/sources/third-party/native/**', 'src/shared/extension-runtime-contract/**', 'src/extensions/catalog/extensions.source.json', 'src/extensions/catalog/native-components.toml', 'src/extensions/contrib/postgres18.toml', 'src/extensions/external/*/source.toml', 'src/extensions/external/*/recipe.toml', 'src/extensions/external/*/dependencies/**/source.toml', 'src/extensions/external/*/dependencies/**/recipe.toml', 'src/extensions/external/*/patches/**', 'src/extensions/external/*/dependencies/**/patches/**', 'src/extensions/generated/extensions.catalog.json', 'src/extensions/generated/contrib-build.tsv', 'src/extensions/generated/pgxs-build.tsv', 'src/extensions/generated/mobile/static-extensions.tsv', 'src/extensions/generated/mobile/static-registry.json', 'src/runtimes/liboliphaunt/native/bin/build-*.sh', '!src/runtimes/liboliphaunt/native/bin/*.test.sh', 'src/runtimes/liboliphaunt/native/bin/build-postgres18-windows.ps1', 'src/runtimes/liboliphaunt/native/bin/build-output.bash', 'src/runtimes/liboliphaunt/native/bin/common.sh', 'src/runtimes/liboliphaunt/native/bin/fetch-pinned-git-checkout.sh', 'src/runtimes/liboliphaunt/native/bin/icu.sh', 'src/runtimes/liboliphaunt/native/bin/mobile-*.sh', 'src/runtimes/liboliphaunt/native/bin/postgis-dependency-cache.sh', 'src/runtimes/liboliphaunt/native/bin/postgres-backend-objects.mk', 'src/runtimes/liboliphaunt/native/crates/tools/Cargo.toml', 'src/runtimes/liboliphaunt/native/crates/tools/build.rs', 'src/runtimes/liboliphaunt/native/crates/tools/src/**', 'src/runtimes/liboliphaunt/native/include/**', 'src/runtimes/liboliphaunt/native/patches/**', 'src/runtimes/liboliphaunt/native/portable-uuid/**', 'src/runtimes/liboliphaunt/native/postgres18/**', 'src/runtimes/liboliphaunt/native/src/**') }} | |
| restore-keys: | | |
| liboliphaunt-native-extension-ccache-v2-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}- | |
| - name: Configure native compiler cache | |
| run: .github/scripts/setup-native-build-tools.sh | |
| - name: Build native exact-extension artifacts | |
| timeout-minutes: 120 | |
| env: | |
| OLIPHAUNT_EXTENSION_PRODUCTS: ${{ matrix.extensions_csv }} | |
| OLIPHAUNT_EXTENSION_TARGET: ${{ matrix.target }} | |
| OLIPHAUNT_BISON: /opt/homebrew/opt/bison/bin/bison | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh extension-artifacts-native | |
| - name: Validate produced iOS extension carriers | |
| id: validate_ios_extension_carriers | |
| if: ${{ matrix.target == 'ios-xcframework' }} | |
| run: node tools/release/validate-ios-carrier-zips.mjs --root target/extensions/native/release-assets/ios-xcframework | |
| - name: Save bounded iOS exact-extension compiler cache | |
| id: save_ios_extension_ccache | |
| if: ${{ matrix.target == 'ios-xcframework' && env.HEAVY_CACHE_SAVE_IF == 'true' && steps.restore_ios_extension_ccache.outputs.cache-hit != 'true' }} | |
| continue-on-error: true | |
| uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 | |
| with: | |
| path: ${{ env.CCACHE_DIR }} | |
| key: liboliphaunt-native-extension-ccache-v2-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.github/actions/setup-apple/**', '.github/scripts/setup-native-build-tools.sh', 'src/postgres/versions/18/**', 'src/sources/third-party/shared/**', 'src/sources/third-party/native/**', 'src/shared/extension-runtime-contract/**', 'src/extensions/catalog/extensions.source.json', 'src/extensions/catalog/native-components.toml', 'src/extensions/contrib/postgres18.toml', 'src/extensions/external/*/source.toml', 'src/extensions/external/*/recipe.toml', 'src/extensions/external/*/dependencies/**/source.toml', 'src/extensions/external/*/dependencies/**/recipe.toml', 'src/extensions/external/*/patches/**', 'src/extensions/external/*/dependencies/**/patches/**', 'src/extensions/generated/extensions.catalog.json', 'src/extensions/generated/contrib-build.tsv', 'src/extensions/generated/pgxs-build.tsv', 'src/extensions/generated/mobile/static-extensions.tsv', 'src/extensions/generated/mobile/static-registry.json', 'src/runtimes/liboliphaunt/native/bin/build-*.sh', '!src/runtimes/liboliphaunt/native/bin/*.test.sh', 'src/runtimes/liboliphaunt/native/bin/build-postgres18-windows.ps1', 'src/runtimes/liboliphaunt/native/bin/build-output.bash', 'src/runtimes/liboliphaunt/native/bin/common.sh', 'src/runtimes/liboliphaunt/native/bin/fetch-pinned-git-checkout.sh', 'src/runtimes/liboliphaunt/native/bin/icu.sh', 'src/runtimes/liboliphaunt/native/bin/mobile-*.sh', 'src/runtimes/liboliphaunt/native/bin/postgis-dependency-cache.sh', 'src/runtimes/liboliphaunt/native/bin/postgres-backend-objects.mk', 'src/runtimes/liboliphaunt/native/crates/tools/Cargo.toml', 'src/runtimes/liboliphaunt/native/crates/tools/build.rs', 'src/runtimes/liboliphaunt/native/crates/tools/src/**', 'src/runtimes/liboliphaunt/native/include/**', 'src/runtimes/liboliphaunt/native/patches/**', 'src/runtimes/liboliphaunt/native/portable-uuid/**', 'src/runtimes/liboliphaunt/native/postgres18/**', 'src/runtimes/liboliphaunt/native/src/**') }} | |
| - name: Show native compiler cache stats | |
| if: ${{ always() && runner.os != 'Windows' }} | |
| run: | | |
| if command -v ccache >/dev/null 2>&1; then | |
| ccache --show-stats | |
| else | |
| echo "ccache was not installed before the build stopped" | |
| fi | |
| - name: Upload native exact-extension artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-extension-artifacts-${{ matrix.target }} | |
| path: target/extensions/native/release-assets | |
| if-no-files-found: error | |
| - name: Upload native exact-extension build logs | |
| id: upload_native_extension_logs | |
| if: ${{ failure() || cancelled() }} | |
| timeout-minutes: 5 | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-extension-logs-${{ matrix.target }} | |
| path: | | |
| target/liboliphaunt-mobile-extension-ci/**/*.log | |
| target/liboliphaunt-mobile-extension-release/**/*.log | |
| target/liboliphaunt-mobile-extension-release/ios-xcframework/ios-simulator/*.log | |
| target/liboliphaunt-mobile-extension-release/ios-xcframework/ios-device/*.log | |
| target/liboliphaunt-pg18-extension-release/**/*.log | |
| target/liboliphaunt-pg18-*-extension-release/**/*.log | |
| /tmp/liboliphaunt-ci-*-extensions.log | |
| /tmp/liboliphaunt-release-*-extensions.log | |
| /tmp/liboliphaunt-ci-extension-assets-fetch.log | |
| /tmp/liboliphaunt-release-extension-assets-fetch.log | |
| if-no-files-found: warn | |
| extension-artifacts-wasix: | |
| name: Builds / WASIX Extension Artifacts (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| - liboliphaunt-wasix-runtime | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'extension-artifacts-wasix') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.extension_artifacts_wasix_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Download portable WASIX runtime outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: . | |
| - name: Build WASIX exact-extension artifacts | |
| env: | |
| OLIPHAUNT_EXTENSION_PRODUCTS: ${{ matrix.extensions_csv }} | |
| OLIPHAUNT_EXTENSION_TARGET: ${{ matrix.target }} | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh extension-artifacts-wasix | |
| - name: Upload WASIX exact-extension artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-extension-artifacts-${{ matrix.target }} | |
| path: target/extensions/wasix/release-assets | |
| if-no-files-found: error | |
| extension-packages: | |
| name: Builds / Extension Packages | |
| needs: | |
| - affected | |
| - extension-artifacts-native | |
| - extension-artifacts-wasix | |
| - liboliphaunt-wasix-aot | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-native.result == 'success' && needs.extension-artifacts-wasix.result == 'success' && needs.liboliphaunt-wasix-aot.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'extension-packages') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Download native exact-extension artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-native-extension-artifacts-* | |
| path: target/extensions/native/release-assets | |
| merge-multiple: true | |
| - name: Download WASIX exact-extension artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-wasix-extension-artifacts-* | |
| path: target/extensions/wasix/release-assets | |
| merge-multiple: true | |
| - name: Download WASIX exact-extension AOT artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-wasix-extension-aot-* | |
| path: target/extensions/wasix/aot-artifacts | |
| merge-multiple: true | |
| - name: Assemble exact-extension product packages | |
| env: | |
| OLIPHAUNT_EXTENSION_PACKAGE_PRODUCTS: ${{ needs.affected.outputs.extension_package_products_csv }} | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["extension-artifacts-native:build-target", "extension-artifacts-wasix:build-target", "liboliphaunt-wasix:runtime-aot"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh extension-packages | |
| - name: Upload exact-extension package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-extension-package-artifacts | |
| path: target/extension-artifacts | |
| if-no-files-found: error | |
| mobile-extension-packages: | |
| name: Builds / Mobile Extension Packages | |
| needs: | |
| - affected | |
| - extension-artifacts-native | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-native.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-extension-packages') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Download native exact-extension artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-native-extension-artifacts-* | |
| path: target/extensions/native/release-assets | |
| merge-multiple: true | |
| - name: Build mobile exact-extension package artifacts | |
| env: | |
| OLIPHAUNT_EXTENSION_PACKAGE_NATIVE_TARGETS: ${{ needs.affected.outputs.mobile_extension_package_native_targets_csv }} | |
| OLIPHAUNT_EXTENSION_PACKAGE_PRODUCTS: ${{ needs.affected.outputs.extension_package_products_csv }} | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["extension-artifacts-native:build-target"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh mobile-extension-packages | |
| - name: Upload mobile exact-extension package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-mobile-extension-package-artifacts | |
| path: target/mobile-extension-artifacts | |
| if-no-files-found: error | |
| liboliphaunt-native-desktop: | |
| name: Builds / Native Runtime (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-desktop') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_desktop_runtime_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| env: | |
| CCACHE_DIR: ${{ github.workspace }}/.ci-cache/ccache/native-runtime/${{ matrix.target }} | |
| CCACHE_BASEDIR: ${{ github.workspace }} | |
| CCACHE_COMPILERCHECK: content | |
| CCACHE_COMPRESS: "true" | |
| OLIPHAUNT_CCACHE_ZERO_STATS: "1" | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up MSVC | |
| if: ${{ runner.os == 'Windows' }} | |
| uses: ./.github/actions/setup-msvc | |
| - name: Prepare native build paths | |
| env: | |
| NATIVE_BUILD_ROOT: ${{ matrix.build-root }} | |
| run: | | |
| mkdir -p "$NATIVE_BUILD_ROOT" | |
| if [[ "$RUNNER_OS" != "Windows" ]]; then | |
| mkdir -p "$CCACHE_DIR" | |
| fi | |
| - name: Configure native compiler cache | |
| run: .github/scripts/setup-native-build-tools.sh 2G | |
| - name: Build and package liboliphaunt native runtime | |
| env: | |
| OLIPHAUNT_CI_TARGET: ${{ matrix.target }} | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh liboliphaunt-native-desktop | |
| - name: Package portable ICU data for exact consumers | |
| if: ${{ matrix.target == 'macos-arm64' }} | |
| env: | |
| NATIVE_BUILD_ROOT: ${{ matrix.build-root }} | |
| run: | | |
| tools/release/package-liboliphaunt-icu-data.sh \ | |
| "$NATIVE_BUILD_ROOT/icu/share/icu" \ | |
| target/liboliphaunt/portable-icu-assets | |
| - name: Upload liboliphaunt release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-release-assets-${{ matrix.target }} | |
| path: target/liboliphaunt/desktop-release-assets/${{ matrix.target }} | |
| if-no-files-found: error | |
| - name: Upload portable ICU data for exact consumers | |
| if: ${{ matrix.target == 'macos-arm64' }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-icu-data | |
| path: target/liboliphaunt/portable-icu-assets | |
| if-no-files-found: error | |
| - name: Show native compiler cache stats | |
| if: ${{ always() }} | |
| env: | |
| NATIVE_TARGET: ${{ matrix.target }} | |
| run: | | |
| if [[ "$NATIVE_TARGET" != windows-* ]] && command -v ccache >/dev/null 2>&1; then | |
| ccache --show-stats | |
| fi | |
| - name: Upload liboliphaunt build logs | |
| if: ${{ failure() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-logs-${{ matrix.target }} | |
| path: | | |
| ${{ matrix.build-root }}/*.log | |
| target/liboliphaunt/**/*.log | |
| if-no-files-found: ignore | |
| liboliphaunt-native-android: | |
| name: Builds / Native Runtime (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-android') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_android_runtime_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up Android | |
| uses: ./.github/actions/setup-android | |
| with: | |
| gradle-cache: "false" | |
| native-ccache: "true" | |
| - name: Prepare native build path | |
| env: | |
| NATIVE_BUILD_ROOT: ${{ matrix.build-root }} | |
| run: mkdir -p "$NATIVE_BUILD_ROOT" | |
| - name: Configure native compiler cache | |
| run: .github/scripts/setup-native-build-tools.sh 2G | |
| - name: Build and package liboliphaunt Android target | |
| env: | |
| OLIPHAUNT_CI_JOB_TARGETS_JSON: ${{ needs.affected.outputs.job_targets }} | |
| OLIPHAUNT_NATIVE_TASK: liboliphaunt-native:package-runtime-${{ matrix.target }} | |
| run: .github/scripts/run-planned-moon-job.sh liboliphaunt-native-android "$OLIPHAUNT_NATIVE_TASK" | |
| - name: Upload liboliphaunt release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-release-assets-${{ matrix.target }} | |
| path: target/liboliphaunt/mobile-release-assets/${{ matrix.target }} | |
| if-no-files-found: error | |
| - name: Upload liboliphaunt Android target artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-target-${{ matrix.target }} | |
| path: ${{ matrix.ci-artifact-root }} | |
| if-no-files-found: error | |
| - name: Show native compiler cache stats | |
| if: ${{ always() }} | |
| run: | | |
| if command -v ccache >/dev/null 2>&1; then | |
| ccache --show-stats | |
| fi | |
| - name: Upload liboliphaunt Android build logs | |
| if: ${{ failure() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-logs-${{ matrix.target }} | |
| path: | | |
| ${{ matrix.build-root }}/*.log | |
| target/liboliphaunt/**/*.log | |
| if-no-files-found: ignore | |
| liboliphaunt-native-ios: | |
| name: Builds / Native Runtime (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-ios') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_native_ios_runtime_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| env: | |
| CCACHE_DIR: ${{ github.workspace }}/.ci-cache/ccache/native-runtime/${{ matrix.target }} | |
| CCACHE_BASEDIR: ${{ github.workspace }} | |
| CCACHE_COMPILERCHECK: content | |
| CCACHE_COMPRESS: "true" | |
| OLIPHAUNT_CCACHE_ZERO_STATS: "1" | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Apple | |
| uses: ./.github/actions/setup-apple | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Prepare native build paths | |
| env: | |
| NATIVE_BUILD_ROOT: ${{ matrix.build-root }} | |
| run: mkdir -p "$CCACHE_DIR" "$NATIVE_BUILD_ROOT" | |
| - name: Configure native compiler cache | |
| run: .github/scripts/setup-native-build-tools.sh 2G | |
| - name: Build and package liboliphaunt iOS target | |
| env: | |
| OLIPHAUNT_CI_JOB_TARGETS_JSON: ${{ needs.affected.outputs.job_targets }} | |
| OLIPHAUNT_NATIVE_TASK: liboliphaunt-native:package-runtime-${{ matrix.target }} | |
| run: .github/scripts/run-planned-moon-job.sh liboliphaunt-native-ios "$OLIPHAUNT_NATIVE_TASK" | |
| - name: Upload liboliphaunt release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-release-assets-${{ matrix.target }} | |
| path: target/liboliphaunt/mobile-release-assets/${{ matrix.target }} | |
| if-no-files-found: error | |
| - name: Upload liboliphaunt iOS target artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-target-${{ matrix.target }} | |
| path: ${{ matrix.ci-artifact-root }} | |
| if-no-files-found: error | |
| - name: Show native compiler cache stats | |
| if: ${{ always() }} | |
| run: | | |
| if command -v ccache >/dev/null 2>&1; then | |
| ccache --show-stats | |
| fi | |
| - name: Upload liboliphaunt iOS build logs | |
| if: ${{ failure() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-logs-${{ matrix.target }} | |
| path: | | |
| ${{ matrix.build-root }}/*.log | |
| ${{ matrix.build-root }}/logs/*.log | |
| ${{ matrix.build-root }}/**/*.log | |
| target/liboliphaunt-ios-simulator/*.log | |
| target/liboliphaunt-ios-simulator/**/*.log | |
| target/liboliphaunt-ios-device/*.log | |
| target/liboliphaunt-ios-device/**/*.log | |
| target/liboliphaunt/**/*.log | |
| if-no-files-found: ignore | |
| liboliphaunt-native-android-abi: | |
| name: Builds / Native Runtime ABI Compatibility (Android) | |
| needs: | |
| - affected | |
| - liboliphaunt-native-android | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-native-android.result == 'success' && (contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-android') || contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets')) }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download Android arm64 ABI receipts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-target-android-arm64-v8a | |
| path: target/liboliphaunt-native-ci/android-arm64-v8a | |
| - name: Download Android x86_64 ABI receipts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-target-android-x86_64 | |
| path: target/liboliphaunt-native-ci/android-x86_64 | |
| - name: Download Android runtime-resource assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-release-assets-android-x86_64 | |
| path: target/liboliphaunt/mobile-release-assets/android-x86_64 | |
| - name: Prove Android Datum64 ABI-compatible runtime-resource closure | |
| env: | |
| OLIPHAUNT_CI_JOB_TARGETS_JSON: '{"liboliphaunt-native-android-abi":["liboliphaunt-native:finalize-runtime-android-abi"]}' | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-native:package-runtime-android-arm64-v8a", "liboliphaunt-native:package-runtime-android-x86_64"]' | |
| run: .github/scripts/run-planned-moon-job.sh liboliphaunt-native-android-abi | |
| - name: Upload ABI-compatible Android runtime-resource assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-android-datum64 | |
| path: target/liboliphaunt/abi-compatible-release-assets/android-datum64 | |
| if-no-files-found: error | |
| liboliphaunt-native-ios-abi: | |
| name: Builds / Native Runtime ABI Compatibility (iOS) | |
| needs: | |
| - affected | |
| - liboliphaunt-native-ios | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-native-ios.result == 'success' && (contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') || contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') || contains(fromJson(needs.affected.outputs.jobs), 'react-native-sdk-package') || contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets')) }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download iOS ABI receipts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-target-ios-xcframework | |
| path: target/liboliphaunt-native-ci/ios-xcframework | |
| - name: Download iOS runtime-resource assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-release-assets-ios-xcframework | |
| path: target/liboliphaunt/mobile-release-assets/ios-xcframework | |
| - name: Prove iOS Datum64 ABI-compatible runtime-resource closure | |
| env: | |
| OLIPHAUNT_CI_JOB_TARGETS_JSON: '{"liboliphaunt-native-ios-abi":["liboliphaunt-native:finalize-runtime-ios-abi"]}' | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-native:package-runtime-ios-xcframework"]' | |
| run: .github/scripts/run-planned-moon-job.sh liboliphaunt-native-ios-abi | |
| - name: Upload ABI-compatible iOS runtime-resource assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-ios-datum64 | |
| path: target/liboliphaunt/abi-compatible-release-assets/ios-datum64 | |
| if-no-files-found: error | |
| liboliphaunt-native-release-assets: | |
| name: Builds / Native Runtime Release Assets | |
| needs: | |
| - affected | |
| - liboliphaunt-native-android | |
| - liboliphaunt-native-android-abi | |
| - liboliphaunt-native-desktop | |
| - liboliphaunt-native-ios | |
| - liboliphaunt-native-ios-abi | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Download liboliphaunt target release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-native-release-assets-* | |
| path: target/liboliphaunt/release-assets | |
| merge-multiple: true | |
| - name: Remove raw mobile runtime-resource closures | |
| run: | | |
| set -- | |
| while IFS= read -r archive; do | |
| [ -n "$archive" ] && set -- "$@" "$archive" | |
| done < <(find target/liboliphaunt/release-assets -maxdepth 1 -type f \ | |
| \( -name 'liboliphaunt-*-runtime-resources-android-datum64.tar.gz' \ | |
| -o -name 'liboliphaunt-*-runtime-resources-ios-datum64.tar.gz' \) \ | |
| | LC_ALL=C sort) | |
| if [ "$#" -ne 2 ]; then | |
| echo "Expected exactly two raw mobile runtime-resource closures; found $#" >&2 | |
| exit 1 | |
| fi | |
| rm -- "$@" | |
| - name: Download ABI-compatible Android runtime-resource assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-android-datum64 | |
| path: target/liboliphaunt/release-assets | |
| - name: Download ABI-compatible iOS runtime-resource assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-ios-datum64 | |
| path: target/liboliphaunt/release-assets | |
| - name: Package aggregate liboliphaunt release assets | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-native:package-runtime-desktop-target", "liboliphaunt-native:package-runtime-android-arm64-v8a", "liboliphaunt-native:package-runtime-android-x86_64", "liboliphaunt-native:package-runtime-ios-xcframework", "liboliphaunt-native:finalize-runtime-android-abi", "liboliphaunt-native:finalize-runtime-ios-abi"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh liboliphaunt-native-release-assets | |
| - name: Upload aggregate liboliphaunt release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-native-release-assets | |
| path: target/liboliphaunt/release-assets | |
| if-no-files-found: error | |
| rust-sdk-package: | |
| name: Builds / Rust SDK Package | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'rust-sdk-package') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| components: clippy,llvm-tools-preview | |
| tools: cargo-nextest@0.9.137,cargo-llvm-cov@0.8.7 | |
| - name: Build Rust SDK package artifacts | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh rust-sdk-package | |
| - name: Upload Rust SDK package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-rust-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-rust | |
| if-no-files-found: error | |
| - name: Build native extension lifecycle proof runner | |
| run: cargo build --offline --locked --release -p oliphaunt-native-extension-proof | |
| - name: Stage native extension lifecycle proof runner | |
| run: | | |
| install -D -m 0755 \ | |
| target/release/oliphaunt-native-extension-proof \ | |
| target/native-extension-proof/oliphaunt-native-extension-proof | |
| - name: Upload native extension lifecycle proof runner | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-native-extension-proof-linux-x64-gnu | |
| path: | | |
| target/native-extension-proof/oliphaunt-native-extension-proof | |
| target/native-extension-proof/oliphaunt-rust-release-consumer | |
| if-no-files-found: error | |
| broker-runtime: | |
| name: Builds / Broker Runtime (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'broker-runtime') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.broker_runtime_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up MSVC | |
| if: ${{ runner.os == 'Windows' }} | |
| uses: ./.github/actions/setup-msvc | |
| - name: Build broker runtime release asset | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh broker-runtime | |
| - name: Upload broker release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-broker-release-assets-${{ matrix.target }} | |
| path: target/oliphaunt-broker/release-assets | |
| if-no-files-found: error | |
| node-direct: | |
| name: Builds / Node.js Direct (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'node-direct') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.node_direct_runtime_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up MSVC | |
| if: ${{ runner.os == 'Windows' }} | |
| uses: ./.github/actions/setup-msvc | |
| - name: Build Node direct release asset | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh node-direct | |
| - name: Upload Node direct release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-node-direct-release-assets-${{ matrix.target }} | |
| path: target/oliphaunt-node-direct/release-assets | |
| if-no-files-found: error | |
| - name: Upload Node direct optional npm package | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-node-direct-npm-package-${{ matrix.target }} | |
| path: target/oliphaunt-node-direct/npm-packages/*.tgz | |
| if-no-files-found: error | |
| broker-release-assets: | |
| name: Builds / Broker Release Assets | |
| needs: | |
| - affected | |
| - broker-runtime | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.broker-runtime.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'broker-release-assets') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download broker target release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: oliphaunt-broker-release-assets-* | |
| path: target/oliphaunt-broker/release-assets | |
| merge-multiple: true | |
| - name: Verify aggregate broker release assets | |
| id: verify_aggregate_broker_release_assets | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["release-tools:broker-runtime"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh broker-release-assets | |
| node-direct-release-assets: | |
| name: Builds / Node.js Direct Release Assets | |
| needs: | |
| - affected | |
| - node-direct | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.node-direct.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'node-direct-release-assets') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download Node direct target release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: oliphaunt-node-direct-release-assets-* | |
| path: target/oliphaunt-node-direct/release-assets | |
| merge-multiple: true | |
| - name: Download Node direct optional npm packages | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: oliphaunt-node-direct-npm-package-* | |
| path: target/oliphaunt-node-direct/npm-packages | |
| merge-multiple: true | |
| - name: Verify aggregate Node direct release assets | |
| id: verify_aggregate_node_direct_release_assets | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["release-tools:node-direct-runtime"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh node-direct-release-assets | |
| wasix-napi: | |
| name: Builds / WASIX Node-API (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| - extension-artifacts-wasix | |
| - liboliphaunt-wasix-aot | |
| - liboliphaunt-wasix-runtime | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-wasix.result == 'success' && needs.liboliphaunt-wasix-aot.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-napi') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.wasix_napi_runtime_matrix) }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 180 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up MSVC | |
| if: ${{ runner.os == 'Windows' }} | |
| uses: ./.github/actions/setup-msvc | |
| - name: Download same-run portable WASIX outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: . | |
| - name: Download same-run WASIX exact-extension outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-wasix-extension-artifacts-* | |
| path: target/extensions/wasix/release-assets | |
| merge-multiple: true | |
| - name: Download same-run target extension AOT outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-extension-aot-${{ matrix.target }} | |
| path: target/extensions/wasix/aot-artifacts | |
| - name: Download same-run target core and tool AOT outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-aot-${{ matrix.target }} | |
| path: target/oliphaunt-wasix/napi-aot-download | |
| - name: Restore exact target core and tool AOT layout | |
| shell: bash | |
| env: | |
| EXPECTED_TARGET_TRIPLE: ${{ matrix.target_triple }} | |
| run: | | |
| artifact_dir=target/oliphaunt-wasix/napi-aot-download | |
| marker="$artifact_dir/target-triple.txt" | |
| raw_target_dir="$artifact_dir/files" | |
| if [[ ! -f "$marker" || ! -d "$raw_target_dir" ]]; then | |
| echo "invalid WASIX N-API AOT artifact envelope in $artifact_dir" >&2 | |
| exit 1 | |
| fi | |
| target="$(tr -d '\r\n' < "$marker")" | |
| if [[ "$target" != "${EXPECTED_TARGET_TRIPLE:?EXPECTED_TARGET_TRIPLE is required}" ]]; then | |
| echo "WASIX N-API AOT artifact targets $target, expected $EXPECTED_TARGET_TRIPLE" >&2 | |
| exit 1 | |
| fi | |
| destination="target/oliphaunt-wasix/aot/$target" | |
| mkdir -p "$destination" | |
| cp -R "$raw_target_dir/." "$destination/" | |
| - name: Build WASIX Node-API release assets | |
| shell: bash | |
| env: | |
| OLIPHAUNT_ARTIFACT_CRATE_REQUIRE_PAYLOAD: "1" | |
| OLIPHAUNT_WASM_GENERATED_AOT_DIR: ${{ github.workspace }}/target/oliphaunt-wasix/aot | |
| OLIPHAUNT_WASIX_EXTENSION_ARTIFACT_ROOT: ${{ github.workspace }}/target/extension-artifacts | |
| OLIPHAUNT_WASIX_GENERATED_ASSETS_DIR: ${{ github.workspace }}/target/oliphaunt-wasix/assets | |
| OLIPHAUNT_WASIX_NAPI_ARTIFACT_SOURCE_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["extension-artifacts-wasix:build-target", "liboliphaunt-wasix:runtime-aot"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh wasix-napi | |
| - name: Upload WASIX Node-API release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-wasix-napi-release-assets-${{ matrix.target }} | |
| path: target/oliphaunt-wasix-napi/release-assets | |
| if-no-files-found: error | |
| - name: Upload WASIX Node-API optional npm package | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-wasix-napi-npm-package-${{ matrix.target }} | |
| path: target/oliphaunt-wasix-napi/npm-packages/*.tgz | |
| if-no-files-found: error | |
| wasix-napi-release-assets: | |
| name: Builds / WASIX Node-API Release Assets | |
| needs: | |
| - affected | |
| - wasix-napi | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.wasix-napi.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-napi-release-assets') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download WASIX Node-API target release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: oliphaunt-wasix-napi-release-assets-* | |
| path: target/oliphaunt-wasix-napi/release-assets | |
| merge-multiple: true | |
| - name: Download WASIX Node-API optional npm packages | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: oliphaunt-wasix-napi-npm-package-* | |
| path: target/oliphaunt-wasix-napi/npm-packages | |
| merge-multiple: true | |
| - name: Verify aggregate WASIX Node-API release assets | |
| id: verify_aggregate_wasix_napi_release_assets | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["release-tools:wasix-napi-runtime"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh wasix-napi-release-assets | |
| swift-sdk-package: | |
| name: Builds / Swift SDK Package | |
| needs: | |
| - affected | |
| - liboliphaunt-native-ios-abi | |
| - mobile-extension-packages | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') }} | |
| runs-on: macos-26 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Apple | |
| uses: ./.github/actions/setup-apple | |
| - name: Download Apple liboliphaunt release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-ios-datum64 | |
| path: target/liboliphaunt/abi-compatible-release-assets/ios-datum64 | |
| - name: Download mobile extension package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-mobile-extension-package-artifacts | |
| path: target/mobile-extension-artifacts | |
| - name: Build Swift SDK package artifacts | |
| env: | |
| OLIPHAUNT_SWIFT_RELEASE_ASSET_DIR: ${{ github.workspace }}/target/liboliphaunt/abi-compatible-release-assets/ios-datum64 | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-native:finalize-runtime-ios-abi", "extension-packages:package-mobile"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh swift-sdk-package | |
| - name: Upload Swift SDK package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-swift-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-swift | |
| if-no-files-found: error | |
| kotlin-sdk-package: | |
| name: Builds / Kotlin SDK Package | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'kotlin-sdk-package') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Android | |
| uses: ./.github/actions/setup-android | |
| with: | |
| gradle-cache-save-if: ${{ env.HEAVY_CACHE_SAVE_IF }} | |
| - name: Build Kotlin SDK package artifacts | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh kotlin-sdk-package | |
| - name: Upload Kotlin SDK package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-kotlin-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-kotlin | |
| if-no-files-found: error | |
| kotlin-maven-staging: | |
| name: Builds / Kotlin SDK Maven Staging | |
| needs: | |
| - affected | |
| - kotlin-sdk-package | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.kotlin-sdk-package.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'kotlin-maven-staging') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download exact same-run Kotlin SDK package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-kotlin-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-kotlin | |
| - name: Validate exact Kotlin Maven Central staging closure | |
| id: kotlin_maven_staging | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["release-tools:kotlin-sdk-package"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh kotlin-maven-staging | |
| react-native-sdk-package: | |
| name: Builds / React Native SDK Package | |
| needs: | |
| - affected | |
| - liboliphaunt-native-ios-abi | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'react-native-sdk-package') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "true" | |
| - name: Download Apple liboliphaunt release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-ios-datum64 | |
| path: target/liboliphaunt/abi-compatible-release-assets/ios-datum64 | |
| - name: Build React Native SDK package artifacts | |
| env: | |
| OLIPHAUNT_REACT_NATIVE_IOS_RELEASE_ASSET_DIR: ${{ github.workspace }}/target/liboliphaunt/abi-compatible-release-assets/ios-datum64 | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-native:finalize-runtime-ios-abi"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh react-native-sdk-package | |
| - name: Upload React Native SDK package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-react-native-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-react-native | |
| if-no-files-found: error | |
| js-sdk-package: | |
| name: Builds / JavaScript SDK Package | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'js-sdk-package') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "true" | |
| - name: Set up Deno | |
| uses: ./.github/actions/setup-deno | |
| with: | |
| deno-version: ${{ env.DENO_VERSION }} | |
| - name: Build TypeScript SDK package artifacts | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh js-sdk-package | |
| - name: Upload JS SDK package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-js-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-js | |
| if-no-files-found: error | |
| wasix-ts-sdk-package: | |
| name: Builds / WASIX TypeScript SDK | |
| needs: | |
| - affected | |
| - liboliphaunt-wasix-runtime | |
| - wasix-napi | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && needs.wasix-napi.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-ts-sdk-package') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "true" | |
| - name: Set up Rust and wasm-pack | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| tools: wasm-pack@0.15.0 | |
| - name: Set up Deno | |
| uses: ./.github/actions/setup-deno | |
| with: | |
| deno-version: ${{ env.DENO_VERSION }} | |
| - name: Download same-run portable WASIX outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: . | |
| - name: Download same-run Linux x64 WASIX Node-API carrier | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-wasix-napi-npm-package-linux-x64-gnu | |
| path: target/oliphaunt-wasix-napi/npm-packages | |
| - name: Build, test, and package the WASIX TypeScript SDK | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable", "release-tools:wasix-napi-runtime"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh wasix-ts-sdk-package | |
| - name: Upload WASIX TypeScript SDK package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-wasix-ts-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-wasix-ts | |
| if-no-files-found: error | |
| wasix-rust-package: | |
| name: Builds / WASIX Rust Binding Package | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'wasix-rust-package') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "true" | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| components: llvm-tools-preview | |
| tools: cargo-nextest@0.9.137,cargo-llvm-cov@0.8.7 | |
| - name: Install Tauri Linux dependencies | |
| run: | | |
| .github/scripts/prepare-linux-apt.sh | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| libayatana-appindicator3-dev \ | |
| libglib2.0-dev \ | |
| libgtk-3-dev \ | |
| librsvg2-dev \ | |
| libssl-dev \ | |
| libwebkit2gtk-4.1-dev \ | |
| libxdo-dev \ | |
| pkg-config | |
| - name: Build Rust WASIX binding package artifacts | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh wasix-rust-package | |
| - name: Upload Rust WASIX binding package artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-wasix-rust-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-wasix-rust | |
| if-no-files-found: error | |
| liboliphaunt-wasix-runtime: | |
| name: Builds / liboliphaunt WASIX Runtime | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-runtime') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 360 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| cache-save-if: ${{ env.HEAVY_CACHE_SAVE_IF }} | |
| - name: Verify source-controlled asset inputs | |
| run: cargo run -p xtask -- assets verify-committed | |
| - name: Restore WASIX compilation cache | |
| id: wasix-build-cache | |
| uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 | |
| with: | |
| path: | | |
| target/liboliphaunt-pg18/source | |
| target/oliphaunt-wasix/wasix-build/source-cache | |
| target/oliphaunt-wasix/wasix-build/work/docker-oliphaunt | |
| target/oliphaunt-wasix/wasix-build/work/icu-native | |
| target/oliphaunt-wasix/wasix-build/work/icu-wasix | |
| target/oliphaunt-wasix/wasix-build/work/icu-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/json-c-wasix | |
| target/oliphaunt-wasix/wasix-build/work/json-c-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/libiconv-wasix | |
| target/oliphaunt-wasix/wasix-build/work/libiconv-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/libxml2-wasix | |
| target/oliphaunt-wasix/wasix-build/work/libxml2-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/openssl-wasix | |
| target/oliphaunt-wasix/wasix-build/work/openssl-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/proj-wasix | |
| target/oliphaunt-wasix/wasix-build/work/proj-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/sqlite-wasix | |
| target/oliphaunt-wasix/wasix-build/work/sqlite-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/geos-wasix | |
| target/oliphaunt-wasix/wasix-build/work/geos-wasix-build | |
| target/oliphaunt-wasix/wasix-build/build | |
| key: wasix-build-${{ runner.os }}-${{ env.ASSET_PROFILE }}-${{ env.WASMER_LLVM_VERSION }}-${{ env.WASMER_LLVM_LINUX_X64_BYTES }}-${{ env.WASMER_LLVM_LINUX_X64_SHA256 }}-${{ github.event.pull_request.head.sha || github.sha }} | |
| restore-keys: | | |
| wasix-build-${{ runner.os }}-${{ env.ASSET_PROFILE }}-${{ env.WASMER_LLVM_VERSION }}-${{ env.WASMER_LLVM_LINUX_X64_BYTES }}-${{ env.WASMER_LLVM_LINUX_X64_SHA256 }}-${{ github.event.pull_request.base.sha || github.event.before || github.sha }} | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd | |
| - name: Build WASIX builder image and save cache | |
| if: ${{ env.HEAVY_CACHE_SAVE_IF == 'true' }} | |
| uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f | |
| with: | |
| context: src/runtimes/liboliphaunt/wasix/assets/build/docker | |
| file: src/runtimes/liboliphaunt/wasix/assets/build/docker/Dockerfile | |
| tags: oliphaunt-wasix-wasix-build:ci | |
| load: true | |
| cache-from: type=gha,scope=wasix-builder | |
| cache-to: type=gha,mode=max,scope=wasix-builder,ignore-error=true | |
| - name: Build WASIX builder image | |
| if: ${{ env.HEAVY_CACHE_SAVE_IF != 'true' }} | |
| uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f | |
| with: | |
| context: src/runtimes/liboliphaunt/wasix/assets/build/docker | |
| file: src/runtimes/liboliphaunt/wasix/assets/build/docker/Dockerfile | |
| tags: oliphaunt-wasix-wasix-build:ci | |
| load: true | |
| cache-from: type=gha,scope=wasix-builder | |
| - name: Install Wasmer LLVM 22.1 for WASIX cluster-seed generation | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ env.WASMER_LLVM_LINUX_X64_URL }} | |
| sha256: ${{ env.WASMER_LLVM_LINUX_X64_SHA256 }} | |
| bytes: ${{ env.WASMER_LLVM_LINUX_X64_BYTES }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| cache-save-if: ${{ env.HEAVY_CACHE_SAVE_IF }} | |
| - name: Build and validate portable WASIX runtime | |
| env: | |
| IMAGE: oliphaunt-wasix-wasix-build:ci | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh liboliphaunt-wasix-runtime | |
| - name: Save WASIX compilation cache | |
| id: save_wasix_build_cache | |
| if: ${{ env.HEAVY_CACHE_SAVE_IF == 'true' && steps.wasix-build-cache.outputs.cache-hit != 'true' }} | |
| continue-on-error: true | |
| uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 | |
| with: | |
| path: | | |
| target/liboliphaunt-pg18/source | |
| target/oliphaunt-wasix/wasix-build/source-cache | |
| target/oliphaunt-wasix/wasix-build/work/docker-oliphaunt | |
| target/oliphaunt-wasix/wasix-build/work/icu-native | |
| target/oliphaunt-wasix/wasix-build/work/icu-wasix | |
| target/oliphaunt-wasix/wasix-build/work/icu-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/json-c-wasix | |
| target/oliphaunt-wasix/wasix-build/work/json-c-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/libiconv-wasix | |
| target/oliphaunt-wasix/wasix-build/work/libiconv-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/libxml2-wasix | |
| target/oliphaunt-wasix/wasix-build/work/libxml2-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/openssl-wasix | |
| target/oliphaunt-wasix/wasix-build/work/openssl-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/proj-wasix | |
| target/oliphaunt-wasix/wasix-build/work/proj-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/sqlite-wasix | |
| target/oliphaunt-wasix/wasix-build/work/sqlite-wasix-build | |
| target/oliphaunt-wasix/wasix-build/work/geos-wasix | |
| target/oliphaunt-wasix/wasix-build/work/geos-wasix-build | |
| target/oliphaunt-wasix/wasix-build/build | |
| key: wasix-build-${{ runner.os }}-${{ env.ASSET_PROFILE }}-${{ env.WASMER_LLVM_VERSION }}-${{ env.WASMER_LLVM_LINUX_X64_BYTES }}-${{ env.WASMER_LLVM_LINUX_X64_SHA256 }}-${{ github.event.pull_request.head.sha || github.sha }} | |
| - name: Upload portable WASIX build outputs | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: | | |
| target/oliphaunt-wasix/wasix-build/build/** | |
| target/oliphaunt-wasix/wasix-build/work/icu-wasix/share/icu/** | |
| target/oliphaunt-wasix/assets/** | |
| src/extensions/generated/** | |
| src/runtimes/liboliphaunt/wasix/assets/generated/** | |
| if-no-files-found: error | |
| liboliphaunt-wasix-aot: | |
| name: Builds / liboliphaunt WASIX AOT (${{ matrix.target_id }}) | |
| needs: | |
| - affected | |
| - liboliphaunt-wasix-runtime | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-aot') }} | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 180 | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_wasix_aot_runtime_matrix || '{"include":[]}') }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Set up MSVC | |
| if: ${{ runner.os == 'Windows' }} | |
| uses: ./.github/actions/setup-msvc | |
| - name: Download portable WASIX build outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: . | |
| - name: Install Wasmer LLVM 22.1 for AOT generation | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ matrix.llvm_url }} | |
| sha256: ${{ matrix.llvm_sha256 }} | |
| bytes: ${{ matrix.llvm_bytes }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| - name: Build, validate, and smoke target AOT artifacts | |
| env: | |
| AOT_TARGET: ${{ matrix.target }} | |
| AOT_PACKAGE: ${{ matrix.package }} | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh liboliphaunt-wasix-aot | |
| - name: Stage target AOT artifact envelope | |
| env: | |
| AOT_TARGET: ${{ matrix.target }} | |
| run: | | |
| target="${AOT_TARGET:?AOT_TARGET is required}" | |
| source="target/oliphaunt-wasix/aot/$target" | |
| if [ ! -d "$source" ]; then | |
| echo "missing AOT output directory: $source" >&2 | |
| exit 1 | |
| fi | |
| upload="target/oliphaunt-wasix/aot-upload" | |
| rm -rf "$upload" | |
| mkdir -p "$upload/files" | |
| cp -R "$source/." "$upload/files/" | |
| printf '%s\n' "$target" >"$upload/target-triple.txt" | |
| - name: Upload target artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-runtime-aot-${{ matrix.target_id }} | |
| path: | | |
| target/oliphaunt-wasix/aot-upload/** | |
| if-no-files-found: error | |
| - name: Upload target extension AOT artifacts | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-extension-aot-${{ matrix.target_id }} | |
| path: target/extensions/wasix/aot-artifacts | |
| if-no-files-found: error | |
| liboliphaunt-wasix-release-assets: | |
| name: Builds / liboliphaunt WASIX Release Assets | |
| needs: | |
| - affected | |
| - liboliphaunt-wasix-runtime | |
| - liboliphaunt-wasix-aot | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-release-assets') && (github.event_name != 'workflow_dispatch' || inputs.wasm_target == 'all') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Download portable WASIX runtime outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: . | |
| - name: Download WASIX AOT runtime outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-wasix-runtime-aot-* | |
| path: target/oliphaunt-wasix/aot-downloads | |
| - name: Restore WASIX AOT target layout | |
| run: | | |
| shopt -s nullglob | |
| for artifact_dir in target/oliphaunt-wasix/aot-downloads/liboliphaunt-wasix-runtime-aot-*; do | |
| marker="$artifact_dir/target-triple.txt" | |
| raw_target_dir="$artifact_dir/files" | |
| if [ ! -f "$marker" ] || [ ! -d "$raw_target_dir" ]; then | |
| echo "Invalid WASIX AOT artifact envelope in $artifact_dir" >&2 | |
| exit 1 | |
| fi | |
| target="$(tr -d '\r\n' < "$marker")" | |
| if [ -z "$target" ]; then | |
| echo "Empty WASIX AOT target marker in $marker" >&2 | |
| exit 1 | |
| fi | |
| destination="target/oliphaunt-wasix/aot/$target" | |
| mkdir -p "$destination" | |
| rsync -a "$raw_target_dir/" "$destination/" | |
| done | |
| - name: Package WASIX release assets | |
| env: | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable", "liboliphaunt-wasix:runtime-aot"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh liboliphaunt-wasix-release-assets | |
| - name: Upload WASIX release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-release-assets | |
| path: target/oliphaunt-wasix/release-assets | |
| if-no-files-found: error | |
| wasix-postmaster-portable: | |
| name: Builds / WASIX Postmaster / Portable + qualification | |
| needs: | |
| - affected | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'wasix-postmaster') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 240 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Install Wasmer LLVM 22.1 | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ env.WASMER_LLVM_LINUX_X64_URL }} | |
| sha256: ${{ env.WASMER_LLVM_LINUX_X64_SHA256 }} | |
| bytes: ${{ env.WASMER_LLVM_LINUX_X64_BYTES }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| cache-save-if: ${{ env.HEAVY_CACHE_SAVE_IF }} | |
| - name: Build and qualify portable WASIX postmaster inputs | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-moon-targets.sh --upstream deep liboliphaunt-wasix-postmaster:portable-inputs liboliphaunt-wasix-postmaster:runtime-patch-tests liboliphaunt-wasix-postmaster:regression | |
| - name: Upload portable WASIX postmaster build inputs | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-postmaster-portable-build-inputs | |
| path: target/oliphaunt-wasix-postmaster/portable-inputs/wasix-postmaster-portable-build-inputs.tar.gz | |
| if-no-files-found: error | |
| wasix-postmaster-target: | |
| name: Builds / WASIX Postmaster / ${{ matrix.target_id }} + qualification | |
| needs: | |
| - affected | |
| - wasix-postmaster-portable | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.wasix-postmaster-portable.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-postmaster') }} | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 360 | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.liboliphaunt_wasix_postmaster_runtime_matrix || '{"include":[]}') }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Install portable shell utilities | |
| if: ${{ runner.os == 'macOS' }} | |
| run: | | |
| brew install bash coreutils findutils util-linux | |
| { | |
| echo "$(brew --prefix bash)/bin" | |
| echo "$(brew --prefix coreutils)/libexec/gnubin" | |
| echo "$(brew --prefix findutils)/libexec/gnubin" | |
| echo "$(brew --prefix util-linux)/bin" | |
| } >> "$GITHUB_PATH" | |
| - name: Install Wasmer LLVM 22.1 | |
| uses: ./.github/actions/setup-wasmer-llvm | |
| with: | |
| url: ${{ matrix.llvm_url }} | |
| sha256: ${{ matrix.llvm_sha256 }} | |
| bytes: ${{ matrix.llvm_bytes }} | |
| version: ${{ env.WASMER_LLVM_VERSION }} | |
| - name: Download portable WASIX postmaster build inputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-postmaster-portable-build-inputs | |
| path: target/oliphaunt-wasix-postmaster/portable-input-download | |
| - name: Restore portable WASIX postmaster build inputs | |
| run: | | |
| archive=target/oliphaunt-wasix-postmaster/portable-input-download/wasix-postmaster-portable-build-inputs.tar.gz | |
| test -f "$archive" | |
| tar -xzf "$archive" --strip-components=1 \ | |
| -C target/oliphaunt-wasix-postmaster | |
| - name: Build, qualify, and package target WASIX postmaster | |
| env: | |
| OLIPHAUNT_WASIX_POSTMASTER_PORTABLE_INPUTS: "1" | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-moon-targets.sh --upstream deep liboliphaunt-wasix-postmaster:release-assets liboliphaunt-wasix-postmaster:immediate-recovery liboliphaunt-wasix-postmaster:linear-memory-integration | |
| - name: Upload target WASIX postmaster release asset | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-postmaster-release-assets-${{ matrix.target_id }} | |
| path: ${{ matrix.release_asset_path }} | |
| if-no-files-found: error | |
| wasix-postmaster: | |
| name: Builds / WASIX Postmaster / Aggregate release assets | |
| needs: | |
| - affected | |
| - wasix-postmaster-target | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.wasix-postmaster-target.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'wasix-postmaster') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| - name: Download target WASIX postmaster release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-wasix-postmaster-release-assets-* | |
| path: target/oliphaunt-wasix-postmaster/release-assets | |
| merge-multiple: true | |
| - name: Merge target WASIX postmaster release assets | |
| env: | |
| OLIPHAUNT_CI_JOB_TARGETS_JSON: '{"wasix-postmaster-aggregate":["release-tools:postmaster-release-assets"]}' | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix-postmaster:release-assets"]' | |
| run: .github/scripts/run-planned-moon-job.sh wasix-postmaster-aggregate | |
| - name: Upload complete WASIX postmaster release assets | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: liboliphaunt-wasix-postmaster-release-assets | |
| path: target/oliphaunt-wasix-postmaster/release-assets | |
| if-no-files-found: error | |
| native-extension-lifecycle: | |
| name: E2E / Native Extension Lifecycle / ${{ matrix.label }} | |
| needs: | |
| - affected | |
| - extension-artifacts-native | |
| - liboliphaunt-native-desktop | |
| - broker-runtime | |
| - rust-sdk-package | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-native.result == 'success' && needs.liboliphaunt-native-desktop.result == 'success' && needs.broker-runtime.result == 'success' && needs.rust-sdk-package.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'native-extension-lifecycle') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.native_extension_lifecycle_matrix) }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "false" | |
| - name: Set up Deno for packed native tools smoke | |
| if: ${{ matrix.shard == 0 }} | |
| uses: ./.github/actions/setup-deno | |
| with: | |
| deno-version: ${{ env.DENO_VERSION }} | |
| - name: Download same-run Linux native runtime | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-release-assets-linux-x64-gnu | |
| path: target/native-extension-lifecycle/input/runtime | |
| - name: Download same-run Linux exact-extension artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-extension-artifacts-linux-x64-gnu | |
| path: target/native-extension-lifecycle/input/extensions | |
| - name: Download same-run Linux broker | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-broker-release-assets-linux-x64-gnu | |
| path: target/native-extension-lifecycle/input/broker | |
| - name: Download same-run native lifecycle proof runner | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-native-extension-proof-linux-x64-gnu | |
| path: target/native-extension-lifecycle/input/proof-runner | |
| - name: Run packed Rust release consumer | |
| if: ${{ matrix.shard == 0 }} | |
| run: | | |
| chmod 0755 \ | |
| target/native-extension-lifecycle/input/proof-runner/oliphaunt-rust-release-consumer | |
| src/sdks/rust/tools/check-release-consumer.sh run \ | |
| target/native-extension-lifecycle/input/proof-runner/oliphaunt-rust-release-consumer \ | |
| target/native-extension-lifecycle/input/runtime | |
| - name: Run planned native extension lifecycle proof | |
| id: native_extension_lifecycle | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_NATIVE_EXTENSION_PROOF_SQL_NAMES: ${{ needs.affected.outputs.native_extension_lifecycle_sql_names_csv }} | |
| SHARD_INDEX: ${{ matrix.shard }} | |
| SHARD_COUNT: ${{ matrix.shard_count }} | |
| run: | | |
| mkdir -p target/native-extension-lifecycle/evidence | |
| tools/release/run-native-extension-lifecycle-proof.sh 2>&1 \ | |
| | tee "target/native-extension-lifecycle/evidence/job-shard-${SHARD_INDEX}.log" | |
| - name: Upload native extension lifecycle evidence | |
| id: native_extension_lifecycle_evidence | |
| if: ${{ always() && steps.native_extension_lifecycle.outcome != 'skipped' }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: native-extension-lifecycle-evidence-${{ matrix.shard }} | |
| path: target/native-extension-lifecycle/evidence | |
| if-no-files-found: error | |
| retention-days: 30 | |
| native-extension-lifecycle-aggregate: | |
| name: E2E / Native Extension Lifecycle Evidence | |
| needs: | |
| - affected | |
| - native-extension-lifecycle | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.native-extension-lifecycle.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'native-extension-lifecycle') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "false" | |
| - name: Download all same-run native lifecycle shard receipts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: native-extension-lifecycle-evidence-* | |
| path: target/native-extension-lifecycle/aggregate/input | |
| merge-multiple: false | |
| - name: Verify exact aggregate native extension lifecycle proof | |
| id: native_extension_lifecycle_aggregate | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_NATIVE_EXTENSION_PROOF_SQL_NAMES: ${{ needs.affected.outputs.native_extension_lifecycle_sql_names_csv }} | |
| OLIPHAUNT_NATIVE_EXTENSION_PROOF_SHARD_COUNT: ${{ needs.affected.outputs.native_extension_lifecycle_shard_count }} | |
| run: | | |
| actual_sha="$(git rev-parse HEAD)" | |
| if [[ "$actual_sha" != "$CI_HEAD_SHA" ]]; then | |
| echo "native lifecycle aggregate candidate mismatch: expected $CI_HEAD_SHA, got $actual_sha" >&2 | |
| exit 1 | |
| fi | |
| candidate_tree="$(git rev-parse 'HEAD^{tree}')" | |
| mkdir -p target/native-extension-lifecycle/aggregate/output | |
| tools/dev/bun.sh tools/release/verify-native-extension-lifecycle-receipts.mjs \ | |
| --receipts target/native-extension-lifecycle/aggregate/input \ | |
| --candidate-sha "$CI_HEAD_SHA" \ | |
| --candidate-tree "$candidate_tree" \ | |
| --expected-extensions-csv "$OLIPHAUNT_NATIVE_EXTENSION_PROOF_SQL_NAMES" \ | |
| --expected-shard-count "$OLIPHAUNT_NATIVE_EXTENSION_PROOF_SHARD_COUNT" \ | |
| --output target/native-extension-lifecycle/aggregate/output/aggregate-receipt.json | |
| - name: Upload aggregate native extension lifecycle evidence | |
| id: native_extension_lifecycle_aggregate_evidence | |
| if: ${{ always() && steps.native_extension_lifecycle_aggregate.outcome != 'skipped' }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: native-extension-lifecycle-evidence | |
| path: target/native-extension-lifecycle/aggregate | |
| if-no-files-found: error | |
| retention-days: 30 | |
| wasix-release-regression: | |
| name: E2E / WASIX Release Regression | |
| needs: | |
| - affected | |
| - extension-artifacts-wasix | |
| - liboliphaunt-wasix-runtime | |
| - liboliphaunt-wasix-aot | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-wasix.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && needs.liboliphaunt-wasix-aot.result == 'success' && needs.affected.outputs.wasix_release_regression_required == 'true' }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 240 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "false" | |
| - name: Warm pinned extension metadata formatter | |
| run: | | |
| for attempt in 1 2 3; do | |
| if printf 'export const oliphauntFormatterProbe={ready:true};\n' \ | |
| | pnpm --package=@biomejs/biome@2.4.16 dlx biome format \ | |
| --stdin-file-path src/extensions/generated/sdk/react-native.ts \ | |
| >/dev/null; then | |
| break | |
| fi | |
| if (( attempt == 3 )); then | |
| echo 'Pinned Biome formatter preflight failed after three attempts' >&2 | |
| exit 1 | |
| fi | |
| sleep $((attempt * 5)) | |
| done | |
| printf 'export const oliphauntFormatterProbe={offline:true};\n' \ | |
| | PNPM_CONFIG_OFFLINE=true \ | |
| pnpm --package=@biomejs/biome@2.4.16 dlx biome format \ | |
| --stdin-file-path src/extensions/generated/sdk/react-native.ts \ | |
| >/dev/null | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| with: | |
| components: rustfmt | |
| - name: Download same-run portable WASIX outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-portable | |
| path: . | |
| - name: Download same-run WASIX exact-extension outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| pattern: liboliphaunt-wasix-extension-artifacts-* | |
| path: target/extensions/wasix/release-assets | |
| merge-multiple: true | |
| - name: Download same-run Linux extension AOT outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-extension-aot-linux-x64-gnu | |
| path: target/extensions/wasix/aot-artifacts | |
| - name: Download same-run Linux host AOT outputs | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-runtime-aot-linux-x64-gnu | |
| path: target/oliphaunt-wasix/host-aot-download | |
| - name: Restore Linux host AOT target layout | |
| run: | | |
| artifact_dir=target/oliphaunt-wasix/host-aot-download | |
| marker="$artifact_dir/target-triple.txt" | |
| raw_target_dir="$artifact_dir/files" | |
| if [[ ! -f "$marker" || ! -d "$raw_target_dir" ]]; then | |
| echo "invalid Linux host AOT artifact envelope in $artifact_dir" >&2 | |
| exit 1 | |
| fi | |
| target="$(tr -d '\r\n' < "$marker")" | |
| if [[ "$target" != x86_64-unknown-linux-gnu ]]; then | |
| echo "Linux host AOT artifact targets $target, expected x86_64-unknown-linux-gnu" >&2 | |
| exit 1 | |
| fi | |
| destination="target/oliphaunt-wasix/aot/$target" | |
| mkdir -p "$destination" | |
| rsync -a "$raw_target_dir/" "$destination/" | |
| - name: Stage exact-extension WASIX evidence inputs | |
| run: tools/dev/bun.sh tools/release/build-extension-ci-artifacts.mjs --all --family wasix --require-wasix | |
| - name: Collect WASIX extension evidence | |
| id: regression | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_WASIX_EXTENSION_ARTIFACT_ROOT: ${{ github.workspace }}/target/extension-artifacts | |
| # The pinned Biome package was fetched and exercised above. Keep the | |
| # evidence mutation independent of a second registry lookup. | |
| PNPM_CONFIG_OFFLINE: "true" | |
| run: | | |
| actual_sha="$(git rev-parse HEAD)" | |
| if [[ "$actual_sha" != "$CI_HEAD_SHA" ]]; then | |
| echo "checked-out candidate $actual_sha does not match requested SHA $CI_HEAD_SHA" >&2 | |
| exit 1 | |
| fi | |
| run_id="$(date -u +%Y-%m-%dT%H%M%SZ)-ci-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${CI_HEAD_SHA}" | |
| run_path="src/extensions/evidence/runs/$run_id.json" | |
| echo "run_path=$run_path" >> "$GITHUB_OUTPUT" | |
| mkdir -p target/qualification/wasix-release-regression | |
| src/extensions/tools/collect-wasix-evidence.sh "$run_id" 2>&1 \ | |
| | tee target/qualification/wasix-release-regression/runtime-smoke.log | |
| - name: Upload WASIX extension evidence | |
| if: ${{ steps.regression.outcome == 'success' }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: wasix-release-regression-evidence | |
| path: | | |
| ${{ steps.regression.outputs.run_path }} | |
| src/extensions/generated/docs/extension-evidence.json | |
| target/qualification/wasix-release-regression/runtime-smoke.log | |
| if-no-files-found: error | |
| overwrite: true | |
| retention-days: 90 | |
| - name: Upload WASIX regression diagnostics | |
| if: ${{ always() && steps.regression.outcome != 'success' }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: wasix-release-regression-diagnostics | |
| path: target/qualification/wasix-release-regression/runtime-smoke.log | |
| if-no-files-found: ignore | |
| overwrite: true | |
| retention-days: 14 | |
| mobile-build-android: | |
| name: Builds / Android App (${{ matrix.target }}) | |
| needs: | |
| - affected | |
| - mobile-extension-packages | |
| - liboliphaunt-native-android | |
| - liboliphaunt-native-android-abi | |
| - kotlin-sdk-package | |
| - react-native-sdk-package | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.mobile-extension-packages.result == 'success' && needs.liboliphaunt-native-android.result == 'success' && needs.liboliphaunt-native-android-abi.result == 'success' && needs.kotlin-sdk-package.result == 'success' && needs.react-native-sdk-package.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-android') }} | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{ fromJson(needs.affected.outputs.react_native_android_mobile_app_matrix) }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 180 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "true" | |
| - name: Set up Android | |
| uses: ./.github/actions/setup-android | |
| with: | |
| native-ccache: "true" | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Reclaim Android mobile build disk | |
| run: bun .github/scripts/reclaim-android-mobile-build-disk.mjs | |
| - name: Download Android liboliphaunt target | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-target-${{ matrix.target }} | |
| path: . | |
| - name: Download ABI-compatible Android runtime-resource closure | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-android-datum64 | |
| path: target/liboliphaunt/android-runtime-assets | |
| - name: Extract ABI-compatible Android runtime-resource closure | |
| env: | |
| OLIPHAUNT_NATIVE_TARGET: ${{ matrix.target }} | |
| run: | | |
| set -- | |
| while IFS= read -r archive; do | |
| [ -n "$archive" ] && set -- "$@" "$archive" | |
| done < <(find target/liboliphaunt/android-runtime-assets -type f \ | |
| -name 'liboliphaunt-*-runtime-resources-android-datum64.tar.gz' | LC_ALL=C sort) | |
| if [ "$#" -ne 1 ]; then | |
| echo "Expected exactly one Android datum64 runtime-resource closure; found $#" >&2 | |
| exit 1 | |
| fi | |
| destination=target/liboliphaunt/runtime-closure/android | |
| mkdir -p "$destination" | |
| tar -xzf "$1" -C "$destination" | |
| set -- | |
| while IFS= read -r receipt; do | |
| [ -n "$receipt" ] && set -- "$@" "$receipt" | |
| done < <(find "$destination" -type f -path '*/oliphaunt/manifest.properties' | LC_ALL=C sort) | |
| if [ "$#" -ne 1 ]; then | |
| echo "Expected exactly one extracted Android runtime-carrier receipt; found $#" >&2 | |
| exit 1 | |
| fi | |
| closure="$(dirname "$1")" | |
| set -- | |
| while IFS= read -r archive; do | |
| [ -n "$archive" ] && set -- "$@" "$archive" | |
| done < <(find target/liboliphaunt/android-runtime-assets -type f -name 'liboliphaunt-*-icu-seed-android-datum64.tar.gz' | LC_ALL=C sort) | |
| [ "$#" -eq 1 ] || { echo "Expected one optional android-datum64 ICU seed" >&2; exit 1; } | |
| mkdir -p "$closure/cluster-seed-icu" | |
| tar -xzf "$1" -C "$closure/cluster-seed-icu" | |
| # JavaScript template interpolation belongs inside the single-quoted Bun program. | |
| # shellcheck disable=SC2016 | |
| tools/dev/bun.sh -e ' | |
| import { validateNativeRuntimeCarrier } from "./tools/release/native-runtime-carrier-contract.mjs"; | |
| const [root, icuData] = process.argv.slice(1); | |
| const { target } = validateNativeRuntimeCarrier(root, { icuData }); | |
| if (target !== "android-datum64") throw new Error(`expected android-datum64, got ${target}`); | |
| ' "$closure" "target/liboliphaunt-mobile-host/$OLIPHAUNT_NATIVE_TARGET/icu/share/icu" | |
| # Assemble the optional npm ICU package inputs from these same-run bytes. | |
| tools/release/package-liboliphaunt-icu-data.sh \ | |
| "target/liboliphaunt-mobile-host/$OLIPHAUNT_NATIVE_TARGET/icu/share/icu" \ | |
| target/liboliphaunt/release-assets | |
| cp "$1" target/liboliphaunt/release-assets/ | |
| echo "OLIPHAUNT_EXPO_ANDROID_SEED_CLOSURE_DIR=$GITHUB_WORKSPACE/$closure" >> "$GITHUB_ENV" | |
| - name: Download Kotlin SDK package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-kotlin-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-kotlin | |
| - name: Download React Native SDK package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-react-native-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-react-native | |
| - name: Download exact-extension package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-mobile-extension-package-artifacts | |
| path: target/extension-artifacts | |
| - name: Build Android mobile app | |
| env: | |
| OLIPHAUNT_EXPO_ALLOW_NATIVE_BUILDS: "0" | |
| OLIPHAUNT_EXPO_REQUIRE_SDK_ARTIFACTS: "1" | |
| OLIPHAUNT_EXPO_SDK_ARTIFACT_ROOT: ${{ github.workspace }}/target/sdk-artifacts | |
| OLIPHAUNT_EXPO_ANDROID_ABI: ${{ matrix.abi }} | |
| OLIPHAUNT_EXPO_ANDROID_BUILD_TYPE: release | |
| OLIPHAUNT_EXPO_ANDROID_EXTENSIONS: ${{ needs.affected.outputs.extension_package_sql_names_csv }} | |
| OLIPHAUNT_EXPO_ANDROID_ICU: "1" | |
| OLIPHAUNT_EXPO_ANDROID_ICU_DATA_DIR: ${{ github.workspace }}/target/liboliphaunt-mobile-host/${{ matrix.target }}/icu/share/icu | |
| OLIPHAUNT_EXPO_REQUIRE_PREBUILT_EXTENSIONS: "1" | |
| OLIPHAUNT_EXPO_EXTENSION_ARTIFACT_ROOT: ${{ github.workspace }}/target/extension-artifacts | |
| OLIPHAUNT_EXPO_ANDROID_OLIPHAUNT_SO: ${{ github.workspace }}/${{ matrix.build-root }}/out/liboliphaunt.so | |
| OLIPHAUNT_EXPO_ANDROID_RUNTIME_DIR: ${{ github.workspace }}/target/liboliphaunt-mobile-host/${{ matrix.target }}/install | |
| OLIPHAUNT_EXPO_ANDROID_INITDB: ${{ github.workspace }}/target/liboliphaunt-mobile-host/${{ matrix.target }}/install/bin/initdb | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["extension-packages:package-mobile", "liboliphaunt-native:package-runtime-android-x86_64", "release-tools:kotlin-sdk-package", "release-tools:react-native-sdk-package"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh mobile-build-android | |
| - name: Validate Android mobile app artifacts | |
| run: tools/dev/bun.sh tools/release/check-staged-artifacts.mjs --require-mobile android --require-mobile-prebuilt-extensions | |
| - name: Upload Android mobile build logs | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: react-native-mobile-android-build-logs-${{ matrix.target }} | |
| path: | | |
| target/mobile/react-native/android-build/logs | |
| target/oliphaunt-expo-android-*/logs | |
| if-no-files-found: ignore | |
| - name: Upload Android mobile app | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: react-native-mobile-android-app-${{ matrix.target }} | |
| path: target/mobile-build/react-native/android | |
| if-no-files-found: error | |
| mobile-build-ios: | |
| name: Builds / iOS App | |
| needs: | |
| - affected | |
| - mobile-extension-packages | |
| - liboliphaunt-native-ios | |
| - liboliphaunt-native-ios-abi | |
| - react-native-sdk-package | |
| - swift-sdk-package | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }} | |
| runs-on: macos-26 | |
| timeout-minutes: 180 | |
| env: | |
| OLIPHAUNT_EXTENSION_ARTIFACT_ROOT: ${{ github.workspace }}/target/mobile-extension-artifacts | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Moon | |
| uses: ./.github/actions/setup-moon | |
| with: | |
| install-workspace: "true" | |
| - name: Set up Apple | |
| uses: ./.github/actions/setup-apple | |
| - name: Set up Rust | |
| uses: ./.github/actions/setup-rust | |
| - name: Download iOS liboliphaunt target | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-target-ios-xcframework | |
| path: . | |
| - name: Download ABI-compatible iOS liboliphaunt release assets | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-abi-compatible-release-assets-ios-datum64 | |
| path: target/liboliphaunt/release-assets | |
| - name: Qualify standalone ICU CocoaPods carrier | |
| run: | | |
| set -- | |
| while IFS= read -r archive; do | |
| [ -n "$archive" ] && set -- "$@" "$archive" | |
| done < <(find target/liboliphaunt/release-assets -maxdepth 1 -type f \ | |
| -name 'liboliphaunt-*-icu-data.tar.gz' | LC_ALL=C sort) | |
| if [ "$#" -ne 1 ]; then | |
| echo "Expected exactly one ICU data release asset; found $#" >&2 | |
| exit 1 | |
| fi | |
| tools/release/check-icu-npm-cocoapods-consumer.sh "$1" | |
| icu_root=target/liboliphaunt/icu-data/ios | |
| mkdir -p "$icu_root" | |
| tar -xzf "$1" -C "$icu_root" share/icu | |
| echo "OLIPHAUNT_IOS_ICU_DATA_DIR=$GITHUB_WORKSPACE/$icu_root/share/icu" >> "$GITHUB_ENV" | |
| - name: Extract ABI-compatible iOS runtime-resource closure | |
| run: | | |
| set -- | |
| while IFS= read -r archive; do | |
| [ -n "$archive" ] && set -- "$@" "$archive" | |
| done < <(find target/liboliphaunt/release-assets -type f \ | |
| -name 'liboliphaunt-*-runtime-resources-ios-datum64.tar.gz' | LC_ALL=C sort) | |
| if [ "$#" -ne 1 ]; then | |
| echo "Expected exactly one iOS datum64 runtime-resource closure; found $#" >&2 | |
| exit 1 | |
| fi | |
| destination=target/liboliphaunt/runtime-closure/ios | |
| mkdir -p "$destination" | |
| tar -xzf "$1" -C "$destination" | |
| set -- | |
| while IFS= read -r receipt; do | |
| [ -n "$receipt" ] && set -- "$@" "$receipt" | |
| done < <(find "$destination" -type f -path '*/oliphaunt/manifest.properties' | LC_ALL=C sort) | |
| if [ "$#" -ne 1 ]; then | |
| echo "Expected exactly one extracted iOS runtime-carrier receipt; found $#" >&2 | |
| exit 1 | |
| fi | |
| closure="$(dirname "$1")" | |
| set -- | |
| while IFS= read -r archive; do | |
| [ -n "$archive" ] && set -- "$@" "$archive" | |
| done < <(find target/liboliphaunt/release-assets -type f -name 'liboliphaunt-*-icu-seed-ios-datum64.tar.gz' | LC_ALL=C sort) | |
| [ "$#" -eq 1 ] || { echo "Expected one optional ios-datum64 ICU seed" >&2; exit 1; } | |
| mkdir -p "$closure/cluster-seed-icu" | |
| tar -xzf "$1" -C "$closure/cluster-seed-icu" | |
| # JavaScript template interpolation belongs inside the single-quoted Bun program. | |
| # shellcheck disable=SC2016 | |
| tools/dev/bun.sh -e ' | |
| import { validateNativeRuntimeCarrier } from "./tools/release/native-runtime-carrier-contract.mjs"; | |
| const [root, icuData] = process.argv.slice(1); | |
| const { target } = validateNativeRuntimeCarrier(root, { icuData }); | |
| if (target !== "ios-datum64") throw new Error(`expected ios-datum64, got ${target}`); | |
| ' "$closure" "$OLIPHAUNT_IOS_ICU_DATA_DIR" | |
| echo "OLIPHAUNT_EXPO_IOS_SEED_CLOSURE_DIR=$GITHUB_WORKSPACE/$closure" >> "$GITHUB_ENV" | |
| - name: Download Swift SDK package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-swift-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-swift | |
| - name: Download React Native SDK package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-react-native-sdk-package-artifacts | |
| path: target/sdk-artifacts/oliphaunt-react-native | |
| - name: Download exact-extension package artifacts | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: oliphaunt-mobile-extension-package-artifacts | |
| path: target/mobile-extension-artifacts | |
| - name: Render exact-SHA cache-warm iOS carrier manifest | |
| run: | | |
| tools/dev/bun.sh tools/release/ios-carrier-manifest.mjs \ | |
| --base-asset-dir target/liboliphaunt/release-assets \ | |
| --extension-root target/mobile-extension-artifacts \ | |
| --output target/release/ios-carriers/oliphaunt-react-native-ios-carriers.json \ | |
| --local-urls | |
| - name: Qualify every exact iOS carrier | |
| env: | |
| IOS_CARRIER_MANIFEST: target/release/ios-carriers/oliphaunt-react-native-ios-carriers.json | |
| IOS_CARRIER_STAGE: target/qualification/react-native-ios-all-carriers | |
| IOS_CARRIER_CACHE: target/qualification/react-native-ios-carrier-cache | |
| PLANNED_EXTENSION_SQL_NAMES: ${{ needs.affected.outputs.extension_package_sql_names_csv }} | |
| run: | | |
| extensions="$(tools/dev/bun.sh -e ' | |
| const manifest = JSON.parse(await Bun.file(process.env.IOS_CARRIER_MANIFEST).text()); | |
| const planned = String(process.env.PLANNED_EXTENSION_SQL_NAMES ?? "") | |
| .split(",").filter(Boolean).sort(); | |
| if (planned.length === 0) { | |
| throw new Error("planner selected no exact iOS extension carriers"); | |
| } | |
| if (!Array.isArray(manifest.extensions) || manifest.extensions.length === 0) { | |
| throw new Error("exact iOS carrier manifest contains no extensions"); | |
| } | |
| const names = manifest.extensions.map((row) => row.sqlName).sort(); | |
| if (names.some((name) => typeof name !== "string") || new Set(names).size !== names.length) { | |
| throw new Error("exact iOS carrier manifest has invalid or duplicate extension identities"); | |
| } | |
| if (JSON.stringify(names) !== JSON.stringify(planned)) { | |
| throw new Error("exact iOS carrier manifest does not match the planner-selected extension set"); | |
| } | |
| process.stdout.write(names.join(",")); | |
| ')" | |
| node src/sdks/react-native/tools/stage-ios-app.mjs \ | |
| --carrier "$IOS_CARRIER_MANIFEST" \ | |
| --output-dir "$IOS_CARRIER_STAGE" \ | |
| --extensions "$extensions" \ | |
| --icu \ | |
| --cache-dir "$IOS_CARRIER_CACHE" \ | |
| --allow-file-urls | |
| tools/dev/bun.sh -e ' | |
| const manifest = JSON.parse(await Bun.file(process.env.IOS_CARRIER_MANIFEST).text()); | |
| const selection = JSON.parse(await Bun.file(process.env.IOS_CARRIER_STAGE + "/selection.json").text()); | |
| const expected = String(process.env.PLANNED_EXTENSION_SQL_NAMES ?? "") | |
| .split(",").filter(Boolean).sort(); | |
| const manifested = manifest.extensions.map((row) => row.sqlName).sort(); | |
| const requested = [...selection.requestedExtensions].sort(); | |
| const resolved = selection.extensions.map((row) => row.sqlName).sort(); | |
| if (JSON.stringify(manifested) !== JSON.stringify(expected) || !selection.icu || JSON.stringify(requested) !== JSON.stringify(expected) || JSON.stringify(resolved) !== JSON.stringify(expected)) { | |
| throw new Error("staged iOS carrier selection does not exactly cover every manifest extension plus ICU"); | |
| } | |
| ' | |
| mkdir -p target/release/ios-carriers/qualification | |
| cp "$IOS_CARRIER_STAGE/selection.json" \ | |
| target/release/ios-carriers/qualification/all-extensions-selection.json | |
| cp "$IOS_CARRIER_STAGE/resources/OliphauntReactNativeResources.bundle/oliphaunt/package-size.tsv" \ | |
| target/release/ios-carriers/qualification/all-extensions-package-size.tsv | |
| rm -rf "$IOS_CARRIER_STAGE" "$IOS_CARRIER_CACHE" | |
| - name: Run exact-extension Swift release consumer | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_SWIFT_NATIVE_ASSET_DIR: ${{ github.workspace }}/target/liboliphaunt/release-assets | |
| OLIPHAUNT_SWIFT_SDK_ARTIFACT_DIR: ${{ github.workspace }}/target/sdk-artifacts/oliphaunt-swift | |
| PLANNED_EXTENSION_PRODUCTS: ${{ needs.affected.outputs.extension_package_products_csv }} | |
| run: | | |
| source_carrier=target/sdk-artifacts/oliphaunt-swift/release-tree/src/sdks/swift/Carriers/oliphaunt-react-native-ios-carriers.json | |
| react_native_source_carrier=target/sdk-artifacts/oliphaunt-react-native/ios-carriers/oliphaunt-react-native-ios-carriers.json | |
| cache_warm_carrier=target/release/ios-carriers/oliphaunt-react-native-ios-carriers.json | |
| if ! cmp -s "$source_carrier" "$react_native_source_carrier"; then | |
| echo 'Swift and React Native package artifacts disagree on the selection-neutral source carrier.' >&2 | |
| diff -u "$source_carrier" "$react_native_source_carrier" || true | |
| exit 1 | |
| fi | |
| consumer_args=( | |
| --source-carrier "$source_carrier" | |
| --cache-warm-carrier "$cache_warm_carrier" | |
| ) | |
| evidence_dir=target/release/ios-carriers/qualification/swift-independent-carriers | |
| mkdir -p "$evidence_dir" | |
| cp "$source_carrier" "$evidence_dir/selection-neutral-source-carrier.json" | |
| cp "$react_native_source_carrier" "$evidence_dir/react-native-selection-neutral-source-carrier.json" | |
| product_count=0 | |
| while IFS= read -r product; do | |
| [[ -n "$product" ]] || continue | |
| if [[ ! "$product" =~ ^oliphaunt-extension-[A-Za-z0-9._-]+$ ]]; then | |
| echo "Planner returned an invalid exact-extension product id: $product" >&2 | |
| exit 1 | |
| fi | |
| product_root="$(tools/dev/bun.sh tools/release/release_graph_query.mjs \ | |
| extension-artifact-root --product "$product" --family native)" | |
| product_root="$OLIPHAUNT_EXTENSION_ARTIFACT_ROOT/${product_root#target/extension-artifacts/}" | |
| release_assets="$product_root/release-assets" | |
| product_carriers=() | |
| while IFS= read -r carrier; do | |
| product_carriers+=("$carrier") | |
| done < <(find "$release_assets" -maxdepth 1 -type f -name '*-swift-extension-carrier.json' | LC_ALL=C sort) | |
| if (( ${#product_carriers[@]} != 1 )); then | |
| echo "Planner-selected $product must provide exactly one independent Swift carrier; found ${#product_carriers[@]}" >&2 | |
| exit 1 | |
| fi | |
| consumer_args+=(--extension-carrier "${product_carriers[0]}") | |
| cp "${product_carriers[0]}" "$evidence_dir/$(basename "${product_carriers[0]}")" | |
| product_count=$((product_count + 1)) | |
| done < <(printf '%s' "$PLANNED_EXTENSION_PRODUCTS" | tr ',' '\n') | |
| if (( product_count == 0 )); then | |
| echo 'Exact-extension Swift release qualification resolved no independent extension carriers.' >&2 | |
| exit 1 | |
| fi | |
| printf '%s\n' "${consumer_args[@]}" > "$evidence_dir/consumer-arguments.txt" | |
| src/sdks/swift/tools/check-extension-release-consumer.sh "${consumer_args[@]}" | |
| - name: Build iOS mobile app | |
| env: | |
| OLIPHAUNT_EXPO_ALLOW_NATIVE_BUILDS: "0" | |
| OLIPHAUNT_EXPO_EXTENSION_ARTIFACT_ROOT: ${{ env.OLIPHAUNT_EXTENSION_ARTIFACT_ROOT }} | |
| OLIPHAUNT_EXPO_REQUIRE_SDK_ARTIFACTS: "1" | |
| OLIPHAUNT_EXPO_SDK_ARTIFACT_ROOT: ${{ github.workspace }}/target/sdk-artifacts | |
| OLIPHAUNT_EXPO_IOS_CONFIGURATION: Release | |
| OLIPHAUNT_EXPO_IOS_ICU: "1" | |
| OLIPHAUNT_EXPO_IOS_EXTENSIONS: ${{ needs.affected.outputs.extension_package_sql_names_csv }} | |
| OLIPHAUNT_EXPO_IOS_SDK: iphonesimulator | |
| OLIPHAUNT_EXPO_REQUIRE_PREBUILT_EXTENSIONS: "1" | |
| OLIPHAUNT_EXPO_IOS_OLIPHAUNT_XCFRAMEWORK: ${{ github.workspace }}/target/liboliphaunt-ios-xcframework/out/liboliphaunt.xcframework | |
| OLIPHAUNT_EXPO_IOS_RUNTIME_DIR: ${{ github.workspace }}/target/liboliphaunt-mobile-host/ios-xcframework/install | |
| OLIPHAUNT_EXPO_IOS_INITDB: ${{ github.workspace }}/target/liboliphaunt-mobile-host/ios-xcframework/install/bin/initdb | |
| OLIPHAUNT_REACT_NATIVE_IOS_BASE_CARRIER: ${{ github.workspace }}/target/release/ios-carriers/oliphaunt-react-native-ios-carriers.json | |
| OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["extension-packages:package-mobile", "liboliphaunt-native:package-runtime-ios-xcframework", "release-tools:react-native-sdk-package", "release-tools:swift-sdk-package"]' | |
| run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' .github/scripts/run-planned-moon-job.sh mobile-build-ios | |
| - name: Validate iOS mobile app artifacts | |
| run: tools/dev/bun.sh tools/release/check-staged-artifacts.mjs --require-mobile ios --require-mobile-prebuilt-extensions | |
| - name: Pack fidelity-preserving iOS app transport | |
| run: | | |
| node src/sdks/react-native/tools/ios-app-transport.mjs pack \ | |
| --app-dir target/mobile-build/react-native/ios \ | |
| --transport-dir target/mobile-build/react-native/ios-transport | |
| - name: Upload iOS mobile build logs | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: react-native-mobile-ios-build-logs | |
| path: | | |
| target/mobile/react-native/ios-build/logs | |
| target/mobile/react-native/ios-build/xcodebuild.log | |
| target/oliphaunt-expo-ios-*/logs | |
| target/oliphaunt-expo-ios-*/xcodebuild.log | |
| if-no-files-found: ignore | |
| - name: Upload iOS mobile app | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: react-native-mobile-ios-app | |
| path: target/mobile-build/react-native/ios-transport | |
| if-no-files-found: error | |
| - name: Upload exact-SHA iOS carrier evidence | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-react-native-ios-carriers | |
| path: target/release/ios-carriers | |
| if-no-files-found: error | |
| overwrite: true | |
| builds: | |
| name: Builds | |
| if: ${{ always() && (github.event_name != 'pull_request' || github.event.action != 'closed') }} | |
| needs: | |
| - affected | |
| - extension-artifacts-native | |
| - extension-artifacts-wasix | |
| - extension-packages | |
| - mobile-extension-packages | |
| - liboliphaunt-native-android | |
| - liboliphaunt-native-desktop | |
| - liboliphaunt-native-ios | |
| - liboliphaunt-native-release-assets | |
| - rust-sdk-package | |
| - broker-runtime | |
| - broker-release-assets | |
| - node-direct | |
| - node-direct-release-assets | |
| - wasix-napi | |
| - wasix-napi-release-assets | |
| - swift-sdk-package | |
| - kotlin-sdk-package | |
| - kotlin-maven-staging | |
| - react-native-sdk-package | |
| - js-sdk-package | |
| - wasix-ts-sdk-package | |
| - wasix-rust-package | |
| - liboliphaunt-wasix-runtime | |
| - liboliphaunt-wasix-aot | |
| - liboliphaunt-wasix-release-assets | |
| - wasix-postmaster | |
| - wasix-release-regression | |
| - mobile-build-android | |
| - mobile-build-ios | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Bun | |
| uses: ./.github/actions/setup-bun | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| - name: Download native ICU release asset for cross-family validation | |
| if: ${{ contains(fromJson(needs.affected.outputs.builder_jobs), 'liboliphaunt-native-release-assets') && contains(fromJson(needs.affected.outputs.builder_jobs), 'liboliphaunt-wasix-release-assets') }} | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-native-icu-data | |
| path: target/cross-family-icu/native | |
| - name: Download WASIX release assets for cross-family ICU validation | |
| if: ${{ contains(fromJson(needs.affected.outputs.builder_jobs), 'liboliphaunt-native-release-assets') && contains(fromJson(needs.affected.outputs.builder_jobs), 'liboliphaunt-wasix-release-assets') }} | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: liboliphaunt-wasix-release-assets | |
| path: target/cross-family-icu/wasix | |
| - name: Prove native and WASIX ICU data identity | |
| if: ${{ contains(fromJson(needs.affected.outputs.builder_jobs), 'liboliphaunt-native-release-assets') && contains(fromJson(needs.affected.outputs.builder_jobs), 'liboliphaunt-wasix-release-assets') }} | |
| run: | | |
| tools/dev/bun.sh tools/release/check-cross-family-icu-data.mjs \ | |
| target/cross-family-icu/native \ | |
| target/cross-family-icu/wasix | |
| - name: Check selected build jobs | |
| id: selected_builds_gate | |
| env: | |
| NEEDS_JSON: ${{ toJson(needs) }} | |
| SELECTED_JOBS_JSON: ${{ needs.affected.outputs.builder_jobs }} | |
| GATE_LABEL: selected build jobs | |
| run: bun .github/scripts/check-ci-gate.mjs selected | |
| - name: Check WASIX release regression | |
| id: wasix_regression_gate | |
| env: | |
| NEEDS_JSON: ${{ toJson(needs) }} | |
| SELECTED_JOBS_JSON: ${{ needs.affected.outputs.wasix_release_regression_required == 'true' && '["wasix-release-regression"]' || '[]' }} | |
| GATE_LABEL: WASIX release regression | |
| run: bun .github/scripts/check-ci-gate.mjs selected | |
| mobile-e2e-android: | |
| name: E2E / Android App | |
| needs: | |
| - affected | |
| - mobile-build-android | |
| if: ${{ always() && !cancelled() && needs.affected.result == 'success' && needs.mobile-build-android.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-android') }} | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Node | |
| id: setup_android_e2e_node | |
| uses: ./.github/actions/setup-node-runtime | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: Reclaim Android emulator disk | |
| id: reclaim_android_emulator_disk | |
| run: node .github/scripts/reclaim-android-mobile-build-disk.mjs | |
| - name: Set up Android | |
| id: setup_android_e2e | |
| uses: ./.github/actions/setup-android | |
| with: | |
| gradle-cache: "false" | |
| - name: Set up Maestro | |
| uses: ./.github/actions/setup-maestro | |
| - name: Download Android app artifact | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: react-native-mobile-android-app-android-x86_64 | |
| path: target/mobile-build/react-native/android | |
| - name: List Android app artifact | |
| run: find target/mobile-build/react-native/android -maxdepth 2 -type f -print | |
| - name: Start Android emulator | |
| id: start_android_emulator | |
| env: | |
| OLIPHAUNT_ANDROID_EMULATOR_API: "35" | |
| OLIPHAUNT_ANDROID_EMULATOR_DISK_HEADROOM_MB: "2048" | |
| OLIPHAUNT_ANDROID_EMULATOR_PARTITION_SIZE_MB: "6144" | |
| run: tools/dev/start-android-emulator-ci.sh | |
| - name: Run Android installed-app E2E | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_EXPO_ANDROID_BUILD_ARTIFACT_DIR: ${{ github.workspace }}/target/mobile-build/react-native/android | |
| OLIPHAUNT_EXPO_ANDROID_BUILD_TYPE: release | |
| OLIPHAUNT_EXPO_ANDROID_LIFECYCLE_SMOKE: "0" | |
| OLIPHAUNT_MOBILE_E2E_ASSERTION_RUNNER: maestro | |
| run: bash src/sdks/react-native/tools/mobile-e2e.sh android | |
| - name: Upload Android E2E reports | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: react-native-mobile-android-e2e-reports | |
| path: | | |
| target/mobile/react-native/android-e2e/reports | |
| target/mobile/react-native/android-e2e/logs | |
| ${{ runner.temp }}/oliphaunt-android-emulator.log | |
| if-no-files-found: ignore | |
| mobile-e2e-ios: | |
| name: E2E / iOS App | |
| needs: | |
| - affected | |
| - mobile-build-ios | |
| if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }} | |
| runs-on: macos-26 | |
| timeout-minutes: 45 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Node and pnpm | |
| uses: ./.github/actions/setup-node-pnpm | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| pnpm-version: ${{ env.PNPM_VERSION }} | |
| - name: Set up Apple | |
| uses: ./.github/actions/setup-apple | |
| - name: Set up Maestro | |
| uses: ./.github/actions/setup-maestro | |
| - name: Download iOS app artifact | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: react-native-mobile-ios-app | |
| path: target/mobile-build/react-native/ios-transport | |
| - name: Verify and extract iOS app artifact | |
| id: ios_app_transport_verify | |
| run: | | |
| rm -rf target/mobile-build/react-native/ios | |
| node src/sdks/react-native/tools/ios-app-transport.mjs verify-extract \ | |
| --transport-dir target/mobile-build/react-native/ios-transport \ | |
| --output-dir target/mobile-build/react-native/ios | |
| - name: List iOS app artifact | |
| run: find target/mobile-build/react-native/ios -maxdepth 2 -print | |
| - name: Run iOS installed-app E2E | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| OLIPHAUNT_EXPO_IOS_BUILD_ARTIFACT_DIR: ${{ github.workspace }}/target/mobile-build/react-native/ios | |
| OLIPHAUNT_EXPO_IOS_CONFIGURATION: Release | |
| OLIPHAUNT_EXPO_IOS_SDK: iphonesimulator | |
| OLIPHAUNT_EXPO_IOS_LIFECYCLE_SMOKE: "0" | |
| OLIPHAUNT_MOBILE_E2E_ASSERTION_RUNNER: maestro | |
| MAESTRO_DRIVER_STARTUP_TIMEOUT: "300000" | |
| run: bash src/sdks/react-native/tools/mobile-e2e.sh ios | |
| - name: Upload iOS E2E reports | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: react-native-mobile-ios-e2e-reports | |
| path: | | |
| target/mobile/react-native/ios-e2e/reports | |
| target/mobile/react-native/ios-e2e/logs | |
| target/mobile/react-native/ios-e2e/*.log | |
| if-no-files-found: ignore | |
| e2e: | |
| name: E2E | |
| if: ${{ always() && (github.event_name != 'pull_request' || github.event.action != 'closed') }} | |
| needs: | |
| - affected | |
| - native-extension-lifecycle-aggregate | |
| - mobile-e2e-android | |
| - mobile-e2e-ios | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Bun | |
| uses: ./.github/actions/setup-bun | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| - name: Check final release execution qualification | |
| id: selected_e2e_gate | |
| env: | |
| NEEDS_JSON: ${{ toJson(needs) }} | |
| SELECTED_JOBS_JSON: ${{ needs.affected.outputs.e2e_jobs }} | |
| GATE_LABEL: final release execution qualification | |
| run: bun .github/scripts/check-ci-gate.mjs selected | |
| required: | |
| name: Required | |
| if: ${{ always() && (github.event_name != 'pull_request' || github.event.action != 'closed') }} | |
| needs: | |
| - affected | |
| - release-intent | |
| - checks | |
| - tests | |
| - builds | |
| - e2e | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Bun | |
| uses: ./.github/actions/setup-bun | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| - name: Check required jobs | |
| id: required_gate | |
| env: | |
| NEEDS_JSON: ${{ toJson(needs) }} | |
| REQUIRED_JOBS_JSON: '["affected","release-intent","checks","tests","builds","e2e"]' | |
| GATE_LABEL: required CI phases | |
| run: bun .github/scripts/check-ci-gate.mjs required | |
| qualified: | |
| name: Qualified | |
| if: ${{ always() && github.event_name == 'workflow_dispatch' }} | |
| needs: | |
| - affected | |
| - required | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 5 | |
| steps: | |
| - name: Require qualified CI success | |
| id: require_full_ci | |
| env: | |
| CI_EVENT_NAME: ${{ github.event_name }} | |
| CI_MOBILE_TARGET: ${{ inputs.mobile_target }} | |
| CI_NATIVE_TARGET: ${{ inputs.native_target }} | |
| CI_WASM_TARGET: ${{ inputs.wasm_target }} | |
| run: | | |
| if [[ '${{ needs.affected.result }}' != success || '${{ needs.required.result }}' != success ]]; then | |
| echo 'release qualification requires successful Plan and Required jobs' >&2 | |
| exit 1 | |
| fi | |
| if [[ "$CI_EVENT_NAME" == workflow_dispatch ]] && \ | |
| [[ "$CI_WASM_TARGET" != all || "$CI_NATIVE_TARGET" != all || "$CI_MOBILE_TARGET" != all ]]; then | |
| echo 'focused workflow_dispatch runs are diagnostic only and cannot qualify a release candidate' >&2 | |
| exit 1 | |
| fi | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| with: | |
| fetch-depth: 1 | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| persist-credentials: false | |
| - name: Set up Node.js | |
| uses: ./.github/actions/setup-node-runtime | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| - name: Download same-run affected plan | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: artifact-build-plan | |
| path: target/qualification/affected-plan | |
| - name: Download required same-run WASIX evidence | |
| if: ${{ needs.affected.outputs.wasix_release_regression_required == 'true' }} | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c | |
| with: | |
| name: wasix-release-regression-evidence | |
| path: target/qualification/wasix-release-regression-evidence | |
| - name: Write exact-SHA qualification record | |
| id: qualification_record | |
| env: | |
| CI_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} | |
| CI_QUALIFICATION_MODE: ${{ needs.affected.outputs.qualification_mode }} | |
| CI_PLAN_PATH: target/qualification/affected-plan/ci-plan.json | |
| WASIX_RELEASE_REGRESSION_REQUIRED: ${{ needs.affected.outputs.wasix_release_regression_required }} | |
| WASIX_EVIDENCE_ROOT: target/qualification/wasix-release-regression-evidence | |
| run: node .github/scripts/write-release-candidate.mjs | |
| - name: Upload exact-SHA qualification record | |
| id: qualification_evidence | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a | |
| with: | |
| name: oliphaunt-release-candidate | |
| path: target/qualification/oliphaunt-release-candidate.json | |
| if-no-files-found: error | |
| overwrite: true | |
| retention-days: 90 |