3.3 KiB
构建与测试
源码构建需要go.mod指定的Go版本、Node.js及npm。生产服务器只需要发布包,不需要这些构建工具。脚本先构建Vue前端,再将其嵌入Go二进制;internal/web/dist为生成目录,不提交到源码仓库。
构建
./scripts/build.sh build
# Linux amd64发布包及SHA256SUMS
./scripts/build.sh release amd64
# 同时生成Linux amd64和arm64发布包
./scripts/build.sh release
输出位于build,包含前端内嵌的程序、配置模板、安装/升级脚本、systemd单元、运行文档及第三方许可证。node_modules、build和测试结果不纳入Git。
后端检查
先构建前端,保证Go嵌入的静态资源已生成:
./scripts/build.sh web
go test -race ./...
go vet ./...
后端用例覆盖匿名所有权、密码取件、加密和去重、空间预留、下载计数与续期、并发传输、分页搜索、审计清理、来源校验、多入口cookie、备份恢复及故障回收。可单独运行较大数据量的并发测试:
BLUEBIRD_STRESS_MIB=64 go test ./internal/app -run TestConcurrentStreamingTransfers -v -count=1
浏览器测试
./scripts/build.sh build
cd web
npx playwright install chromium
npm run test:e2e
仅针对隔离测试实例运行,不能指向生产数据。默认实例监听127.0.0.1:18981;多入口用例另使用19081、19082,启动本机HTTPS代理和临时自签名证书,需要openssl。测试覆盖寄件、取件、管理凭据、剪贴板、手机布局、分页筛选,以及同一域名的HTTP/HTTPS和独立IP入口。
执行前确保这些端口未被占用。浏览器依赖、失败追踪保存在本机缓存和web/test-results,不能提交到仓库。Playwright主实例的临时数据目录由测试配置创建,可在测试结束后按实际路径清理;多入口用例自动回收其进程、证书及数据。手机布局采用Chromium模拟,不等同于Safari或手机实机验证。
原生发布包测试
Python脚本需要Python 3.12或更新版本:
./scripts/build.sh release amd64
python3 scripts/smoke.py
脚本在项目中的隔离临时目录验证发布包的初始化、内嵌前端、加密去重、下载、管理员接口、完整性检查及备份恢复,结束后自动回收进程和数据。
首次安装测试需要rootless Podman,每次使用一次性Debian容器:
podman run --rm --security-opt label=disable \
-e BLUEBIRD_INSTALL_SMOKE=1 \
-v "$PWD/build/linux-amd64:/pkg:ro" \
-v "$PWD/scripts/install-smoke.sh:/test.sh:ro" \
docker.io/library/debian:bookworm-slim sh /test.sh https
将末尾https换成http或lan可检查单独的公网HTTP与内网HTTP配置。label=disable仅用于此一次性容器读取本机测试文件,不修改主机SELinux配置。该脚本禁止直接在普通主机运行,不注册主机systemd服务。
已有安装升级测试需要保留一份旧版amd64部署包:
python3 scripts/upgrade-smoke.py /path/to/previous-bluebird-linux-amd64.tar.gz
此用例在一次性容器中验证旧密码、加密文件、密钥和取件码保留,新增入口下载、配置权限、一致性备份、非法配置保护和检查失败回滚。容器使用手动停服后的--no-start模式;目标服务器的systemd启停、DNS、代理、证书及防火墙需要在实际部署环境验收。