Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
105 changes: 82 additions & 23 deletions .github/workflows/linux-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ concurrency:
group: linux-packages-${{ github.ref }}
cancel-in-progress: true
jobs:
ubuntu:
# Rust tests run as a normal user; containers run as root, which masks permission checks.
tests:
runs-on: ubuntu-24.04
timeout-minutes: 35
steps:
Expand All @@ -23,8 +24,8 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Install build and smoke-test dependencies
run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential libssl-dev libayatana-appindicator3-dev librsvg2-dev patchelf restic rpm libarchive-tools xvfb dbus-x11 libnotify-bin
- name: Install build dependencies
run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential libssl-dev libayatana-appindicator3-dev librsvg2-dev
- name: Install checksum-pinned Restic for restore integration tests
run: |
curl -fsSL https://github.com/restic/restic/releases/download/v0.19.1/restic_0.19.1_linux_amd64.bz2 -o /tmp/restic-ci.bz2
Expand All @@ -35,23 +36,18 @@ jobs:
- run: npm ci
- run: npm run check && npm test && npm run test:rust
- run: cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
- run: npm run desktop:package
- run: python3 scripts/verify-packages.py
- name: Install Debian package
run: sudo apt-get install -y ./artifacts/release/*.deb
- name: Launch installed application on a virtual display
run: bash scripts/smoke-desktop.sh /usr/bin/command-center
- uses: actions/upload-artifact@v4
with:
name: ubuntu-packages
path: artifacts/release/*
fedora:

# Build once on the oldest supported base so one binary serves every distribution.
# Ubuntu 22.04 provides glibc 2.35, the floor declared in tauri.conf.json.
build:
runs-on: ubuntu-24.04
container: fedora:43
timeout-minutes: 35
container: ubuntu:22.04
timeout-minutes: 40
env:
DEBIAN_FRONTEND: noninteractive
steps:
- name: Install tools
run: dnf install -y git nodejs npm rust cargo gcc gcc-c++ pkgconf-pkg-config openssl-devel webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-devel rpm-build python3 binutils bsdtar xorg-x11-server-Xvfb xorg-x11-xauth dbus-daemon shadow-utils libnotify restic
- name: Install build tools
run: apt-get update && apt-get install -y curl ca-certificates git build-essential pkg-config file libssl-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf python3 binutils libarchive-tools
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
Expand All @@ -60,11 +56,74 @@ jobs:
- run: npm ci && npm run check && npm test
- run: npm run desktop:package
- run: python3 scripts/verify-packages.py
- name: Install RPM and create smoke-test user
run: dnf install -y ./artifacts/release/*.rpm && useradd -m smoke
- name: Launch installed application as a normal user
run: runuser -u smoke -- bash scripts/smoke-desktop.sh /usr/bin/command-center
- uses: actions/upload-artifact@v4
with:
name: fedora-packages
name: packages
path: artifacts/release/*
if-no-files-found: error

# Install the same packages on each supported family and launch them as a normal user.
install-deb:
needs: build
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
image: ["ubuntu:22.04", "debian:12", "ubuntu:24.04"]
container: ${{ matrix.image }}
timeout-minutes: 20
env:
DEBIAN_FRONTEND: noninteractive
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: packages
path: packages
- name: Verify checksums
run: cd packages && sha256sum --check SHA256SUMS
- name: Install package and launch-test tools
run: apt-get update && apt-get install -y ./packages/*.deb xvfb xauth dbus dbus-x11 libnotify-bin
- name: Launch installed application as a normal user
run: useradd -m smoke && runuser -u smoke -- bash scripts/smoke-desktop.sh /usr/bin/command-center

install-rpm:
needs: build
runs-on: ubuntu-24.04
container: fedora:43
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: packages
path: packages
- name: Verify checksums
run: cd packages && sha256sum --check SHA256SUMS
- name: Install package and launch-test tools
run: dnf install -y ./packages/*.rpm xorg-x11-server-Xvfb xorg-x11-xauth dbus-daemon shadow-utils libnotify
- name: Launch installed application as a normal user
run: useradd -m smoke && runuser -u smoke -- bash scripts/smoke-desktop.sh /usr/bin/command-center

# Build the Arch recipe from this commit in a clean container, lint it, install it and launch it.
arch:
runs-on: ubuntu-24.04
container: archlinux:base-devel
timeout-minutes: 45
steps:
- name: Install build, lint and launch-test tools
run: pacman -Syu --noconfirm --needed git nodejs npm rust webkit2gtk-4.1 gtk3 libappindicator-gtk3 namcap xorg-server-xvfb xorg-xauth dbus
- uses: actions/checkout@v4
- name: Build package from the checked-out commit
run: |
useradd -m builder
git config --system --add safe.directory '*'
mkdir /build && cp packaging/aur/PKGBUILD /build/
# The published recipe builds a release tag; CI builds this commit instead.
sed -i "s|^source=.*|source=(\"command-center::git+file://$GITHUB_WORKSPACE#commit=$GITHUB_SHA\")|" /build/PKGBUILD
chown -R builder /build
cd /build && runuser -u builder -- makepkg --noconfirm
- name: Lint recipe and package
run: cd /build && namcap PKGBUILD && namcap ./*.pkg.tar.zst
- name: Install package and launch as a normal user
run: pacman -U --noconfirm /build/*.pkg.tar.zst && runuser -u builder -- bash scripts/smoke-desktop.sh /usr/bin/command-center
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

Release downloads and full notes are available on [GitHub Releases](https://github.com/Commanderx-code/command-center/releases).

## [0.6.0](https://github.com/Commanderx-code/command-center/releases/tag/v0.6.0) — Unreleased

- Added **Merge** setup imports: keep this machine's preferences and definitions, add new ones, fill empty integration paths, and list differing items that were kept. **Replace** remains available.
- Setup imports keep a journal; an import interrupted by a crash or power loss is rolled back from its backup at the next launch and reported on the dashboard.
- Jobs now run concurrently when they use different resources: repository jobs and project tasks in different repositories, plus one workstation task. Each job is stopped individually, waiting jobs name what they wait for, and the tray shows the running count.
- Packages are built on Ubuntu 22.04 and require glibc 2.35+ (was 2.39). CI install-tests them on Ubuntu 22.04/24.04, Debian 12, and Fedora 43, and builds, lints, installs, and launches the Arch recipe in a clean container. Package validation now checks the binary's real glibc needs.
- `release:draft` publishes the CI-built, install-tested packages and links the workflow run in the notes.
- Toolbox favorites moved from webview storage to app data (migrated on first launch) and are part of the import transaction.
- File replacements now sync their directory for durability. Repository Details disables actions only while that repository has a running job.
- Internal: configuration editor split out of `features.js`; removed a stale v0.1.0 archive from the repository.

## [0.5.1](https://github.com/Commanderx-code/command-center/releases/tag/v0.5.1) — 2026-09-24

Security release. All 0.5.0 users should upgrade.
Expand Down
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Commanderx-code

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<a href="https://github.com/Commanderx-code/command-center/releases/latest"><img src="https://img.shields.io/github/v/release/Commanderx-code/command-center?style=flat-square&amp;color=27b7cd" alt="Latest release" /></a>
<img src="https://img.shields.io/badge/platform-Linux-27b7cd?style=flat-square" alt="Platform: Linux" />
<img src="https://img.shields.io/badge/desktop-Tauri_2-7371fc?style=flat-square" alt="Desktop: Tauri 2" />
<img src="https://img.shields.io/badge/license-MIT-27b7cd?style=flat-square" alt="License: MIT" />
</p>

<p align="center">
Expand Down Expand Up @@ -45,6 +46,15 @@ Command Center brings [Commander Toolbox](https://github.com/Commanderx-code/com

The app runs as your normal user. Commands are reviewed before execution; Toolbox scripts retain their own privilege checks and confirmations. Integration paths are editable in **Settings**. See the [user guide](docs/user-guide.md) for exact behavior and limitations.

## New in 0.6.0

- Setup imports can merge with this machine's setup, and an import interrupted by a crash or power loss is rolled back automatically on the next launch.
- Jobs in different repositories run at the same time, alongside one workstation task.
- Packages now run on glibc 2.35+ and are install-tested on Ubuntu 22.04/24.04, Debian 12, and Fedora 43. The Arch recipe is built and linted in CI.
- Toolbox favorites are saved with the app's data instead of webview storage.

Read [Setup and project workspaces](docs/setup-and-workspaces.md) and [Running several jobs](docs/user-guide.md#running-several-jobs).

## New in 0.5.0

- Portable setup bundles with a full import preview, home-path remapping, and backups before replacement.
Expand All @@ -69,12 +79,12 @@ Read [Workflows, profiles, and recovery verification](docs/operations.md) for se

**[Get the latest release →](https://github.com/Commanderx-code/command-center/releases/latest)**

| Package | Download v0.5.1 | Install the downloaded file |
| Package | Download v0.6.0 | Install the downloaded file |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| Debian / Ubuntu | [`.deb` · amd64](https://github.com/Commanderx-code/command-center/releases/download/v0.5.1/command-center_0.5.1_amd64.deb) | `sudo apt install ./command-center_0.5.1_amd64.deb` |
| Fedora / RPM | [`.rpm` · x86_64](https://github.com/Commanderx-code/command-center/releases/download/v0.5.1/command-center-0.5.1-1.x86_64.rpm) | `sudo dnf install ./command-center-0.5.1-1.x86_64.rpm` |
| Debian / Ubuntu | [`.deb` · amd64](https://github.com/Commanderx-code/command-center/releases/download/v0.6.0/command-center_0.6.0_amd64.deb) | `sudo apt install ./command-center_0.6.0_amd64.deb` |
| Fedora / RPM | [`.rpm` · x86_64](https://github.com/Commanderx-code/command-center/releases/download/v0.6.0/command-center-0.6.0-1.x86_64.rpm) | `sudo dnf install ./command-center-0.6.0-1.x86_64.rpm` |

Version 0.5.1 packages require **Linux x86_64, glibc 2.39+, GTK 3, and WebKitGTK 4.1**. Release notes identify the build environment and completed distribution checks. Release assets include `SHA256SUMS` for verification.
Version 0.6.0 packages require **Linux x86_64, glibc 2.35+, GTK 3, and WebKitGTK 4.1**. They are install-tested on Ubuntu 22.04 and 24.04, Debian 12, and Fedora 43; the release notes link the workflow run. Release assets include `SHA256SUMS` for verification.

For Arch/Garuda, build and install from source using the [installation guide](docs/installation.md#from-source-on-archgaruda).

Expand Down Expand Up @@ -113,3 +123,7 @@ Open `http://127.0.0.1:4173` for a browser preview with sample data. Desktop ope
## Built with

[Tauri](https://github.com/tauri-apps/tauri) provides the desktop shell, Rust handles local system operations, and JavaScript renders the interface. The Toolbox catalog and scripts come from [Commander Toolbox](https://github.com/Commanderx-code/commander-toolbox), built on Linutil. [xterm.js](https://github.com/xtermjs/xterm.js) and [portable-pty](https://github.com/wezterm/wezterm) power the embedded terminal.

## License

Command Center is released under the [MIT License](LICENSE). Bundled third-party components keep their own licenses; see [THIRD_PARTY.md](THIRD_PARTY.md).
Binary file removed command-center-v0.1.0.tar.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/development.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ npm run desktop:package

Tauri writes `.deb` and `.rpm` packages under `src-tauri/target/release/bundle/`. Keep versions aligned in `package.json`, `package-lock.json`, `src-tauri/Cargo.toml`, `src-tauri/Cargo.lock`, and `src-tauri/tauri.conf.json` when preparing a version bump.

The v0.4.0 release packages declare the build's glibc 2.39 minimum. For a future build, inspect its actual runtime requirements before choosing the package dependency floor. Verify package metadata and payloads, publish SHA-256 checksums, and record the build environment and any distribution testing in the release notes.
Release packages come from CI, which builds on Ubuntu 22.04 and declares a glibc 2.35 floor. A local `desktop:package` build on a newer distribution links against its newer glibc, so `scripts/verify-packages.py` correctly rejects it as a release candidate. See [Releases](releases.md#package-validation-and-distribution-ci).

## Documentation screenshots

Expand Down
6 changes: 3 additions & 3 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

Download a package and `SHA256SUMS` from the [GitHub releases page](https://github.com/Commanderx-code/command-center/releases/latest).

The v0.5.1 packages target **Linux x86_64 / amd64** and require **glibc 2.39 or newer, GTK 3, and WebKitGTK 4.1**. Packages declare these dependencies. The release workflow builds the Debian package on Ubuntu 24.04 and the RPM on Fedora 43, installs each matching package, and performs a desktop launch check. See the release notes for the successful workflow run and exact validation results. ARM, Windows, and macOS packages are not currently published.
Packages target **Linux x86_64 / amd64** and require **GTK 3, WebKitGTK 4.1, and glibc 2.35 or newer** from 0.6.0 (0.5.x packages require glibc 2.39). Packages declare these dependencies. Both packages are built once on Ubuntu 22.04, then installed and launched on Ubuntu 22.04, Debian 12, Ubuntu 24.04, and Fedora 43. See the release notes for the workflow run. ARM, Windows, and macOS packages are not currently published.

To verify a downloaded package, put it and `SHA256SUMS` in the same directory and run:

Expand All @@ -19,13 +19,13 @@ Each downloaded package must report `OK`. The `--ignore-missing` option lets you
On a compatible Debian/Ubuntu system:

```bash
sudo apt install ./command-center_0.5.1_amd64.deb
sudo apt install ./command-center_0.6.0_amd64.deb
```

On a compatible Fedora/RPM system:

```bash
sudo dnf install ./command-center-0.5.1-1.x86_64.rpm
sudo dnf install ./command-center-0.6.0-1.x86_64.rpm
```

Launch **Command Center** from your application menu. Run the app as your normal user, without `sudo`.
Expand Down
2 changes: 1 addition & 1 deletion docs/operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Open **Workflows**, create a workflow, and add steps in order. Available steps i

**Start workflow** opens the progress panel. **Review next step** uses the normal command preview and execution system. Each successful step enables review of the next one; it does not approve or execute subsequent steps automatically. Interactive steps open the embedded terminal. Failures, cancellation, and timeouts stop the sequence. Inspect Activity before retrying a step: an unsuccessful command may already have made partial changes.

**Stop sequence** prevents additional steps. Stop an already running command from Activity or its terminal. Only one command runs at a time across the app. On restart, an unfinished sequence is marked interrupted and requires review before retrying. Workflow progress is stored in this webview's local storage; definitions are stored in the app's private `operations.json` file.
**Stop sequence** prevents additional steps. Stop an already running command from Activity or its terminal. Workflow steps are workstation tasks, so only one runs at a time; repository jobs in other folders can run alongside them. On restart, an unfinished sequence is marked interrupted and requires review before retrying. Workflow progress is stored in this webview's local storage; definitions are stored in the app's private `operations.json` file.

The weekly maintenance example checks local backup-drive readiness, runs the personal helper, checks the configured Restic repository, then reports disk usage and failed services. Add your chosen updater explicitly if desired. The readiness step requires a successful health report with `drive_mounted: true`; remote backups or different helper formats should use an appropriate custom preflight instead. The backup helper and Restic browser can use different repositories; configure and verify each.

Expand Down
Loading
Loading