Skip to content

fix(ci): tslib 声明 + Caddy 编译错误,一次性让 PR Checks 转绿 - #133

Closed
suantea wants to merge 2 commits into
PIKACHUIM:mainfrom
suantea:fix/tslib-plus-caddy
Closed

suantea wants to merge 2 commits into
PIKACHUIM:mainfrom
suantea:fix/tslib-plus-caddy

Conversation

@suantea

@suantea suantea commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

一次性修复两处阻塞 PR Checks 的上游缺陷。两者互相独立,必须同时合入才能让
CI 转绿;分开合入的话,中间状态的 PR 仍然会红。

1. 前端:tslib 未声明(#132)

[vite]: Rollup failed to resolve import "tslib" from
"webpage/node_modules/echarts-for-react/esm/index.js".

echarts-for-react@3 的 esm 产物 import ... from "tslib",但其 package.json
只声明了 size-sensor 与 fast-deep-equal,漏了 tslib。

本地能构建是因为 webpage/node_modules 里残留了其它依赖带入的 tslib
(npm ls 可见大量 extraneous),属于假通过;CI 跑 npm ci 干净安装,必然复现。

修复:把 tslib 显式加入 dependencies(package.json 与 lock 各 +1 行),
不再依赖 npm 的提升行为。

2. 后端:Caddy 编译错误(#130)

service/caddy/manager.go:934:61: cannot use nil as
"github.com/netpanel/netpanel/model".AccessRule value in argument to
m.buildPageLoginRoutes

buildPageLoginRoutes 的形参是值类型 model.AccessRule,但 buildOIDCRoutes
传了 nil。修复:改为 model.AccessRule{}。

为什么合成一个 PR

pr-checks.yml 的 backend job needs: frontend。frontend 失败时 backend
直接 skipped,所以此前没人看到过后端这个编译错误 —— 它一直被掩盖着。
只修 tslib 会让 backend 第一次真正跑起来并当场失败(已验证,见下)。

验证

在干净检出 upstream/main 的目录中复现(Linux CI 等价环境):

步骤 修复前 修复后
npm ci ok ok
npm run build ✗ 无法解析 tslib ✓ built
go build ./... ✗ cannot use nil as AccessRule ✓ 通过

补充说明:go test ./... 在 macOS 上还有一个 TestValidateRootPath 失败
(/var → /private/var 符号链接别名),已由 #131 单独修复;Linux CI
不受该平台路径别名影响,故本 PR 未包含。

suantea and others added 2 commits September 30, 2026 16:49
echarts-for-react@3 的 esm 产物 import 了 tslib,但未把它列为自身
dependency,属于其打包遗漏。本项目通过 npm 安装依赖,npm 不会再解析
node_modules 内其它包的 import,干净环境下 tslib 不会被提升到顶层,
于是 vite 构建报:

  [vite]: Rollup failed to resolve import "tslib" from
  "webpage/node_modules/echarts-for-react/esm/index.js"

本地之所以能构建,是因为 node_modules 里残留了其它包带入的 tslib
(npm ls 显示大量 extraneous),属于假通过;CI 的 npm ci 是干净安装,
必然复现,导致所有 PR 的 Frontend job 红灯。

修复:把 tslib 显式加入 dependencies(package.json 与 package-lock.json
各一行),不再依赖提升行为。(上游 echarts-for-react 补依赖前,
本项目侧声明是唯一可靠的规避方式。)
buildPageLoginRoutes 的形参是 model.AccessRule(值类型),
但 buildOIDCRoutes 的 providerID==0 分支传了 nil:

    cannot use nil as "model.AccessRule" value in argument to
    m.buildPageLoginRoutes

改为传 model.AccessRule{}。该分支语义是「未绑定 OIDC provider,
退回页面跳转登录」,AllowedUserIDs 为空恰好表示不限定可登录用户,
与原意图一致(provider 缺失时本就无法按 provider 限定用户)。

这行是 main 分支上的编译错误,go build ./... 整个 backend 失败,
连带 PIKACHUIM#125~PIKACHUIM#129 五个 PR 的 CI 全部 UNSTABLE。

验证:go build ./... 与 go vet ./... 均通过。
@suantea

suantea commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator Author

按 #45 里维护者的要求(分支直接建在本仓库内,Approve 后由 AI 自动处理冲突合并),本修复已改由仓库内分支 fix/ci-build-unblock 提交为 #134,内容完全相同(3 文件 / +7 -1,Backend + Frontend 双绿)。

关闭本 fork 版以避免重复评审。两处失败的实测根因和验证记录已整理在 #134 描述里。

@suantea

suantea commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator Author

关闭本 PR,改由 #134 承接(两者内容完全一致:同为 manager.go + package.json + package-lock.json,+7/−1)。#134 的分支名 fix/ci-build-unblock 更清楚地表达了它要解决的是 main 的构建中断问题,且 CI 已验证全绿、mergeable=CLEAN。重复提交造成困扰,抱歉 —— 后续按「一个改动一个 PR、基于最新 main 重建」处理。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant