Tags: Start9Labs/start-technologies
Tags
chore(build): move per-product build scripts out of start-core (#3453) Each product's cross-compile script now lives in its own project dir: startbox/start-container under projects/start-os/build/, build-cli.sh, build-registrybox.sh, and build-tunnelbox.sh under their projects' build/, and build-backup-fs.sh/build-pi-beep.sh next to the crates they build. The shared builder-alias.sh moves to the top-level build/ (shared build infra). Scripts now cd to the repo root once and source build/builder-alias.sh from there. build-ts.sh and build-manpage.sh stay in start-core since they drive its own export_* tests. Each moved script is an explicit prereq of its binary rule (previously covered implicitly via CORE_SRC), and builder-alias.sh joins CORE_SRC. No CI paths: changes needed - every destination is already covered by existing globs.
chore(build): move per-product build scripts out of start-core (#3453) Each product's cross-compile script now lives in its own project dir: startbox/start-container under projects/start-os/build/, build-cli.sh, build-registrybox.sh, and build-tunnelbox.sh under their projects' build/, and build-backup-fs.sh/build-pi-beep.sh next to the crates they build. The shared builder-alias.sh moves to the top-level build/ (shared build infra). Scripts now cd to the repo root once and source build/builder-alias.sh from there. build-ts.sh and build-manpage.sh stay in start-core since they drive its own export_* tests. Each moved script is an explicit prereq of its binary rule (previously covered implicitly via CORE_SRC), and builder-alias.sh joins CORE_SRC. No CI paths: changes needed - every destination is already covered by existing globs.
chore(fmt): normalize formatting — one config per language, reproduci… …ble rustfmt (#3437) * chore(fmt): one config per language + reproducible rustfmt Our rustfmt.toml uses nightly-only options (group_imports, imports_granularity) but nothing pinned the nightly, so output drifted between contributors — and CI never even checked Rust formatting. Configs were also duplicated and partial. Consolidate to one config per language and make the output reproducible: - rustfmt: single root rustfmt.toml (was 5 duplicate copies + ~14 crates with none). Runs in start9/fmt-env — start9/cargo-zigbuild (the same image the Rust build uses) plus the pinned nightly + rustfmt component (build/fmt/fmtenv.Dockerfile) — via build/fmt/run-fmt.sh, which runs it --user so output stays host-owned. FMT_NATIVE=1 runs on the host against the same pinned toolchain (read from the Dockerfile ARG — one source of truth for the version). - prettier: single root .prettierrc.json (was 3-4 drifted copies, incl. container-runtime on double quotes). One repo-wide pass with a hardened .prettierignore (excludes .sqlx cache, the generated exver.ts parser, conformance vectors, locales, snapshots/fixtures, proxy.pac, patch-db/client). - taplo: single root taplo.toml over all TOML (was one stray copy), pinned via @taplo/cli. Only rustfmt needs the container; prettier and taplo run natively. - CI `make format-check` now covers rustfmt (previously unchecked) + taplo. - Remove the dead husky v4 / lint-staged pre-commit hook (no lint-staged config existed). Per-project `<project>-format` targets are kept (routed through the same tools/config). The formatting content itself lands in the next commit. * style: apply repo-wide formatting Mechanical output of `make format` using the configs from the previous commit (rustfmt in the pinned-nightly container, prettier and taplo). No behavior changes. * chore: ignore the repo-wide reformat in git blame
ci: skip startos-iso image build on non-image PRs (#3438) * ci: skip startos-iso image build on non-image PRs The startos-iso image matrix (ISO/squashfs/img across 9 platforms, ~2h wall-clock once the emulated riscv builds are counted) ran on every PR that touched the start-os tree, including pure Rust/web changes. But the image job only repackages the already-compiled binary, so a change that compiles and passes tests cannot affect image assembly. Add a PR-only `changes` gate that inspects the PR's changed files and runs the image matrix only when the change touches image-assembly inputs (packaging, image recipe, systemd units, apt/**, shared build/**) — what the image target pulls in beyond the binary. Pure code/web/docs PRs now stop at compile + Automated Tests (~33m) and get full image coverage on the push to master; packaging PRs still build images pre-merge. push/dispatch/release always build images (the guard is bypassed there). start-wrt already gates its slow OpenWrt image to workflow_dispatch, so only startos-iso needed this. Documented the new image-gate ↔ build.mk coupling in AGENTS.md. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * chore(start-sdk): sync package-lock.json to 2.0.2 package.json and the CHANGELOG were bumped to 2.0.2 but package-lock.json was left at 2.0.1, so `npm --prefix projects/start-sdk ci` (the format job's lockfile-drift gate) fails. Sync the lockfile. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> --------- Co-authored-by: Matt Hill <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
fix(sdk): bundle eslint + typescript-eslint so the published lint gat… …e runs (#3397) 2.0.0 shipped lint.mjs (the type-aware build gate s9pk.mk runs as `node node_modules/@start9labs/start-sdk/lint.mjs`) plus eslint.config.base.mjs, but only @start9labs/start-core was in bundleDependencies. npm never packs node_modules except bundleDependencies, and it won't bundle a package that is only a devDependency — so the published tarball omitted eslint / typescript-eslint and every consumer's lint step crashed with ERR_MODULE_NOT_FOUND (and would break package CI via s9pk.mk). Move eslint + typescript-eslint from devDependencies into dependencies and add them to bundleDependencies, so the lint toolchain ships inside the SDK's own node_modules — as lint.mjs already documented. typescript stays a peer resolved from the consumer (guaranteed present: s9pk.mk runs tsc via `npm run check` before the lint step), keeping the ~24MB compiler out of the tarball. Verified end-to-end: packed the built dist, installed the tarball into a scratch consumer — clean file passes, a Promise-in-template literal is caught with exit 1. Ships as 2.0.1; bumps the package-template pin to match.
fix: unbreak CI — drop make -t-incompatible dist co-target + repair g… …etServiceInterface call site (#3393) * fix: revert start-core/SDK dist co-target — it breaks CI's make -t flow #3391's grouped `dist/package.json dist/node_modules/.package-lock.json &:` co-target (to force a rebuild when the bundled node_modules is missing) is incompatible with the ISO build's "Prevent rebuild of compiled artifacts" step, which runs `make -t compiled-<arch>.tar` to mark the downloaded artifacts current. `make -t` reaching the group via `dist/package.json` touches only that target, NOT the grouped sibling stamp — so the stamp stays missing and `make startos-iso` re-runs `make -C start-core dist`, which cascades into a web-UI rebuild that reads an empty config.json and fails (`Unexpected end of file in JSON`). Restore the plain single-target rule, which `make -t` suppresses cleanly. Keeps the projects/start-sdk ls-files dead-edge fix. * fix: repair SystemForEmbassy call to removed getServiceInterface helper #3392 removed util.getServiceInterface from start-core but left this legacy call site using it, breaking the container-runtime tsc build on master. Reconstruct the same filled-interface lookup inline from the retained effects.getServiceInterface + effects.getHostInfo + utils.filledAddress.
chore(release): give the SDK npm release a GitHub release + OTP prompt ( #3395) * chore(release): create a GitHub release for the SDK and prompt for the npm OTP Bring the start-sdk (npm) release into line with the os/cli/deb flows: - create-gh-release and notes now support the npm kind, and the sdk release pipeline runs create-gh-release between tag and push so every idempotent step precedes the one irreversible one (npm publish). - gh auth is now a pre-check requirement for every project (it was gated behind non-npm); npm now needs it to cut its GitHub release. - Switch the release tag/release scheme from <project>_v<version> to <project>/v<version>. - Prompt for the npm OTP at publish time (after the build, so it can't expire) when OTP is unset and stdin is a tty; OTP=… still skips. * docs: require reading CONTRIBUTING.md before any code change Add the rule to the root AGENTS.md alongside the existing "read down into what you touch" guidance, and note it is hierarchical like AGENTS.md (read any nested CONTRIBUTING.md on the way down too).
fix(tunnel): show Root CA trust steps only when web init generated th… …e cert `start-tunnel web init` always printed the Root CA and a "follow instructions to trust your Root CA" line pointing at a docs anchor that doesn't exist — even when the user supplied their own certificate, where there's nothing to trust. Now the Root CA block is shown only when init generated the cert, and the link points at the StartTunnel docs section that actually covers it. CLI output only; no API or DB changes. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
PreviousNext