Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
6017d9d
refactor: become a workspace, so a GUI can be a second crate
MotherSphere Sep 2, 2026
fd3fb56
feat(gui): a themed window, drawing nothing but its own name
MotherSphere Sep 2, 2026
73d5c1a
feat(gui): the view model, read off the interface thread
MotherSphere Sep 2, 2026
b1779f6
feat(gui): the environments screen, with start and stop on the card
MotherSphere Sep 2, 2026
b9bb484
feat(gui): errors offer the action instead of naming a command
MotherSphere Sep 2, 2026
71b9d38
feat(gui): the environment detail - session, Direct3D, devices, registry
MotherSphere Sep 2, 2026
ebe296d
feat(gui): bases, and a deployment progress bar that reports real pro…
MotherSphere Sep 2, 2026
b8dc2eb
docs(gui): explain why base deploy resolves raven through PATH
MotherSphere Sep 2, 2026
5684ef7
feat(gui): diagnostics, keeping the consequences rather than lights
MotherSphere Sep 2, 2026
054f9ee
build: package and sign raven-gui beside the CLI
MotherSphere Sep 2, 2026
7346437
fix(gui): every button takes its colours from the palette
MotherSphere Sep 2, 2026
8c54b33
fix(gui): an offer outlives the refresh, and the screen refreshes at all
MotherSphere Sep 2, 2026
e152525
fix(gui): the window reports an application id, so its desktop entry …
MotherSphere Sep 2, 2026
f6b926e
fix(gui): a failed deployment says why, and its last word cannot be d…
MotherSphere Sep 2, 2026
311c744
test(gui): point the diagnostics test at checks(), and two stale words
MotherSphere Sep 2, 2026
15d7503
fix: release-please could not open a pull request against a virtual m…
MotherSphere Sep 2, 2026
d88aeef
fix(gui): the button that ends the user's programs says so
MotherSphere Sep 4, 2026
f599ff6
fix(gui): Environments stays lit in the sidebar while a detail shows
MotherSphere Sep 4, 2026
2b3b33d
perf(gui): the bases screen counts environments without reading them
MotherSphere Sep 4, 2026
1b10d45
refactor(gui): one helper runs every action the window asks for
MotherSphere Sep 4, 2026
3601a7c
test(gui): the carriage-return test reads like the code it tests
MotherSphere Sep 4, 2026
644765d
fix(gui): Start works, because the window can be its own session anchor
MotherSphere Sep 4, 2026
37c15f2
fix: a session anchor is recognised by what it runs, not by its name
MotherSphere Sep 4, 2026
053319e
fix: the window can no longer be asked to do what only the launcher can
MotherSphere Sep 6, 2026
838bf92
perf: a warm launch no longer scans every process to find one of them
MotherSphere Sep 6, 2026
bebcaf7
fix: a program given by a relative path is found where the user meant it
MotherSphere Sep 6, 2026
cc57745
fix: detach touches only the drives Raven itself attached
MotherSphere Sep 6, 2026
1b26eb4
fix: an interrupted deploy no longer leaves a base nothing can finish
MotherSphere Sep 6, 2026
315d224
fix: a Direct3D install that fails part way can still be undone
MotherSphere Sep 6, 2026
4981d81
fix: two silent failures in creating and reading an environment
MotherSphere Sep 6, 2026
a7617cc
fix: the window reports the check that matters most, and says why thi…
MotherSphere Sep 6, 2026
afb5b27
fix: the projection example belongs to a crate again
MotherSphere Sep 6, 2026
b57e549
build: the package names its own version, and CI builds the way a rel…
MotherSphere Sep 6, 2026
0e93825
chore: bring the released 0.3.0 onto the branch
MotherSphere Sep 6, 2026
c2b728c
fix: the window's Start really starts, and three failures say more
MotherSphere Sep 6, 2026
dfccc90
docs: the documentation says what the code does
MotherSphere Sep 6, 2026
68e0a0b
fix: only Raven's own working directories are hidden from base list
MotherSphere Sep 6, 2026
3ec536b
fix: the window could no longer stop an environment anything was using
MotherSphere Sep 6, 2026
1487679
fix: an absolute program path does not need a working directory to exist
MotherSphere Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,13 @@ jobs:
echo "apparmor userns restriction: $(cat /proc/sys/kernel/apparmor_restrict_unprivileged_userns 2>/dev/null || echo none)"
echo "If the first is 0 or the second is 1, the mount tests below skipped."

