2.7 KiB
2.7 KiB
CI & pipelines
PearData mirrors the PearDock-style cross-compile from one Linux runner pipeline: Bare servers + Electron clients, published as rolling / tagged releases.
Host matrix
| Product | Hosts |
|---|---|
| Server (Bare) | linux-x64, linux-arm64 only |
| Client (Electron) | linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64, win32-arm64 |
Gitea Actions
| Workflow | Trigger | Job |
|---|---|---|
.gitea/workflows/ci.yml |
push / PR / manual | install, npm test |
.gitea/workflows/release-rolling.yml |
every push to main/master + manual |
test → build matrix → Gitea tag rolling |
Rolling job (ubuntu-latest, ~180m timeout):
- System deps for Electron packaging
npm ci --ignore-scripts+ esbuild installSKIP_INTEGRATION=1 npm test- Install vendored
tools/rcodesign(darwin client seal-sign) scripts/gitea-rolling-release.shmake.cjs server→peardata-server-*.tar.gzmake.cjs client→peardata-client-*.tar.gz- upload to
rollingprerelease
Manual inputs: skip_client, server_hosts, client_hosts, dry_run.
Secret: RELEASE_TOKEN (required to publish). Optional GITEA_URL.
GitHub Actions
| Workflow | Trigger | Jobs |
|---|---|---|
.github/workflows/ci.yml |
push / PR / manual | test (Node 20+22), lint-docs |
.github/workflows/release.yml |
v* tags / manual |
Same binary matrix → GitHub Release assets |
Local parity
npm install
SKIP_INTEGRATION=1 npm test
# Server (Linux Bare)
npm run make:server:linux-x64
# Client (Electron)
npm run make:client:linux-x64
# Full matrix (slow)
npm run make
# Stage release archives without upload
DRY_RUN=1 bash scripts/gitea-rolling-release.sh
Key scripts
| Script | Role |
|---|---|
scripts/install.sh |
End-user installer (server systemd + desktop client; journal + Docker socket when detected) |
scripts/hosts.cjs |
Host lists (SERVER_LINUX, ALL_64) |
scripts/make.cjs |
Orchestrate server/client builds |
scripts/bare-standalone.cjs |
Pack Bare peardata-server |
scripts/build-client-bundle.cjs |
esbuild GUI → electron/app.bundle.cjs |
scripts/predownload-electron.cjs |
Pre-fetch Electron zips for CI |
scripts/sign-macos-app.cjs |
Darwin client codesign |
scripts/gitea-rolling-release.sh |
Build + stage + Gitea upload |
forge.config.cjs |
Electron Forge packaging |
Integration tests in CI
Release workflows set SKIP_INTEGRATION=1. Unit CI may run integration when the runner allows DHT/UDP. See TESTING.md.
Related
- RELEASE.md
- TECH-CHOICES.md — Bare import maps