fix(ci): site 流水线加 npm 国内镜像(GFW)+ npm ci 重试
site pipeline(deploy-site.yml:Astro 官网 + Next.js 用户中心 + npx wrangler) 在墙内 nas runner 上 npm ci / npx wrangler@4 直连 registry.npmjs.org → 慢/抖断。 _env.sh 早有 Go(goproxy.cn)/Flutter(flutter-io.cn)镜像,唯独漏了 npm,且 3 个 site 脚本根本没 source _env.sh。上次「修外网发版 GFW 坑」只覆盖 android(gradle)/ windows(maven),site 这块遗漏。 - _env.sh:加 NPM_CONFIG_REGISTRY=registry.npmmirror.com(可 env 覆盖)+ npm_ci_retry 助手(照 flutter_pub_get_retry,5 次重试)。 - compile-site.sh / compile-usercenter.sh:source _env.sh,npm ci → npm_ci_retry。 - deploy-site.sh:source _env.sh,让 npx wrangler@4 也走镜像拉包。 本地实跑 compile-site.sh:镜像生效、Astro 构建成功、dist/ 产物齐全(index.html 48K + 多语言目录)。shellcheck -x 全 clean。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
This commit is contained in:
@@ -6,6 +6,9 @@
|
|||||||
export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}"
|
export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}"
|
||||||
export PUB_HOSTED_URL="${PUB_HOSTED_URL:-https://pub.flutter-io.cn}"
|
export PUB_HOSTED_URL="${PUB_HOSTED_URL:-https://pub.flutter-io.cn}"
|
||||||
export FLUTTER_STORAGE_BASE_URL="${FLUTTER_STORAGE_BASE_URL:-https://storage.flutter-io.cn}"
|
export FLUTTER_STORAGE_BASE_URL="${FLUTTER_STORAGE_BASE_URL:-https://storage.flutter-io.cn}"
|
||||||
|
# npm/npx 国内镜像:site 流水线(Astro 官网 + Next.js 用户中心 + npx wrangler)在
|
||||||
|
# 墙内 nas runner 上直连 registry.npmjs.org 会慢/抖断,与 Go/Flutter 同样需镜像。
|
||||||
|
export NPM_CONFIG_REGISTRY="${NPM_CONFIG_REGISTRY:-https://registry.npmmirror.com}"
|
||||||
|
|
||||||
# Forgejo/Gitea repo coordinates (used by lib-forgejo.sh). Secrets
|
# Forgejo/Gitea repo coordinates (used by lib-forgejo.sh). Secrets
|
||||||
# FORGEJO_TOKEN / FORGEJO_URL are injected by the CI runner, not set here.
|
# FORGEJO_TOKEN / FORGEJO_URL are injected by the CI runner, not set here.
|
||||||
@@ -44,3 +47,16 @@ flutter_pub_get_retry() {
|
|||||||
echo "==> flutter pub get 5 次仍失败,放弃" >&2
|
echo "==> flutter pub get 5 次仍失败,放弃" >&2
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# npm_ci_retry — 同理:npmmirror 偶发抖断时重试 `npm ci`。在含 package-lock.json 的
|
||||||
|
# 目录调用(site 各 web 子项目根)。已由 NPM_CONFIG_REGISTRY 指向国内镜像。
|
||||||
|
npm_ci_retry() {
|
||||||
|
local i
|
||||||
|
for i in 1 2 3 4 5; do
|
||||||
|
if npm ci; then return 0; fi
|
||||||
|
echo "==> npm ci 失败(第 ${i}/5 次,registry 抖?),8s 后重试..." >&2
|
||||||
|
sleep 8
|
||||||
|
done
|
||||||
|
echo "==> npm ci 5 次仍失败,放弃" >&2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,16 +4,19 @@
|
|||||||
# web/website/astro.config.mjs) — must match the deploy target host name so
|
# web/website/astro.config.mjs) — must match the deploy target host name so
|
||||||
# canonical URLs / sitemap resolve correctly.
|
# canonical URLs / sitemap resolve correctly.
|
||||||
#
|
#
|
||||||
# Run inside a node:20 container by .gitea/workflows/deploy-site.yml; this
|
# 由 .gitea/workflows/deploy-site.yml 在 ubuntu runner 上从 repo 根调用(runner
|
||||||
# script itself just runs npm and assumes it is invoked from the repo root.
|
# 镜像自带 node/npx,直接跑)。source _env.sh 取 npm 国内镜像 + 重试助手(墙内)。
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
# shellcheck source=scripts/ci/_env.sh
|
||||||
|
. scripts/ci/_env.sh
|
||||||
|
|
||||||
SITE_URL="${SITE_URL:-https://pangolin.yanmeiai.com}"
|
SITE_URL="${SITE_URL:-https://pangolin.yanmeiai.com}"
|
||||||
export SITE_URL
|
export SITE_URL
|
||||||
echo "==> compile-site: SITE_URL=${SITE_URL}"
|
echo "==> compile-site: SITE_URL=${SITE_URL} NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY}"
|
||||||
|
|
||||||
cd web/website
|
cd web/website
|
||||||
npm ci
|
npm_ci_retry
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
echo "==> compile-site: done — dist/ contents:"
|
echo "==> compile-site: done — dist/ contents:"
|
||||||
|
|||||||
@@ -11,12 +11,15 @@
|
|||||||
# 由 .gitea/workflows/deploy-site.yml 在 ubuntu runner 上调用,从 repo 根运行。
|
# 由 .gitea/workflows/deploy-site.yml 在 ubuntu runner 上调用,从 repo 根运行。
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
# shellcheck source=scripts/ci/_env.sh
|
||||||
|
. scripts/ci/_env.sh
|
||||||
|
|
||||||
export NEXT_PUBLIC_API_MODE="${NEXT_PUBLIC_API_MODE:-http}"
|
export NEXT_PUBLIC_API_MODE="${NEXT_PUBLIC_API_MODE:-http}"
|
||||||
export NEXT_PUBLIC_API_DOMAINS="${NEXT_PUBLIC_API_DOMAINS:-https://api.yanmeiai.com}"
|
export NEXT_PUBLIC_API_DOMAINS="${NEXT_PUBLIC_API_DOMAINS:-https://api.yanmeiai.com}"
|
||||||
echo "==> compile-usercenter: API_MODE=${NEXT_PUBLIC_API_MODE} API_DOMAINS=${NEXT_PUBLIC_API_DOMAINS}"
|
echo "==> compile-usercenter: API_MODE=${NEXT_PUBLIC_API_MODE} API_DOMAINS=${NEXT_PUBLIC_API_DOMAINS} NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY}"
|
||||||
|
|
||||||
cd web/usercenter
|
cd web/usercenter
|
||||||
npm ci
|
npm_ci_retry
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
echo "==> compile-usercenter: done — out/ contents:"
|
echo "==> compile-usercenter: done — out/ contents:"
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
# 由 compile-site.sh 先产出 web/website/dist/;从 repo 根调用。
|
# 由 compile-site.sh 先产出 web/website/dist/;从 repo 根调用。
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
|
# shellcheck source=scripts/ci/_env.sh
|
||||||
|
. scripts/ci/_env.sh # NPM_CONFIG_REGISTRY:让 `npx wrangler@4` 从国内镜像拉包
|
||||||
|
|
||||||
if [ ! -d web/website/dist ]; then
|
if [ ! -d web/website/dist ]; then
|
||||||
echo "==> deploy-site: web/website/dist/ 不存在 — 拒绝部署" >&2
|
echo "==> deploy-site: web/website/dist/ 不存在 — 拒绝部署" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user