diff --git a/.github/actions/expo-caches/action.yml b/.github/actions/expo-caches/action.yml index cbb16a96f8f1a6..6034c9e37a17e1 100644 --- a/.github/actions/expo-caches/action.yml +++ b/.github/actions/expo-caches/action.yml @@ -68,14 +68,14 @@ runs: steps: - name: ♻️ Restore /docs node modules if: inputs.pnpm-docs == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: docs-modules-cache with: path: docs/node_modules key: ${{ runner.os }}-docs-modules-${{ hashFiles('docs/pnpm-lock.yaml') }} - name: ♻️ Restore Docs Next cache if: inputs.pnpm-docs == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: docs/.next/cache key: ${{ runner.os }}-docs-${{ hashFiles('docs/pnpm-lock.yaml') }}-${{ hashFiles('docs/**/*.js', 'docs/**/*.jsx', 'docs/**/*.ts', 'docs/**/*.tsx') }} @@ -83,7 +83,7 @@ runs: ${{ runner.os }}-docs-${{ hashFiles('docs/pnpm-lock.yaml') }}- - name: ♻️ Restore Docs ESLint cache if: inputs.pnpm-docs == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: docs/.eslintcache key: ${{ runner.os }}-docs-eslint-${{ hashFiles('docs/pnpm-lock.yaml') }}-${{ hashFiles('docs/eslint.config.mjs') }} @@ -91,7 +91,7 @@ runs: - name: ♻️ Restore Docs API data if: inputs.docs-api-data == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: docs-api-data-cache with: path: docs/public/static/data/unversioned @@ -99,7 +99,7 @@ runs: - name: ♻️ Restore ios/Pods from cache if: inputs.ios-pods == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: ios-pods-cache with: path: ios/Pods @@ -107,7 +107,7 @@ runs: - name: ♻️ Restore apps/bare-expo/ios/Pods from cache if: inputs.bare-expo-pods == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: bare-expo-pods-cache with: path: apps/bare-expo/ios/Pods @@ -115,7 +115,7 @@ runs: - name: ♻️ Restore apps/bare-expo/macos/Pods from cache if: inputs.bare-expo-macos-pods == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: bare-expo-macos-pods-cache with: path: apps/bare-expo/macos/Pods @@ -123,7 +123,7 @@ runs: - name: ♻️ Restore apps/native-tests/ios/Pods from cache if: inputs.native-tests-pods == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: native-tests-pods-cache with: path: apps/native-tests/ios/Pods @@ -131,13 +131,13 @@ runs: - name: ♻️ Restore Gradle cache if: inputs.ndk == 'true' || inputs.gradle == 'true' - uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4 + uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: cache-read-only: ${{ github.ref != 'refs/heads/main' && !contains(github.ref, 'sdk-') }} - name: ♻️ Restore Android NDK from cache if: inputs.ndk == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: cache-android-ndk with: path: /usr/local/lib/android/sdk/ndk/${{ inputs.ndk-version }}/ @@ -155,7 +155,7 @@ runs: - name: ♻️ Restore ccache (iOS) if: inputs.ccache == 'true' && runner.os == 'macOS' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ${{ runner.temp }}/.ccache # It is necessary to include Xcode version in the cache key, because each Xcode version introduces changes to clang compiler, @@ -165,7 +165,7 @@ runs: - name: ♻️ Restore ccache (Android) if: inputs.ccache == 'true' && runner.os == 'Linux' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ${{ runner.temp }}/.ccache key: ${{ runner.os }}-ccache-${{ hashFiles('pnpm-lock.yaml', 'packages/**/*.c', 'packages/**/*.cpp', 'packages/**/*.h', 'packages/**/build.gradle', 'packages/**/build.gradle.kts', 'packages/**/settings.gradle', 'packages/**/settings.gradle.kts', 'apps/bare-expo/**/build.gradle', 'apps/bare-expo/**/settings.gradle') }} @@ -177,7 +177,7 @@ runs: run: echo "sha256=$(git lfs ls-files | openssl dgst -sha256)" >> $GITHUB_OUTPUT shell: bash - name: ♻️ Restore Git LFS cache - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: git-lfs-cache if: inputs.git-lfs == 'true' with: @@ -190,7 +190,7 @@ runs: run: echo "REACT_NATIVE_DOWNLOADS_DIR=$HOME/.gradle/react-native-downloads" >> $GITHUB_ENV - name: ♻️ Restore Gradle downloads cache for React Native libraries if: inputs.react-native-gradle-downloads == 'true' - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: ${{ env.REACT_NATIVE_DOWNLOADS_DIR }} key: gradle-downloads-${{ hashFiles('pnpm-lock.yaml') }} diff --git a/.github/actions/slack-notify/action.yml b/.github/actions/slack-notify/action.yml index 52d282fb180976..90bd0e3821d566 100644 --- a/.github/actions/slack-notify/action.yml +++ b/.github/actions/slack-notify/action.yml @@ -36,7 +36,7 @@ runs: steps: - name: Gather job details id: details - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: JOB_NAME: ${{ inputs.job_name }} JOB_STATUS: ${{ inputs.status }} @@ -186,7 +186,7 @@ runs: core.setOutput('author_name', escape(process.env.AUTHOR_NAME)); - name: Send to Slack - uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1 + uses: slackapi/slack-github-action@45a88b9581bfab2566dc881e2cd66d334e621e2c # v3.0.3 with: webhook: ${{ inputs.webhook }} webhook-type: incoming-webhook diff --git a/.github/codemention.yml b/.github/codemention.yml index 94182cd6b615a1..39c3a8fa3f77e7 100644 --- a/.github/codemention.yml +++ b/.github/codemention.yml @@ -1,6 +1,13 @@ commentConfiguration: - preamble: 'Subscribed to pull request' - epilogue: 'Generated by [CodeMention](https://github.com/expo/expo/actions/workflows/codemention.yaml)' + template: | + Subscribed to pull request + | File Patterns | Mentions | + | - | - | + {{#each matchedRules}} + | {{#each patterns}}{{markdownEscape this}}{{#unless @last}}
{{/unless}}{{/each}} | {{#each mentions}}@{{this}}{{#unless @last}}, {{/unless}}{{/each}} | + {{/each}} + + Generated by [CodeMention](https://github.com/expo/expo/actions/workflows/codemention.yaml) rules: - patterns: ['.github/workflows/**'] mentions: ['tsapeta', 'brentvatne', 'kudo'] diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fff8eee6575662..b990e80787329e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,6 +10,12 @@ updates: - /.github/actions/use-android-emulator schedule: interval: weekly + ignore: + # Stay on gradle/actions v5.x: v6 moved caching into the closed-source + # gradle-actions-caching component governed by Gradle's Terms of Use. + # Remove this if we decide to adopt the v6+ caching component. + - dependency-name: 'gradle/actions' + update-types: ['version-update:semver-major'] groups: actions: patterns: diff --git a/.github/workflows/android-instrumentation-tests.yml b/.github/workflows/android-instrumentation-tests.yml index 774982009969d1..f28b91e2cdcebd 100644 --- a/.github/workflows/android-instrumentation-tests.yml +++ b/.github/workflows/android-instrumentation-tests.yml @@ -58,7 +58,7 @@ jobs: api-level: [36] steps: - name: 👀 Check out repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: @@ -94,7 +94,7 @@ jobs: script: pnpm expotools android-native-unit-tests --type instrumented - name: 💾 Save test results if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: test-results path: packages/*/android/build/outputs/androidTest-results/**/* diff --git a/.github/workflows/android-unit-tests.yml b/.github/workflows/android-unit-tests.yml index 2694afa3d4c472..63ba32b650dc5c 100644 --- a/.github/workflows/android-unit-tests.yml +++ b/.github/workflows/android-unit-tests.yml @@ -35,7 +35,7 @@ jobs: GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx3072m -XX:MaxMetaspaceSize=1024m steps: - name: 👀 Check out repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: @@ -68,7 +68,7 @@ jobs: run: pnpm expotools native-unit-tests --platform android - name: 💾 Save test results if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: test-results path: packages/*/android/build/test-results/**/*xml diff --git a/.github/workflows/bare-diffs.yml b/.github/workflows/bare-diffs.yml index beee451a8d6020..27b8b71b9e0d77 100644 --- a/.github/workflows/bare-diffs.yml +++ b/.github/workflows/bare-diffs.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: @@ -43,7 +43,7 @@ jobs: author_name: Check for Changes in Bare Diffs - name: 💾 Store artifacts of diff failures if: failure() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: template-bare-minimum-bare-diff-failure path: docs/public/static/diffs/template-bare-minimum/raw diff --git a/.github/workflows/check-issues-nightly.yml b/.github/workflows/check-issues-nightly.yml index 69bf5d530ed988..feb2d438844d5d 100644 --- a/.github/workflows/check-issues-nightly.yml +++ b/.github/workflows/check-issues-nightly.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm diff --git a/.github/workflows/cli.yml b/.github/workflows/cli.yml index 653744d9c00dd9..bf18f2adfc506e 100644 --- a/.github/workflows/cli.yml +++ b/.github/workflows/cli.yml @@ -63,7 +63,7 @@ jobs: shard: [1, 2, 3, 4] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch @@ -121,7 +121,7 @@ jobs: git config --global core.eol lf - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch @@ -165,7 +165,7 @@ jobs: shard: [1, 2, 3, 4] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch @@ -198,7 +198,7 @@ jobs: run: | echo version="$(pnpm exec playwright --version)" >> $GITHUB_OUTPUT - name: 🎭 Cache Playwright browser binaries - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: playwright-browser-cache with: path: ~/.cache/ms-playwright @@ -213,7 +213,7 @@ jobs: run: pnpm test:playwright --shard ${{ matrix.shard }}/${{ strategy.job-total }} - name: 🗄️ Upload playwright report - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: name: playwright-report-ubuntu-${{ matrix.shard }} @@ -246,7 +246,7 @@ jobs: git config --global core.eol lf - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch @@ -280,7 +280,7 @@ jobs: echo version="$(pnpm exec playwright --version)" >> $GITHUB_OUTPUT echo dir="$(echo $PLAYWRIGHT_BROWSERS_PATH)" >> $GITHUB_OUTPUT - name: 🎭 Cache Playwright browser binaries - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 id: playwright-browser-cache with: path: ${{ steps.playwright-info.outputs.dir }} @@ -295,7 +295,7 @@ jobs: run: pnpm test:playwright --shard ${{ matrix.shard }}/${{ strategy.job-total }} - name: 🗄️ Upload playwright report - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: name: playwright-report-windows-${{ matrix.shard }} diff --git a/.github/workflows/code-review.yml b/.github/workflows/code-review.yml index 60af1ff722bded..bd61caefac3911 100644 --- a/.github/workflows/code-review.yml +++ b/.github/workflows/code-review.yml @@ -27,7 +27,7 @@ jobs: timeout-minutes: 30 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: diff --git a/.github/workflows/codemention.yaml b/.github/workflows/codemention.yaml index ec332388d23667..f91e48e5dc8f2a 100644 --- a/.github/workflows/codemention.yaml +++ b/.github/workflows/codemention.yaml @@ -16,6 +16,6 @@ jobs: # Pinned to a commit SHA (not the v1.4.0 tag) because this runs under # pull_request_target with a write-scoped token — a re-pointed tag from # a compromised upstream account would give the attacker repo write access. - - uses: tobyhs/codemention@bb6bfb2c3ff1e6fee7ee37006bbee6d114057225 # v1.4.0 + - uses: tobyhs/codemention@14c10ab8528ed556c3b92f205e7b5aa03e7b187c # v1.5.2 with: githubToken: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/commentator.yml b/.github/workflows/commentator.yml index 1009aad8794f55..0fbedb6bea7d86 100644 --- a/.github/workflows/commentator.yml +++ b/.github/workflows/commentator.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm diff --git a/.github/workflows/create-expo-app.yml b/.github/workflows/create-expo-app.yml index 8d53b80a14f3bd..3f547d3d52ca36 100644 --- a/.github/workflows/create-expo-app.yml +++ b/.github/workflows/create-expo-app.yml @@ -29,7 +29,7 @@ jobs: node: [20, 22] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch diff --git a/.github/workflows/create-expo-module.yml b/.github/workflows/create-expo-module.yml index ab332e81ca2ec4..e1aaea2f66180f 100644 --- a/.github/workflows/create-expo-module.yml +++ b/.github/workflows/create-expo-module.yml @@ -29,7 +29,7 @@ jobs: node: [20, 22] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch diff --git a/.github/workflows/development-client-e2e.yml b/.github/workflows/development-client-e2e.yml index 091042cf0104bd..602ec27a5e1172 100644 --- a/.github/workflows/development-client-e2e.yml +++ b/.github/workflows/development-client-e2e.yml @@ -25,7 +25,7 @@ jobs: api-level: [36] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🍺 Install required tools @@ -34,7 +34,7 @@ jobs: brew install applesimutils brew install watchman - name: 💎 Setup Ruby and install gems - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: bundler-cache: true ruby-version: 3.2.2 @@ -71,7 +71,7 @@ jobs: working-directory: packages/expo-dev-client - name: 💾 Store artifacts of build failures if: failure() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: expo-dev-client-e2e-artifacts path: packages/expo-dev-client/artifacts diff --git a/.github/workflows/development-client-latest-e2e.yml b/.github/workflows/development-client-latest-e2e.yml index d192dad6e94c6d..fd2d157850412b 100644 --- a/.github/workflows/development-client-latest-e2e.yml +++ b/.github/workflows/development-client-latest-e2e.yml @@ -18,7 +18,7 @@ jobs: api-level: [36] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🍺 Install required tools @@ -27,7 +27,7 @@ jobs: brew install applesimutils brew install watchman - name: 💎 Setup Ruby and install gems - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: bundler-cache: true ruby-version: 3.2.2 @@ -69,7 +69,7 @@ jobs: working-directory: packages/expo-dev-client - name: 💾 Store artifacts of build failures if: failure() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: expo-dev-client-latest-e2e-artifacts path: packages/expo-dev-client/artifacts diff --git a/.github/workflows/development-client.yml b/.github/workflows/development-client.yml index c26544bd4000e2..23e511e7978050 100644 --- a/.github/workflows/development-client.yml +++ b/.github/workflows/development-client.yml @@ -26,7 +26,7 @@ jobs: ndk-version: [21.4.7075529] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm @@ -90,7 +90,7 @@ jobs: runs-on: macos-15 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm diff --git a/.github/workflows/docs-pr-destroy.yml b/.github/workflows/docs-pr-destroy.yml index 847756070d755c..419070b83d909d 100644 --- a/.github/workflows/docs-pr-destroy.yml +++ b/.github/workflows/docs-pr-destroy.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: ⬢ Setup Node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: diff --git a/.github/workflows/docs-pr.yml b/.github/workflows/docs-pr.yml index b3b2acd1a9d833..5713f9755922be 100644 --- a/.github/workflows/docs-pr.yml +++ b/.github/workflows/docs-pr.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - name: 🏗️ Setup pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: @@ -80,15 +80,16 @@ jobs: - name: 🚀 Deploy Docs website if: contains(github.event.pull_request.labels.*.name, 'preview') id: deploy - uses: cloudflare/wrangler-action@9acf94ace14e7dc412b076f2c5c20b8ce93c79cd # v3 + uses: cloudflare/wrangler-action@ebbaa1584979971c8614a24965b4405ff95890e0 # v4.0.0 with: apiToken: ${{ secrets.CLOUDFLARE_PAGES_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --branch=pr-${{ github.event.pull_request.number }} workingDirectory: docs + wranglerVersion: '3' - name: 💬 Comment with preview URL if: contains(github.event.pull_request.labels.*.name, 'preview') - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e0d01fa4171f71..b5aa1887093238 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: fetch-depth: 30000 - name: 🏗️ Setup pnpm @@ -100,12 +100,13 @@ jobs: - name: 🚀 Deploy Docs website if: github.ref == 'refs/heads/main' id: deploy - uses: cloudflare/wrangler-action@9acf94ace14e7dc412b076f2c5c20b8ce93c79cd # v3 + uses: cloudflare/wrangler-action@ebbaa1584979971c8614a24965b4405ff95890e0 # v4.0.0 with: apiToken: ${{ secrets.CLOUDFLARE_PAGES_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy --branch=main workingDirectory: docs + wranglerVersion: '3' - name: 🧹 Prune old production deployments if: github.ref == 'refs/heads/main' working-directory: docs diff --git a/.github/workflows/expo-go-android-lint.yml b/.github/workflows/expo-go-android-lint.yml index 401146b9de0656..f702d1c2ea1216 100644 --- a/.github/workflows/expo-go-android-lint.yml +++ b/.github/workflows/expo-go-android-lint.yml @@ -25,7 +25,7 @@ jobs: GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx3072m -XX:MaxMetaspaceSize=1024m steps: - name: 👀 Check out repository - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: submodules: true - name: 🔨 Install pnpm diff --git a/.github/workflows/expotools.yml b/.github/workflows/expotools.yml index 8db1cbbe1f21af..8ddc5efca04618 100644 --- a/.github/workflows/expotools.yml +++ b/.github/workflows/expotools.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: diff --git a/.github/workflows/fingerprint.yml b/.github/workflows/fingerprint.yml index 5f29988ad6b435..ca487c22e33a9b 100644 --- a/.github/workflows/fingerprint.yml +++ b/.github/workflows/fingerprint.yml @@ -31,7 +31,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: 🔨 Install pnpm @@ -125,7 +125,7 @@ jobs: node ${{ github.workspace }}/packages/@expo/fingerprint/bin/cli.js fingerprint:generate > ${{ github.workspace }}/fingerprint-${{ matrix.os }}.json } - name: 📤 Upload fingerprint - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: fingerprint-${{ matrix.os }} path: fingerprint-${{ matrix.os }}.json @@ -135,17 +135,17 @@ jobs: runs-on: ubuntu-latest steps: - name: 📥 Download fingerprint (macos) - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: fingerprint-macos-latest - name: 📥 Download fingerprint (ubuntu) - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: fingerprint-ubuntu-latest - name: 📥 Download fingerprint (windows) - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: fingerprint-windows-latest diff --git a/.github/workflows/ios-prebuild-external-xcframeworks.yml b/.github/workflows/ios-prebuild-external-xcframeworks.yml index aa164341787554..9476f37bb82015 100644 --- a/.github/workflows/ios-prebuild-external-xcframeworks.yml +++ b/.github/workflows/ios-prebuild-external-xcframeworks.yml @@ -47,7 +47,7 @@ jobs: packages: ${{ steps.detect.outputs.packages }} steps: - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: submodules: false # Start shallow; the detect step fetches the event base if needed. @@ -167,7 +167,7 @@ jobs: flavor: [Debug, Release] steps: - name: Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Switch to Xcode 26.4.1 run: sudo xcode-select --switch /Applications/Xcode_26.4.1.app @@ -209,7 +209,7 @@ jobs: et prebuild $ARGS - name: Upload XCFrameworks - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: xcframeworks-${{ matrix.flavor }} path: packages/precompile/.build/*/output/**/${{ matrix.flavor == 'Debug' && 'debug' || 'release' }}/xcframeworks/*.tar.gz @@ -226,7 +226,7 @@ jobs: - name: Setup gcloud if: ${{ success() && (github.event.inputs.publish == 'true' || github.event_name == 'push') && github.repository == 'expo/expo' }} - uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 + uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3.0.1 with: project_id: exponentjs diff --git a/.github/workflows/ios-static-frameworks.yml b/.github/workflows/ios-static-frameworks.yml index bffae7009b732c..78eb328c3f42f6 100644 --- a/.github/workflows/ios-static-frameworks.yml +++ b/.github/workflows/ios-static-frameworks.yml @@ -18,13 +18,13 @@ jobs: runs-on: macos-26 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Switch to Xcode 26.4.1 run: sudo xcode-select --switch /Applications/Xcode_26.4.1.app - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 💎 Setup Ruby - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: ruby-version: 3.2.2 - name: 💎 Install Ruby gems diff --git a/.github/workflows/ios-unit-tests.yml b/.github/workflows/ios-unit-tests.yml index 0454eeafa091a1..3617a2cb2329e3 100644 --- a/.github/workflows/ios-unit-tests.yml +++ b/.github/workflows/ios-unit-tests.yml @@ -41,13 +41,13 @@ jobs: timeout-minutes: 75 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Switch to Xcode 26.4.1 run: sudo xcode-select --switch /Applications/Xcode_26.4.1.app - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 💎 Setup Ruby and install gems - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: bundler-cache: true ruby-version: 3.2.2 @@ -98,7 +98,7 @@ jobs: run: ccache -s -v - name: 📤 Upload xcresult if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: ios-unit-tests-results path: /tmp/ios-unit-tests-results diff --git a/.github/workflows/issue-closed.yml b/.github/workflows/issue-closed.yml index 3770e8826d4eca..076bfb17f7ea0c 100644 --- a/.github/workflows/issue-closed.yml +++ b/.github/workflows/issue-closed.yml @@ -10,7 +10,7 @@ jobs: if: github.repository == 'expo/expo' && contains(github.event.issue.labels.*.name, 'Issue accepted') steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm diff --git a/.github/workflows/issue-opened.yml b/.github/workflows/issue-opened.yml index 6775df4fd0188e..a4ef525b2ecb51 100644 --- a/.github/workflows/issue-opened.yml +++ b/.github/workflows/issue-opened.yml @@ -20,7 +20,7 @@ jobs: text: 'This issue should be triaged ASAP: ${{ github.event.issue.html_url }}' author_name: ${{ github.event.issue.user.login }} fields: repo - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 if: ${{ contains( env.TRUSTED_USERS, github.event.issue.user.login ) }} with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} @@ -37,7 +37,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm diff --git a/.github/workflows/issue-stale.yml b/.github/workflows/issue-stale.yml index 3e860b5bfecd5a..f1640aaa129171 100644 --- a/.github/workflows/issue-stale.yml +++ b/.github/workflows/issue-stale.yml @@ -9,7 +9,7 @@ jobs: if: github.repository == 'expo/expo' runs-on: ubuntu-24.04 steps: - - uses: actions/stale@a20b814fb01b71def3bd6f56e7494d667ddf28da # v4 + - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 with: ascending: false operations-per-run: 300 diff --git a/.github/workflows/issue-triage.yml b/.github/workflows/issue-triage.yml index 3ef325678b615e..a335455cd2648d 100644 --- a/.github/workflows/issue-triage.yml +++ b/.github/workflows/issue-triage.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && contains(github.event.label.name, 'incomplete issue: missing or invalid repro') }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -60,7 +60,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && contains(github.event.label.name, 'incomplete issue: missing info') }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -96,7 +96,7 @@ jobs: if: github.repository == 'expo/expo' && github.event_name == 'issues' && github.event.label.name == 'issue accepted' steps: - name: Comment on issue - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -109,7 +109,7 @@ jobs: However, we can’t promise any sort of timeline for resolution. We prioritize issues based on severity, breadth of impact, and alignment with our roadmap. If you’d like to help move it more quickly, you can continue to investigate it more deeply and/or you can open a pull request that fixes the cause. `}) - name: Remove "Needs Review" label - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: script: | try { @@ -125,7 +125,7 @@ jobs: } } - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm @@ -153,7 +153,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && contains(github.event.label.name, 'invalid issue: question') }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -181,7 +181,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && contains(github.event.label.name, 'invalid issue: feature request') }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -204,7 +204,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && contains(github.event.label.name, 'invalid issue: third-party library') }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -231,7 +231,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && contains(github.event.label.name, 'invalid issue: react-native-core') }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -253,7 +253,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && github.event.label.name == 'Comments on closed issue' }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -275,7 +275,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && github.event.label.name == 'invalid issue: EAS Build troubleshooting' }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -297,7 +297,7 @@ jobs: runs-on: ubuntu-24.04 if: "${{ github.repository == 'expo/expo' && github.event.label.name == 'Version bump PR' }}" steps: - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | diff --git a/.github/workflows/native-component-list.yml b/.github/workflows/native-component-list.yml index 122c3cec95ac78..ea092fed92f242 100644 --- a/.github/workflows/native-component-list.yml +++ b/.github/workflows/native-component-list.yml @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: diff --git a/.github/workflows/pr-contributor-labeler.yml b/.github/workflows/pr-contributor-labeler.yml index 7c242358ec53b2..fe4433dae6d683 100644 --- a/.github/workflows/pr-contributor-labeler.yml +++ b/.github/workflows/pr-contributor-labeler.yml @@ -16,12 +16,12 @@ jobs: if: github.repository == 'expo/expo' runs-on: ubuntu-latest steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: sparse-checkout: | .github/partner-allowlist.json sparse-checkout-cone-mode: false - - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 env: AFFILIATIONS: | facebook=meta diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 0a14173207359f..cbfc09fe6cb5ce 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -37,7 +37,7 @@ jobs: actions: write steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: ⬇️ Fetch commits from base branch @@ -74,7 +74,7 @@ jobs: echo "isPreviousFingerprintEmpty=${{ steps.fingerprint.outputs.previous-fingerprint == '' }}" - name: 🏷️ Labeling PR - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.previous-fingerprint != '' && steps.fingerprint.outputs.fingerprint-diff == '[]' }} with: script: | @@ -97,7 +97,7 @@ jobs: labels: ['bot: fingerprint compatible'] }) - name: 🏷️ Labeling PR - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.previous-fingerprint != '' && steps.fingerprint.outputs.fingerprint-diff != '[]' }} with: script: | @@ -121,7 +121,7 @@ jobs: }) - name: 🔍 Find old comment if it exists - uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3 + uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0 if: ${{ github.event_name == 'pull_request' }} id: old_comment with: @@ -130,7 +130,7 @@ jobs: body-includes: - name: 💬 Add comment with fingerprint if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.previous-fingerprint != '' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id == '' }} - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -159,7 +159,7 @@ jobs: }); - name: 💬 Update comment with fingerprint if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.previous-fingerprint != '' && steps.fingerprint.outputs.fingerprint-diff != '[]' && steps.old_comment.outputs.comment-id != '' }} - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | @@ -189,7 +189,7 @@ jobs: }); - name: 💬 Delete comment with fingerprint if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.previous-fingerprint != '' && steps.fingerprint.outputs.fingerprint-diff == '[]' && steps.old_comment.outputs.comment-id != '' }} - uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: github-token: ${{ secrets.EXPO_BOT_GITHUB_TOKEN }} script: | diff --git a/.github/workflows/publish-canaries.yml b/.github/workflows/publish-canaries.yml index fc8b4560fac38a..1f79d3cf4c588d 100644 --- a/.github/workflows/publish-canaries.yml +++ b/.github/workflows/publish-canaries.yml @@ -26,7 +26,7 @@ jobs: NODE_AUTH_TOKEN: ${{ secrets.EXPO_BOT_NPM_TOKEN }} steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Switch to Xcode 26.4.1 run: sudo xcode-select --switch /Applications/Xcode_26.4.1.app - name: 🔨 Add bin to GITHUB_PATH diff --git a/.github/workflows/router.yml b/.github/workflows/router.yml index 26455a74e21815..ae910047d0f3bb 100644 --- a/.github/workflows/router.yml +++ b/.github/workflows/router.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: 🔨 Install pnpm diff --git a/.github/workflows/sdk-cutoff.yml b/.github/workflows/sdk-cutoff.yml index cb15436545a65c..fde6c858349306 100644 --- a/.github/workflows/sdk-cutoff.yml +++ b/.github/workflows/sdk-cutoff.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Cut release branch run: | git checkout -b sdk-${{ github.event.inputs.sdkVersion }} diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 08af20caf8c2f7..2207357e1dfff5 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -35,10 +35,10 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - - uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590 # v3 + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 id: filter with: filters: | @@ -86,7 +86,7 @@ jobs: if: ${{ github.event_name == 'workflow_dispatch' || (github.event_name == 'schedule' && github.repository == 'expo/expo') }} steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: fetch-depth: 100 - name: 🔨 Install pnpm diff --git a/.github/workflows/swift-format.yml b/.github/workflows/swift-format.yml index 7d1d4eb5afdc05..6748f812d1e4f2 100644 --- a/.github/workflows/swift-format.yml +++ b/.github/workflows/swift-format.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🐦 Install Swift ${{ env.SWIFT_VERSION }} run: | set -euo pipefail @@ -52,7 +52,7 @@ jobs: echo "/opt/swift/usr/bin" >> "$GITHUB_PATH" - name: ♻️ Cache swift-format binary id: swift-format-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4 + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v4 with: path: ~/.local/bin/swift-format key: swift-format-${{ runner.os }}-${{ env.SWIFT_FORMAT_VERSION }} diff --git a/.github/workflows/sync-template.yml b/.github/workflows/sync-template.yml index cfbb6b559a2638..7a4482c73b1ed6 100644 --- a/.github/workflows/sync-template.yml +++ b/.github/workflows/sync-template.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🚚 Rename .gitignore run: mv ./templates/expo-template-default/gitignore ./templates/expo-template-default/.gitignore - name: 🚀 Push changes to the template repository diff --git a/.github/workflows/test-react-native-nightly.yml b/.github/workflows/test-react-native-nightly.yml index b0c3de5d9a0336..160432ed4032c2 100644 --- a/.github/workflows/test-react-native-nightly.yml +++ b/.github/workflows/test-react-native-nightly.yml @@ -28,7 +28,7 @@ jobs: runs-on: macos-26 steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Switch to Xcode 26.4.1 run: sudo xcode-select --switch /Applications/Xcode_26.4.1.app - name: 🍺 Install required tools @@ -48,7 +48,7 @@ jobs: node-version: 20 cache: 'pnpm' - name: 💎 Setup Ruby - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: ruby-version: 3.2.2 - name: 💎 Install Ruby gems @@ -74,7 +74,7 @@ jobs: NODE_ENV: production CONFIGURATION: ${{ matrix.build-type == 'release' && 'Release' || 'Debug' }} - name: 📸 Upload builds - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: ${{ github.event_name == 'workflow_dispatch' && matrix.build-type == 'release' }} # Only archive release builds with: name: ios-builds-arch-${{ matrix.build-type }} @@ -99,7 +99,7 @@ jobs: GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx4096m -XX:MaxMetaspaceSize=4096m" steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🧹 Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: 🏗️ Setup pnpm @@ -134,7 +134,7 @@ jobs: NODE_ENV: production VARIANT: ${{ matrix.build-type == 'release' && 'Release' || 'Debug' }} - name: 📸 Upload builds - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: ${{ github.event_name == 'workflow_dispatch' && matrix.build-type == 'release' }} # Only archive release builds with: name: android-builds-${{ matrix.build-type }} diff --git a/.github/workflows/test-suite-lint.yml b/.github/workflows/test-suite-lint.yml index 5804ecaaf0690f..8946ddc60b2884 100644 --- a/.github/workflows/test-suite-lint.yml +++ b/.github/workflows/test-suite-lint.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Install pnpm uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 with: diff --git a/.github/workflows/test-suite-macos.yml b/.github/workflows/test-suite-macos.yml index a1c58cd27803ed..5581073557f1e9 100644 --- a/.github/workflows/test-suite-macos.yml +++ b/.github/workflows/test-suite-macos.yml @@ -55,7 +55,7 @@ jobs: runs-on: macos-26 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🔨 Switch to Xcode 26.4.1 run: sudo xcode-select --switch /Applications/Xcode_26.4.1.app - name: 🍺 Install required tools @@ -64,7 +64,7 @@ jobs: - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 💎 Setup Ruby and install gems - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: bundler-cache: true ruby-version: 3.2.2 @@ -109,12 +109,12 @@ jobs: NODE_ENV: production - name: 📄 Upload xcodebuild log if: failure() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-macos-xcodebuild-log path: apps/bare-expo/xcodebuild.log - name: 📸 Upload builds - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-macos-builds path: apps/bare-expo/macos/build/BareExpo.app diff --git a/.github/workflows/test-suite-nightly.yml b/.github/workflows/test-suite-nightly.yml index f122840dfc9747..067914069e0832 100644 --- a/.github/workflows/test-suite-nightly.yml +++ b/.github/workflows/test-suite-nightly.yml @@ -24,7 +24,7 @@ jobs: runs-on: macos-26 steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🏗️ Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: @@ -37,7 +37,7 @@ jobs: - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 💎 Setup Ruby and install gems - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: bundler-cache: true ruby-version: 3.2.2 @@ -73,7 +73,7 @@ jobs: EXPO_DEBUG: 1 NODE_ENV: production - name: 📸 Upload builds - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-ios-builds path: apps/bare-expo/ios/build/BareExpo.app @@ -91,7 +91,7 @@ jobs: runs-on: macos-26 steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🏗️ Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: @@ -101,7 +101,7 @@ jobs: - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🌠 Download builds - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: bare-expo-ios-builds path: apps/bare-expo/ios/build/BareExpo.app @@ -135,7 +135,7 @@ jobs: working-directory: apps/bare-expo - name: 📸 Store testing artifacts if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-artifacts-ios path: | @@ -158,7 +158,7 @@ jobs: GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx4096m -XX:MaxMetaspaceSize=4096m" steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🧹 Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: 🏗️ Setup Bun @@ -200,7 +200,7 @@ jobs: run: ./scripts/start-android-e2e-test.ts --build working-directory: apps/bare-expo - name: 📸 Upload builds - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-android-builds path: apps/bare-expo/android/app/build/outputs/apk @@ -221,13 +221,13 @@ jobs: api-level: [36] steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🏗️ Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: bun-version: 1.x - name: 🌠 Download builds - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: bare-expo-android-builds path: apps/bare-expo/android/app/build/outputs/apk @@ -261,7 +261,7 @@ jobs: working-directory: ./apps/bare-expo - name: 📸 Store testing artifacts if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-artifacts-android path: | diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index a0203a57b9003f..d3bc0fe248d66c 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -50,7 +50,7 @@ jobs: should_test_android: ${{ steps.e2e.outputs.should_run_android }} steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🧐 Detect build-relevant platform changes id: build uses: ./.github/actions/detect-platform-change @@ -144,7 +144,7 @@ jobs: actions: write steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🏗️ Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: @@ -157,7 +157,7 @@ jobs: - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 💎 Setup Ruby and install gems - uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 + uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1 with: bundler-cache: true ruby-version: 3.2.2 @@ -242,7 +242,7 @@ jobs: runs-on: macos-26 steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🏗️ Setup Bun uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 with: @@ -252,7 +252,7 @@ jobs: - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🌠 Download builds - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: bare-expo-ios-builds path: apps/bare-expo/ios/build/BareExpo.app @@ -309,7 +309,7 @@ jobs: mv ~/.maestro ~/maestroArtifacts - name: 📸 Store testing artifacts if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 id: upload-artifacts with: name: bare-expo-artifacts-ios @@ -349,7 +349,7 @@ jobs: GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx4096m -XX:MaxMetaspaceSize=4096m" steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🧹 Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: 🏗️ Setup Bun @@ -441,7 +441,7 @@ jobs: api-level: [36] steps: - name: 👀 Checkout - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: 🧹 Cleanup GitHub Linux runner disk space uses: ./.github/actions/cleanup-linux-disk-space - name: 🏗️ Setup Bun @@ -449,7 +449,7 @@ jobs: with: bun-version: 1.x - name: 🌠 Download builds - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v4 with: name: bare-expo-android-builds path: apps/bare-expo/android/app/build/outputs/apk/release @@ -496,7 +496,7 @@ jobs: - name: 📸 Store testing artifacts if: always() id: upload-artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: bare-expo-artifacts-android path: | diff --git a/.github/workflows/validate-npm-owners.yml b/.github/workflows/validate-npm-owners.yml index 3ae68ef9a908ee..78b31fc8aeb751 100644 --- a/.github/workflows/validate-npm-owners.yml +++ b/.github/workflows/validate-npm-owners.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: 👀 Checkout - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: ➕ Add `bin` to GITHUB_PATH run: echo "$(pwd)/bin" >> $GITHUB_PATH - name: 🔨 Install pnpm diff --git a/apps/bare-expo/MainNavigator.tsx b/apps/bare-expo/MainNavigator.tsx index 6671dcfc38dd55..e8d413d95aaf37 100644 --- a/apps/bare-expo/MainNavigator.tsx +++ b/apps/bare-expo/MainNavigator.tsx @@ -1,5 +1,8 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; -import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; +import { + BottomTabNavigationOptions, + createBottomTabNavigator, +} from '@react-navigation/bottom-tabs'; import { LinkingOptions } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { useTheme } from 'ThemeProvider'; @@ -12,7 +15,11 @@ import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { AppMetrics } from 'expo-observe'; import { ObserveNavigationContainer } from 'expo-observe/integrations/react-navigation'; -type NavigationRouteConfigMap = React.ComponentType; +import Playground from './Playground'; + +type NavigationRouteConfigMap = React.ComponentType & { + navigationOptions?: BottomTabNavigationOptions; +}; const testSuiteRouteName = 'test-suite'; @@ -20,6 +27,7 @@ type RoutesConfig = { [testSuiteRouteName]: NavigationRouteConfigMap; apis?: NavigationRouteConfigMap; components?: NavigationRouteConfigMap; + playground: NavigationRouteConfigMap; }; type NativeComponentListExportsType = null | { @@ -38,6 +46,7 @@ export function optionalRequire(requirer: () => { default: React.ComponentType } } const routes: RoutesConfig = { [testSuiteRouteName]: TestStackNavigator, + playground: Playground, }; // TODO vonovak there's potential for skipping the require of APIs tab as it's not used in CI @@ -108,14 +117,16 @@ function TabNavigator() { default: undefined, })} initialRouteName={testSuiteRouteName}> - {Object.keys(routes).map((name) => ( - - ))} + {Object.entries(routes).map(([name, component]) => + component ? ( + + ) : null + )} ); } diff --git a/apps/bare-expo/Playground.tsx b/apps/bare-expo/Playground.tsx new file mode 100644 index 00000000000000..fa3a792f1d5517 --- /dev/null +++ b/apps/bare-expo/Playground.tsx @@ -0,0 +1,47 @@ +import { useTheme } from 'ThemeProvider'; +import { TabBackground } from 'native-component-list/src/components/TabBackground'; +import TabIcon from 'native-component-list/src/components/TabIcon'; +import * as React from 'react'; +import { StyleSheet, Text, View } from 'react-native'; + +// Empty scratch screen for isolating reproductions. Replace the contents with your repro code +// and open it from the Playground tab. Revert your changes before committing unrelated work. +export default function Playground() { + const { theme } = useTheme(); + return ( + + + Playground + + Replace the contents of apps/bare-expo/Playground.tsx with your repro code. + + + ); +} + +Playground.navigationOptions = { + title: 'Playground', + tabBarLabel: 'Playground', + tabBarIcon: ({ focused }: { focused: boolean }) => { + return ; + }, + tabBarBackground: () => , +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + gap: 8, + padding: 24, + }, + title: { + fontSize: 20, + fontWeight: '600', + }, + subtitle: { + fontSize: 14, + textAlign: 'center', + }, +}); diff --git a/apps/bare-expo/ios/Podfile b/apps/bare-expo/ios/Podfile index 31686b0780ef78..53a9f69bc60d80 100644 --- a/apps/bare-expo/ios/Podfile +++ b/apps/bare-expo/ios/Podfile @@ -6,7 +6,7 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' -ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' +ENV['RCT_HERMES_V1_ENABLED'] ||= '0' if podfile_properties['expo.useHermesV1'] == 'false' ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' diff --git a/apps/minimal-tester/ios/Podfile b/apps/minimal-tester/ios/Podfile index 3e282405ff4657..8c595e9d0656f2 100644 --- a/apps/minimal-tester/ios/Podfile +++ b/apps/minimal-tester/ios/Podfile @@ -15,7 +15,7 @@ end ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ENV['RCT_USE_RN_DEP'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' ENV['RCT_USE_PREBUILT_RNCORE'] ||= podfile_properties['ios.buildReactNativeFromSource'] == 'true' ? '0' : '1' -ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true' +ENV['RCT_HERMES_V1_ENABLED'] ||= '0' if podfile_properties['expo.useHermesV1'] == 'false' ENV['EXPO_USE_PRECOMPILED_MODULES'] ||= '1' if podfile_properties['EXPO_USE_PRECOMPILED_MODULES'] != 'false' platform :ios, podfile_properties['ios.deploymentTarget'] || '16.4' diff --git a/apps/native-component-list/src/screens/MediaLibrary@Next/SortScreen.tsx b/apps/native-component-list/src/screens/MediaLibrary@Next/SortScreen.tsx index 85e93d0193a7cc..fe8deb4e91de15 100644 --- a/apps/native-component-list/src/screens/MediaLibrary@Next/SortScreen.tsx +++ b/apps/native-component-list/src/screens/MediaLibrary@Next/SortScreen.tsx @@ -1,5 +1,11 @@ import { Image } from 'expo-image'; -import { MediaType, requestPermissionsAsync, Query, AssetField } from 'expo-media-library'; +import { + MediaType, + requestPermissionsAsync, + Query, + AssetField, + AssetInfo, +} from 'expo-media-library'; import { useEffect, useState } from 'react'; import { View, @@ -16,25 +22,6 @@ const numColumns = 3; const screenWidth = Dimensions.get('window').width; const imageSize = screenWidth / numColumns - 8; -type AssetInfo = { - id: string; - height: number; - width: number; - mediaType: MediaType; - creationTime: number | null; - modificationTime: number | null; - duration: number | null; -}; - -const sortFields: AssetField[] = [ - AssetField.CREATION_TIME, - AssetField.MODIFICATION_TIME, - AssetField.MEDIA_TYPE, - AssetField.HEIGHT, - AssetField.WIDTH, - AssetField.DURATION, -]; - const sortLabels: Record = { [AssetField.CREATION_TIME]: 'Creation Time', [AssetField.MODIFICATION_TIME]: 'Modification Time', @@ -42,6 +29,7 @@ const sortLabels: Record = { [AssetField.HEIGHT]: 'Height', [AssetField.WIDTH]: 'Width', [AssetField.DURATION]: 'Duration', + [AssetField.IS_FAVORITE]: 'Is Favorite', }; const SortScreen = () => { @@ -60,12 +48,15 @@ const SortScreen = () => { const assetInfos = await Promise.all( rawAssets.map(async (asset) => ({ id: asset.id, + filename: await asset.getFilename(), + uri: await asset.getUri(), height: await asset.getHeight(), width: await asset.getWidth(), mediaType: await asset.getMediaType(), creationTime: await asset.getCreationTime(), modificationTime: await asset.getModificationTime(), duration: await asset.getDuration(), + isFavorite: await asset.getFavorite(), })) ); setAssets(assetInfos); @@ -133,6 +124,12 @@ const SortScreen = () => { {item.mediaType} ); + case AssetField.IS_FAVORITE: + return ( + + {item.isFavorite ? 'Yes' : 'No'} + + ); default: return null; @@ -142,6 +139,7 @@ const SortScreen = () => { ); const cycleSortField = () => { + const sortFields = Object.values(AssetField); const currentIndex = sortFields.indexOf(sortingBy); const nextIndex = (currentIndex + 1) % sortFields.length; setSortingBy(sortFields[nextIndex]); diff --git a/apps/test-suite/tests/MediaLibraryNext.ts b/apps/test-suite/tests/MediaLibraryNext.ts index 665d440a6327d9..049a96bca5afb0 100644 --- a/apps/test-suite/tests/MediaLibraryNext.ts +++ b/apps/test-suite/tests/MediaLibraryNext.ts @@ -640,6 +640,36 @@ export async function test(t) { t.expect(await videoAsset.getMediaType()).toBe(MediaType.VIDEO); }); + t.it('isFavorite filter works correctly', async () => { + // given + const albumName = createAlbumName('isFavorite filter'); + const favoriteAsset = await Asset.create(pngFile.localUri); + const nonFavoriteAsset = await Asset.create(jpgFile.localUri); + assetsContainer.push(favoriteAsset, nonFavoriteAsset); + const album = await Album.create(albumName, [favoriteAsset, nonFavoriteAsset]); + albumsContainer.push(album); + await favoriteAsset.setFavorite(true); + + // when + const favoriteAssets = await new Query().album(album).eq(AssetField.IS_FAVORITE, true).exe(); + const nonFavoriteAssets = await new Query() + .album(album) + .eq(AssetField.IS_FAVORITE, false) + .exe(); + + // then + if (Platform.OS === 'android' && Platform.Version < 29) { + // IS_FAVORITE filtering is a no-op pre-Q — both queries return all assets + t.expect(favoriteAssets.length).toBe(2); + t.expect(nonFavoriteAssets.length).toBe(2); + } else { + t.expect(favoriteAssets.map((a) => a.id)).toContain(favoriteAsset.id); + t.expect(favoriteAssets.map((a) => a.id)).not.toContain(nonFavoriteAsset.id); + t.expect(nonFavoriteAssets.map((a) => a.id)).toContain(nonFavoriteAsset.id); + t.expect(nonFavoriteAssets.map((a) => a.id)).not.toContain(favoriteAsset.id); + } + }); + if (Platform.OS !== 'ios') { t.it('mediatype audio works correctly', async () => { // given diff --git a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/bottomsheet.mdx b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/bottomsheet.mdx index b9607a8e8dd356..bd87b804159a66 100644 --- a/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/bottomsheet.mdx +++ b/docs/pages/versions/unversioned/sdk/ui/drop-in-replacements/bottomsheet.mdx @@ -122,6 +122,39 @@ export default function DynamicBottomSheetExample() { } ``` +### Scrollable React Native content + +The bottom sheet supports a React Native `FlatList` or `ScrollView` (or a high-performance list like [FlashList](https://shopify.github.io/flash-list/) or [Legend List](https://github.com/LegendApp/legend-list)) as a child for scrollable content. With `nestedScrollEnabled`, the list scrolls its own content first. Once it reaches the top edge, the remaining drag moves the sheet. `BottomSheetFlatList` and `BottomSheetScrollView` are also exported for `@gorhom/bottom-sheet` compatibility, but they are plain re-exports of the React Native components. + +```tsx BottomSheetScrollableExample.tsx +import { useRef } from 'react'; +import { Button, FlatList, Text, View } from 'react-native'; +import BottomSheet from '@expo/ui/community/bottom-sheet'; + +const DATA = Array.from({ length: 50 }, (_, i) => `Item ${i + 1}`); + +export default function BottomSheetScrollableExample() { + const sheetRef = useRef(null); + + return ( + +