如何使用 expo/expo-github-action 获取指向内部分发版本的链接?

问题描述 投票:0回答:2

我正在通过 GitHub 操作和 EAS Build 为 React Native Expo 应用程序构建内部分发版本。使用

expo/expo-github-action@v7
在推送时触发工作流。构建完成后,操作会记录 2 个 URL(和 2 个 QR 码),其中可以下载
.apk
.ipa

我想以编程方式获取这些链接,以便我可以在下一步中使用它们来通知我的 Slack 频道,例如。

我查看了文档,但它非常通用。谁能帮忙?

android ios expo github-actions continuous-deployment
2个回答
1
投票

在我的评论中发表:

动作提供serval输出你可以使用,例如:

输出 说明
qr QR 码的绝对 URL 以加载此更新
链接 expo.dev 上独立于平台的更新的绝对 URL
安卓QR 用于加载此 Android 特定更新的 QR 代码的绝对 URL
安卓链接 expo.dev 上 Android 特定更新的绝对 URL
iosQR 用于加载此 iOS 特定更新的 QR 代码的绝对 URL
ios链接 expo.dev 上 iOS 特定更新的绝对 URL

示例(来自文档):

  - name: 🚀 Create preview
    uses: expo/expo-github-action/preview@v8
    id: preview
    with:
      command: eas update --auto
      comment: false

  - name: 💬 Comment in Slack
    uses: slackapi/[email protected]
    env:
      SLACK_BOT_TOKEN: ${{ secrets.SLACK_TOKEN }}
    with:
      channel-id: deployments
      slack-message: 'New deployment is ready!\n- Preview: ${{ steps.preview.outputs.link }}'

0
投票

我用“困难的方式”解决了这个问题,因为

expo-github-action
没有任何输出。

首先,我需要获取 JSON 格式的构建输出。我用

--json
开关这样做:

eas build --profile preview --platform all --non-interactive --json

其次,我将结果存储在一个变量中,如下所示:

build_json=$(eas build --profile preview --platform all --non-interactive --json)

接下来,我解析了 JSON 并从中提取了链接:

android_link=$(echo $build_json | jq -r '.[] | select(.platform=="ANDROID") | .artifacts.applicationArchiveUrl')
ios_link=$(echo $build_json | jq -r '.[] | select(.platform=="IOS") | .artifacts.applicationArchiveUrl')

最后,我将变量分配给输出:

EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "build_json<<$EOF" >> $GITHUB_OUTPUT
echo "$build_json" >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT
echo "android_link=$android_link" >> $GITHUB_OUTPUT
echo "ios_link=$ios_link" >> $GITHUB_OUTPUT

请注意,GitHub Actions 用于创建输出的系统很脆弱,不能很好地处理顶点或换行符,因此在

build_json
的情况下,唯一安全的替代方法是使用随机分隔符而不是
<name>=<variable>
语法.

然后我可以将输出与

steps.<step id>.outputs.android_link
等一起使用

整体解决方案是这样的:

build_json=$(eas build --profile preview --platform all --non-interactive --json)
android_link=$(echo $build_json | jq -r '.[] | select(.platform=="ANDROID") | .artifacts.applicationArchiveUrl')
ios_link=$(echo $build_json | jq -r '.[] | select(.platform=="IOS") | .artifacts.applicationArchiveUrl')
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "build_json<<$EOF" >> $GITHUB_OUTPUT
echo "$build_json" >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT
echo "android_link=$android_link" >> $GITHUB_OUTPUT
echo "ios_link=$ios_link" >> $GITHUB_OUTPUT

希望它能帮助下一个人节省一天左右的调查时间!

© www.soinside.com 2019 - 2024. All rights reserved.