.PHONY: build build-e2e build-for-docker build-linux-ci docker build-server-releases build-server-releases-macos build-server-releases-freebsd build-cli-releases-rust build-cli-releases-freebsd build-cli-releases-rust-macos clean check fmt test test-e2e test-e2e-release bench generate website install uninstall bundle build-rs build-rs-cli run-rs build: npm run build npm run build:plug-compile cargo build --release -p silverbullet cargo build --release -p sb # Fast build for the e2e suite: a debug server (rust-embed reads the client # bundle from disk in debug, so no embed step) plus the frontend bundle. Skips # the release compile, plug-compile, and the `sb` CLI — none are exercised by # the debug e2e suite. The embedded-bundle path is covered by `test-e2e-release`. build-e2e: npm run build cargo build -p silverbullet setup: npm install npx playwright install # Install the `silverbullet` server and `sb` CLI into Cargo's bin directory # (~/.cargo/bin, normally already on PATH). `cargo install` copies a stable # release artifact (re-run to update). Set `CARGO_INSTALL_ROOT` or pass # `--root ` to install elsewhere. install: cargo install --path bin/silverbullet --force cargo install --path bin/sb --force uninstall: cargo uninstall silverbullet cargo uninstall sb build-for-docker: npm run build cargo build --release -p silverbullet --target aarch64-unknown-linux-musl cp target/aarch64-unknown-linux-musl/release/silverbullet silverbullet-arm64 cargo build --release -p silverbullet --target x86_64-unknown-linux-musl cp target/x86_64-unknown-linux-musl/release/silverbullet silverbullet-amd64 cargo build --release -p silverbullet --target armv7-unknown-linux-musleabihf cp target/armv7-unknown-linux-musleabihf/release/silverbullet silverbullet-arm # CI: compile each Linux target ONCE, emitting BOTH the raw docker binaries # (silverbullet-, consumed by Dockerfile via TARGETARCH) and the # server/CLI release zips. Replaces the old split where docker.yml and edge.yml # each recompiled the musl server binaries independently. build-linux-ci: build-for-docker # Server release zips reuse the raw musl binaries built by build-for-docker # (no recompile). cp silverbullet-amd64 silverbullet && zip silverbullet-server-linux-x86_64.zip silverbullet && rm silverbullet cp silverbullet-arm64 silverbullet && zip silverbullet-server-linux-aarch64.zip silverbullet && rm silverbullet cp silverbullet-arm silverbullet && zip silverbullet-server-linux-armv7.zip silverbullet && rm silverbullet # Windows server (no docker image for windows → no raw copy kept) cargo build --release -p silverbullet --target x86_64-pc-windows-gnu cp target/x86_64-pc-windows-gnu/release/silverbullet.exe silverbullet.exe && zip silverbullet-server-windows-x86_64.zip silverbullet.exe && rm silverbullet.exe # sb CLI release zips (musl x3 + windows) $(MAKE) build-cli-releases-rust docker: build-for-docker docker buildx build --platform linux/arm64,linux/amd64,linux/arm/v7 --push . # Cross-compiled (native `cargo build --target`, no cargo-zigbuild). The linker/CC # wiring is in `.cargo/config.toml`; install the (apt-only) cross-toolchains # first. On Debian/Ubuntu: # sudo apt-get install -y musl-tools gcc-aarch64-linux-gnu \ # gcc-arm-linux-gnueabihf gcc-mingw-w64-x86-64 # The ARM linux targets use the GNU cross-gcc to compile ring's C + drive the # link; Rust supplies the static musl libc itself (self-contained), so the # output is a static musl binary. (rustup target add the four triples below first.) build-server-releases: npm run build cargo build --release -p silverbullet --target x86_64-unknown-linux-musl cp target/x86_64-unknown-linux-musl/release/silverbullet silverbullet && zip silverbullet-server-linux-x86_64.zip silverbullet && rm silverbullet cargo build --release -p silverbullet --target aarch64-unknown-linux-musl cp target/aarch64-unknown-linux-musl/release/silverbullet silverbullet && zip silverbullet-server-linux-aarch64.zip silverbullet && rm silverbullet cargo build --release -p silverbullet --target armv7-unknown-linux-musleabihf cp target/armv7-unknown-linux-musleabihf/release/silverbullet silverbullet && zip silverbullet-server-linux-armv7.zip silverbullet && rm silverbullet cargo build --release -p silverbullet --target x86_64-pc-windows-gnu cp target/x86_64-pc-windows-gnu/release/silverbullet.exe silverbullet.exe && zip silverbullet-server-windows-x86_64.zip silverbullet.exe && rm silverbullet.exe # macOS server release archives — run on a macOS host (native SDK), builds both arches. build-server-releases-macos: npm run build rustup target add aarch64-apple-darwin x86_64-apple-darwin cargo build --release -p silverbullet --target aarch64-apple-darwin cp target/aarch64-apple-darwin/release/silverbullet silverbullet && zip silverbullet-server-darwin-aarch64.zip silverbullet && rm silverbullet cargo build --release -p silverbullet --target x86_64-apple-darwin cp target/x86_64-apple-darwin/release/silverbullet silverbullet && zip silverbullet-server-darwin-x86_64.zip silverbullet && rm silverbullet build-server-releases-freebsd: cargo build --release -p silverbullet --target x86_64-unknown-freebsd cp target/x86_64-unknown-freebsd/release/silverbullet silverbullet && zip silverbullet-server-freebsd-x86_64.zip silverbullet && rm silverbullet # --- Rust standalone server binary (bin/silverbullet) ----------------------- build-rs: npm run build cargo build --release -p silverbullet @echo "Built: target/release/silverbullet" # --- Rust standalone CLI client (bin/sb) ------------------------------------ build-rs-cli: cargo build --release -p sb @echo "Built: target/release/sb" # Rust `sb` CLI release archives (native `cargo build --target`, no zigbuild — # same cross-toolchains as `build-server-releases`; see its comment). Asset names # match what `sb upgrade` downloads: sb--.zip. build-cli-releases-rust: cargo build --release -p sb --target x86_64-unknown-linux-musl cp target/x86_64-unknown-linux-musl/release/sb sb && zip sb-linux-x86_64.zip sb && rm sb cargo build --release -p sb --target aarch64-unknown-linux-musl cp target/aarch64-unknown-linux-musl/release/sb sb && zip sb-linux-aarch64.zip sb && rm sb cargo build --release -p sb --target armv7-unknown-linux-musleabihf cp target/armv7-unknown-linux-musleabihf/release/sb sb && zip sb-linux-armv7.zip sb && rm sb cargo build --release -p sb --target x86_64-pc-windows-gnu cp target/x86_64-pc-windows-gnu/release/sb.exe sb.exe && zip sb-windows-x86_64.zip sb.exe && rm sb.exe # FreeBSD `sb` CLI release archive — kept SEPARATE because it needs a clang + # FreeBSD-sysroot cross setup (no apt cross-gcc exists), unlike the apt-only # targets above. Requires: clang lld llvm + a FreeBSD base sysroot at # /opt/freebsd-sysroot (see edge.yml / .cargo/config.toml). build-cli-releases-freebsd: cargo build --release -p sb --target x86_64-unknown-freebsd cp target/x86_64-unknown-freebsd/release/sb sb && zip sb-freebsd-x86_64.zip sb && rm sb # macOS `sb` CLI release archives — run on a macOS host (native SDK), both arches. build-cli-releases-rust-macos: rustup target add aarch64-apple-darwin x86_64-apple-darwin cargo build --release -p sb --target aarch64-apple-darwin cp target/aarch64-apple-darwin/release/sb sb && zip sb-darwin-aarch64.zip sb && rm sb cargo build --release -p sb --target x86_64-apple-darwin cp target/x86_64-apple-darwin/release/sb sb && zip sb-darwin-x86_64.zip sb && rm sb clean: rm -rf client_bundle dist target version.json rm -f silverbullet silverbullet-arm64 silverbullet-amd64 silverbullet-arm silverbullet.exe silverbullet-server-*.zip sb sb.exe sb-*.zip rm -rf plugs/configuration-manager/assets rm -rf plugs/object-graph/assets check: npm run check npx biome lint . cargo fmt --all --check cargo clippy --workspace --all-targets --all-features -- -D warnings fmt: npx biome format --write . cargo fmt --all test: npx vitest run cargo test --workspace --all-features test-e2e: build-e2e npx playwright test --project=chromium # Browser E2E tests against the standalone release binary, validating the # rust-embed embedded client bundle and the browser login flow. Builds the # release binary first (`target/release/silverbullet`). Kept out of the default # `test-e2e` so the fast suite isn't blocked on a release build. test-e2e-release: build-rs npx playwright test --project=release bench: npm run bench generate: npx @lezer/generator@1.5.1 client/space_lua/lua.grammar -o client/space_lua/parse-lua.js edit-docs: build-rs SB_INDEX_PAGE=SilverBullet SB_DISABLE_SERVICE_WORKER=1 ./target/release/silverbullet -p 3001 docs