Skip to content

Commit 524ed1b

Browse files
committed
fix: license MIT + version 0.1.0 sweep + CHANGELOG + Versioning section
FT-D2-1: README license section LGPL-2.1 -> MIT FT-D2-2: LICENSE copyright 2025 Robert Romero -> 2026 Sqoia Labs LLC FT-D3-1: all 1.0.0 version refs -> 0.1.0 (manifest.json, README.md, PRODUCTION_SETUP.md, UPGRADING.md) FT-D3-2: CHANGELOG rewritten — fabricated 1.0.0/SlurmCostManager entry removed; [Unreleased] populated from scope.md IN bucket (9 feature groups) FT-D3-3: README Versioning section added — pre-1.0 semver policy per D3 FT-D3-4: release.yml version guard — rejects workflow run when manifest.json version != release input version
1 parent 97ebb54 commit 524ed1b

7 files changed

Lines changed: 107 additions & 22 deletions

File tree

.github/workflows/release.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ jobs:
2828
run: |
2929
sudo apt-get update
3030
sudo apt-get install -y rpm dpkg-dev fakeroot
31+
- name: Verify version consistency
32+
run: |
33+
MANIFEST_VERSION=$(jq -r .version manifest.json)
34+
INPUT_VERSION="${{ github.event.inputs.version }}"
35+
if [ "$MANIFEST_VERSION" != "$INPUT_VERSION" ]; then
36+
echo "ERROR: version mismatch — manifest.json says '$MANIFEST_VERSION' but release input is '$INPUT_VERSION'"
37+
echo "Update manifest.json to match the intended release version before running this workflow."
38+
exit 1
39+
fi
40+
echo "Version check passed: $MANIFEST_VERSION"
3141
- name: Build
3242
run: make build
3343
- name: Test

CHANGELOG.md

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,65 @@
11
# Changelog
22

3-
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
3+
All notable changes to SlurmLedger are documented here.
4+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
5+
This project follows pre-1.0 semver — see `## Versioning` in `README.md`.
6+
7+
---
48

59
## [Unreleased]
6-
- Placeholder for upcoming changes.
710

8-
## [1.0.0] - 2025-08-04
11+
_Promoted to `[0.1.0]` when the first release tag is cut._
12+
913
### Added
10-
- Initial release of SlurmCostManager.
1114

15+
- **Core billing engine** — real-time cost calculation from SlurmDB (MySQL/MariaDB).
16+
Per-account, per-user, per-job cost breakdown. CPU-hour and GPU-hour tracking with
17+
configurable rates. Historical rate support (`rates.json` with timestamped entries).
18+
Configurable billing rules: failed job exclusion, short job exclusion, partition
19+
discounts.
20+
21+
- **SU bank / allocation management** — prepaid and postpaid allocation modes.
22+
Annual/quarterly/monthly/custom allocation periods. Budget tracking with alert
23+
thresholds at 80%, 90%, and 100%. Carryover rules. Admin dashboard view of all
24+
account balances.
25+
26+
- **Balance enforcement — Lua job_submit plugin** — real-time job rejection at
27+
submission via `job_submit.lua`. `ENABLE_ENFORCEMENT` flag for audit-only mode.
28+
User-visible error messages include remaining balance. Alternative:
29+
`balance_enforcer.py --sync` for sites that cannot use Lua.
30+
31+
- **PDF invoice generation** — ReportLab-based PDF with institution branding.
32+
Line items include per-job breakdown, rates, and totals. Invoice lifecycle:
33+
Draft → Sent → Viewed → Paid. Sequential invoice numbering. Bulk generation
34+
by account.
35+
36+
- **Credit memos** — refund support with linked credit memos. Adjustments
37+
reflected in the invoice ledger.
38+
39+
- **Role-based access control** — four roles: Admin, PI, Member, Finance.
40+
PI auto-detection from Slurm account coordinators. Role-based UI with tabs and
41+
actions gated by role.
42+
43+
- **Setup wizard** — three-step first-run wizard: institution profile, billing
44+
rates, DB connection test. Guides new admins through initial configuration without
45+
editing JSON directly.
46+
47+
- **RPM and DEB packaging**`make rpm` / `make deb` produce installable packages.
48+
RPM tested on Rocky Linux 9; DEB for Ubuntu/Debian. Packages handle config
49+
directory creation and Cockpit restart in `%post` / `postinst`.
50+
51+
- **Billing rules engine** — admin-configurable rule-based charge/no-charge
52+
decisions. Admin-editable via UI with no config file editing required. Closed
53+
operator set (no eval/exec security risk).
54+
55+
- **Reports and CSV export** — monthly/quarterly/annual billing summaries.
56+
RFC 4180 compliant CSV export. Journal entry CSV for ERP import (generic, not
57+
Oracle-specific).
58+
59+
- **Docker Compose test environment**`test/vm/` and `docker-compose.yml` for
60+
local development against a real MariaDB fixture. CI `db-integration` job
61+
validates `slurmdb.py` against live MariaDB.
62+
63+
- **CI pipeline** — GitHub Actions: lint, unit tests, MariaDB integration tests,
64+
packaging dry-run. Five jobs: `lint`, `test`, `db-integration`, `package`,
65+
`security-scan`.

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2025 Robert Romero
3+
Copyright (c) 2026 Sqoia Labs LLC
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

