diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml new file mode 100644 index 0000000..aa3dfbe --- /dev/null +++ b/.github/actionlint.yaml @@ -0,0 +1,4 @@ +self-hosted-runner: + labels: + - bladerunner-macos + - bladerunner-linux diff --git a/.github/actions/linux-android-toolchain/action.yml b/.github/actions/linux-android-toolchain/action.yml new file mode 100644 index 0000000..595493c --- /dev/null +++ b/.github/actions/linux-android-toolchain/action.yml @@ -0,0 +1,46 @@ +name: linux-android-toolchain +description: >- + Toolchain for the Android jobs on bladerunner Linux: JDK, Android + SDK/NDK, Go, Node/yarn, Gradle via the repo wrapper, and the + patch-node-modules helper. + +runs: + using: composite + steps: + - uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: '17' + + - uses: android-actions/setup-android@v3 + with: + packages: 'platform-tools platforms;android-36 build-tools;36.0.0 ndk;27.1.12297006' + + - uses: actions/setup-go@v5 + with: + go-version: '1.25' + cache: false + + - uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Enable corepack (yarn version from package.json#packageManager) + shell: bash + run: corepack enable + + - name: Export NDK, Gradle wrapper, patch-node-modules + shell: bash + run: | + echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/27.1.12297006" >> "$GITHUB_ENV" + echo "ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/27.1.12297006" >> "$GITHUB_ENV" + echo "GRADLE=./gradlew" >> "$GITHUB_ENV" + + venv="$HOME/.cache/syncup-fdroid-venv" + [ -x "$venv/bin/python" ] || python3 -m venv "$venv" + "$venv/bin/pip" install --quiet fdroidserver + mkdir -p "$RUNNER_TEMP/bin" + printf '#!/bin/sh\nexec "%s/bin/python" "%s/nix/patch-node-modules.py" "$@"\n' \ + "$venv" "$GITHUB_WORKSPACE" > "$RUNNER_TEMP/bin/patch-node-modules" + chmod +x "$RUNNER_TEMP/bin/patch-node-modules" + echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH" diff --git a/.github/actions/macos-toolchain/action.yml b/.github/actions/macos-toolchain/action.yml new file mode 100644 index 0000000..4aaadeb --- /dev/null +++ b/.github/actions/macos-toolchain/action.yml @@ -0,0 +1,29 @@ +name: macos-toolchain +description: >- + Toolchain for the iOS jobs on bladerunner macOS: Go, Node/yarn, + and CocoaPods + fastlane from the repo Gemfile as ./bin binstubs. Xcode and + a ruby >= 3.2. + +runs: + using: composite + steps: + - uses: actions/setup-go@v5 + with: + go-version: '1.25' + cache: false + + - uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Enable corepack (yarn version from package.json#packageManager) + shell: bash + run: corepack enable + + - name: Install gems (CocoaPods, fastlane) + shell: bash + run: | + bundle config set --local path "$HOME/.cache/syncup-bundle" + bundle install + bundle binstubs cocoapods fastlane --force + echo "$GITHUB_WORKSPACE/bin" >> "$GITHUB_PATH" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c933c64..79684d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,14 +11,13 @@ concurrency: cancel-in-progress: true env: - NODE_VERSION: '20' - GO_VERSION: '1.25' - JAVA_VERSION: '17' + SYSTEM: '1' + DEVELOPER_DIR: ${{ vars.XCODE_DEVELOPER_DIR || '/Applications/Xcode.app/Contents/Developer' }} jobs: lint-and-typecheck: name: lint + typecheck + go vet - runs-on: [self-hosted, linux] + runs-on: bladerunner-linux timeout-minutes: 15 steps: - uses: actions/checkout@v4 @@ -31,20 +30,15 @@ jobs: android: name: android build if: github.event_name == 'push' - runs-on: [self-hosted, linux] + runs-on: bladerunner-linux needs: lint-and-typecheck timeout-minutes: 45 steps: - uses: actions/checkout@v4 - # Nix (via flake.nix) provides Go, Node/corepack, JDK, Gradle, gomake. - # Android SDK/NDK are not in the flake — install them here. - - name: Set up Android SDK - uses: android-actions/setup-android@v3 - with: - packages: 'tools platform-tools platforms;android-36 build-tools;36.0.0 ndk;27.1.12297006' + - uses: ./.github/actions/linux-android-toolchain - - name: Build Android APK (via nix) + - name: Build Android APK run: make android - name: Upload APK @@ -64,12 +58,12 @@ jobs: steps: - uses: actions/checkout@v4 - # Nix provides Go, Node, CocoaPods, etc. via flake.nix. - # Xcode must be pre-installed on the runner. + - uses: ./.github/actions/macos-toolchain + - name: Clean stale build state run: make clean - - name: Build iOS app (via nix) + - name: Build iOS app run: make ios - name: Upload simulator app diff --git a/.github/workflows/release-android.yml b/.github/workflows/release-android.yml index 07ae4ce..bba67f0 100644 --- a/.github/workflows/release-android.yml +++ b/.github/workflows/release-android.yml @@ -12,6 +12,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +env: + SYSTEM: '1' + jobs: # Open PRs: build an APK with .pr applicationId suffix, upload to appdrop, comment QR. pr-build: @@ -19,7 +22,7 @@ jobs: if: >- github.event_name == 'pull_request' && github.event.action != 'closed' - runs-on: [self-hosted, linux] + runs-on: bladerunner-linux timeout-minutes: 45 permissions: contents: read @@ -27,10 +30,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Android SDK - uses: android-actions/setup-android@v3 - with: - packages: 'tools platform-tools platforms;android-36 build-tools;36.0.0 ndk;27.1.12297006' + - uses: ./.github/actions/linux-android-toolchain - name: Decode release keystore run: echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > /tmp/release.keystore @@ -47,8 +47,6 @@ jobs: RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }} RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }} RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} - ANDROID_NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/27.1.12297006 - ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/27.1.12297006 FDROID_VERSION_CODE: ${{ github.run_number }} - name: Upload APK to appdrop.sh @@ -114,7 +112,7 @@ jobs: github.event_name == 'push' || (github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/')) - runs-on: [self-hosted, linux] + runs-on: bladerunner-linux timeout-minutes: 15 steps: - uses: actions/checkout@v4 @@ -126,7 +124,7 @@ jobs: build-apk: name: build ${{ matrix.abi }} - runs-on: [self-hosted, linux] + runs-on: bladerunner-linux needs: lint-and-typecheck timeout-minutes: 45 strategy: @@ -142,12 +140,7 @@ jobs: steps: - uses: actions/checkout@v4 - # Nix (via flake.nix) provides Go, Node/corepack, JDK, Gradle, gomobile. - # Android SDK/NDK are not in the flake — install them here. - - name: Set up Android SDK - uses: android-actions/setup-android@v3 - with: - packages: 'tools platform-tools platforms;android-36 build-tools;36.0.0 ndk;27.1.12297006' + - uses: ./.github/actions/linux-android-toolchain - name: Decode release keystore run: echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > /tmp/release.keystore @@ -176,8 +169,6 @@ jobs: RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }} RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }} RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} - ANDROID_NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/27.1.12297006 - ANDROID_NDK_ROOT: ${{ env.ANDROID_HOME }}/ndk/27.1.12297006 - name: Extract versionCode if: matrix.abi == 'arm64-v8a' diff --git a/.github/workflows/release-ios.yml b/.github/workflows/release-ios.yml index a919dad..fdd0066 100644 --- a/.github/workflows/release-ios.yml +++ b/.github/workflows/release-ios.yml @@ -12,9 +12,8 @@ concurrency: cancel-in-progress: true env: - # Override per-runner via repo variable XCODE_DEVELOPER_DIR if needed. - # The default matches GitHub-hosted macOS runners' xcode-select target. - XCODE_DEVELOPER_DIR: ${{ vars.XCODE_DEVELOPER_DIR || '/Applications/Xcode.app/Contents/Developer' }} + DEVELOPER_DIR: ${{ vars.XCODE_DEVELOPER_DIR || '/Applications/Xcode.app/Contents/Developer' }} + SYSTEM: '1' jobs: # PR builds: signed .pr IPA uploaded to appdrop.sh, install link posted back to the PR. @@ -29,23 +28,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Select Xcode - run: | - if [ ! -d "$XCODE_DEVELOPER_DIR" ]; then - echo "::error::XCODE_DEVELOPER_DIR=$XCODE_DEVELOPER_DIR does not exist on this runner." - echo "Set the XCODE_DEVELOPER_DIR repo variable to a valid Xcode Developer dir." - exit 1 - fi - echo "DEVELOPER_DIR=$XCODE_DEVELOPER_DIR" >> "$GITHUB_ENV" - echo "Selected Xcode at: $XCODE_DEVELOPER_DIR" - DEVELOPER_DIR=$XCODE_DEVELOPER_DIR xcodebuild -version + - uses: ./.github/actions/macos-toolchain - name: Scrub global Xcode caches run: | - # make clean only wipes mobile-app/ios/build & Pods. Stale state in - # ~/Library leaks across runs and is the textbook cause of "module X - # in precompiled file but not in any loaded module map file" errors - # (this build works locally where these dirs are empty). rm -rf "$HOME/Library/Developer/Xcode/DerivedData" rm -rf "$HOME/Library/Developer/Xcode/Archives/$(date +%Y-%m-%d)" rm -rf "$HOME/Library/Caches/com.apple.dt.Xcode" @@ -58,7 +44,6 @@ jobs: env: MATCH_DEPLOY_KEY: ${{ secrets.MATCH_DEPLOY_KEY }} run: | - # Per-workspace key so we don't touch the runner's global ~/.ssh state. KEY="$RUNNER_TEMP/match_key" printf '%s\n' "$MATCH_DEPLOY_KEY" > "$KEY" chmod 600 "$KEY" @@ -78,6 +63,15 @@ jobs: FASTLANE_SKIP_UPDATE_CHECK: '1' run: make ios-pr + - name: Upload raw xcodebuild log + if: failure() + uses: actions/upload-artifact@v4 + with: + name: xcodebuild-archive-log-pr-${{ github.run_id }} + path: mobile-app/ios/build/xcodebuild-archive.log + if-no-files-found: ignore + retention-days: 7 + - name: Upload IPA to appdrop.sh id: appdrop env: @@ -146,16 +140,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Select Xcode - run: | - if [ ! -d "$XCODE_DEVELOPER_DIR" ]; then - echo "::error::XCODE_DEVELOPER_DIR=$XCODE_DEVELOPER_DIR does not exist on this runner." - echo "Set the XCODE_DEVELOPER_DIR repo variable to a valid Xcode Developer dir." - exit 1 - fi - echo "DEVELOPER_DIR=$XCODE_DEVELOPER_DIR" >> "$GITHUB_ENV" - echo "Selected Xcode at: $XCODE_DEVELOPER_DIR" - DEVELOPER_DIR=$XCODE_DEVELOPER_DIR xcodebuild -version + - uses: ./.github/actions/macos-toolchain - name: Scrub global Xcode caches run: | @@ -190,6 +175,15 @@ jobs: FASTLANE_SKIP_UPDATE_CHECK: '1' run: make ios-release + - name: Upload raw xcodebuild log + if: failure() + uses: actions/upload-artifact@v4 + with: + name: xcodebuild-archive-log-release-${{ github.run_id }} + path: mobile-app/ios/build/xcodebuild-archive.log + if-no-files-found: ignore + retention-days: 7 + - name: Upload IPA artifact uses: actions/upload-artifact@v4 with: diff --git a/.gitignore b/.gitignore index 4bac6c1..5a998fa 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,10 @@ yarn-error.* /mobile-app/ios/.xcode.env.local /mobile-app/ios/Frameworks/ +# Ruby (bundler binstubs + local config; see Gemfile) +/bin/ +/.bundle/ + # Fastlane /fastlane/report.xml /fastlane/README.md diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..63b472a --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +source "https://rubygems.org" + +gem "cocoapods", "~> 1.17" +gem "fastlane", "~> 2.228" +gem "json", "< 3" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..fc56066 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,359 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.8) + abbrev (0.1.2) + activesupport (7.2.3.2) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1, < 6) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + artifactory (3.0.17) + atomos (0.1.3) + aws-eventstream (1.4.0) + aws-partitions (1.1289.0) + aws-sdk-core (3.257.0) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + bigdecimal + jmespath (~> 1, >= 1.6.1) + logger + rexml (~> 3.4, >= 3.4.2) + aws-sdk-kms (1.132.0) + aws-sdk-core (~> 3, >= 3.256.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.232.1) + aws-sdk-core (~> 3, >= 3.256.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.12.1) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + base64 (0.3.0) + benchmark (0.5.0) + bigdecimal (4.1.3) + cgi (0.5.2) + claide (1.1.0) + cocoapods (1.17.0) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.17.0) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (~> 4.1.0) + xcodeproj (>= 1.28.1, < 2.0) + cocoapods-core (1.17.0) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + concurrent-ruby (1.3.8) + connection_pool (3.0.2) + csv (3.3.6) + declarative (0.0.20) + digest-crc (0.7.0) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.6.20260907) + dotenv (2.8.1) + drb (2.2.3) + emoji_regex (3.2.3) + erb (6.0.7) + ethon (0.18.0) + ffi (>= 1.15.0) + logger + excon (1.7.1) + logger + faraday (2.14.4) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-cookie_jar (0.0.8) + faraday (>= 0.8.0) + http-cookie (>= 1.0.0) + faraday-follow_redirects (0.5.0) + faraday (>= 1, < 3) + faraday-multipart (1.2.0) + multipart-post (~> 2.0) + faraday-net_http (3.4.4) + net-http (~> 0.5) + faraday-retry (2.4.0) + faraday (~> 2.0) + fastimage (2.4.1) + fastlane (2.240.1) + CFPropertyList (>= 2.3, < 5.0.0) + abbrev (~> 0.1) + addressable (>= 2.9.0, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.197) + babosa (>= 1.0.3, < 2.0.0) + base64 (~> 0.2) + benchmark (>= 0.1.0) + bundler (>= 2.4.0, < 5.0.0) + cgi (~> 0.4) + colored (~> 1.2) + commander (~> 4.6) + csv (~> 3.3) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 2.0.0) + faraday (~> 2.7) + faraday-cookie_jar (~> 0.0.8) + faraday-follow_redirects (~> 0.3) + faraday-multipart (~> 1.0) + faraday-retry (~> 2.0) + fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.1.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.99) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.4.0) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + irb (>= 1.8) + json (< 3.0.0) + jwt (>= 2.10.3, < 4) + logger (>= 1.6, < 2.0) + mini_magick (>= 4.9.4, < 5.0.0) + multi_json (~> 1.12) + multipart-post (>= 2.0.0, < 3.0.0) + mutex_m (~> 0.3) + naturally (~> 2.2) + nkf (~> 0.2) + optparse (>= 0.1.1, < 1.0.0) + ostruct (>= 0.1.0) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 3.4.0, < 4.0.0) + security (~> 0.3) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 4) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.4.1) + xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) + fastlane-sirp (1.1.0) + ffi (1.17.4) + ffi (1.17.4-aarch64-linux-gnu) + ffi (1.17.4-aarch64-linux-musl) + ffi (1.17.4-arm-linux-gnu) + ffi (1.17.4-arm-linux-musl) + ffi (1.17.4-arm64-darwin) + ffi (1.17.4-x86-linux-gnu) + ffi (1.17.4-x86-linux-musl) + ffi (1.17.4-x86_64-darwin) + ffi (1.17.4-x86_64-linux-gnu) + ffi (1.17.4-x86_64-linux-musl) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.108.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-core (1.2.5) + addressable (~> 2.9) + faraday (~> 2.13) + faraday-follow_redirects (~> 0.3) + googleauth (~> 1.14) + mini_mime (~> 1.1) + multi_json (~> 1.11) + representable (~> 3.0) + retriable (>= 3.1, < 5.0) + google-apis-iamcredentials_v1 (0.28.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-playcustomapp_v1 (0.18.0) + google-apis-core (>= 0.15.0, < 2.a) + google-apis-storage_v1 (0.67.0) + google-apis-core (>= 0.15.0, < 2.a) + google-cloud-core (1.9.0) + google-cloud-env (>= 1.0, < 3.a) + google-cloud-errors (~> 1.0) + google-cloud-env (2.3.1) + base64 (~> 0.2) + faraday (>= 1.0, < 3.a) + google-cloud-errors (1.7.0) + google-cloud-storage (1.62.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-core (>= 0.18, < 2) + google-apis-iamcredentials_v1 (~> 0.18) + google-apis-storage_v1 (>= 0.42) + google-cloud-core (~> 1.6) + googleauth (~> 1.9) + mini_mime (~> 1.0) + google-logging-utils (0.2.0) + googleauth (1.17.4) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.2) + google-logging-utils (~> 0.1) + jwt (>= 1.4, < 4.0) + os (>= 0.9, < 2.0) + pstore (~> 0.1) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.1.6) + domain_name (~> 0.5) + httpclient (2.9.0) + mutex_m + i18n (1.15.2) + concurrent-ruby (~> 1.0) + io-console (0.9.4) + irb (1.18.0) + pp (>= 0.6.0) + prism (>= 1.3.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) + jmespath (1.6.2) + json (2.21.2) + jwt (3.3.0) + base64 + logger (1.7.0) + mini_magick (4.13.2) + mini_mime (1.1.5) + minitest (5.27.0) + molinillo (0.8.0) + multi_json (1.21.2) + multipart-post (2.4.1) + mutex_m (0.3.0) + nanaimo (0.4.0) + nap (1.1.0) + naturally (2.3.0) + net-http (0.9.1) + uri (>= 0.11.1) + netrc (0.11.0) + nkf (0.3.0) + optparse (0.8.1) + os (1.1.4) + ostruct (0.6.3) + plist (3.7.2) + pp (0.6.4) + prettyprint + prettyprint (0.2.0) + prism (1.9.0) + pstore (0.2.1) + public_suffix (4.0.7) + rake (13.4.2) + rbs (4.2.0) + logger + prism (>= 1.6.0) + tsort + rdoc (8.0.0) + erb + prism (>= 1.6.0) + rbs (>= 4.0.0) + tsort + reline (0.7.0) + io-console (~> 0.5) + representable (3.3.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (4.2.0) + rexml (3.4.4) + rouge (3.28.0) + ruby-macho (4.1.0) + rubyzip (3.7.0) + securerandom (0.4.1) + security (0.3.0) + signet (0.22.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 4.0) + simctl (1.6.10) + CFPropertyList + naturally + terminal-notifier (2.0.0) + terminal-table (4.0.0) + unicode-display_width (>= 1.1.1, < 4) + trailblazer-option (0.1.2) + tsort (0.2.0) + tty-cursor (0.7.1) + tty-screen (0.8.2) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + typhoeus (1.6.0) + ethon (>= 0.18.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + uber (0.1.0) + unicode-display_width (3.3.0) + unicode-emoji (~> 4.3) + unicode-emoji (4.3.0) + uri (1.1.1) + word_wrap (1.0.0) + xcodeproj (1.28.1) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + base64 + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + nkf + rexml (>= 3.3.6, < 4.0) + xcpretty (0.4.1) + rouge (~> 3.28.0) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-musl + arm64-darwin + arm64-darwin-24 + ruby + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + cocoapods (~> 1.17) + fastlane (~> 2.228) + json (< 3) + +BUNDLED WITH + 2.6.9 diff --git a/mobile-app/.yarn/patches/expo-modules-jsi-npm-57.0.3-26839930f3.patch b/mobile-app/.yarn/patches/expo-modules-jsi-npm-57.0.3-26839930f3.patch new file mode 100644 index 0000000..1bab7da --- /dev/null +++ b/mobile-app/.yarn/patches/expo-modules-jsi-npm-57.0.3-26839930f3.patch @@ -0,0 +1,28 @@ +diff --git a/apple/scripts/build-xcframework.sh b/apple/scripts/build-xcframework.sh +index 28d3249bebc01086a04487b8b1ab12de225abacd..f9af1f9fc0d1043d0637bab25561fd1df723595c 100755 +--- a/apple/scripts/build-xcframework.sh ++++ b/apple/scripts/build-xcframework.sh +@@ -199,6 +199,14 @@ build_slice() { + env_args+=(DEVELOPER_DIR="$DEVELOPER_DIR") + fi + ++ # Xcode 27 + `-quiet`: a SwiftCompile task that only emits warnings (e.g. the ++ # React-jsi umbrella-header warnings) is reported as ++ # "error: the following command failed with exit code 0 but produced no further output" ++ # even though the nested build succeeds (exit 0, slice produced). The host ++ # app's xcodebuild parses script-phase output for `error:` prefixes and fails ++ # the archive on that line. Drop exactly that line; `set -o pipefail` keeps ++ # xcodebuild's real exit status, so genuine failures still abort. ++ # See https://github.com/expo/expo/issues/50311 + (cd "$PACKAGE_DIR" && env -i "${env_args[@]}" \ + xcodebuild \ + build \ +@@ -217,7 +225,7 @@ build_slice() { + DEBUG_INFORMATION_FORMAT=dwarf-with-dsym \ + COMPILER_INDEX_STORE_ENABLE=NO \ + SWIFT_COMPILATION_MODE=wholemodule \ +- ) ++ ) 2>&1 | sed '/^error: the following command failed with exit code 0 but produced no further output$/d' + + local product_path="${BUILD_PRODUCTS_PATH}/${build_dir_name}" + local framework_src="${product_path}/PackageFrameworks/${PACKAGE_NAME}.framework" diff --git a/mobile-app/android/gradle/wrapper/gradle-wrapper.properties b/mobile-app/android/gradle/wrapper/gradle-wrapper.properties index 2dcec85..110b1dd 100644 --- a/mobile-app/android/gradle/wrapper/gradle-wrapper.properties +++ b/mobile-app/android/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-9.0-bin.zip -networkTimeout=10000 +networkTimeout=60000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/mobile-app/package.json b/mobile-app/package.json index 225e6dc..7062007 100644 --- a/mobile-app/package.json +++ b/mobile-app/package.json @@ -77,5 +77,8 @@ ] } }, - "private": true + "private": true, + "resolutions": { + "expo-modules-jsi@npm:~57.0.3": "patch:expo-modules-jsi@npm%3A57.0.3#~/.yarn/patches/expo-modules-jsi-npm-57.0.3-26839930f3.patch" + } } diff --git a/mobile-app/yarn.lock b/mobile-app/yarn.lock index 4479a37..02d8702 100644 --- a/mobile-app/yarn.lock +++ b/mobile-app/yarn.lock @@ -5223,7 +5223,7 @@ __metadata: languageName: node linkType: hard -"expo-modules-jsi@npm:~57.0.3": +"expo-modules-jsi@npm:57.0.3": version: 57.0.3 resolution: "expo-modules-jsi@npm:57.0.3" peerDependencies: @@ -5232,6 +5232,15 @@ __metadata: languageName: node linkType: hard +"expo-modules-jsi@patch:expo-modules-jsi@npm%3A57.0.3#~/.yarn/patches/expo-modules-jsi-npm-57.0.3-26839930f3.patch": + version: 57.0.3 + resolution: "expo-modules-jsi@patch:expo-modules-jsi@npm%3A57.0.3#~/.yarn/patches/expo-modules-jsi-npm-57.0.3-26839930f3.patch::version=57.0.3&hash=91037f" + peerDependencies: + react-native: "*" + checksum: 10c0/4ead70b855974b2e3196e94b4c83f1d8ee207ff936ffc2c07fd09e8b06100cb27a1160be465a4fd607c9f69cd619953d3ca75ed7e7967d906c85f65d6bed6f06 + languageName: node + linkType: hard + "expo-server@npm:^57.0.1": version: 57.0.1 resolution: "expo-server@npm:57.0.1"