OXYGENHUB

CI builds on disks of its own for the app's build output and Gradle's cache (refs #28) bd1d3ad70c70

The workspace disk has room for the checkout and 512 MiB: with Glance the test job's coverage reports filled it (run #1645, no space left on device). /src/app/build (8 GiB) and /src/.gradle (2 GiB) are ephemeral disks in the test and release jobs.
Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key 9d46f028ed0d
When
· 2026-10-28 17:22 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
bd1d3ad70c705fb867b2033f10f4e7668f3f9ac32700b08921ce14524457c287
Depends on
57c0824300db 740a452b2669 8a657957d5a0 9481bfa7c5d0 bfa2eff05d35
Depended on by
nothing yet
In bookmarks
main
In tags
v0.1.1 v0.1.2 v0.1.3 v0.1.4 v0.1.5 v0.1.6 v0.1.7 v0.1.8 v0.1.9
Edits
4 atoms, 0 tree operations, 2 files

Browse the tree at this change

modified .flow/pipeline.kdl +24 −0
…
36 unchanged lines
37 37
        cache "rust-core-target"
38 38
        key "rust-core/Cargo.lock"
39 39
    }
40 +
    // The workspace has room for the checkout and a little more: the app's
41 +
    // build output and Gradle's project cache get disks of their own.
42 +
    mount {
43 +
        source "ephemeral://disk"
44 +
        target "/src/app/build"
45 +
        size "8GiB"
46 +
    }
47 +
    mount {
48 +
        source "ephemeral://disk"
49 +
        target "/src/.gradle"
50 +
        size "2GiB"
51 +
    }
40 52
    exec "bash" "scripts/ci.sh"
41 53
    output {
42 54
        artifact "junit" {
…
42 unchanged lines
85 97
        size "20GiB"
86 98
        cache "rust-core-target"
87 99
        key "rust-core/Cargo.lock"
100 +
    }
101 +
    // The workspace has room for the checkout and a little more: the app's
102 +
    // build output and Gradle's project cache get disks of their own.
103 +
    mount {
104 +
        source "ephemeral://disk"
105 +
        target "/src/app/build"
106 +
        size "8GiB"
107 +
    }
108 +
    mount {
109 +
        source "ephemeral://disk"
110 +
        target "/src/.gradle"
111 +
        size "2GiB"
88 112
    }
89 113
    secret "android-keystore" {
90 114
        mount-path "/run/secrets/android-keystore"
…
18 unchanged lines
modified CHANGELOG.md +1 −1
…
1 unchanged lines
2 2
3 3
## 0.1.0 (2026-10-28)
4 4
5 -
- **The release's secrets checked in seconds (#7):** `oh run start --job release-check` runs `scripts/release-check.sh` with no build: the keystore's SHA-256 and the entry its password opens (to compare with the keystore you hold), that the key `oxygenhub` opens with that password as signing needs, and that Firebase's settings are whole JSON; never a key, a password or the settings. The release job runs the same check first, and moves the signed APK into `dist/` rather than copying it (the build leaves the job's disk nearly full).
5 +
- **The release's secrets checked in seconds (#7):** `oh run start --job release-check` runs `scripts/release-check.sh` with no build: the keystore's SHA-256 and the entry its password opens (to compare with the keystore you hold), that the key `oxygenhub` opens with that password as signing needs, and that Firebase's settings are whole JSON; never a key, a password or the settings. The release job runs the same check first, and moves the signed APK into `dist/` rather than copying it. CI's test and release jobs build on disks of their own for the app's build output and Gradle's project cache, as the workspace only has room for the checkout.
6 6
- **The hub's living backgrounds (#23):** the website's backdrops come to the phone, the same Rust scenes (copied from OxygenHub's crates/backdrop by scripts/sync-backdrop.sh) stepped in rust-core and drawn by the app. Sign-in has the OxygenHub mark, which answers a finger; the dashboard has Your sky, your repositories and their last 30 days of pushes, proposals, issues, releases and runs, each mark a real event (OxygenHub's `GET /user/sky`; a hub without it shows the quiet field), drawing near your finger and naming the repository it rests by, behind cards it shows through. Live runs and jobs pulse; empty and error screens have the quiet field the hub's error pages have; a screen opened slides in a little from the side it leads to, and goes back the way it came. A repository's screen opens on a band of its own sky, its last 30 days as its pages on the hub draw them (OxygenHub's `GET /repos/OWNER/NAME/sky`; shown only when the hub gives it). As on the web, drawing slows 3 s after the last touch and stops after 2 minutes, and it holds still with the system's animations off or battery saver on.
7 7
- **Assign issues from the phone (#4):** an issue's Assignees action shows who it is assigned to, each removable, with Assign me and a field for anyone's username; saved as the whole set (triage access on the hub).
8 8
- **Approve, reject and expedite runs (#5):** a run's job that waits for a person shows Approve and Reject (its approval rules on the hub decide who may), and a live run has Expedite, which asks why it is urgent (a maintainer's, within the owner's cap). Needs OxygenHub 0.9.11 (the job's `approval` and the expedite route).
…
21 unchanged lines