This commit is contained in:
2026-06-11 22:19:41 -05:00
parent 8ff233ba04
commit 9408f84605
6 changed files with 174 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.direnv
.envrc
vssm

View File

@@ -1,2 +1,31 @@
# vssm_full
Build script that produces a single `vssm` binary with the web dashboard (`vssm_web`) embedded.
## Requirements
- Go
- Node.js + npm
- git
***A `flake.nix` is provided for Nix users, run `nix develop` for a shell with all dependencies available.***
## Usage
```sh
./build.sh
```
This clones `vssm` and `vssm_web` at the versions pinned in `versions.txt`, builds the frontend, embeds it into the Go binary, and outputs `./vssm`.
## Versions
Edit `versions.txt` to pin specific tagged releases of `vssm` and `vssm_web`.
## Configuration
See the [vssm README](https://git.bellsworne.tech/chrisbell/vssm) for configuration details, including the config file format, auth tokens, and instance setup.
## Running as a background service
*WIP* — instructions for setting up `vssm daemon` as a systemd service (or equivalent) will be added here in the future.

32
build.sh Executable file
View File

@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -euo pipefail
ORIGINAL_DIR=$(pwd)
source versions.txt
WORKDIR=$(mktemp -d)
trap "rm -rf $WORKDIR" EXIT
echo "Cloning vssm @ $VSSM_VERSION..."
git clone --branch "$VSSM_VERSION" --depth 1 https://git.bellsworne.tech/chrisbell/vssm "$WORKDIR/vssm"
echo "Cloning vssm_web @ $VSSM_WEB_VERSION..."
git clone --branch "$VSSM_WEB_VERSION" --depth 1 https://git.bellsworne.tech/chrisbell/vssm_web "$WORKDIR/vssm_web"
echo "Building web frontend..."
cd "$WORKDIR/vssm_web/vssm_web"
npm install
npm run build
echo "Copying frontend into vssm..."
rm -rf "$WORKDIR/vssm/web/dist"
cp -r dist "$WORKDIR/vssm/web/dist"
echo "Building vssm binary..."
cd "$WORKDIR/vssm"
go build -o vssm
echo "Copying binary to output..."
cp vssm "$ORIGINAL_DIR/vssm"
echo "Done. Binary at ./vssm"

61
flake.lock generated Normal file
View File

@@ -0,0 +1,61 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1781074563,
"narHash": "sha256-md8WlXOlfnIeHeOScMTTHFyf2d6iaTwPl2apR5EQ3P4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9ae611a455b90cf061d8f332b977e387bda8e1ca",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

47
flake.nix Normal file
View File

@@ -0,0 +1,47 @@
{
description = "Dev shell";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, utils }:
utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
};
};
dotnetRuntime = pkgs.dotnet-runtime_10.passthru.unwrapped;
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
go
gopls
gotools
delve
golangci-lint
nodejs_22
pnpm
pkgs.dotnet-runtime_10
patchelf
];
shellHook = ''
export DOTNET_ROOT="${dotnetRuntime}/share/dotnet"
export DOTNET_ROOT_X64="${dotnetRuntime}/share/dotnet"
export LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.zlib}/lib:/run/opengl-driver/lib:$LD_LIBRARY_PATH"
echo " == Dev shell loaded == "
'';
};
}
);
}

2
versions.txt Normal file
View File

@@ -0,0 +1,2 @@
VSSM_VERSION=v1.0.0
VSSM_WEB_VERSION=v1.0.0