Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 973c2c021b | |||
| f1950ffb6f | |||
| 8850c94e96 |
@@ -17,8 +17,27 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# 直接在 runner 跑(不嵌套 docker,避免 DinD 挂载失败)。runner 镜像的 go
|
||||
# 若旧于 go.mod 要求(1.25.10),Go 工具链会经 GOPROXY=goproxy.cn 自动下载对应版本。
|
||||
# runner 镜像(catthehacker ubuntu:act-latest,label ubuntu-latest)自带 node
|
||||
# 但**不带 go** → 直接 `go build` 会 `go: command not found`(exit 127)。
|
||||
# 故先装 go:从 Go 官方**中国镜像** golang.google.cn 取(go.dev 在墙内不稳),
|
||||
# 版本对齐 server/go.mod 的 1.25.10;装到 /usr/local/go 并加进 $GITHUB_PATH
|
||||
# 供后续 Compile/Test 步骤共用。模块下载仍走 GOPROXY=goproxy.cn(见 _env.sh)。
|
||||
- name: Setup Go 1.25.10(CN 镜像)
|
||||
run: |
|
||||
GO_VER=1.25.10
|
||||
# 供应链完整性:校验 sha256(取自 Go 官方 release JSON,pin 为字面量),
|
||||
# 防镜像被篡改/MITM 注入恶意工具链(它会编译要上生产的二进制)。校验失败即中止。
|
||||
GO_SHA256=42d4f7a32316aa66591eca7e89867256057a4264451aca10570a715b3637ba70
|
||||
curl -fsSL --max-time 180 --retry 3 --retry-delay 5 --retry-connrefused \
|
||||
"https://golang.google.cn/dl/go${GO_VER}.linux-amd64.tar.gz" -o /tmp/go.tgz
|
||||
echo "${GO_SHA256} /tmp/go.tgz" | sha256sum -c -
|
||||
rm -rf /usr/local/go
|
||||
tar -C /usr/local -xzf /tmp/go.tgz
|
||||
echo "/usr/local/go/bin" >> "$GITHUB_PATH"
|
||||
export PATH=/usr/local/go/bin:$PATH
|
||||
go version
|
||||
|
||||
# 直接在 runner 跑(不嵌套 docker,避免 DinD 挂载失败;go 由上一步装好)。
|
||||
- name: Compile (Go 控制面)
|
||||
run: bash scripts/ci/compile-backend.sh
|
||||
|
||||
|
||||
@@ -43,11 +43,13 @@ forgejo_release_ensure() {
|
||||
get_code_file="/tmp/forgejo_get_code.$$"
|
||||
get_body_file="/tmp/forgejo_get_body.$$.json"
|
||||
|
||||
curl "${FORGEJO_CURL_TLS[@]}" -s -o "$get_body_file" -w '%{http_code}' \
|
||||
curl ${FORGEJO_CURL_TLS[@]+"${FORGEJO_CURL_TLS[@]}"} -s --max-time 60 --retry 2 --retry-connrefused -o "$get_body_file" -w '%{http_code}' \
|
||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
||||
"${FORGEJO_URL}/api/v1/repos/${FORGEJO_REPO}/releases/tags/${tag}" \
|
||||
> "$get_code_file"
|
||||
read -r get_code < "$get_code_file"
|
||||
# `|| true`: curl -w '%{http_code}' 写入的值无结尾换行,read 到无换行 EOF 返回 1
|
||||
# (值已赋)→ set -e 会静默中止。容错该退出码;文件恒由上面的 curl 创建,不掩盖真错。
|
||||
read -r get_code < "$get_code_file" || true
|
||||
rm -f "$get_code_file"
|
||||
|
||||
if [ "$get_code" = "200" ]; then
|
||||
@@ -81,13 +83,13 @@ json.dump(
|
||||
)
|
||||
' > "$create_req_file"
|
||||
|
||||
curl "${FORGEJO_CURL_TLS[@]}" -s -o "$create_body_file" -w '%{http_code}' \
|
||||
curl ${FORGEJO_CURL_TLS[@]+"${FORGEJO_CURL_TLS[@]}"} -s --max-time 60 -o "$create_body_file" -w '%{http_code}' \
|
||||
-X POST "${FORGEJO_URL}/api/v1/repos/${FORGEJO_REPO}/releases" \
|
||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data @"$create_req_file" \
|
||||
> "$create_code_file"
|
||||
read -r create_code < "$create_code_file"
|
||||
read -r create_code < "$create_code_file" || true # 无结尾换行,见 forgejo_release_ensure 注释
|
||||
rm -f "$create_code_file" "$create_req_file"
|
||||
|
||||
if [ "$create_code" -lt 200 ] || [ "$create_code" -ge 300 ]; then
|
||||
@@ -108,7 +110,7 @@ _forgejo_read_release_id() {
|
||||
id_file="/tmp/forgejo_release_id.$$"
|
||||
python3 -c "import json,sys; print(json.load(open(sys.argv[1]))['id'])" \
|
||||
"$json_file" > "$id_file"
|
||||
read -r RELEASE_ID < "$id_file"
|
||||
read -r RELEASE_ID < "$id_file" || true # python 写入可能无结尾换行,见上注释
|
||||
rm -f "$id_file"
|
||||
export RELEASE_ID
|
||||
}
|
||||
@@ -125,12 +127,12 @@ forgejo_upload_asset() {
|
||||
code_file="/tmp/forgejo_upload_code.$$"
|
||||
body_file="/tmp/forgejo_upload_body.$$.json"
|
||||
|
||||
curl "${FORGEJO_CURL_TLS[@]}" -s -o "$body_file" -w '%{http_code}' \
|
||||
curl ${FORGEJO_CURL_TLS[@]+"${FORGEJO_CURL_TLS[@]}"} -s --max-time 300 -o "$body_file" -w '%{http_code}' \
|
||||
-X POST "${FORGEJO_URL}/api/v1/repos/${FORGEJO_REPO}/releases/${RELEASE_ID}/assets" \
|
||||
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
||||
-F "attachment=@${file}" \
|
||||
> "$code_file"
|
||||
read -r code < "$code_file"
|
||||
read -r code < "$code_file" || true # curl http_code 无结尾换行,见上注释
|
||||
rm -f "$code_file"
|
||||
|
||||
echo "==> forgejo: uploaded ${file} (HTTP ${code})"
|
||||
|
||||
@@ -20,7 +20,9 @@ TAG="${1:?usage: release-server.sh <tag>}"
|
||||
ver_file="/tmp/release_server_ver.$$"
|
||||
ver_from_tag server "$TAG" > "$ver_file"
|
||||
VER=""
|
||||
read -r VER < "$ver_file"
|
||||
# `|| true`: ver_from_tag 用 printf '%s'(无结尾换行),read 到无换行的 EOF 会返回 1
|
||||
# (但 VER 已正确赋值)——set -e 下会静默退出。容错 read 的这个退出码,不掩盖真错。
|
||||
read -r VER < "$ver_file" || true
|
||||
rm -f "$ver_file"
|
||||
|
||||
echo "==> release-server: tag=${TAG} ver=${VER}"
|
||||
|
||||
Reference in New Issue
Block a user