Commit graph

105 commits

Author SHA1 Message Date
85970e249c
fc-common: extend BuildStatusFilter with all status variants
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I58c8ebbe937035c2398af4eea0eaa3cf6a6a6964
2026-02-16 13:02:25 +03:00
5b7648220c
fc-common: update notifications to handle all BuildStatus variants
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I99db557ae204f3a4ffec6be70386ecc16a6a6964
2026-02-16 13:02:24 +03:00
5f09a46d29
fc-queue-runner: map exit codes to extended BuildStatus variants
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ibaa4de9e2c789931df8c67a53528829a6a6a6964
2026-02-16 13:02:23 +03:00
f4772036ce
fc-common: add database migration for extended build status codes
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I0c13eda985d634e63189ba6907e488ae6a6a6964
2026-02-16 13:02:22 +03:00
2b763833d4
fc-common: add extended BuildStatus enum with new status code
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If00cae8b2f7d4a7ad2d64bfe70a5c4186a6a6964
2026-02-16 13:02:21 +03:00
2a404e685b
nix: allow file:// and other insecure schemes in VM tests
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I8ad4f8e9cf0990a036cff252d8dd38f96a6a6964
2026-02-16 00:08:24 +03:00
a5768d46eb
fc-common: allow configuring url schemes to allow for testing
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I99912d7c45f1a4664d4823ddd793b5af6a6a6964
2026-02-16 00:08:23 +03:00
NotAShelf
861eda231f Merge pull request 'treewide: general clenaup' (#1) from notashelf/push-tuktqzqlkzxp into main
Reviewed-on: https://git.notashelf.dev/NotAShelf/fc/pulls/1
2026-02-15 23:40:37 +03:00
b745550011
various: tiny cleanup
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I312766a6178be3898b51c2863f502bb06a6a6964
2026-02-15 23:37:53 +03:00
f7081317ee
various: reuse HTTP client; eliminate intermediate string allocations; add tests
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I18b89e1aae78a400a89c9d89423ce1da6a6a6964
2026-02-15 23:37:52 +03:00
38ed7faee2
various: replace silent error discards with logged warnings
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I465d760b5330980270b64b4a89abc09f6a6a6964
2026-02-15 23:37:51 +03:00
9bbc1754d9
fc-server: session cleanup; conditional Secure cookie; kill_on_drop on NAR processes
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ie7b9002bbdc0ad91bb041f89979881956a6a6964
2026-02-15 23:37:50 +03:00
aa4ebf2f5b
various: harden input validation; add SSRF protection; fix default API key role
Default API key role was "admin", which was something that I forgot to fix during testing. We
change it to "read-only". 

Additionally repository URLs now reject `file://` scheme (another testing artifact) localhost,
private IP ranges, and cloud metadata endpoints. Nix expressions reject path traversal (`..`)
and absolute paths. Validation is called at the evaluator endtrypoint before command construction.

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I35729c6aa9ec4ff8d1ea19bd57ea93646a6a6964
2026-02-15 23:37:49 +03:00
a2b638d4db
nix: attempt to fix VM tests; general cleanup
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I65f6909ef02ab4599f5b0bbc0930367e6a6a6964
2026-02-15 23:37:49 +03:00
83071514a3
fc-server: add metrics visualization dashboard
Adds a /metrics page with Chart.js charts, which requires an annoying
CDN fetch but until I figure out a good method of fetching things during
build it's our best bet. I've pinned the thing so it's probably good.

The page displays build counts, duration percentiles and system
distribution. Time range and project filters are included, and the
metrics page is linked from navigation.

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I99059594c29a9b35d2fd4d140628d6f46a6a6964
2026-02-14 18:08:21 +03:00
537fa823a7
fc-server: add timeseries API endpoints for visualisation
Adds:

- `build_stats_timeseries()` for build counts over time
- `duration_percentiles_timeseries()` for P50/P95/P99
- `system_distribution()` for per-system counts

and of course,  REST endpoints for `/api/v1/metrics/timeseries/*`. This
is a good start for data visualisation. My professors would be proud.

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I3c0b9d14592945a661af77b7edf338a86a6a6964
2026-02-14 18:08:20 +03:00
75ff45fc91
various: initial support for S3 cache upload
Not too stable yet, but might work.

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If134e7e45aa99ce8d18df7b78b1f881b6a6a6964
2026-02-14 18:08:19 +03:00
fcb32aa9be
fc-queue-runner: collect metrics and trigger alerts on threshold
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If1d682abdc6a932bdf5b9bfe23737c3e6a6a6964
2026-02-14 18:08:18 +03:00
ec5fbb453d
fc-common: add AlertConfig and AlertManager for error tracking
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iaf2f52f6e0cf33e3275528ac13cd92046a6a6964
2026-02-14 18:08:17 +03:00
f8f9703faa
fc-common: add build_metrics table and repository
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If6842311f49bfcba9e1b11fa8bc9748c6a6a6964
2026-02-14 18:08:16 +03:00
80fece6fa8
nix: make default formatter a multi-file wrapper
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I2cec885c77bdb5cc5dc9ca8bc7a25e2a6a6a6964
2026-02-08 22:23:30 +03:00
0dc09dbd19
various: fix auto-fisable Clippy lints
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I79a708981b5aee43eadbd48d69fb78be6a6a6964
2026-02-08 22:23:29 +03:00
3a03cf7b3e
treewide: format with nightly rustfmt; auto-fix Clippy lints
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If4fd0511087dbaa65afc56a34d7c2f166a6a6964
2026-02-08 22:23:28 +03:00
fe45fff3f3
fc-server: mild improvements to admin page
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ibae9d52b24164c7357aaf15437de0ead6a6a6964
2026-02-08 22:23:27 +03:00
4597869213
fc-server: add 'reproduce build' section to build template
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I2c9f6951e9b6014a32140216367693de6a6a6964
2026-02-08 22:23:26 +03:00
c6c64d568f
fc-common: add advanced search functionality with filters and sorting
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ib48f9bd42eea289b9eb8b13e3bd60ed86a6a6964
2026-02-08 22:23:25 +03:00
d4d9297d96
fc-common: add declarative sync for remote builders and channels
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I3dae89f04777f6d941824606aebe34446a6a6964
2026-02-08 22:23:24 +03:00
abd16319f2
fc-common: add sync_for_project for declarative members
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ic283bf87771e82a27c4c579314a21c1d6a6a6964
2026-02-08 22:23:23 +03:00
7e6fc22ba2
fc-common: add declarative sync for webhooks and notifications
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I0b7c46feba776837158507bfe883cbfa6a6a6964
2026-02-08 22:23:22 +03:00
dead111dfb
fc-common: add upsert and sync_for_jobset for declarative jobset inputs
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I40f2724aeb9615e8c37a397187064fa66a6a6964
2026-02-08 22:23:21 +03:00
73919f2f9e
treewide: format with nightly rustfmt; auto-fix Clippy lints
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I15d9215ab506b37954468d99746098326a6a6964
2026-02-08 22:23:20 +03:00
10a118bd50
various: update tests for jobset state field changes
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ifdd7f216fcc27fface0cb16d56c5e37b6a6a6964
2026-02-08 22:23:19 +03:00
865dd39a07
fc-server: polish user management; add starred jobs UI
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ie3034d4a66a55cb71c23ba25b40d678f6a6a6964
2026-02-08 22:23:18 +03:00
865b2f5f66
fc-common: better support declarative users with password file
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I1eac6decd68a4e59a52fecaecdd476b26a6a6964
2026-02-08 22:23:17 +03:00
b791ed75f3
fc-queue-runner: one-at-a-time jobset scheduling
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iebe127bfba39979649826dfd0d28f9db6a6a6964
2026-02-08 22:23:16 +03:00
8472e3f1d8
evaluator: per-jobset check intervals; fix one-shot handling
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ib36e82fad6f1c3b2ad87651d680fc1406a6a6964
2026-02-08 22:23:15 +03:00
1df28f6049
fc-common: add jobset state enum; add db migration"
I'm going to delete all migrations one of those days...

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I8e2e32118c2d85438a8b343614038eda6a6a6964
2026-02-08 22:23:14 +03:00
811c2031de
chore: bump deps
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If78f5fb7597845018afec4be969b378b6a6a6964
2026-02-08 22:23:13 +03:00
b9780dea1c
chore: bump MSRV to 1.95 for nightly Rust
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I3e30e54bbdf9f382c31b29bbcaeb44be6a6a6964
2026-02-08 22:23:12 +03:00
c310ca5635
nix: use rust-overlay for nightly Rust
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I74b2d21496261a3178ce043a5990583d6a6a6964
2026-02-08 22:23:11 +03:00
9f62b28c58
nix: pin Postgresql version in devshell
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I40ea680d27108a2f965719853c03fd956a6a6964
2026-02-08 22:23:06 +03:00
593203dcd0
docs: initial comparison document
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ic50cc37d50c50ef279f65e87011d252f6a6a6964
2026-02-07 22:09:30 +03:00
62f8cdf4de
nix: cleanup
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ia88656a1d6bb152398a5c4ce83d40a3e6a6a6964
2026-02-07 22:09:29 +03:00
794e4a8e61
common,evaluator: add PR fields to evaluation; add jobset ordering test
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I305c988aceb8c72c65b740cb323c0ef06a6a6964
2026-02-07 22:09:28 +03:00
0c11680a56
server: update integration tests
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I3a8adec01604806e1dab5e3deea88c3e6a6a6964
2026-02-07 22:09:28 +03:00
e2abc331d1
server: update project routes and main
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If365e10bfab695d3ea2360e239aeab6b6a6a6964
2026-02-07 22:09:27 +03:00
5ee3154f8e
queue-runner: update tests
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: If15433609cb601119e77c35ff73041196a6a6964
2026-02-07 22:09:26 +03:00
6aa3a7357f
common: improve search and repo tests
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ic34fb20b5fc0e400f3ed2da441796f6b6a6a6964
2026-02-07 22:09:25 +03:00
b6012b932f
chore: update dependencies and configuration
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I5bab99cb7e7bb2125e7410b54911021a6a6a6964
2026-02-07 22:09:24 +03:00
8c1968c863
common: improve notifications system
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I084bb95a4eb79d5a15f7c062c112124c6a6a6964
2026-02-07 22:09:23 +03:00