Skip to content

Commit 56ed176

Browse files
author
Sqoia Dev Agent
committed
feat: RPM/DEB packaging, role management UI, smart PI detection
Packaging: - Proper slurmledger.spec file (extracted from Makefile inline) - Release workflow installs rpmbuild + dpkg-dev for real packages - RPM includes python3-pymysql + python3-reportlab as Requires - DEB includes config files in /etc/slurmledger/ Role Management UI: - User Roles tab in Administration with chip/tag interface - Add/remove users from Admin, Finance, PI roles - Root always defaults to admin (hardcoded, no config needed) - Role descriptions help table Smart PI Detection: - SLURM account prefix matching (e.g., project_ucm_{username}) - Unix group prefix matching (e.g., ucm_{username}) - Configurable prefixes in Role Management UI - Auto-preview shows what the pattern matches - Falls back to sacctmgr coordinator check - Supports sites where PI=owner of matching SLURM account/group - Users can be in multiple groups (all methods checked)
1 parent 4e2df4b commit 56ed176

4 files changed

Lines changed: 566 additions & 17 deletions

File tree

.github/workflows/release.yml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ jobs:
2424
python-version: '3.x'
2525
- name: Install deps
2626
run: pip install pymysql reportlab pytest
27+
- name: Install packaging tools
28+
run: |
29+
sudo apt-get update
30+
sudo apt-get install -y rpm rpmbuild dpkg-dev fakeroot
2731
- name: Build
2832
run: make build
2933
- name: Test
@@ -34,17 +38,19 @@ jobs:
3438
git config user.email "github-actions@github.com"
3539
git tag v${{ github.event.inputs.version }} || true
3640
git push origin v${{ github.event.inputs.version }} || true
37-
- name: Package
38-
run: |
39-
make rpm || true
40-
make deb || true
41+
- name: Build RPM
42+
run: make rpm
43+
- name: Build DEB
44+
run: make deb
4145
- name: Publish Release
4246
uses: softprops/action-gh-release@v2
4347
with:
4448
tag_name: v${{ github.event.inputs.version }}
4549
name: SlurmLedger v${{ github.event.inputs.version }}
4650
generate_release_notes: true
4751
files: |
52+
rpmbuild/RPMS/**/*.rpm
53+
slurmledger_*.deb
4854
dist/**/*
4955
env:
5056
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Makefile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,19 @@ rpm: package
5757
>rm -rf rpmbuild
5858
>mkdir -p rpmbuild/BUILD rpmbuild/RPMS rpmbuild/SOURCES rpmbuild/SPECS rpmbuild/SRPMS
5959
>cp slurmledger-$(VERSION).tar.gz rpmbuild/SOURCES/
60-
>printf 'Summary: SlurmLedger\nName: slurmledger\nVersion: $(VERSION)\nRelease: 1\nLicense: MIT\nSource0: %%{name}-%%{version}.tar.gz\nBuildArch: noarch\nRequires: cockpit\nRequires: python3\nRequires: python3-pymysql\nRequires: python3-reportlab\n%%description\nSlurmLedger Cockpit plugin\n%%prep\n%%setup -q\n%%build\n%%install\nmkdir -p %%{buildroot}/usr/share/cockpit/slurmledger\ncp -a * %%{buildroot}/usr/share/cockpit/slurmledger/\nmkdir -p %%{buildroot}/etc/slurmledger\ncp rates.json %%{buildroot}/etc/slurmledger/rates.json\ncp institution.json %%{buildroot}/etc/slurmledger/institution.json\n%%files\n/usr/share/cockpit/slurmledger\n%%config(noreplace) /etc/slurmledger/rates.json\n%%config(noreplace) /etc/slurmledger/institution.json\n' > rpmbuild/SPECS/slurmledger.spec
60+
>sed "s/%{version}/$(VERSION)/g" slurmledger.spec > rpmbuild/SPECS/slurmledger.spec
6161
>$(RPMBUILD) --define "_topdir $(PWD)/rpmbuild" -bb rpmbuild/SPECS/slurmledger.spec
6262

6363
deb: package
6464
>rm -rf debbuild
6565
>mkdir -p debbuild/usr/share/cockpit/slurmledger
6666
>cp -a $(DIST)/* debbuild/usr/share/cockpit/slurmledger/
67+
>mkdir -p debbuild/etc/slurmledger
68+
>cp $(DIST)/rates.json debbuild/etc/slurmledger/rates.json
69+
>cp $(DIST)/institution.json debbuild/etc/slurmledger/institution.json
6770
>mkdir -p debbuild/DEBIAN
68-
>echo "Package: slurmledger\nVersion: $(VERSION)\nSection: admin\nPriority: optional\nArchitecture: all\nMaintainer: Unknown\nDepends: cockpit\nDescription: SlurmLedger Cockpit plugin" > debbuild/DEBIAN/control
69-
>dpkg-deb --build debbuild slurmledger_$(VERSION)_all.deb
71+
>printf 'Package: slurmledger\nVersion: %s\nSection: admin\nPriority: optional\nArchitecture: all\nMaintainer: SlurmLedger Contributors\nDepends: cockpit, python3, python3-pymysql, python3-reportlab\nDescription: SlurmLedger Cockpit plugin\n HPC cost management for SLURM clusters.\n' "$(VERSION)" > debbuild/DEBIAN/control
72+
>fakeroot dpkg-deb --build debbuild slurmledger_$(VERSION)_all.deb
7073
>rm -rf debbuild
7174

7275
check:

slurmledger.spec

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
Summary: SlurmLedger Cockpit plugin for SLURM job cost tracking
2+
Name: slurmledger
3+
Version: %{version}
4+
Release: 1%{?dist}
5+
License: MIT
6+
BuildArch: noarch
7+
Source0: %{name}-%{version}.tar.gz
8+
9+
Requires: cockpit
10+
Requires: python3
11+
Requires: python3-pymysql
12+
Requires: python3-reportlab
13+
14+
%description
15+
SlurmLedger is a Cockpit plugin that provides HPC cost management for SLURM
16+
clusters. It tracks job costs, generates invoices, manages allocations, and
17+
provides role-based dashboards for admins, finance staff, PIs, and members.
18+
19+
%prep
20+
%setup -q
21+
22+
%build
23+
# Nothing to compile — static web assets and Python scripts
24+
25+
%install
26+
install -d %{buildroot}/usr/share/cockpit/%{name}
27+
cp -a * %{buildroot}/usr/share/cockpit/%{name}/
28+
install -d %{buildroot}/etc/%{name}
29+
cp rates.json %{buildroot}/etc/%{name}/rates.json
30+
cp institution.json %{buildroot}/etc/%{name}/institution.json
31+
32+
%files
33+
/usr/share/cockpit/%{name}
34+
%config(noreplace) /etc/%{name}/rates.json
35+
%config(noreplace) /etc/%{name}/institution.json
36+
37+
%changelog

0 commit comments

Comments
 (0)