From 8e8f5366be76e3c57132b524af153e3743d2ea5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torjus=20H=C3=A5kestad?= Date: Sat, 14 Feb 2026 16:56:54 +0100 Subject: [PATCH] refactor: move version to Go source, extract in flake.nix Define version once in cmd/oubliette/main.go and use builtins.match in flake.nix to extract it. Add versioning guidelines to CLAUDE.md. Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 10 ++++++++++ cmd/oubliette/main.go | 2 ++ flake.nix | 4 +++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 316288c..931fb36 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,6 +14,16 @@ SSH honeypot written in Go. See `PLAN.md` for full project plan and architecture - Keep code simple and focused. Refer to `PLAN.md` for design decisions. - When adding new config options, always add them to `oubliette.toml.example` as well. +## Versioning + +We use **semver** (`MAJOR.MINOR.PATCH`). The version is defined in `cmd/oubliette/main.go` (`const Version`) and extracted automatically by `flake.nix`. + +- **Patch** (`0.1.0` → `0.1.1`): Bug fixes, minor tweaks, documentation changes. +- **Minor** (`0.1.0` → `0.2.0`): New features, new config options, new shell types. +- **Major** (`0.x.y` → `1.0.0`): Breaking changes to config format or public interfaces. + +Bump the version when merging a feature branch to master, not on every commit. While pre-1.0, breaking changes only require a minor bump. + ## Git workflow - Use **conventional commits** (e.g. `feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:`). diff --git a/cmd/oubliette/main.go b/cmd/oubliette/main.go index e2f6c38..9e59884 100644 --- a/cmd/oubliette/main.go +++ b/cmd/oubliette/main.go @@ -12,6 +12,8 @@ import ( "git.t-juice.club/torjus/oubliette/internal/server" ) +const Version = "0.1.0" + func main() { configPath := flag.String("config", "oubliette.toml", "path to config file") flag.Parse() diff --git a/flake.nix b/flake.nix index 2f1ac0d..5f2982b 100644 --- a/flake.nix +++ b/flake.nix @@ -14,11 +14,13 @@ packages = forAllSystems (system: let pkgs = nixpkgs.legacyPackages.${system}; + mainGo = builtins.readFile ./cmd/oubliette/main.go; + version = builtins.head (builtins.match ''.*const Version = "([^"]+)".*'' mainGo); in { default = pkgs.buildGoModule { pname = "oubliette"; - version = "0.1.0"; + inherit version; src = ./.; vendorHash = "sha256-z/E1ZDfedOxI8CSUfcpFGYX0SrdcnAYuu2p0ATozDaA="; subPackages = [ "cmd/oubliette" ];