Skip to content

Commit c5902d9

Browse files
committed
add nix module
1 parent 6834cd7 commit c5902d9

11 files changed

Lines changed: 389 additions & 50 deletions

File tree

Cargo.lock

Lines changed: 72 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[workspace]
2-
members = ["indexer", "backend"]
2+
members = ["indexer", "backend", "reposerver"]
33
resolver = "2"
44

55
[package]

backend/src/gc.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,9 @@ pub async fn prune_commit_data(
346346
AND crc.ref_count > 0
347347
)",
348348
)
349-
.execute(&mut *tx)
350-
.await
351-
.map_err(ApiErrorKind::from)?;
349+
.execute(&mut *tx)
350+
.await
351+
.map_err(ApiErrorKind::from)?;
352352

353353
tx.commit().await.map_err(ApiErrorKind::from)?;
354354

@@ -495,9 +495,9 @@ pub async fn prune_repository_data(
495495
AND crc.ref_count > 0
496496
)",
497497
)
498-
.execute(&mut *tx)
499-
.await
500-
.map_err(ApiErrorKind::from)?;
498+
.execute(&mut *tx)
499+
.await
500+
.map_err(ApiErrorKind::from)?;
501501
tx.commit().await.map_err(ApiErrorKind::from)?;
502502
}
503503

nix/pointer-module.nix

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
}:
77
with lib; let
88
cfg = config.services.pointer;
9+
tomlFormat = pkgs.formats.toml {};
10+
repoServerConfig = recursiveUpdate cfg.repoServer.config {
11+
global.state_dir = cfg.repoServer.stateDirectory;
12+
};
13+
repoServerConfigFile = tomlFormat.generate "pointer-reposerver.toml" repoServerConfig;
14+
repoServerArgs = ["--config" repoServerConfigFile] ++ cfg.repoServer.extraArgs;
915

1016
# Helper function to create environment variables for a service component
1117
mkEnv = {
@@ -100,6 +106,41 @@ in {
100106
description = "Sets the GC_INTERVAL_SECS environment variable for the 'pointer-backend' service.";
101107
};
102108
};
109+
110+
# --- Reposerver Configuration ---
111+
repoServer = {
112+
enable = mkEnableOption "the Pointer reposerver component.";
113+
114+
config = mkOption {
115+
type = tomlFormat.type;
116+
default = {};
117+
description = "Inline reposerver TOML configuration rendered by the module.";
118+
};
119+
120+
extraArgs = mkOption {
121+
type = types.listOf types.str;
122+
default = [];
123+
description = "Additional command-line arguments passed to reposerver.";
124+
};
125+
126+
user = mkOption {
127+
type = types.str;
128+
default = "pointer";
129+
description = "User account for the reposerver systemd service.";
130+
};
131+
132+
group = mkOption {
133+
type = types.str;
134+
default = "pointer";
135+
description = "Group for the reposerver systemd service.";
136+
};
137+
138+
stateDirectory = mkOption {
139+
type = types.str;
140+
default = "/home/pointer";
141+
description = "State directory for pointer-reposerver; also used as WorkingDirectory and written to global.state_dir.";
142+
};
143+
};
103144
};
104145

105146
config = mkIf cfg.enable {
@@ -143,6 +184,20 @@ in {
143184
};
144185
};
145186

