Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,39 @@ jobs:
# while the release page shows each asset's actual size right next to its download button.
body_path: release-body.md
generate_release_notes: true
# 把 release 发布出去,并显式把 `releases/latest` 指到它,然后自己确认一遍。
#
# ⚠️ **显式给 make_latest 不是多此一举**:GitHub 在「草稿转成已发布」时**不会**重算
# `releases/latest` 指向谁。2026-10-20 在 rclone-deck 上撞到过一次:release 已经是
# `draft=false`、`prerelease=false`、`published_at` 也填上了,`releases/latest` 却仍
# 返回旧版本,端点 `releases/latest/download/latest.json` 于是 404(旧 release 里没有
# 那个文件)——已装的应用从此收不到更新。
#
# 判据是**看 API 指到谁**,不是看 release 的字段:字段全对而指针没挪,端点照样 404。
# CDN 那层重定向会再滞后几分钟,属正常——这里判 API,不判 CDN。
- name: 发布这个 release,并把 latest 指到它
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
set -euo pipefail
tag="${GITHUB_REF_NAME}"
# ⚠️ **不能用 `releases/tags/<tag>` 找这条 release**:那个端点**不返回草稿**。
# 草稿只能从 release 列表里捞——列表按创建时间倒序,新建的草稿总在第一页。
id="$(gh api "repos/${GITHUB_REPOSITORY}/releases?per_page=100" \
--jq "first(.[] | select(.tag_name == \"${tag}\") | .id)")"
if [ -z "$id" ]; then
echo "::error::没找到 tag ${tag} 对应的 release"
exit 1
fi
gh api --method PATCH "repos/${GITHUB_REPOSITORY}/releases/${id}" \
-F draft=false -f make_latest=true > /dev/null
latest="$(gh api "repos/${GITHUB_REPOSITORY}/releases/latest" --jq .tag_name)"
if [ "$latest" != "$tag" ]; then
echo "::error::releases/latest 指着 ${latest},不是 ${tag}"
exit 1
fi
echo "release ${tag} 已发布,releases/latest 指向它"

# --- winget ------------------------------------------------------------------------------
# NOT WIRED UP YET, and the order matters: `wingetcreate new` has to download a real asset to
Expand Down