Skip to content

CI / PR 89

CI / PR 89 #870

Workflow file for this run

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 runtime target to run 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
permissions:
contents: read
concurrency:
group: ci-${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.number || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
NODE_VERSION: 22.22.3
PNPM_VERSION: 11.5.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
RUST_CACHE_SAVE_IF: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
MOON_BASE: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || '' }}
MOON_HEAD: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
defaults:
run:
shell: bash
jobs:
affected:
name: Plan
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
builder_jobs: ${{ steps.plan.outputs.builder_jobs }}
check_count: ${{ steps.target-matrices.outputs.check_count }}
check_matrix: ${{ steps.target-matrices.outputs.check_matrix }}
policy_count: ${{ steps.target-matrices.outputs.policy_count }}
policy_matrix: ${{ steps.target-matrices.outputs.policy_matrix }}
jobs: ${{ steps.plan.outputs.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 }}
liboliphaunt_wasix_aot_runtime_matrix: ${{ steps.plan.outputs.liboliphaunt_wasix_aot_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 }}
projects: ${{ steps.plan.outputs.projects }}
tasks: ${{ steps.plan.outputs.tasks }}
test_count: ${{ steps.target-matrices.outputs.test_count }}
test_matrix: ${{ steps.target-matrices.outputs.test_matrix }}
reason: ${{ steps.plan.outputs.reason }}
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 }}
MOON_HEAD: ${{ github.event.pull_request.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
run: bun .github/scripts/write-affected-moon-target-matrices.mjs check test
- 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: Validate commit and PR title
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
runs-on: ubuntu-latest
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 || '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 }}
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"
check-targets:
name: Checks / ${{ matrix.target }}
needs:
- affected
if: ${{ needs.affected.outputs.check_count != '0' }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.check_matrix) }}
runs-on: ubuntu-latest
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:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up Android
uses: ./.github/actions/setup-android
- name: Install pinned maintainer tools
run: tools/dev/bootstrap-tools.sh
- name: Run check target
env:
MOON_TARGET: ${{ matrix.target }}
MOON_UPSTREAM: ${{ matrix.upstream }}
run: .github/scripts/run-moon-targets.sh --upstream "$MOON_UPSTREAM" "$MOON_TARGET"
policy-targets:
name: Policy / ${{ matrix.target }}
needs:
- affected
if: ${{ needs.affected.outputs.policy_count != '0' }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.policy_matrix) }}
runs-on: ubuntu-latest
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:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up Android
uses: ./.github/actions/setup-android
- name: Install pinned maintainer tools
run: tools/dev/bootstrap-tools.sh
- name: Run policy target
env:
MOON_TARGET: ${{ matrix.target }}
MOON_UPSTREAM: ${{ matrix.upstream }}
run: .github/scripts/run-moon-targets.sh --upstream "$MOON_UPSTREAM" "$MOON_TARGET"
checks:
name: Checks
if: ${{ always() }}
needs:
- affected
- check-targets
- policy-targets
runs-on: ubuntu-latest
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
env:
NEEDS_JSON: ${{ toJson(needs) }}
REQUIRED_JOBS_JSON: '["check-targets","policy-targets"]'
GATE_LABEL: selected check and policy jobs
run: bun .github/scripts/check-ci-gate.mjs allow-skipped
test-targets:
name: Tests / ${{ matrix.target }}
needs:
- affected
if: ${{ needs.affected.outputs.test_count != '0' }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.test_matrix) }}
runs-on: ubuntu-latest
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:
tools: cargo-nextest@0.9.137,cargo-llvm-cov@0.8.7
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up Android
uses: ./.github/actions/setup-android
- name: Run test target
env:
MOON_TARGET: ${{ matrix.target }}
MOON_UPSTREAM: ${{ matrix.upstream }}
run: .github/scripts/run-moon-targets.sh --upstream "$MOON_UPSTREAM" "$MOON_TARGET"
tests:
name: Tests
if: ${{ always() }}
needs:
- affected
- test-targets
runs-on: ubuntu-latest
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
env:
NEEDS_JSON: ${{ toJson(needs) }}
REQUIRED_JOBS_JSON: '["test-targets"]'
GATE_LABEL: selected test jobs
run: bun .github/scripts/check-ci-gate.mjs allow-skipped
extension-artifacts-native:
name: Builds / extension-native (${{ 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: 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 Bun
uses: ./.github/actions/setup-bun
with:
bun-version: ${{ env.BUN_VERSION }}
- 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:
native-ccache: "true"
- name: Set up MSVC
if: ${{ runner.os == 'Windows' }}
uses: ./.github/actions/setup-msvc
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Restore native compiler cache
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809
with:
path: |
~/.ccache
${{ matrix.build-root }}
key: liboliphaunt-native-extension-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('src/postgres/versions/18/**', 'src/sources/third-party/shared/**', 'src/sources/third-party/native/**', 'src/shared/extension-runtime-contract/**', 'src/extensions/**', 'src/runtimes/liboliphaunt/native/**', 'tools/xtask/**', 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml') }}
restore-keys: |
liboliphaunt-native-extension-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-
liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-
- name: Configure native compiler cache
run: .github/scripts/setup-native-build-tools.sh 2G
- name: Build native exact-extension artifacts
env:
OLIPHAUNT_EXTENSION_PRODUCTS: ${{ matrix.extensions_csv }}
OLIPHAUNT_EXTENSION_TARGET: ${{ matrix.target }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .github/scripts/run-planned-moon-job.sh extension-artifacts-native
- 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
if: ${{ failure() }}
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-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: ignore
extension-artifacts-wasix:
name: Builds / extension-wasix (${{ 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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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 }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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: ${{ contains(fromJson(needs.affected.outputs.jobs), 'extension-packages') }}
runs-on: ubuntu-latest
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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: Build exact-extension product packages
env:
OLIPHAUNT_EXTENSION_PACKAGE_PRODUCTS: ${{ needs.affected.outputs.extension_package_products_csv }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-extension-packages') }}
runs-on: ubuntu-latest
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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 }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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/extension-artifacts
if-no-files-found: error
liboliphaunt-native-desktop:
name: Builds / native-runtime-desktop (${{ 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
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 Bun
uses: ./.github/actions/setup-bun
with:
bun-version: ${{ env.BUN_VERSION }}
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up MSVC
if: ${{ runner.os == 'Windows' }}
uses: ./.github/actions/setup-msvc
- name: Restore native compiler cache
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809
with:
path: |
~/.ccache
${{ matrix.build-root }}
key: liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('src/postgres/versions/18/**', 'src/sources/third-party/shared/**', 'src/sources/third-party/native/**', 'src/shared/extension-runtime-contract/**', 'src/runtimes/liboliphaunt/native/**', 'tools/xtask/**', 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml') }}
restore-keys: |
liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-
- name: Configure native compiler cache
run: .github/scripts/setup-native-build-tools.sh 2G
- name: Build liboliphaunt native runtime
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .github/scripts/run-planned-moon-job.sh liboliphaunt-native-desktop
- name: Package liboliphaunt macOS release asset
if: ${{ startsWith(matrix.target, 'macos-') }}
env:
OLIPHAUNT_RELEASE_FETCH_ASSETS: "0"
run: tools/release/package-liboliphaunt-macos-assets.sh
- name: Package liboliphaunt Linux release asset
if: ${{ startsWith(matrix.target, 'linux-') }}
env:
OLIPHAUNT_RELEASE_FETCH_ASSETS: "0"
run: tools/release/package-liboliphaunt-linux-assets.sh
- name: Package liboliphaunt Windows release asset
if: ${{ startsWith(matrix.target, 'windows-') }}
shell: pwsh
env:
OLIPHAUNT_RELEASE_FETCH_ASSETS: "0"
run: ./tools/release/package-liboliphaunt-windows-assets.ps1
- name: Upload liboliphaunt release assets
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: liboliphaunt-native-release-assets-${{ matrix.target }}
path: target/liboliphaunt/release-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-android (${{ 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 Bun
uses: ./.github/actions/setup-bun
with:
bun-version: ${{ env.BUN_VERSION }}
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up Android
uses: ./.github/actions/setup-android
with:
native-ccache: "true"
- name: Restore native compiler cache
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809
with:
path: |
~/.ccache
${{ matrix.build-root }}
key: liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('src/postgres/versions/18/**', 'src/sources/third-party/shared/**', 'src/sources/third-party/native/**', 'src/shared/extension-runtime-contract/**', 'src/runtimes/liboliphaunt/native/**', 'tools/xtask/**', 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml') }}
restore-keys: |
liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-
- name: Configure native compiler cache
run: .github/scripts/setup-native-build-tools.sh 2G
- name: Build liboliphaunt Android target
env:
OLIPHAUNT_CI_TARGET: ${{ matrix.target }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .github/scripts/run-planned-moon-job.sh liboliphaunt-native-android
- name: Package liboliphaunt Android release asset
env:
OLIPHAUNT_CI_TARGET: ${{ matrix.target }}
run: tools/release/package-liboliphaunt-mobile-assets.sh "$OLIPHAUNT_CI_TARGET"
- name: Upload liboliphaunt release assets
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: liboliphaunt-native-release-assets-${{ matrix.target }}
path: target/liboliphaunt/release-assets
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-ios (${{ 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
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 Bun
uses: ./.github/actions/setup-bun
with:
bun-version: ${{ env.BUN_VERSION }}
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up Apple
uses: ./.github/actions/setup-apple
- name: Restore native compiler cache
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809
with:
path: |
~/.ccache
${{ matrix.build-root }}
key: liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('src/postgres/versions/18/**', 'src/sources/third-party/shared/**', 'src/sources/third-party/native/**', 'src/shared/extension-runtime-contract/**', 'src/runtimes/liboliphaunt/native/**', 'tools/xtask/**', 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml') }}
restore-keys: |
liboliphaunt-native-ccache-${{ matrix.target }}-${{ runner.os }}-${{ runner.arch }}-
- name: Configure native compiler cache
run: .github/scripts/setup-native-build-tools.sh 2G
- name: Build liboliphaunt iOS target
env:
OLIPHAUNT_CI_TARGET: ${{ matrix.target }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .github/scripts/run-planned-moon-job.sh liboliphaunt-native-ios
- name: Package liboliphaunt iOS release asset
env:
OLIPHAUNT_CI_TARGET: ${{ matrix.target }}
run: tools/release/package-liboliphaunt-mobile-assets.sh "$OLIPHAUNT_CI_TARGET"
- name: Upload liboliphaunt release assets
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: liboliphaunt-native-release-assets-${{ matrix.target }}
path: target/liboliphaunt/release-assets
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
target/liboliphaunt/**/*.log
if-no-files-found: ignore
liboliphaunt-native-release-assets:
name: Builds / native-runtime-release-assets
needs:
- affected
- liboliphaunt-native-android
- liboliphaunt-native-desktop
- liboliphaunt-native-ios
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets') }}
runs-on: ubuntu-latest
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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: Package aggregate liboliphaunt release assets
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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
needs:
- affected
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'rust-sdk-package') }}
runs-on: ubuntu-latest
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
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
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 }}' MOON_CACHE=off .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
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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 }}' MOON_CACHE=off .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-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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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 }}' MOON_CACHE=off .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
swift-sdk-package:
name: Builds / swift-sdk
needs:
- affected
- liboliphaunt-native-ios
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') }}
runs-on: macos-latest
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: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Download Apple liboliphaunt release assets
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-native-release-assets-ios-xcframework
path: target/liboliphaunt/release-assets
- name: Build Swift SDK package artifacts
env:
OLIPHAUNT_SWIFT_RELEASE_ASSET_DIR: ${{ github.workspace }}/target/liboliphaunt/release-assets
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .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
needs:
- affected
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'kotlin-sdk-package') }}
runs-on: ubuntu-latest
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
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Build Kotlin SDK package artifacts
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .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
react-native-sdk-package:
name: Builds / react-native-sdk
needs:
- affected
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'react-native-sdk-package') }}
runs-on: ubuntu-latest
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:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Build React Native SDK package artifacts
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .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 / js-sdk
needs:
- affected
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'js-sdk-package') }}
runs-on: ubuntu-latest
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 Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Set up Bun
uses: ./.github/actions/setup-bun
with:
bun-version: ${{ env.BUN_VERSION }}
- 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 }}' MOON_CACHE=off .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-rust-package:
name: Builds / wasix-rust-binding
needs:
- affected
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'wasix-rust-package') }}
runs-on: ubuntu-latest
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
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
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 WASIX Rust binding package artifacts
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' MOON_CACHE=off .github/scripts/run-planned-moon-job.sh wasix-rust-package
- name: Upload WASIX Rust 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-latest
timeout-minutes: 360
permissions:
contents: read
actions: write
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 Bun
uses: ./.github/actions/setup-bun
with:
bun-version: ${{ env.BUN_VERSION }}
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_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@0057852bfaa89a56745cba8c7296529d2fc39830
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 }}-${{ hashFiles('src/runtimes/liboliphaunt/wasix/assets/generated/asset-inputs.sha256', 'src/postgres/versions/18/**', 'src/sources/third-party/**', 'src/sources/toolchains/**', 'src/shared/extension-runtime-contract/**', 'src/runtimes/liboliphaunt/wasix/assets/build/**', 'src/bindings/wasix-rust/crates/oliphaunt-wasix/Cargo.toml', 'src/runtimes/liboliphaunt/wasix/crates/assets/**', 'tools/xtask/**', '.github/actions/setup-wasmer-llvm/**', 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml') }}
restore-keys: |
wasix-build-${{ runner.os }}-${{ env.ASSET_PROFILE }}-
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd
- name: Build WASIX builder image and save cache
if: ${{ github.ref == 'refs/heads/main' }}
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
- name: Build WASIX builder image
if: ${{ github.ref != 'refs/heads/main' }}
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 template generation
uses: ./.github/actions/setup-wasmer-llvm
with:
url: ${{ env.WASMER_LLVM_LINUX_X64_URL }}
version: ${{ env.WASMER_LLVM_VERSION }}
cache-save-if: ${{ env.RUST_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 }}' MOON_CACHE=off .github/scripts/run-planned-moon-job.sh liboliphaunt-wasix-runtime
- name: Save WASIX compilation cache
if: ${{ github.ref == 'refs/heads/main' && steps.wasix-build-cache.outputs.cache-hit != 'true' }}
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830
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 }}-${{ hashFiles('src/runtimes/liboliphaunt/wasix/assets/generated/asset-inputs.sha256', 'src/postgres/versions/18/**', 'src/sources/third-party/**', 'src/sources/toolchains/**', 'src/shared/extension-runtime-contract/**', 'src/runtimes/liboliphaunt/wasix/assets/build/**', 'src/bindings/wasix-rust/crates/oliphaunt-wasix/Cargo.toml', 'src/runtimes/liboliphaunt/wasix/crates/assets/**', 'tools/xtask/**', '.github/actions/setup-wasmer-llvm/**', 'Cargo.toml', 'Cargo.lock', 'rust-toolchain.toml') }}
- 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
permissions:
contents: read
actions: write
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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 }}
version: ${{ env.WASMER_LLVM_VERSION }}
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Build, validate, and smoke target AOT artifacts
env:
AOT_TARGET: ${{ matrix.target }}
AOT_PACKAGE: ${{ matrix.package }}
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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-latest
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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
run: OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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
mobile-build-android:
name: Builds / mobile-android (${{ matrix.target }})
needs:
- affected
- mobile-extension-packages
- liboliphaunt-native-android
- kotlin-sdk-package
- react-native-sdk-package
if: ${{ 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-latest
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
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- 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 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_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-pg18-linux-x64-gnu/install
OLIPHAUNT_EXPO_ANDROID_INITDB: ${{ github.workspace }}/target/liboliphaunt-pg18-linux-x64-gnu/install/bin/initdb
run: |
OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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 / mobile-ios
needs:
- affected
- mobile-extension-packages
- liboliphaunt-native-ios
- react-native-sdk-package
- swift-sdk-package
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
runs-on: macos-26
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 Apple
uses: ./.github/actions/setup-apple
- name: Set up Rust
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ env.RUST_CACHE_SAVE_IF }}
- name: Download iOS liboliphaunt target
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-native-target-ios-xcframework
path: .
- 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/extension-artifacts
- name: Build iOS 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_IOS_CONFIGURATION: Release
OLIPHAUNT_EXPO_IOS_SDK: iphonesimulator
OLIPHAUNT_EXPO_REQUIRE_PREBUILT_EXTENSIONS: "1"
OLIPHAUNT_EXPO_EXTENSION_ARTIFACT_ROOT: ${{ github.workspace }}/target/extension-artifacts
OLIPHAUNT_EXPO_IOS_OLIPHAUNT_XCFRAMEWORK: ${{ github.workspace }}/target/liboliphaunt-ios-xcframework/out/liboliphaunt.xcframework
OLIPHAUNT_EXPO_IOS_RUNTIME_DIR: ${{ github.workspace }}/target/liboliphaunt-pg18/install
OLIPHAUNT_EXPO_IOS_INITDB: ${{ github.workspace }}/target/liboliphaunt-pg18/install/bin/initdb
run: |
OLIPHAUNT_CI_JOB_TARGETS_JSON='${{ needs.affected.outputs.job_targets }}' OLIPHAUNT_MOON_UPSTREAM=none MOON_CACHE=off .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: 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
if-no-files-found: error
builds:
name: Builds
if: ${{ always() }}
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
- node-direct
- swift-sdk-package
- kotlin-sdk-package
- react-native-sdk-package
- js-sdk-package
- wasix-rust-package
- liboliphaunt-wasix-runtime
- liboliphaunt-wasix-aot
- liboliphaunt-wasix-release-assets
- mobile-build-android
- mobile-build-ios
runs-on: ubuntu-latest
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 build jobs
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
mobile-e2e-android:
name: E2E / mobile-android
needs:
- affected
- mobile-build-android
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-android') }}
runs-on: ubuntu-latest
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 Android
uses: ./.github/actions/setup-android
- 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
env:
OLIPHAUNT_ANDROID_EMULATOR_API: "35"
run: tools/dev/start-android-emulator-ci.sh
- name: Run Android installed-app E2E
env:
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 / mobile-ios
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
- name: List iOS app artifact
run: find target/mobile-build/react-native/ios -maxdepth 2 -print
- name: Run iOS installed-app E2E
env:
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() }}
needs:
- affected
- mobile-e2e-android
- mobile-e2e-ios
runs-on: ubuntu-latest
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 E2E jobs
env:
NEEDS_JSON: ${{ toJson(needs) }}
REQUIRED_JOBS_JSON: '["mobile-e2e-android","mobile-e2e-ios"]'
GATE_LABEL: E2E jobs
run: bun .github/scripts/check-ci-gate.mjs allow-skipped
required:
name: Required
if: ${{ always() }}
needs:
- affected
- release-intent
- checks
- tests
- builds
- e2e
runs-on: ubuntu-latest
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
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