EAS Update で出力されたソースマップを GitHub Actions から Sentry にアップロードする
Posted on
- #expo
React Native と Expo で作られた iOS アプリに EAS Update したあと、Sentry から通知された Issue を見るとソースマップが紐付いていないことに気づきました。
これまでは app.config.js に設定した postPublish
フックでソースマップをアップロードしていましたが、EAS ではこのフックが実行されないためソースマップがアップロードされていませんでした。ソースマップが紐付いていないと調査の手掛かりが得られないので、別の方法でアップロードする必要があります。
公式ドキュメントの "Uploading source maps for updates" のセクションを読むと、eas update
を実行したあとに作られる dist/bundles
以下のファイルを手動でアップロードする必要があるようです。
今回問題になったプロジェクトは、リリースも GitHub Actions から自動化していた (ref. "Using GitHub Actions") ので、既存のワークフローにソースマップをアップロードするステップを追加して対応しました。追加した部分だけ抜き出すと次のような感じです。
jobs:
eas-update:
runs-on: ubuntu-latest
steps:
# EAS Update の諸々の処理
- name: Rename source maps
run: |
find . -name "ios-*.js" -exec mv {} main.jsbundle \;
find . -name "ios-*.map" -exec mv {} main.jsbundle.map \;
working-directory: ./dist/bundles
- name: Upload source maps
run: |
node_modules/@sentry/cli/bin/sentry-cli releases \
files <release> \
upload-sourcemaps \
--dist <dist> \
--rewrite \
dist/bundles/main.jsbundle dist/bundles/main.jsbundle.map
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ env.SENTRY_ORG }}
SENTRY_PROJECT: ${{ env.SENTRY_PROJECT }}
ドキュメントにもしっかり明記されていますが、ソースマップの名前は main.jsbundle
, main.jsbundle.map
にする必要があります。 EAS が出力するソースマップをそのままアップロードしても Issue と紐付きません(これを見落としていてハマりました)。
この名前は React Native のバンドルスクリプトで決め打ちされていました。