|
7 | 7 | jobs: |
8 | 8 | validate-release: |
9 | 9 | runs-on: ubuntu-latest |
| 10 | + permissions: |
| 11 | + contents: read |
10 | 12 | steps: |
11 | 13 | - name: Checkout |
12 | 14 | uses: actions/checkout@v4 |
13 | 15 |
|
| 16 | + - name: Fetch Release Data |
| 17 | + id: release |
| 18 | + env: |
| 19 | + GITHUB_TOKEN: ${{ github.token }} |
| 20 | + TAG_NAME: ${{ github.event.release.tag_name }} |
| 21 | + run: | |
| 22 | + set -euo pipefail |
| 23 | + release_json="$(mktemp)" |
| 24 | + curl -fsSL \ |
| 25 | + -H "Authorization: Bearer ${GITHUB_TOKEN}" \ |
| 26 | + -H "Accept: application/vnd.github+json" \ |
| 27 | + "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG_NAME}" \ |
| 28 | + -o "${release_json}" |
| 29 | + echo "release_json=${release_json}" >> "${GITHUB_OUTPUT}" |
| 30 | +
|
14 | 31 | - name: Validate Metadata |
15 | 32 | env: |
16 | 33 | TAG_NAME: ${{ github.event.release.tag_name }} |
17 | | - RELEASE_TITLE: ${{ github.event.release.name }} |
18 | | - RELEASE_NOTES: ${{ github.event.release.body }} |
19 | | - IS_PRERELEASE: ${{ github.event.release.prerelease }} |
20 | | - TARGET_BRANCH: ${{ github.event.release.target_commitish }} |
| 34 | + RELEASE_JSON: ${{ steps.release.outputs.release_json }} |
21 | 35 | run: | |
22 | 36 | set -euo pipefail |
23 | | - title="${RELEASE_TITLE:-${TAG_NAME}}" |
24 | 37 | notes_file="$(mktemp)" |
25 | | - printf '%s\n' "${RELEASE_NOTES}" > "${notes_file}" |
| 38 | + title="$(jq -r '.name // empty' "${RELEASE_JSON}")" |
| 39 | + jq -r '.body // empty' "${RELEASE_JSON}" > "${notes_file}" |
| 40 | + prerelease="$(jq -r '.prerelease' "${RELEASE_JSON}")" |
| 41 | + target_branch="$(jq -r '.target_commitish // empty' "${RELEASE_JSON}")" |
| 42 | + title="${title:-${TAG_NAME}}" |
26 | 43 | ./scripts/validate_release_metadata.sh \ |
27 | 44 | "${TAG_NAME}" \ |
28 | 45 | "${title}" \ |
29 | 46 | "${notes_file}" \ |
30 | | - "${IS_PRERELEASE}" \ |
31 | | - "${TARGET_BRANCH}" |
| 47 | + "${prerelease}" \ |
| 48 | + "${target_branch}" |
32 | 49 |
|
33 | 50 | - name: Validate Release Assets |
34 | 51 | env: |
35 | 52 | TAG_NAME: ${{ github.event.release.tag_name }} |
36 | | - IS_PRERELEASE: ${{ github.event.release.prerelease }} |
| 53 | + RELEASE_JSON: ${{ steps.release.outputs.release_json }} |
37 | 54 | run: | |
38 | 55 | set -euo pipefail |
39 | 56 | version="${TAG_NAME#XtreamPlayerv}" |
40 | | - apk_count="$(jq '[.release.assets[] | select(.name | endswith(".apk"))] | length' "${GITHUB_EVENT_PATH}")" |
| 57 | + apk_count="$(jq '[.assets[] | select(.name | endswith(".apk"))] | length' "${RELEASE_JSON}")" |
41 | 58 | if [[ "${apk_count}" -lt 1 ]]; then |
42 | 59 | echo "Release must include at least one APK asset." |
43 | 60 | exit 1 |
44 | 61 | fi |
45 | | - bad_assets="$(jq -r '.release.assets[] | .name' "${GITHUB_EVENT_PATH}" | awk -v v="${version}" 'index($0, v)==0')" |
| 62 | + bad_assets="$(jq -r '.assets[] | .name' "${RELEASE_JSON}" | awk -v v="${version}" 'index($0, v)==0')" |
46 | 63 | if [[ -n "${bad_assets}" ]]; then |
47 | 64 | echo "Every release asset name must include version ${version}." |
48 | 65 | echo "${bad_assets}" |
|
0 commit comments