PRODUCTION_SETUP.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ sudo systemctl enable --now cockpit.socket
2727
### From Release Package
2828
```bash
2929
# Download latest release
30-
curl -LO https://github.com/NessieCanCode/SlurmLedger/releases/latest/download/slurmledger-1.0.0-1.noarch.rpm
31-
sudo dnf install slurmledger-1.0.0-1.noarch.rpm
30+
curl -LO https://github.com/NessieCanCode/SlurmLedger/releases/latest/download/slurmledger-0.1.0-1.noarch.rpm
31+
sudo dnf install slurmledger-0.1.0-1.noarch.rpm
3232
```
3333

3434
### From Source

README.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ Full-featured HPC billing and allocation management for SLURM clusters. A Cockpi
7676

7777
### From RPM (RHEL/Rocky/Alma)
7878
```bash
79-
sudo dnf install slurmledger-1.0.0-1.noarch.rpm
79+
sudo dnf install slurmledger-0.1.0-1.noarch.rpm
8080
sudo systemctl try-restart cockpit
8181
```
8282

8383
### From DEB (Ubuntu/Debian)
8484
```bash
85-
sudo dpkg -i slurmledger_1.0.0-1_all.deb
85+
sudo dpkg -i slurmledger_0.1.0-1_all.deb
8686
sudo apt-get install -f # install dependencies
8787
sudo systemctl try-restart cockpit
8888
```
@@ -328,6 +328,24 @@ This file is separate from `institution.json` (which holds non-sensitive configu
328328
| `/etc/slurmledger/invoices.json` | root:cockpit-ws | 0640 | Invoice ledger |
329329
| `/etc/slurmledger/rates.json` | root | 0644 | Billing rates |
330330

331+
## Versioning
332+
333+
SlurmLedger follows pre-1.0 [Semantic Versioning](https://semver.org/):
334+
335+
- **Minor bumps** (`0.1.0``0.2.0`) may include breaking changes. Breaking changes
336+
are called out under `### Breaking` in `CHANGELOG.md` and in the release notes.
337+
- **Patch bumps** (`0.1.0``0.1.1`) must be backwards-compatible bug fixes only.
338+
No breaking changes, no new config keys required.
339+
- **Config-format breaks**: when a minor bump changes the format of `/etc/slurmledger/*.json`,
340+
a migration script runs automatically in the `%post` section of the RPM and the `postinst`
341+
section of the DEB. You should never need to hand-edit JSON to upgrade across a minor version.
342+
- **No deprecation period required pre-1.0.** Features may be removed without a deprecation
343+
cycle before `v1.0.0`. After `v1.0.0`, full semver deprecation discipline applies.
344+
345+
`v1.0.0` is cut when at least one production deployment at a real HPC center has been live
346+
for 30+ days without site-reported correctness issues in the billing engine. Until then,
347+
`0.x` versions are honest first-public-release signals, not feature-incomplete indicators.
348+
331349
## License
332350

333-
LGPL-2.1 — See [LICENSE](LICENSE).
351+
MIT — See [LICENSE](LICENSE).

UPGRADING.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@
22

33
## Config Schema Changes
44

5-
### v1.1.0 (Sprint 5-6)
6-
- `rates.json`: Added `allocations`, `billing_rules`, `billing_defaults` sections
7-
- `institution.json`: Added `roles`, `bankInfo`, `paymentTerms`, `paymentTermsDays`
8-
- NEW: `financial_config.json` — financial integration settings (was in institution.json)
9-
- NEW: `invoices.json` — invoice ledger (auto-created)
10-
11-
### v1.0.0 (Initial)
12-
- `rates.json`: `defaultRate`, `defaultGpuRate`, `overrides`, `historicalRates`, `historicalGpuRates`
13-
- `institution.json`: Institution profile only
5+
### v0.1.0 (Initial public release)
6+
- `rates.json`: `defaultRate`, `defaultGpuRate`, `overrides`, `historicalRates`, `historicalGpuRates`,
7+
`allocations`, `billing_rules`, `billing_defaults`
8+
- `institution.json`: `roles`, `bankInfo`, `paymentTerms`, `paymentTermsDays`
9+
- `financial_config.json`: financial integration settings (separate from institution.json)
10+
- `invoices.json`: invoice ledger (auto-created on first run)
1411

1512
## Migration Guide
16-
Existing `rates.json` files from v1.0.0 continue to work — new fields default gracefully.
17-
If you had `financialIntegration` in `institution.json`, move it to `financial_config.json`.
13+
14+
No migrations required for v0.1.0 — this is the initial release.
15+
16+
Future minor-version upgrades (`0.1.0``0.2.0`) may include config-format breaking changes.
17+
When they do, a migration script will run automatically in the `%post` section of the RPM
18+
and the `postinst` section of the DEB. You should never need to hand-edit JSON to upgrade
19+
across a minor pre-1.0 version. See `CHANGELOG.md` for any `### Breaking` entries before
20+
upgrading.

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.0.0",
2+
"version": "0.1.0",
33
"name": "slurmledger",
44
"summary": "Web UI for analyzing and managing Slurm accounting costs",
55
"description": "Cockpit plugin that lets HPC admins view consolidated Slurm charges, retrieve invoice PDFs, and drill into cost breakdowns (core-hours, GPU-hours) for historical analysis and auditing.",

0 commit comments

Comments
 (0)