From 67460f7a52f5acd4c27c1ef85e64ff3a502b8c7d Mon Sep 17 00:00:00 2001 From: Kaspar Bumke Date: Tue, 12 May 2026 16:57:07 +0100 Subject: [PATCH 1/4] WIP: .#frontend-dev --- flake.nix | 1 + package.json | 2 +- packages/frontend/default.nix | 43 ++++++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 1619af6b4..6f8a859c2 100644 --- a/flake.nix +++ b/flake.nix @@ -246,6 +246,7 @@ document-types-wasm = pkgs.callPackage ./packages/document-types/default.nix craneArgs; frontend = frontendPackage.package; frontend-tests = frontendPackage.tests; + frontend-dev = frontendPackage.dev; }; linuxOnlyPackages = { diff --git a/package.json b/package.json index f0853878b..60f68743a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build:deps": "pnpm --filter ./packages/frontend run build:deps", - "dev": "pnpm --filter ./packages/frontend run dev" + "dev": "nix run .#frontend-dev -- " }, "devDependencies": { "depcheck": "^1.4.7", diff --git a/packages/frontend/default.nix b/packages/frontend/default.nix index 21d0fafaa..a81a32959 100644 --- a/packages/frontend/default.nix +++ b/packages/frontend/default.nix @@ -265,7 +265,48 @@ let meta.mainProgram = "${name}-tests"; } ); + + # `nix run .#frontend-dev` from the repository root: this drops the Nix-built + # wasm/API artifacts into the source tree and then launches `vite --host` + # against a regular pnpm install. + dev = pkgs.writeShellApplication { + name = "frontend-dev"; + runtimeInputs = with pkgs; [ + nodejs_24 + pnpm + ]; + text = '' + if [ ! -f flake.nix ]; then + echo "Error: must be run from the repository root" >&2 + exit 1 + fi + + echo "Setting up Nix-built dependencies..." + + mkdir -p packages/catlog-wasm/dist/pkg-browser + rm -rf packages/catlog-wasm/dist/pkg-browser/* + cp -r ${self.packages.${pkgs.stdenv.hostPlatform.system}.catlog-wasm-browser}/* packages/catlog-wasm/dist/pkg-browser/ + + mkdir -p packages/document-types/pkg + rm -rf packages/document-types/pkg/* + cp -r ${self.packages.${pkgs.stdenv.hostPlatform.system}.document-types-wasm}/* packages/document-types/pkg/ + + mkdir -p packages/backend/pkg/src + rm -rf packages/backend/pkg/src/* + cp -r ${self.packages.${pkgs.stdenv.hostPlatform.system}.catcolabApi}/src packages/backend/pkg/ + + echo "Installing npm dependencies..." + pnpm install + + cd packages/frontend + echo "Generating CSS module types..." + pnpm run build:tcm + + echo "Starting Vite dev server..." + exec pnpm exec vite --host "$@" + ''; + }; in { - inherit package tests; + inherit package tests dev; } From 8862caaecd7c958267b4cdf90008ee2ec3ee8531 Mon Sep 17 00:00:00 2001 From: Kaspar Bumke Date: Tue, 12 May 2026 18:03:17 +0100 Subject: [PATCH 2/4] WIP: macos github runner --- .github/workflows/macos.yml | 81 +++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/workflows/macos.yml diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 000000000..8ef9261d5 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,81 @@ +name: macos + +on: + workflow_dispatch: + +jobs: + frontend_dev_macos: + name: frontend-dev on macOS + runs-on: macos-latest + timeout-minutes: 60 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Nix + uses: cachix/install-nix-action@v25 + with: + install_url: https://releases.nixos.org/nix/nix-2.29.2/install + + - name: Configure Cachix + uses: cachix/cachix-action@v14 + with: + name: catcolab-jmoggr + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + + - name: Run frontend-dev and verify Vite serves content + run: | + set -euo pipefail + mkdir -p /tmp/frontend-dev-logs + + # Launch frontend-dev in the background. The script ends with + # `exec pnpm exec vite --host`, so the launched PID becomes vite + # once setup finishes. + nix run .#frontend-dev -- --port 5173 \ + > /tmp/frontend-dev-logs/stdout.log \ + 2> /tmp/frontend-dev-logs/stderr.log & + DEV_PID=$! + + cleanup() { + echo "--- stdout ---" + cat /tmp/frontend-dev-logs/stdout.log || true + echo "--- stderr ---" + cat /tmp/frontend-dev-logs/stderr.log || true + # Try killing the whole process group, then the PID directly. + kill -TERM -"$DEV_PID" 2>/dev/null || kill -TERM "$DEV_PID" 2>/dev/null || true + sleep 2 + kill -KILL -"$DEV_PID" 2>/dev/null || kill -KILL "$DEV_PID" 2>/dev/null || true + } + trap cleanup EXIT + + # Generous timeout: cold Nix evaluation on macOS may build + # catlog-wasm-browser, document-types-wasm, and catcolabApi from + # source if Cachix lacks aarch64-darwin artifacts. + deadline=$(( $(date +%s) + 900 )) + until curl -fsS --max-time 5 http://localhost:5173/ > /dev/null; do + if [ "$(date +%s)" -ge "$deadline" ]; then + echo "Timed out waiting for Vite dev server" >&2 + exit 1 + fi + if ! kill -0 "$DEV_PID" 2>/dev/null; then + echo "frontend-dev process exited prematurely" >&2 + exit 1 + fi + sleep 5 + done + + echo "Vite dev server is responding." + + # Confirm Vite is actually serving an HTML page, not a placeholder. + if ! curl -fsS http://localhost:5173/ | grep -qi '&2 + exit 1 + fi + + - name: Upload dev server logs + if: failure() + uses: actions/upload-artifact@v4 + with: + name: frontend-dev-logs-macos + path: /tmp/frontend-dev-logs From dabae121b4072a70716e2487f070d9615c2f1e79 Mon Sep 17 00:00:00 2001 From: Kaspar Bumke Date: Tue, 12 May 2026 18:04:58 +0100 Subject: [PATCH 3/4] WIP: push trigger --- .github/workflows/macos.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 8ef9261d5..8a9e868ee 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -2,6 +2,9 @@ name: macos on: workflow_dispatch: + push: + branches: + - kb/nix-dev jobs: frontend_dev_macos: @@ -52,7 +55,7 @@ jobs: # Generous timeout: cold Nix evaluation on macOS may build # catlog-wasm-browser, document-types-wasm, and catcolabApi from # source if Cachix lacks aarch64-darwin artifacts. - deadline=$(( $(date +%s) + 900 )) + deadline=$(( $(date +%s) + 2000 )) until curl -fsS --max-time 5 http://localhost:5173/ > /dev/null; do if [ "$(date +%s)" -ge "$deadline" ]; then echo "Timed out waiting for Vite dev server" >&2 From 5302a2bdb53a63fd5a798880d6e8c2bb74253794 Mon Sep 17 00:00:00 2001 From: Kaspar Bumke Date: Tue, 12 May 2026 18:53:08 +0100 Subject: [PATCH 4/4] WIP --- .github/workflows/macos.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 8a9e868ee..f8d958a29 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -19,7 +19,7 @@ jobs: - name: Install Nix uses: cachix/install-nix-action@v25 with: - install_url: https://releases.nixos.org/nix/nix-2.29.2/install + install_url: https://releases.nixos.org/nix/nix-2.31.2/install - name: Configure Cachix uses: cachix/cachix-action@v14 @@ -55,7 +55,7 @@ jobs: # Generous timeout: cold Nix evaluation on macOS may build # catlog-wasm-browser, document-types-wasm, and catcolabApi from # source if Cachix lacks aarch64-darwin artifacts. - deadline=$(( $(date +%s) + 2000 )) + deadline=$(( $(date +%s) + 3500 )) until curl -fsS --max-time 5 http://localhost:5173/ > /dev/null; do if [ "$(date +%s)" -ge "$deadline" ]; then echo "Timed out waiting for Vite dev server" >&2