@@ -38,24 +38,22 @@ jobs:
3838 --prerelease \
3939 --title "Open PR builds" \
4040 --notes "Rolling prerelease containing build outputs from all open PRs."
41-
4241 - name : List open PRs
4342 env :
4443 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
4544 run : |
46- gh pr list --repo "${{ github.repository }}" --state open --json number,headRefOid --limit 200 > prs.json
47-
45+ gh pr list --repo "${{ github.repository }}" --state open --json number,headRefOid,title --limit 200 > prs.json
4846 - name : Download artifacts from each PR's latest successful build
4947 env :
5048 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
5149 run : |
5250 set -euo pipefail
5351 rm -rf collected && mkdir -p collected
54-
5552 jq -c '.[]' prs.json | while read -r pr; do
5653 num=$(echo "$pr" | jq -r .number)
5754 sha=$(echo "$pr" | jq -r .headRefOid)
58-
55+ title=$(echo "$pr" | jq -r .title)
56+ safe_title=$(echo "$title" | sed 's/[^a-zA-Z0-9_-]/_/g' | cut -c1-50)
5957 run_id=$(gh run list \
6058 --repo "${{ github.repository }}" \
6159 --workflow "$BUILD_WORKFLOW_NAME" \
@@ -64,63 +62,56 @@ jobs:
6462 --limit 1 \
6563 --json databaseId \
6664 --jq '.[0].databaseId')
67-
6865 if [ -z "$run_id" ] || [ "$run_id" = "null" ]; then
6966 echo "PR #$num: no successful run found"
7067 continue
7168 fi
72-
7369 out="collected/pr-$num"
7470 rm -rf "$out" && mkdir -p "$out"
75-
7671 if ! gh run download "$run_id" --repo "${{ github.repository }}" -n "openearable_v2_firmware.elf" -D "$out/elf" 2>&1; then
7772 echo "PR #$num: failed to download firmware.elf artifact (may be expired)"
7873 rm -rf "$out"
7974 continue
8075 fi
81-
8276 if ! gh run download "$run_id" --repo "${{ github.repository }}" -n "openearable_v2_fota.zip" -D "$out/fota" 2>&1; then
8377 echo "PR #$num: failed to download fota.zip artifact (may be expired)"
8478 rm -rf "$out"
8579 continue
8680 fi
87-
8881 (cd "$out/fota" && zip -r "../openearable_v2_fota.zip" .)
89-
9082 mv "$out/elf/openearable_v2_firmware.elf" "$out/openearable_v2_firmware.elf"
91- mv "$out/openearable_v2_fota.zip" "$out/openearable_v2_fota.zip"
92-
9383 rm -rf "$out/elf" "$out/fota"
9484
95- echo "PR #$num: artifacts downloaded and prepared successfully"
85+ echo "$safe_title" > "$out/title.txt"
86+
87+ echo "PR #$num ($title): artifacts downloaded and prepared successfully"
9688 done
97-
98-
9989 - name : Upload all PR assets to prerelease (overwrite)
10090 env :
10191 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
10292 run : |
10393 set -euo pipefail
104-
94+ mkdir -p collected/upload
10595 find collected -type f \( -name "*.elf" -o -name "*.zip" \) | while read -r f; do
10696 pr=$(echo "$f" | sed -n 's#.*/pr-\([0-9]\+\)/.*#\1#p')
10797 base=$(basename "$f")
108- asset="pr-${pr}-${base}"
109- gh release upload "$TAG" "$f" --repo "${{ github.repository }}" --clobber --name "$asset"
98+ title_file="collected/pr-$pr/title.txt"
99+ if [ -f "$title_file" ]; then
100+ safe_title=$(cat "$title_file")
101+ asset="pr-${pr}-${safe_title}-${base}"
102+ else
103+ asset="pr-${pr}-${base}"
104+ fi
105+ cp "$f" "collected/upload/$asset"
106+ gh release upload "$TAG" "collected/upload/$asset" --repo "${{ github.repository }}" --clobber
110107 done
111-
112108 # delete assets of closed PRs
113109 open_prs="$(jq -r '.[].number' prs.json || true)"
114-
115110 gh release view "$TAG" --repo "${{ github.repository }}" --json assets -q '.assets[].name' | while read -r asset; do
116111 pr="$(echo "$asset" | sed -n 's/^pr-\([0-9]\+\)-.*$/\1/p')"
117112 [ -n "$pr" ] || continue
118-
119113 if ! echo "$open_prs" | grep -qx "$pr"; then
120114 echo "Deleting asset $asset (PR #$pr is closed/merged)"
121115 gh release delete-asset "$TAG" "$asset" --repo "${{ github.repository }}" --yes
122116 fi
123117 done
124-
125-
126-
0 commit comments