| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
chore(start-os): cut 0.4.0.1; move the OS version off Cargo.toml (#3564) SemVer has no fourth segment, so `projects/start-os/Cargo.toml` cannot hold 0.4.0.1. It now carries a `0.4.0-rev.1` label purely to acknowledge the release it belongs to, and root package.json becomes the source of truth. The label must never be compared: `0.4.0-rev.1` is a SemVer prerelease, so it sorts *below* 0.4.0 in both `semver` and `exver`. Had it stayed authoritative it would have reached the CI-generated compat range (`>=0.3.5 <=${VERSION}`) and excluded installed 0.4.0 servers from the update it patches. `pre-check` now fails if the label drifts from the version being cut. This restores how 0.3.x worked — `backend/Cargo.toml` was `0.3.5-rev.1` while `web/package.json` held the real `0.3.5.1` and check-version.sh read that. The monorepo reorg (950be49dd) repointed the readers at the crate manifest; CI never followed, so startos-iso.yaml has been deriving the registry key, S3 prefix and source_version range from root package.json all along. - build/env/version.sh is the single reader; check-version.sh, basename.sh, debian/build.sh and derive_version go through it - build.rs bakes STARTOS_VERSION from package.json; the start-os bins and start-container's man page report it instead of CARGO_PKG_VERSION - version::tests::current_matches_manifest fails if Current drifts from package.json, which would otherwise publish a version the server never reports 0.4.0.1 itself adds the version node (mandatory even with no migration, or pre_init takes the Equal branch and the registry re-offers the update forever) and carries the pre-installed-Pi data-pool fix from #3556. | 2 个月前 | |
chore(fmt): normalize formatting — one config per language, reproducible 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 | 3 个月前 | |
fix(start-os,start-tunnel): pin a forward's outbound UDP source port to its external port (#4104) * fix(start-os,start-tunnel): pin a forward's outbound source port to its external port forward-port installed only the inbound DNAT. Traffic the target starts from its forwarded port fell to lxc-net's masquerade (StartTunnel: its egress masquerade), which picks another source port on a NAT clash and then reuses that mapping for every later flow from the same source. A peer-to-peer service that publishes its port was then seen on a different one. Add a per-forward SNAT, tagged like the rest of the forward, in a new `forward_snat` chain at priority srcnat - 1: traffic from the target's port out of the interface holding the external address leaves as that address:port. Ranges map port by port. Addresses on lo and lxcbr0 get no rule. Closes #4103 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(net): scope forwarded outbound source-port pinning to UDP Helix-Harness: pi Helix-Model: openai-codex/gpt-6.1-sol --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Helix <267227783+helix-nine@users.noreply.github.com> | 13 天前 | |
Refactor/project structure (#3085) * refactor project structure * environment-based default registry * fix tests * update build container * use docker platform for iso build emulation * simplify compat * Fix docker platform spec in run-compat.sh * handle riscv compat * fix bug with dep error exists attr * undo removal of sorting * use qemu for iso stage --------- Co-authored-by: Mariusz Kogen <k0gen@pm.me> Co-authored-by: Matt Hill <mattnine@protonmail.com> | 9 个月前 | |
hardware acceleration and support for NVIDIA cards on nonfree images (#3089) * add nvidia packages * add nvidia deps to nonfree * gpu_acceleration flag & nvidia hacking * fix gpu_config & /tmp/lxc.log * implement hardware acceleration more dynamically * refactor OpenUI * use mknod * registry updates for multi-hardware-requirements * pluralize * handle new registry types * remove log * migrations and driver fixes * wip * misc patches * handle nvidia-container differently * chore: comments (#3093) * chore: comments * revert some sizing --------- Co-authored-by: Matt Hill <mattnine@protonmail.com> * Revert "handle nvidia-container differently" This reverts commit d708ae53dfd2efdcefdd0cc433c171bc7110f09a. * fix debian containers * cleanup * feat: add empty array placeholder in forms (#3095) * fixes from testing, client side device filtering for better fingerprinting resistance * fix mac builds --------- Co-authored-by: Sam Sartor <me@samsartor.com> Co-authored-by: Matt Hill <mattnine@protonmail.com> Co-authored-by: Alex Inkin <alexander@inkin.ru> | 8 个月前 | |
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. | 3 个月前 | |
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. | 3 个月前 | |
feat: use visit-rs-generated types and RPC bindings in production (#4140) * feat: use visit-rs-generated types and RPC bindings in production Generate production TypeScript types and RPC bindings from Rust handler trees and near-owner standalone exports, replacing the handwritten RPC surfaces and ts-rs bindings. Live/mock clients and container-runtime effects consume the generated method, parameter and result types. Squashed onto master. SDK 3.0.4 has since shipped, so the SDK type changes target 3.0.5 and move to changelog fragments, as does the setup-wizard CIFS backslash fix. Crate-level changelogs are dropped: the repo keeps release history per product only. * feat(rpc-toolkit): let TS implementations report generation errors TSVisitor::unsupported was crate-private, so a TS impl outside rpc-toolkit could only write a string or panic. Expose it as TSVisitor::error; recorded errors fail into_declarations like the built-in ones. * feat(rpc-toolkit): generate bindings for internally tagged structs Serde serializes #[serde(tag = "...")] on a named struct as an extra property carrying the struct's serialized name, and ignores that property when deserializing. Output bindings require the tag; input bindings accept it optionally instead of rejecting the type. * feat(rpc-toolkit): opt-in TypeScript generic families Generic Rust types rendered inline at every instance, so a public generic had to be exported as a concrete `*Wire` alias and turned back into a generic by hand in TypeScript. `reflect_ts!(generic Name<A, B>)` now declares one `Name<A,B>` / `NameInput<A,B>` pair and renders each instance as a reference. The family renders once with `ts::Param<N>` substituted for each parameter; `ts_export!(generic Name<A, B>, ...)` registers it without an instance. Parameter names that would shadow another declaration fail generation. RecoverySource and RegistryAsset use it, replacing the RecoverySourceWire and RegistryAssetWire exports and the hand-written ReplaceField aliases. * feat: build TypeScript bindings support only for the generators start-core enabled rpc-toolkit/ts unconditionally, so every product binary linked the binding generator: the type-erased handler trait's HandlerTSBindings supertrait kept each handler's TS writers reachable through its vtable, and every ts_export! left an inventory constructor the linker must keep. start-core and startwrt-core gain a `ts` feature that enables rpc-toolkit/ts and gates their TS-only impls and binding tests; the generator examples require it, and build-ts.sh, run-tests.sh and the WRT bindings recipe pass it. Without the feature, rpc-toolkit's bridge macros expand to nothing, TS and HandlerTSBindings are blanket traits, and the no_ts/override builder methods return the handler unchanged, so call sites need no gating. --------- Co-authored-by: Aiden McClelland <me@drbonez.dev> | 3 天前 | |
feat: use visit-rs-generated types and RPC bindings in production (#4140) * feat: use visit-rs-generated types and RPC bindings in production Generate production TypeScript types and RPC bindings from Rust handler trees and near-owner standalone exports, replacing the handwritten RPC surfaces and ts-rs bindings. Live/mock clients and container-runtime effects consume the generated method, parameter and result types. Squashed onto master. SDK 3.0.4 has since shipped, so the SDK type changes target 3.0.5 and move to changelog fragments, as does the setup-wizard CIFS backslash fix. Crate-level changelogs are dropped: the repo keeps release history per product only. * feat(rpc-toolkit): let TS implementations report generation errors TSVisitor::unsupported was crate-private, so a TS impl outside rpc-toolkit could only write a string or panic. Expose it as TSVisitor::error; recorded errors fail into_declarations like the built-in ones. * feat(rpc-toolkit): generate bindings for internally tagged structs Serde serializes #[serde(tag = "...")] on a named struct as an extra property carrying the struct's serialized name, and ignores that property when deserializing. Output bindings require the tag; input bindings accept it optionally instead of rejecting the type. * feat(rpc-toolkit): opt-in TypeScript generic families Generic Rust types rendered inline at every instance, so a public generic had to be exported as a concrete `*Wire` alias and turned back into a generic by hand in TypeScript. `reflect_ts!(generic Name<A, B>)` now declares one `Name<A,B>` / `NameInput<A,B>` pair and renders each instance as a reference. The family renders once with `ts::Param<N>` substituted for each parameter; `ts_export!(generic Name<A, B>, ...)` registers it without an instance. Parameter names that would shadow another declaration fail generation. RecoverySource and RegistryAsset use it, replacing the RecoverySourceWire and RegistryAssetWire exports and the hand-written ReplaceField aliases. * feat: build TypeScript bindings support only for the generators start-core enabled rpc-toolkit/ts unconditionally, so every product binary linked the binding generator: the type-erased handler trait's HandlerTSBindings supertrait kept each handler's TS writers reachable through its vtable, and every ts_export! left an inventory constructor the linker must keep. start-core and startwrt-core gain a `ts` feature that enables rpc-toolkit/ts and gates their TS-only impls and binding tests; the generator examples require it, and build-ts.sh, run-tests.sh and the WRT bindings recipe pass it. Without the feature, rpc-toolkit's bridge macros expand to nothing, TS and HandlerTSBindings are blanket traits, and the no_ts/override builder methods return the handler unchanged, so call sites need no gating. --------- Co-authored-by: Aiden McClelland <me@drbonez.dev> | 3 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 3 个月前 | ||
| 13 天前 | ||
| 9 个月前 | ||
| 8 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 天前 | ||
| 3 天前 |