同 tag 重跑时 POST 冲突走查询回退,需 PATCH 以本次构建为准补写 发布说明,并先清空旧附件再重传,避免同名副本。
This commit is contained in:
@@ -83,17 +83,25 @@ jobs:
|
|||||||
} > release-notes.md
|
} > release-notes.md
|
||||||
cat release-notes.md
|
cat release-notes.md
|
||||||
|
|
||||||
|
# 重跑幂等:release 已存在时更新说明、清旧附件后重传
|
||||||
- name: 创建 Release 并上传产物
|
- name: 创建 Release 并上传产物
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
API="$SITE/api/v1/repos/$REPO"
|
API="$SITE/api/v1/repos/$REPO"
|
||||||
AUTH="Authorization: token ${TOKEN}"
|
AUTH="Authorization: token ${TOKEN}"
|
||||||
REQ=$(node -e 'const fs=require("fs");process.stdout.write(JSON.stringify({tag_name:process.env.TAG,name:"pn "+process.env.TAG,body:fs.readFileSync("release-notes.md","utf8")}))')
|
REQ=$(node -e 'const fs=require("fs");process.stdout.write(JSON.stringify({tag_name:process.env.TAG,name:"pn "+process.env.TAG,body:fs.readFileSync("release-notes.md","utf8")}))')
|
||||||
# 同 tag release 已存在(如重跑)时回退为查询
|
# 同 tag release 已存在(如失败重跑)时回退为查询
|
||||||
REL=$(curl -fsS -X POST "$API/releases" -H "$AUTH" -H 'Content-Type: application/json' -d "$REQ") \
|
REL=$(curl -fsS -X POST "$API/releases" -H "$AUTH" -H 'Content-Type: application/json' -d "$REQ") \
|
||||||
|| REL=$(curl -fsS "$API/releases/tags/${TAG}" -H "$AUTH")
|
|| REL=$(curl -fsS "$API/releases/tags/${TAG}" -H "$AUTH")
|
||||||
RID=$(REL="$REL" node -e 'process.stdout.write(String(JSON.parse(process.env.REL).id))')
|
RID=$(REL="$REL" node -e 'process.stdout.write(String(JSON.parse(process.env.REL).id))')
|
||||||
echo "==> release id=$RID"
|
echo "==> release id=$RID"
|
||||||
|
# 发布说明以本次构建为准(回退路径下 POST 已冲突,须补写)
|
||||||
|
curl -fsS -X PATCH "$API/releases/$RID" -H "$AUTH" -H 'Content-Type: application/json' -d "$REQ" >/dev/null
|
||||||
|
# 清除旧附件,避免重跑产生同名副本
|
||||||
|
ASSETS=$(curl -fsS "$API/releases/$RID/assets" -H "$AUTH")
|
||||||
|
ASSETS="$ASSETS" node -e 'JSON.parse(process.env.ASSETS).forEach(a=>console.log(a.id))' | while read -r aid; do
|
||||||
|
curl -fsS -X DELETE "$API/releases/$RID/assets/$aid" -H "$AUTH" >/dev/null
|
||||||
|
done
|
||||||
for f in dist/*; do
|
for f in dist/*; do
|
||||||
echo "==> 上传 $(basename "$f")"
|
echo "==> 上传 $(basename "$f")"
|
||||||
curl -fsS -X POST "$API/releases/$RID/assets?name=$(basename "$f")" -H "$AUTH" -F "attachment=@$f" >/dev/null
|
curl -fsS -X POST "$API/releases/$RID/assets?name=$(basename "$f")" -H "$AUTH" -F "attachment=@$f" >/dev/null
|
||||||
|
|||||||
Reference in New Issue
Block a user