188f3e94ef
improvise-d31's finished artifact depends on improvise-9x6 (the worker-hosted server) through improvise-djm. The *pipeline* does not, and building it now is what stops the delivery half from being a mystery when the worker lands: the swap from websocket transport to worker transport then changes what is bundled, not how it is built and shipped. Two jobs in ci.yml rather than a second workflow. `pages-build` runs on every push and pull request, so a change that breaks `web/build.sh` or the bundle fails on the PR that made it. `pages-deploy` runs only on a push to main and `needs: [test, wasm, pages-build]`, so nothing that failed `cargo test` or the existing wasm32 gate can reach the published site — the deploy depends on those checks instead of repeating them. Deliberately not path-filtered. The bundle is improvise-wasm-client plus improvise-protocol, improvise-core and improvise-formula, so a filter meaning "skip when the bundle cannot have changed" would have to name most of the workspace, and getting it wrong leaves a stale site with nothing saying so. wasm-pack is a pinned release tarball, v0.15.0 — the version `nix develop` now supplies — so the local run that produced 346 KB of wasm (120 KB gzipped) is evidence about the CI run. The devShell was missing wasm-pack entirely: the `wasm` job only runs `cargo check`, which does not need it, so nothing had ever required the one tool that turns a passing check into a loadable page. What this cannot do yet, said on the page itself rather than routed around: web/app.js is a thin client that holds no model, so a copy served from a static host paints an empty grid until it is pointed at an improvise-ws-server with ?ws=. The notice is static HTML, not something app.js decides, because it is true on every load and a page that cannot reach a server cannot be trusted to explain why. README says the same and names the deployed URL. Verified: cargo test --workspace 1134 passed / 0 failed, clippy clean, fmt clean, actionlint clean, ./web/build.sh succeeds and the assemble step produces a 388 KB site whose every reference resolves inside it. NOT verified: the workflow has never run — GitHub Pages is not enabled on the repository (GET /repos/fiddlerwoaroof/improvise/pages is 404), which is improvise-3gy. The deploy job asks configure-pages to enable it; if the token may not, that step is where the run fails and the fix is the repository setting. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EoW5BB87ZZdm96SvBTWawH
75 lines
2.3 KiB
Nix
75 lines
2.3 KiB
Nix
{
|
|
description = "Improvise — Multi-Dimensional Data Modeling Terminal Application";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
beads.url = "github:gastownhall/beads/v1.3.0";
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
};
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
crate2nix.url = "github:nix-community/crate2nix";
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
beads,
|
|
nixpkgs,
|
|
rust-overlay,
|
|
flake-utils,
|
|
crate2nix,
|
|
}:
|
|
flake-utils.lib.eachDefaultSystem (system: let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [(import rust-overlay)];
|
|
};
|
|
|
|
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
|
|
extensions = ["rust-src" "clippy" "rustfmt" "llvm-tools-preview"];
|
|
# The browser deployment targets wasm; without this, the wasm audit
|
|
# (improvise-ywd) and the OPFS backend (improvise-i34) cannot even be
|
|
# checked, let alone fixed.
|
|
targets = ["wasm32-unknown-unknown"];
|
|
};
|
|
|
|
cargoNix = import ./Cargo.nix {
|
|
inherit nixpkgs pkgs;
|
|
};
|
|
in {
|
|
inherit cargoNix;
|
|
devShells.default = pkgs.mkShell {
|
|
nativeBuildInputs = [
|
|
rustToolchain
|
|
pkgs.pkg-config
|
|
pkgs.rust-analyzer
|
|
crate2nix.packages.${system}.default
|
|
pkgs.cargo-expand
|
|
pkgs.cargo-llvm-cov
|
|
pkgs.global
|
|
pkgs.universal-ctags
|
|
beads.packages.${system}.default
|
|
|
|
# `web/build.sh` — and so the Pages job's local dry run — needs this.
|
|
# The `wasm` CI job only runs `cargo check`, which does not, so the
|
|
# shell was missing the one tool that turns a passing check into a
|
|
# loadable page (improvise-d31).
|
|
pkgs.wasm-pack
|
|
|
|
# Demo recording and release tooling
|
|
pkgs.asciinema
|
|
pkgs.vhs
|
|
pkgs.cargo-dist
|
|
# nixpkgs cargo-dist installs as "dist"; alias so `cargo dist` works
|
|
(pkgs.writeShellScriptBin "cargo-dist" ''exec ${pkgs.cargo-dist}/bin/dist "$@"'')
|
|
];
|
|
RUST_BACKTRACE = "1";
|
|
};
|
|
|
|
packages = {
|
|
improvise = cargoNix.workspaceMembers.improvise.build;
|
|
default = self.packages.${system}.improvise;
|
|
};
|
|
});
|
|
}
|