187+
# --- Systemd Service for Reposerver ---
188+
systemd.services.pointer-reposerver = mkIf cfg.repoServer.enable {
189+
description = "Pointer Reposerver Service";
190+
wantedBy = ["multi-user.target"];
191+
after = ["network.target"];
192+
serviceConfig = {
193+
ExecStart = "${cfg.package}/bin/pointer-reposerver ${escapeShellArgs repoServerArgs}";
194+
User = cfg.repoServer.user;
195+
Group = cfg.repoServer.group;
196+
WorkingDirectory = cfg.repoServer.stateDirectory;
197+
Restart = "always";
198+
};
199+
};
200+
146201
users.groups.pointer = {};
147202
users.users.pointer = {
148203
createHome = true;

nix/pointer.nix

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
rustPlatform.buildRustPackage rec {
1616
pname = "pointer";
1717
version = "0.1.0";
18-
outputs = ["out" "web" "backend" "indexer"];
18+
outputs = ["out" "web" "backend" "indexer" "reposerver"];
1919

2020
src = lib.cleanSource ../.;
2121

@@ -49,23 +49,26 @@ rustPlatform.buildRustPackage rec {
4949
export SQLX_OFFLINE_DIR=$PWD/backend/.sqlx
5050
cargo build --release --package pointer-backend --bin pointer-backend
5151
cargo build --release --package pointer-indexer --bin pointer-indexer
52+
cargo build --release --package pointer-reposerver --bin pointer-reposerver
5253
5354
runHook postBuild
5455
'';
5556

5657
installPhase = ''
5758
runHook preInstall
5859
59-
mkdir -p $out/bin $web/bin $web/share/target $backend/bin $indexer/bin
60+
mkdir -p $out/bin $web/bin $web/share/target $backend/bin $indexer/bin $reposerver/bin
6061
cp target/release/pointer-indexer $indexer/bin/pointer-indexer
6162
cp target/release/pointer-backend $backend/bin/pointer-backend
63+
cp target/release/pointer-reposerver $reposerver/bin/pointer-reposerver
6264
cp target/release/pointer $web/bin/pointer
6365
cp Cargo.toml $web/share
6466
cp -r target/site $web/share/target/site
6567
wrapProgram $web/bin/pointer --chdir $web/share
6668
6769
ln -sf $indexer/bin/pointer-indexer $out/bin/pointer-indexer
6870
ln -sf $backend/bin/pointer-backend $out/bin/pointer-backend
71+
ln -sf $reposerver/bin/pointer-reposerver $out/bin/pointer-reposerver
6972
ln -sf $web/bin/pointer $out/bin/pointer
7073
7174
runHook postInstall

reposerver/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "reposerver"
2+
name = "pointer-reposerver"
33
version = "0.1.0"
44
edition = "2024"
55

reposerver/README.md

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
# reposerver
1+
# pointer-reposerver
22

3-
`reposerver` polls configured Git repositories, fetches only configured branches at depth 1,
3+
`pointer-reposerver` polls configured Git repositories, fetches only configured branches at depth 1,
44
and runs `pointer-indexer` only when branch head commits change.
55

66
Logging is emitted to stderr via `tracing` (configure verbosity with `RUST_LOG`).
77

88
## Run
99

1010
```bash
11-
cargo run -p reposerver -- --config reposerver/example.reposerver.toml --validate-config
12-
cargo run -p reposerver -- --config reposerver/example.reposerver.toml --once
13-
cargo run -p reposerver -- --config reposerver/example.reposerver.toml
11+
cargo run -p pointer-reposerver -- --config reposerver/example.reposerver.toml --validate-config
12+
cargo run -p pointer-reposerver -- --config reposerver/example.reposerver.toml --once
13+
cargo run -p pointer-reposerver -- --config reposerver/example.reposerver.toml
1414
```
1515

1616
## Config
@@ -19,3 +19,13 @@ See `reposerver/example.reposerver.toml` for a complete example.
1919

2020
`global.indexer_args` are applied first for every invocation, then `repo.indexer_args` are appended.
2121
Per-branch args can be set with `[[repo.per_branch]]`; those args are appended last.
22+
23+
Optional global finish hook:
24+
25+
```toml
26+
[global.finish_hook]
27+
command = "scripts/after-sweep.sh"
28+
timeout = "30s"
29+
```
30+
31+
The finish hook runs once after all repos complete in `--once` mode, and once per full sweep in forever mode.

reposerver/example.reposerver.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ git_bin = "git"
66
indexer_bin = "pointer-indexer"
77
indexer_args = ["--upload-url", "http://127.0.0.1:8080/api/v1/index"]
88

9+
[global.finish_hook]
10+
command = "echo pointer-reposerver sweep finished"
11+
timeout = "30s"
12+
913
[[repo]]
1014
name = "pointer"
1115
url = "git@github.com:org/pointer.git"

0 commit comments

Comments
 (0)