From c1fcd41e0c724975b9605acfcef4049ac1ccfe15 Mon Sep 17 00:00:00 2001 From: Vit Horacek <36083550+mountiny@users.noreply.github.com> Date: Mon, 29 Dec 2025 14:48:48 +0100 Subject: [PATCH] Merge pull request #76061 from callstack-internal/set-up-remote-ad-hoc-builds-2 [No QA] Set up remote ad hoc builds 2 --- .github/workflows/remote-build-ios.yml | 3 - .github/workflows/testBuild.yml | 179 ++++++------ package-lock.json | 274 ++++-------------- package.json | 10 +- ...1.9+001+missing-app-name-hybrid-case.patch | 28 -- patches/@rock-js/platform-android/details.md | 15 - ...te-fingerprint-for-local-builds-only.patch | 13 - .../platform-apple-helpers/details.md | 15 - ...-s3+0.11.9+001+support-public-access.patch | 72 ----- ...r-s3+0.11.9+002+add-acl-upload-param.patch | 27 -- patches/@rock-js/provider-s3/details.md | 26 -- rock.config.mjs | 2 + scripts/run-build.sh | 7 +- 13 files changed, 152 insertions(+), 519 deletions(-) delete mode 100644 patches/@rock-js/platform-android/@rock-js+platform-android+0.11.9+001+missing-app-name-hybrid-case.patch delete mode 100644 patches/@rock-js/platform-android/details.md delete mode 100644 patches/@rock-js/platform-apple-helpers/@rock-js+platform-apple-helpers+0.11.9+001+recalculate-fingerprint-for-local-builds-only.patch delete mode 100644 patches/@rock-js/platform-apple-helpers/details.md delete mode 100644 patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+001+support-public-access.patch delete mode 100644 patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+002+add-acl-upload-param.patch delete mode 100644 patches/@rock-js/provider-s3/details.md diff --git a/.github/workflows/remote-build-ios.yml b/.github/workflows/remote-build-ios.yml index c2258f0b6512..795bd3dd9409 100644 --- a/.github/workflows/remote-build-ios.yml +++ b/.github/workflows/remote-build-ios.yml @@ -66,9 +66,6 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} IS_HYBRID_APP: ${{ matrix.is_hybrid_build }} - # Forces React Native to build from source to include our custom patches - RCT_USE_RN_DEP: 0 - RCT_USE_PREBUILT_RNCORE: 0 with: destination: simulator scheme: ${{ matrix.scheme }} diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml index b070cb052da8..6897e796e3ca 100644 --- a/.github/workflows/testBuild.yml +++ b/.github/workflows/testBuild.yml @@ -298,7 +298,7 @@ jobs: env: PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }} outputs: - S3_APK_PATH: ${{ steps.exportAndroidS3Path.outputs.S3_APK_PATH }} + ROCK_ANDROID_ADHOC_INDEX_URL: ${{ steps.set-artifact-url.outputs.ARTIFACT_URL }} steps: - name: Checkout # v4 @@ -336,23 +336,6 @@ jobs: sed -i 's/ENVIRONMENT=staging/ENVIRONMENT=adhoc/' .env.adhoc echo "APP_PULL_REQUEST_NUMBER=$PULL_REQUEST_NUMBER" >> .env.adhoc - - name: Get Java version - id: get-java-version - uses: ./.github/actions/composite/getJavaVersion - - - name: Setup Java - # v4 - uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 - with: - distribution: oracle - java-version: ${{ steps.get-java-version.outputs.version }} - - - name: Setup Ruby - # v1.229.0 - uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 - with: - bundler-cache: true - - name: Setup 1Password CLI and certificates uses: Expensify/GitHub-Actions/setup-certificate-1p@main with: @@ -381,17 +364,6 @@ jobs: ANDROID_UPLOAD_KEYSTORE_ALIAS: op://${{ vars.OP_VAULT }}/Repository-Secrets/ANDROID_UPLOAD_KEYSTORE_ALIAS ANDROID_UPLOAD_KEY_PASSWORD: op://${{ vars.OP_VAULT }}/Repository-Secrets/ANDROID_UPLOAD_KEY_PASSWORD - - name: Build Android app - id: build - env: - ANDROID_UPLOAD_KEYSTORE_PASSWORD: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }} - ANDROID_UPLOAD_KEYSTORE_ALIAS: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }} - ANDROID_UPLOAD_KEY_PASSWORD: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }} - GITHUB_ACTOR: ${{ github.actor }} - GITHUB_TOKEN: ${{ github.token }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: bundle exec fastlane android build_adhoc_hybrid - - name: Configure AWS Credentials # v4 uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 @@ -400,19 +372,31 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - name: Upload Android AdHoc build to S3 - run: bundle exec fastlane android upload_s3 + - name: Rock Remote Build - Android + id: rock-remote-build-android + uses: callstackincubator/android@0bbc1b7c2e1a8be1ecb4d6c744c211869823fd65 env: - S3_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }} - S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - S3_BUCKET: ad-hoc-expensify-cash - S3_REGION: us-east-1 - - - name: Export S3 path - id: exportAndroidS3Path - run: | - # $s3APKPath is set from within the Fastfile, android upload_s3 lane - echo "S3_APK_PATH=$s3APKPath" >> "$GITHUB_OUTPUT" + GITHUB_TOKEN: ${{ github.token }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + IS_HYBRID_APP: true + with: + variant: 'Adhoc' + sign: true + re-sign: true + ad-hoc: true + keystore-file: './upload-key.keystore' + keystore-store-file: 'upload-key.keystore' + keystore-store-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }} + keystore-key-alias: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }} + keystore-key-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }} + # Specify the path (relative to the Android source directory) where the keystore should be placed. + keystore-path: '../tools/buildtools/upload-key.keystore' + comment-bot: false + rock-build-extra-params: '--extra-params -PreactNativeArchitectures=arm64-v8a,x86_64' + + - name: Set artifact URL output + id: set-artifact-url + run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" iosHybrid: name: Build and deploy iOS for testing @@ -423,7 +407,7 @@ jobs: PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }} runs-on: macos-15-xlarge outputs: - IOS_PATH: ${{ steps.export-ios-path.outputs.IOS_PATH }} + ROCK_IOS_ADHOC_INDEX_URL: ${{ steps.set-artifact-url.outputs.ARTIFACT_URL }} steps: - name: Checkout # v4 @@ -456,35 +440,6 @@ jobs: sed -i '' 's/ENVIRONMENT=staging/ENVIRONMENT=adhoc/' .env.adhoc echo "PULL_REQUEST_NUMBER=$PULL_REQUEST_NUMBER" >> .env.adhoc - - name: Setup Ruby - # v1.229.0 - uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 - with: - bundler-cache: true - - - name: Install New Expensify Gems - run: bundle install - - - name: Cache Pod dependencies - # v4 - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 - id: pods-cache - with: - path: Mobile-Expensify/iOS/Pods - key: ${{ runner.os }}-pods-cache-${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock', 'firebase.json') }} - - - name: Compare Podfile.lock and Manifest.lock - id: compare-podfile-and-manifest - run: echo "IS_PODFILE_SAME_AS_MANIFEST=${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock') == hashFiles('Mobile-Expensify/iOS/Manifest.lock') }}" >> "$GITHUB_OUTPUT" - - - name: Install cocoapods - uses: nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847 - if: steps.pods-cache.outputs.cache-hit != 'true' || steps.compare-podfile-and-manifest.outputs.IS_PODFILE_SAME_AS_MANIFEST != 'true' || steps.setup-node.outputs.cache-hit != 'true' - with: - timeout_minutes: 10 - max_attempts: 5 - command: npm run pod-install - - name: Setup 1Password CLI and certificates uses: Expensify/GitHub-Actions/setup-certificate-1p@main with: @@ -500,10 +455,27 @@ jobs: op read "op://${{ vars.OP_VAULT }}/OldApp_AdHoc_Notification_Service/OldApp_AdHoc_Notification_Service.mobileprovision" --force --out-file ./OldApp_AdHoc_Notification_Service.mobileprovision op read "op://${{ vars.OP_VAULT }}/New Expensify Distribution Certificate/Certificates.p12" --force --out-file ./Certificates.p12 - - name: Build AdHoc app - run: bundle exec fastlane ios build_adhoc_hybrid - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Create ExportOptions.plist + run: | + cat > Mobile-Expensify/iOS/ExportOptions.plist << 'EOF' + + + + + method + ad-hoc + provisioningProfiles + + com.expensify.expensifylite.adhoc + (OldApp) AdHoc + com.expensify.expensifylite.adhoc.SmartScanExtension + (OldApp) AdHoc: Share Extension + com.expensify.expensifylite.adhoc.NotificationServiceExtension + (OldApp) AdHoc: Notification Service + + + + EOF - name: Configure AWS Credentials # v4 @@ -513,23 +485,40 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - - name: Upload AdHoc build to S3 - run: bundle exec fastlane ios upload_s3 + - name: Rock Remote Build - iOS + id: rock-remote-build-ios + uses: callstackincubator/ios@8dcef6cc275e0cf3299f5a97cde5ebd635c887d7 env: - S3_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }} - S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - S3_BUCKET: ad-hoc-expensify-cash - S3_REGION: us-east-1 - - - name: Export iOS path - id: export-ios-path - run: | - content_ios="$(cat ./ios_paths.json)" - content_ios="${content_ios//'%'/'%25'}" - content_ios="${content_ios//$'\n'/'%0A'}" - content_ios="${content_ios//$'\r'/'%0D'}" - ios_path=$(echo "$content_ios" | jq -r '.html_path') - echo "IOS_PATH=$ios_path" >> "$GITHUB_OUTPUT" + GITHUB_TOKEN: ${{ github.token }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + IS_HYBRID_APP: true + with: + destination: device + re-sign: true + ad-hoc: true + scheme: 'Expensify AdHoc' + configuration: 'AdHoc' + certificate-file: './Certificates.p12' + provisioning-profiles: | + [ + { + "name": "(OldApp) AdHoc", + "file": "./OldApp_AdHoc.mobileprovision" + }, + { + "name": "(OldApp) AdHoc: Share Extension", + "file": "./OldApp_AdHoc_Share_Extension.mobileprovision" + }, + { + "name": "(OldApp) AdHoc: Notification Service", + "file": "./OldApp_AdHoc_Notification_Service.mobileprovision" + } + ] + comment-bot: false + + - name: Set artifact URL output + id: set-artifact-url + run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" postGithubComment: runs-on: ubuntu-latest @@ -559,9 +548,9 @@ jobs: DESKTOP: ${{ needs.desktop.result }} IOS: ${{ needs.iosHybrid.result }} WEB: ${{ needs.web.result }} - ANDROID_LINK: ${{ needs.androidHybrid.outputs.S3_APK_PATH }} + ANDROID_LINK: ${{ needs.androidHybrid.outputs.ROCK_ANDROID_ADHOC_INDEX_URL }} DESKTOP_LINK: https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/${{ needs.prep.outputs.APP_PR_NUMBER }}/NewExpensify.dmg - IOS_LINK: ${{ needs.iosHybrid.outputs.IOS_PATH }} + IOS_LINK: ${{ needs.iosHybrid.outputs.ROCK_IOS_ADHOC_INDEX_URL }} WEB_LINK: https://${{ needs.prep.outputs.APP_PR_NUMBER }}.pr-testing.expensify.com - name: Publish links to apps for download on Expensify/Mobile-Expensify PR @@ -573,5 +562,5 @@ jobs: GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }} ANDROID: ${{ needs.androidHybrid.result }} IOS: ${{ needs.iosHybrid.result }} - ANDROID_LINK: ${{ needs.androidHybrid.outputs.S3_APK_PATH }} - IOS_LINK: ${{ needs.iosHybrid.outputs.IOS_PATH }} + ANDROID_LINK: ${{ needs.androidHybrid.outputs.ROCK_ANDROID_ADHOC_INDEX_URL }} + IOS_LINK: ${{ needs.iosHybrid.outputs.ROCK_IOS_ADHOC_INDEX_URL }} diff --git a/package-lock.json b/package-lock.json index d671634e13c2..fa56552f9f88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -184,10 +184,10 @@ "@react-native/babel-preset": "0.81.4", "@react-native/metro-config": "0.81.4", "@react-navigation/devtools": "^6.0.10", - "@rock-js/platform-android": "0.11.9", - "@rock-js/platform-ios": "0.11.9", - "@rock-js/plugin-metro": "0.11.9", - "@rock-js/provider-s3": "0.11.9", + "@rock-js/platform-android": "0.12.0", + "@rock-js/platform-ios": "0.12.0", + "@rock-js/plugin-metro": "0.12.0", + "@rock-js/provider-s3": "0.12.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "^8.6.9", "@storybook/addon-essentials": "^8.6.9", @@ -281,7 +281,7 @@ "react-refresh": "^0.14.2", "react-test-renderer": "19.1.0", "reassure": "^1.0.0-rc.4", - "rock": "0.11.9", + "rock": "0.12.0", "semver": "7.5.2", "setimmediate": "^1.0.5", "shellcheck": "^1.1.0", @@ -13047,29 +13047,28 @@ } }, "node_modules/@rock-js/config": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/config/-/config-0.11.9.tgz", - "integrity": "sha512-RMJi3l9cq6VaIacyNQZ8F7pucxukX4iBECp1yMHQx400b5c+fgsBW3O6vaMNugQXBEbqr4j79tI09G0zW3tZ2w==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/config/-/config-0.12.0.tgz", + "integrity": "sha512-7tK7UUHlR+dGvjBaaMmzlkJTTPSjdI9pFUFEydcDDuTaUnHMDdz1huuYmjLohKx/NEI/6dwDE5NEN5zWDvy1tQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@rock-js/provider-github": "^0.11.9", - "@rock-js/tools": "^0.11.9", + "@rock-js/provider-github": "^0.12.0", + "@rock-js/tools": "^0.12.0", "joi": "^17.13.3", "tslib": "^2.3.0" } }, "node_modules/@rock-js/platform-android": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/platform-android/-/platform-android-0.11.9.tgz", - "integrity": "sha512-SeX4ZXi3fcfv1yMA5GbFozZOyiE5mOpg+aZhpuMLvJt+DVRiRHleegS0zMx548qXC0DJuf1J+pprXQEayF11Ww==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/platform-android/-/platform-android-0.12.0.tgz", + "integrity": "sha512-WyAMQtqjB7SPS1oOHq4P1pSOIMMLAq0wpbYKouEGY4ZsIHKBgb4wP8iQ0rBPhZhhIw94e4o2G4BnaxqwdJaL2g==", "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-android": "^20.0.0", - "@rock-js/tools": "^0.11.9", - "adm-zip": "^0.5.16", + "@rock-js/tools": "^0.12.0", "tslib": "^2.3.0" } }, @@ -13182,31 +13181,31 @@ } }, "node_modules/@rock-js/platform-apple-helpers": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/platform-apple-helpers/-/platform-apple-helpers-0.11.9.tgz", - "integrity": "sha512-T/+keSlUcZwC2Y1LdRU0EfvKdgrSKkysTOiJy1oR1hYeQruhlslvVTN+45+BCKWjsXUedTfMU+e72cU5YmsYdQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/platform-apple-helpers/-/platform-apple-helpers-0.12.0.tgz", + "integrity": "sha512-Y/skmIHt6kPL8D38EZzvLX+7jLg3ZZd+PWlJ278+B3rqDbIAG5qWkw7geAoiz+cIo5niaETxtVYzsU+us6BIgg==", "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config": "^20.0.0", "@react-native-community/cli-config-apple": "^20.0.0", - "@rock-js/tools": "^0.11.9", + "@rock-js/tools": "^0.12.0", "adm-zip": "^0.5.16", "fast-xml-parser": "^4.5.0", "tslib": "^2.3.0" } }, "node_modules/@rock-js/platform-ios": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/platform-ios/-/platform-ios-0.11.9.tgz", - "integrity": "sha512-RIUnbtS7k6YonUWc/Iz+Q+/oIggoYVIrcU9wElStdItJikTUBNovtKk/pVYbXR5tRZ4N6Hp7w0mvnpMZE/EqRA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/platform-ios/-/platform-ios-0.12.0.tgz", + "integrity": "sha512-CDZgHykqdIAP/Sr1lXcfZR7TTPyIIaVYLprP4XhCaOV7In8v78R3HgrjLYijouhMWo00DLR14d1YRe/i5NfJ+A==", "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config-apple": "^20.0.0", "@react-native-community/cli-types": "^20.0.0", - "@rock-js/platform-apple-helpers": "^0.11.9", - "@rock-js/tools": "^0.11.9", + "@rock-js/platform-apple-helpers": "^0.12.0", + "@rock-js/tools": "^0.12.0", "tslib": "^2.3.0" } }, @@ -13329,18 +13328,18 @@ } }, "node_modules/@rock-js/plugin-metro": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/plugin-metro/-/plugin-metro-0.11.9.tgz", - "integrity": "sha512-ZOI477DJs3bnanKph0WrzR7p/Vet2uKPDKq5acUgV6uo35dxDoehITI0JFuEp/eTdBlVBa9noZiBsshxshucmA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/plugin-metro/-/plugin-metro-0.12.0.tgz", + "integrity": "sha512-T4sk3CI7L4OG3tcdUz788iIzOWpWWTO2ZLOlaoUx9SfYEzJNetCARU+BQySWr6SQAgIh0o39edNyanUSe+h3TA==", "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-server-api": "^20.0.0", - "@rock-js/tools": "^0.11.9", - "metro": "^0.83.1", - "metro-config": "^0.83.1", - "metro-core": "^0.83.1", - "metro-resolver": "^0.83.1", + "@rock-js/tools": "^0.12.0", + "metro": "^0.83.3", + "metro-config": "^0.83.3", + "metro-core": "^0.83.3", + "metro-resolver": "^0.83.3", "tslib": "^2.3.0" } }, @@ -13880,21 +13879,21 @@ } }, "node_modules/@rock-js/provider-github": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/provider-github/-/provider-github-0.11.9.tgz", - "integrity": "sha512-fchHu0Zg7oNbI2GfFcwvQIkGZ4/lHYyxRDYdR+iARrhL0zKK1EPCCk/S8kI3pC9Sm33fQhelZbqcIqW6gh6z/A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/provider-github/-/provider-github-0.12.0.tgz", + "integrity": "sha512-0GL/CNe2EDNWUSsTYaHCRO0+ZxSGT8hxDJaO86M6o8m0jSv49UX3xfjk8dxasslY5VxQlhT2gB7K5niH0UNFUw==", "dev": true, "license": "MIT", "dependencies": { - "@rock-js/tools": "^0.11.9", + "@rock-js/tools": "^0.12.0", "ts-regex-builder": "^1.8.2", "tslib": "^2.3.0" } }, "node_modules/@rock-js/provider-s3": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/provider-s3/-/provider-s3-0.11.9.tgz", - "integrity": "sha512-4hjy5jKft1L0lN6+fILtiSNr9AmWDQZU4BZI5sGeCZJBiI7qnQc8ZK/BPQgnbNX1Q6+8d5bjNPYJsPL8Ned7sw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/provider-s3/-/provider-s3-0.12.0.tgz", + "integrity": "sha512-AoMYzIaq2p9p8QMWihMgK4c1ozqd5BJEEQB7MT0lAKR0suYY3YnTw3e1hSqBZsn6PmMyE+BY/9tNLuACZFluEA==", "dev": true, "license": "MIT", "dependencies": { @@ -13903,14 +13902,14 @@ "@aws-sdk/credential-providers": "^3.830.0", "@aws-sdk/lib-storage": "^3.830.0", "@aws-sdk/s3-request-presigner": "^3.830.0", - "@rock-js/tools": "^0.11.9", + "@rock-js/tools": "^0.12.0", "tslib": "^2.3.0" } }, "node_modules/@rock-js/tools": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/@rock-js/tools/-/tools-0.11.9.tgz", - "integrity": "sha512-tswYFPTethkp2GxIhMVD64zOp4SX7IyFpx3gtH8rw+2gn0EP8cxkG8S+SU0+IwFRVw1Of8yARRyyzq1XVKA04w==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@rock-js/tools/-/tools-0.12.0.tgz", + "integrity": "sha512-yXxkAemK2Dc745LMdWIDjO2j8w7mQsW9Nbe+kwjUaTGS6KG57tquoMkkGP5QsVpyg0+2lIFhNMKPJOlcQN58Wg==", "dev": true, "license": "MIT", "dependencies": { @@ -13973,11 +13972,11 @@ } }, "node_modules/@rock-js/tools/node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -27365,9 +27364,9 @@ } }, "node_modules/fs-fingerprint/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, "license": "MIT", "engines": { @@ -37780,15 +37779,15 @@ "license": "BSD-3-Clause" }, "node_modules/rock": { - "version": "0.11.9", - "resolved": "https://registry.npmjs.org/rock/-/rock-0.11.9.tgz", - "integrity": "sha512-unehLkQIzyK/Py7ZaCuFUpx4sIbbFcnzfbLh0R50VVauCvnmMLy3brEm42ezrY2O6W2v5kzvxHO/dHdCZmtWxw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/rock/-/rock-0.12.0.tgz", + "integrity": "sha512-MiHWE5LgVkO93yOt3qcOvBxDH9oJvBiAotsancgoM4fAb5jaAhL/pbufUkqrD0AaEp3HmBz8ZlfLKfZnKDLExA==", "dev": true, "license": "MIT", "dependencies": { "@react-native-community/cli-config": "^20.0.0", - "@rock-js/config": "^0.11.9", - "@rock-js/tools": "^0.11.9", + "@rock-js/config": "^0.12.0", + "@rock-js/tools": "^0.12.0", "adm-zip": "^0.5.16", "commander": "^12.1.0", "tar": "^7.5.1", @@ -37798,80 +37797,6 @@ "rock": "dist/src/bin.js" } }, - "node_modules/rock/node_modules/@react-native-community/cli-config": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-20.0.2.tgz", - "integrity": "sha512-OuSAyqTv0MBbRqSyO+80IKasHnwLESydZBTrLjIGwGhDokMH07mZo8Io2H8X300WWa57LC2L8vQf73TzGS3ikQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "20.0.2", - "chalk": "^4.1.2", - "cosmiconfig": "^9.0.0", - "deepmerge": "^4.3.0", - "fast-glob": "^3.3.2", - "joi": "^17.2.1" - } - }, - "node_modules/rock/node_modules/@react-native-community/cli-tools": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-20.0.2.tgz", - "integrity": "sha512-bPYhRYggW9IIM8pvrZF/0r6HaxCyEWDn6zfPQPMWlkQUwkzFZ8GBY/M7yiHgDzozWKPT4DqZPumrq806Vcksow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vscode/sudo-prompt": "^9.0.0", - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "launch-editor": "^2.9.1", - "mime": "^2.4.1", - "ora": "^5.4.1", - "prompts": "^2.4.2", - "semver": "^7.5.2" - } - }, - "node_modules/rock/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/rock/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/rock/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/rock/node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -37882,76 +37807,6 @@ "node": ">=18" } }, - "node_modules/rock/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/rock/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rock/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/rock/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/rock/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/rock/node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -37975,25 +37830,12 @@ "node": ">= 18" } }, - "node_modules/rock/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/rock/node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", diff --git a/package.json b/package.json index c665e59c1465..9fb79cdc2129 100644 --- a/package.json +++ b/package.json @@ -257,10 +257,10 @@ "@react-native/babel-preset": "0.81.4", "@react-native/metro-config": "0.81.4", "@react-navigation/devtools": "^6.0.10", - "@rock-js/platform-android": "0.11.9", - "@rock-js/platform-ios": "0.11.9", - "@rock-js/plugin-metro": "0.11.9", - "@rock-js/provider-s3": "0.11.9", + "@rock-js/platform-android": "0.12.0", + "@rock-js/platform-ios": "0.12.0", + "@rock-js/plugin-metro": "0.12.0", + "@rock-js/provider-s3": "0.12.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "^8.6.9", "@storybook/addon-essentials": "^8.6.9", @@ -354,7 +354,7 @@ "react-refresh": "^0.14.2", "react-test-renderer": "19.1.0", "reassure": "^1.0.0-rc.4", - "rock": "0.11.9", + "rock": "0.12.0", "semver": "7.5.2", "setimmediate": "^1.0.5", "shellcheck": "^1.1.0", diff --git a/patches/@rock-js/platform-android/@rock-js+platform-android+0.11.9+001+missing-app-name-hybrid-case.patch b/patches/@rock-js/platform-android/@rock-js+platform-android+0.11.9+001+missing-app-name-hybrid-case.patch deleted file mode 100644 index faa20f24c304..000000000000 --- a/patches/@rock-js/platform-android/@rock-js+platform-android+0.11.9+001+missing-app-name-hybrid-case.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/node_modules/@rock-js/platform-android/dist/src/lib/commands/runAndroid/findOutputFile.js b/node_modules/@rock-js/platform-android/dist/src/lib/commands/runAndroid/findOutputFile.js -index 2938c29..0a66a15 100644 ---- a/node_modules/@rock-js/platform-android/dist/src/lib/commands/runAndroid/findOutputFile.js -+++ b/node_modules/@rock-js/platform-android/dist/src/lib/commands/runAndroid/findOutputFile.js -@@ -1,4 +1,4 @@ --import { existsSync } from 'node:fs'; -+import { existsSync, readdirSync } from 'node:fs'; - import { logger, spawn } from '@rock-js/tools'; - import { getAdbPath } from './adb.js'; - export async function findOutputFile(androidProject, tasks, device) { -@@ -38,6 +38,17 @@ async function getInstallOutputFileName(appName, variant, buildDirectory, apkOrA - if (existsSync(`${buildDirectory}/${outputFile}`)) { - return outputFile; - } -+ -+ // check if there is a file like -debug.apk (missing app name) -+ if (existsSync(buildDirectory)) { -+ const pattern = `-${variant}.${apkOrAab}`; -+ const files = readdirSync(buildDirectory); -+ const matchingFile = files?.find((file) => file.endsWith(pattern)); -+ if (matchingFile) { -+ return matchingFile; -+ } -+ } -+ - logger.debug('Could not find the output file:', { - buildDirectory, - outputFile, diff --git a/patches/@rock-js/platform-android/details.md b/patches/@rock-js/platform-android/details.md deleted file mode 100644 index 8204cc4e44fc..000000000000 --- a/patches/@rock-js/platform-android/details.md +++ /dev/null @@ -1,15 +0,0 @@ -# `@rock-js/platform-android` patches - -### [@rock-js+platform-android+0.11.9+001+missing-app-name-hybrid-case.patch](@rock-js+platform-android+0.11.9+001+missing-app-name-hybrid-case.patch) - -- Reason: - - ``` - This patch adds a fallback mechanism to find Android build output files (APK/AAB) when the appName value is not properly read from the project structure. - In a hybrid app scenario, the Android build process generates output files with names like `Expensify-debug.apk` instead of the expected '-debug.apk' based on the project structure (no appName due to the lack of a project subfolder in Mobile-Expensify/Android). - ``` - -- Upstream PR/issue: https://github.com/callstackincubator/rock/pull/628 -- E/App issue: https://github.com/Expensify/App/issues/74400 -- PR introducing patch: https://github.com/Expensify/App/pull/73525 - diff --git a/patches/@rock-js/platform-apple-helpers/@rock-js+platform-apple-helpers+0.11.9+001+recalculate-fingerprint-for-local-builds-only.patch b/patches/@rock-js/platform-apple-helpers/@rock-js+platform-apple-helpers+0.11.9+001+recalculate-fingerprint-for-local-builds-only.patch deleted file mode 100644 index 47096081eba0..000000000000 --- a/patches/@rock-js/platform-apple-helpers/@rock-js+platform-apple-helpers+0.11.9+001+recalculate-fingerprint-for-local-builds-only.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/@rock-js/platform-apple-helpers/dist/src/lib/utils/buildApp.js b/node_modules/@rock-js/platform-apple-helpers/dist/src/lib/utils/buildApp.js -index 50937a5..c825b22 100644 ---- a/node_modules/@rock-js/platform-apple-helpers/dist/src/lib/utils/buildApp.js -+++ b/node_modules/@rock-js/platform-apple-helpers/dist/src/lib/utils/buildApp.js -@@ -35,7 +35,7 @@ export async function buildApp({ args, projectConfig, pluginConfig, platformName - xcodeProject = newProjectConfig.xcodeProject; - sourceDir = newProjectConfig.sourceDir; - } -- if (didInstallPods) { -+ if (didInstallPods && args.local) { - // After installing pods the fingerprint likely changes. - // We update the artifact name to reflect the new fingerprint and store proper entry in the local cache. - artifactNameToSave = await formatArtifactName({ diff --git a/patches/@rock-js/platform-apple-helpers/details.md b/patches/@rock-js/platform-apple-helpers/details.md deleted file mode 100644 index f64143c2e071..000000000000 --- a/patches/@rock-js/platform-apple-helpers/details.md +++ /dev/null @@ -1,15 +0,0 @@ -# `@rock-js/platform-apple-helpers` patches - -### [@rock-js+platform-apple-helpers+0.11.9+001+recalculate-fingerprint-for-local-builds-only.patch](@rock-js+platform-apple-helpers+0.11.9+001+recalculate-fingerprint-for-local-builds-only.patch) - -- Reason: - - ``` - This patch prevents recalculating the fingerprint after pod installation, which caused fingerprint mismatches between CI and local builds. - Local builds with the --local flag will still recalculate the fingerprint after pod installation. - ``` - -- Upstream PR/issue: 🛑 -- E/App issue: https://github.com/Expensify/App/issues/74400 -- PR introducing patch: https://github.com/Expensify/App/pull/73525 - diff --git a/patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+001+support-public-access.patch b/patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+001+support-public-access.patch deleted file mode 100644 index d31bdf4a1afc..000000000000 --- a/patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+001+support-public-access.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff --git a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts -index 8c4160c..1038c91 100644 ---- a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts -+++ b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts -@@ -49,6 +49,10 @@ type ProviderConfig = { - * External ID when assuming a role (for additional security). - */ - externalId?: string; -+ /** -+ * If true, the provider will not sign requests and will try to access the S3 bucket without authentication. -+ */ -+ publicAccess?: boolean; - }; - export declare class S3BuildCache implements RemoteBuildCache { - name: string; -diff --git a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js -index 1d9331b..1e794b9 100644 ---- a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js -+++ b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js -@@ -49,6 +49,18 @@ export class S3BuildCache { - // Use shared config file (e.g. ~/.aws/credentials) with a profile - s3Config.credentials = fromIni({ profile: config.profile }); - } -+ else if (config.publicAccess) { -+ // Access the S3 bucket without authentication -+ s3Config.signer = { -+ sign: async (request) => request, -+ }; -+ s3Config.credentials = { -+ accessKeyId: '', -+ secretAccessKey: '', -+ }; -+ } -+ -+ - this.s3 = new clientS3.S3Client(s3Config); - const awsBucket = config.bucket ?? ''; - const bucketTokens = awsBucket.split('/'); -@@ -98,15 +110,24 @@ export class S3BuildCache { - return results; - } - async download({ artifactName, }) { -- const res = await this.s3.send(new clientS3.GetObjectCommand({ -- Bucket: this.bucket, -- Key: `${this.directory}/${artifactName}.zip`, -- })); -- return new Response(toWebStream(res.Body), { -- headers: { -- 'content-length': String(res.ContentLength), -- }, -- }); -+ try{ -+ const res = await this.s3.send(new clientS3.GetObjectCommand({ -+ Bucket: this.bucket, -+ Key: `${this.directory}/${artifactName}.zip`, -+ })); -+ return new Response(toWebStream(res.Body), { -+ headers: { -+ 'content-length': String(res.ContentLength), -+ }, -+ }); -+ } -+ catch(error){ -+ if(this.config.publicAccess){ -+ // Avoid misleading Access Denied error message -+ error.message = `Build not found or not accessible to the public`; -+ } -+ throw error; -+ } - } - async delete({ artifactName, skipLatest, }) { - if (skipLatest) { diff --git a/patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+002+add-acl-upload-param.patch b/patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+002+add-acl-upload-param.patch deleted file mode 100644 index 023a5fd6713c..000000000000 --- a/patches/@rock-js/provider-s3/@rock-js+provider-s3+0.11.9+002+add-acl-upload-param.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts -index 1038c91..fdb2e2e 100644 ---- a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts -+++ b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.d.ts -@@ -53,6 +53,10 @@ type ProviderConfig = { - * If true, the provider will not sign requests and will try to access the S3 bucket without authentication. - */ - publicAccess?: boolean; -+ /** -+ * ACL (Access Control List) to use for uploaded objects -+ */ -+ acl?: clientS3.ObjectCannedACL; - }; - export declare class S3BuildCache implements RemoteBuildCache { - name: string; -diff --git a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js -index 813abcd..3c31f65 100644 ---- a/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js -+++ b/node_modules/@rock-js/provider-s3/dist/src/lib/providerS3.js -@@ -77,6 +77,7 @@ export class S3BuildCache { - Key: key, - Body: buffer, - ContentType: contentType || 'application/octet-stream', -+ ...(this.config.acl && { ACL: this.config.acl }), - Metadata: { - createdAt: new Date().toISOString(), - }, diff --git a/patches/@rock-js/provider-s3/details.md b/patches/@rock-js/provider-s3/details.md deleted file mode 100644 index ed9b6ab6ec71..000000000000 --- a/patches/@rock-js/provider-s3/details.md +++ /dev/null @@ -1,26 +0,0 @@ -# `@rock-js/provider-s3` patches - -### [@rock-js+provider-s3+0.11.9+001+support-public-access.patch](@rock-js+provider-s3+0.11.9+001+support-public-access.patch) - -- Reason: - - ``` - This patch adds support for accessing public S3 buckets without authentication. - When the `publicAccess` option is set to true, the provider will not sign requests and will attempt to access the S3 bucket without AWS credentials. This is useful for scenarios where the S3 bucket is configured for public read access. - ``` - -- Upstream PR/issue: https://github.com/callstackincubator/rock/pull/625 -- E/App issue: https://github.com/Expensify/App/issues/74400 -- PR introducing patch: https://github.com/Expensify/App/pull/73525 - -### [@rock-js+provider-s3+0.11.9+002+add-acl-upload-param.patch](@rock-js+provider-s3+0.11.9+002+add-acl-upload-param.patch) - -- Reason: - - ``` - This patch adds support for specifying an ACL (Access Control List) parameter when uploading objects to S3. - ``` - -- Upstream PR/issue: https://github.com/callstackincubator/rock/pull/626 -- E/App issue: https://github.com/Expensify/App/issues/74400 -- PR introducing patch: https://github.com/Expensify/App/pull/73525 \ No newline at end of file diff --git a/rock.config.mjs b/rock.config.mjs index 5e4c6c142b35..9e78e6320abe 100644 --- a/rock.config.mjs +++ b/rock.config.mjs @@ -25,4 +25,6 @@ export default { env: ['USE_WEB_PROXY', 'PUSHER_DEV_SUFFIX', 'SECURE_NGROK_URL', 'NGROK_URL', 'USE_NGROK'], ignorePaths: ['Mobile-Expensify/Android/assets/app/shared/bundle.js'], }, + // Forces React Native to build from source to include our custom patches + usePrebuiltRNCore: 0, }; diff --git a/scripts/run-build.sh b/scripts/run-build.sh index 34a12e551237..bd81a64e7657 100755 --- a/scripts/run-build.sh +++ b/scripts/run-build.sh @@ -63,16 +63,15 @@ else fi # Check if the argument is one of the desired values -# RCT_USE_RN_DEP=0 RCT_USE_PREBUILT_RNCORE=0 - force React Native to build from source to include our custom patches case "$BUILD" in --ios) - RCT_USE_RN_DEP=0 RCT_USE_PREBUILT_RNCORE=0 npx rock run:ios --configuration $IOS_MODE --scheme "$SCHEME" --dev-server "${ROCK_FLAGS[@]}" + npx rock run:ios --configuration $IOS_MODE --scheme "$SCHEME" --dev-server "${ROCK_FLAGS[@]}" ;; --ipad) - RCT_USE_RN_DEP=0 RCT_USE_PREBUILT_RNCORE=0 npx rock run:ios --simulator "iPad Pro (12.9-inch) (6th generation)" --configuration $IOS_MODE --scheme "$SCHEME" --dev-server "${ROCK_FLAGS[@]}" + npx rock run:ios --simulator "iPad Pro (12.9-inch) (6th generation)" --configuration $IOS_MODE --scheme "$SCHEME" --dev-server "${ROCK_FLAGS[@]}" ;; --ipad-sm) - RCT_USE_RN_DEP=0 RCT_USE_PREBUILT_RNCORE=0 npx rock run:ios --simulator "iPad Pro (11-inch) (4th generation)" --configuration $IOS_MODE --scheme "$SCHEME" --dev-server "${ROCK_FLAGS[@]}" + npx rock run:ios --simulator "iPad Pro (11-inch) (4th generation)" --configuration $IOS_MODE --scheme "$SCHEME" --dev-server "${ROCK_FLAGS[@]}" ;; --android) # Check if this is an Expensify developer with WARP (only they need cert import)