# `--locked` was the gap: the release workflow and the PKGBUILD both
# build locked, so a Cargo.lock that no longer agreed with Cargo.toml
# passed every check and then failed the release, where it is expensive
# and public. It is asserted here rather than by a second, fat-LTO
# release build, which would cost minutes to learn the same thing.
- name: Test
run: cargo test --verbose
run: cargo test --verbose --locked

# The org rule is that every dependency sits on its latest release. This makes
# drift visible in a diff rather than leaving it to be discovered later.
Expand Down
72 changes: 66 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,70 @@ jobs:
- uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0
id: release
with:
release-type: rust
# The workspace is a virtual manifest: one `[workspace.package]`
# version that both crates inherit, and no `[package]` at the root at
# all. That is why the config uses `release-type: simple` and names
# the version line outright - the `rust` type assumes a Cargo package
# lives here and throws on the manifest that does not have one, so no
# release pull request is opened at all. The type is set in the config
# file rather than here, so there is one place to read it.
config-file: release-please-config.json
manifest-file: .release-please-manifest.json

# `release-type: simple` rewrites Cargo.toml and nothing else, but
# Cargo.lock pins every workspace member by version and this workflow
# builds with `--locked`. A release pull request that bumped the manifest
# alone would fail the moment it merged, so the lock is brought along.
#
# The condition is the branch existing, not an output of the action above:
# conditioning on `prs_created` silently skips this, and a step that skips
# looks exactly like a step that had nothing to do. That lesson is Eidos's,
# whose release pipeline this mirrors.
- name: Keep Cargo.lock in step with the version
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
url="https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
# Matched by prefix rather than named outright. Under `release-type:
# rust` the branch carried a component read from the Cargo package
# name - `…--components--raven` - and `simple` has no package to read
# one from, so the suffix is not ours to predict. One open release
# branch is the only case there is; more than one would be a
# release-please misconfiguration worth failing on.
branch=$(git ls-remote --heads "$url" \
"release-please--branches--${GITHUB_REF_NAME}*" \
| sed 's#.*refs/heads/##')
if [ -z "$branch" ]; then
echo "no release branch open - nothing to sync"
exit 0
fi
if [ "$(printf '%s\n' "$branch" | wc -l)" -gt 1 ]; then
echo "more than one release branch open, refusing to guess:"
printf ' %s\n' $branch
exit 1
fi
git clone --branch "$branch" --depth 1 "$url" pr
cd pr
# Rewrites the workspace members' versions in the lock and nothing
# else: no external dependency is touched and nothing is compiled.
# `cargo metadata --no-deps` does NOT do this - skipping resolution is
# the whole point of that flag, so the lock is never rewritten.
cargo update --workspace
if git diff --quiet Cargo.lock; then
echo "Cargo.lock already agrees with Cargo.toml"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git commit -m "chore: sync Cargo.lock with the release version" Cargo.lock
git push
echo "Cargo.lock synced onto $branch"

# Raven is Linux-only: overlayfs and binfmt_misc do not exist elsewhere,
# so the asset matrix is one row, not four.
build:
name: Build raven-linux
name: Build raven and raven-gui
needs: release-please
if: ${{ needs.release-please.outputs.release_created }}
runs-on: ubuntu-latest
Expand All @@ -47,14 +103,18 @@ jobs:
- name: Build
run: cargo build --release --locked --target x86_64-unknown-linux-gnu

- name: Stage binary
run: cp target/x86_64-unknown-linux-gnu/release/raven raven-linux
- name: Stage binaries
run: |
cp target/x86_64-unknown-linux-gnu/release/raven raven-linux
cp target/x86_64-unknown-linux-gnu/release/raven-gui raven-gui-linux

- name: Upload binary to GitHub Release
- name: Upload binaries to GitHub Release
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
with:
tag_name: ${{ needs.release-please.outputs.tag_name }}
files: raven-linux
files: |
raven-linux
raven-gui-linux

# Sign every release asset with the Project-Colony org key (ed25519).
# Colony >= 0.8.0 verifies these signatures on install and REFUSES a
Expand Down
Loading