Fix feedfeedback metrics not distinguishing which feed it's from #681
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: PR Comment Trigger | |
on: | |
issue_comment: | |
types: [created] | |
# Permissiosn to make comments in the pull request | |
permissions: | |
pull-requests: write | |
actions: write | |
contents: read | |
jobs: | |
handle-comment: | |
if: github.event.issue.pull_request | |
runs-on: ubuntu-latest | |
outputs: | |
should-deploy: ${{ steps.check-org.outputs.result }} | |
steps: | |
- name: Check if bot is mentioned | |
id: check-mention | |
env: | |
COMMENT: ${{ github.event.comment.body }} | |
run: | | |
if [[ "$COMMENT" == *"@github-actions"* ]] || \ | |
[[ "$COMMENT" == *"github-actions[bot]"* ]]; then | |
bot_mentioned=true | |
else | |
bot_mentioned=false | |
fi | |
if [[ "${{ github.event.comment.body }}" == *"ota"* ]]; then | |
has_ota=true | |
else | |
has_ota=false | |
fi | |
if [[ "$bot_mentioned" == "true" ]] && [[ "$has_ota" == "true" ]]; then | |
echo "mentioned=true" >> $GITHUB_OUTPUT | |
else | |
echo "mentioned=false" >> $GITHUB_OUTPUT | |
fi | |
- name: Check organization membership | |
if: steps.check-mention.outputs.mentioned == 'true' | |
id: check-org | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
try { | |
const { data: perm } = await github.rest.repos.getCollaboratorPermissionLevel({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
username: context.payload.comment.user.login | |
}); | |
const hasAccess = ['admin', 'write'].includes(perm.permission); | |
console.log(`User has ${perm.permission} access`); | |
return hasAccess; | |
} catch(error) { | |
console.log('User has no repository access'); | |
return false; | |
} | |
bundle-deploy: | |
name: Bundle and Deploy EAS Update | |
runs-on: ubuntu-latest | |
needs: [handle-comment] | |
if: needs.handle-comment.outputs.should-deploy == 'true' | |
steps: | |
- name: Get PR HEAD SHA | |
id: pr-info | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const pr = await github.rest.pulls.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: ${{ github.event.issue.number }} | |
}); | |
console.log(`PR HEAD SHA: ${pr.data.head.sha}`); | |
console.log(`PR HEAD REF: ${pr.data.head.ref}`); | |
core.setOutput('head-sha', pr.data.head.sha); | |
core.setOutput('head-ref', pr.data.head.ref); | |
- name: 💬 Drop a comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }} | |
number: ${{ github.event.issue.number }} | |
message: | | |
An OTA deployment has been requested and is now running for `${{ steps.pr-info.outputs.head-sha }}`. | |
[Here is some music to listen to while you wait...](https://www.youtube.com/watch?v=VBlFHuCzPgY) | |
--- | |
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖* | |
- name: Check for EXPO_TOKEN | |
run: > | |
if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then | |
echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions" | |
exit 1 | |
fi | |
- name: ⬇️ Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ steps.pr-info.outputs.head-sha }} | |
- name: 🔧 Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: .nvmrc | |
cache: yarn | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile | |
- name: Lint check | |
run: yarn lint | |
- name: Lint lockfile | |
run: yarn lockfile-lint | |
- name: 🔤 Compile translations | |
run: yarn intl:build 2>&1 | tee i18n.log | |
- name: Check for i18n compilation errors | |
run: if grep -q "invalid syntax" "i18n.log"; then echo "\n\nFound compilation errors!\n\n" && exit 1; else echo "\n\nNo compilation errors!\n\n"; fi | |
- name: Type check | |
run: yarn typecheck | |
- name: 🔨 Setup EAS | |
uses: expo/expo-github-action@v8 | |
with: | |
expo-version: latest | |
eas-version: latest | |
token: ${{ secrets.EXPO_TOKEN }} | |
- name: ⛏️ Setup Expo | |
run: yarn global add eas-cli-local-build-plugin | |
- name: 🪛 Setup jq | |
uses: dcarbone/install-jq-action@v2 | |
- name: Env | |
id: env | |
run: | | |
export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}' | |
echo "${{ secrets.ENV_TOKEN }}" > .env | |
echo "EXPO_PUBLIC_ENV=testflight" >> .env | |
echo "EXPO_PUBLIC_RELEASE_VERSION=$(jq -r '.version' package.json)" >> .env | |
echo "EXPO_PUBLIC_RELEASE_VERSION=$(jq -r '.version' package.json)" >> $GITHUB_OUTPUT | |
echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$(git rev-parse HEAD)" >> .env | |
echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT | |
echo "EXPO_PUBLIC_BUNDLE_DATE=$(date -u +"%y%m%d%H")" >> .env | |
echo "EXPO_PUBLIC_SENTRY_DSN=${{ secrets.SENTRY_DSN }}" >> .env | |
echo "EXPO_PUBLIC_BITDRIFT_API_KEY=${{ secrets.BITDRIFT_API_KEY }}" >> .env | |
echo "EXPO_PUBLIC_GCP_PROJECT_ID=${{ secrets.EXPO_PUBLIC_GCP_PROJECT_ID }}" >> .env | |
echo "$json" > google-services.json | |
- name: 🏗️ Create Bundle | |
run: > | |
SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} | |
SENTRY_RELEASE=${{ steps.env.outputs.EXPO_PUBLIC_RELEASE_VERSION }} | |
SENTRY_DIST=${{ steps.env.outputs.EXPO_PUBLIC_BUNDLE_IDENTIFIER }} | |
yarn export | |
- name: 📦 Package Bundle and 🚀 Deploy | |
run: yarn use-build-number bash scripts/bundleUpdate.sh | |
env: | |
DENIS_API_KEY: ${{ secrets.DENIS_API_KEY }} | |
CHANNEL_NAME: pull-request-${{ github.event.issue.number }} | |
RUNTIME_VERSION: | |
- name: 💬 Drop a comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }} | |
number: ${{ github.event.issue.number }} | |
message: | | |
Your requested OTA deployment was successful! You may now apply it by either scanning the QR code or opening the deep link below in your browser: | |
<img src="https://bsky-qr.vercel.app?channel=pull-request-${{ github.event.issue.number }}" width=300 height=300> | |
`bluesky://intent/apply-ota?channel=pull-request-${{ github.event.issue.number }}` | |
--- | |
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖* | |
- name: 💬 Drop a comment | |
uses: marocchino/sticky-pull-request-comment@v2 | |
if: failure() | |
with: | |
header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }} | |
number: ${{ github.event.issue.number }} | |
message: | | |
Your requested OTA deployment was unsuccessful. See action logs for more details. | |
--- | |
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖* |