CI Pipeline
ashell uses GitHub Actions for continuous integration. All workflow files are in .github/workflows/.
Main CI Workflow (ci.yml)
Trigger: Push to main, pull requests targeting main.
Runner: ubuntu-24.04
Steps (all skipped unless the change touches src/, assets/, build.rs, Cargo.toml, Cargo.lock or the workflow file, detected with dorny/paths-filter; Cargo builds are cached with Swatinem/rust-cache):
-
Install dependencies: All system libraries needed for compilation
sudo apt-get install -y pkg-config llvm-dev libclang-dev clang \ libxkbcommon-dev libwayland-dev dbus libpipewire-0.3-dev \ libpulse-dev libudev-dev -
Format check:
cargo fmt --all -- --check- Fails if any code is not properly formatted.
-
Clippy lint:
cargo clippy --workspace --all-features -- -D warnings- Zero warnings policy. All clippy warnings are treated as errors.
-
Build:
cargo build- Ensures the project compiles successfully.
Nix CI (nix-ci.yml)
Verifies that the Nix flake builds correctly (nix build .#deps then nix build) on push to main and pull requests targeting main. Like ci.yml, it only runs when Rust sources, assets, Cargo or flake files change, and caches the Nix store.
Website and Developer Guide CI
gh-pages-test.yml: Tests both the Docusaurus website and the mdbook developer guide build on PRs.gh-pages-deploy.yml: Builds the website and developer guide, then deploys them together to GitHub Pages on push to main. The developer guide is built withmdbook buildand copied into the website output at/dev-guide/.
Dependency Management (dependabot.yml)
Dependabot is configured to:
- Check for Rust dependency updates (Cargo)
- Check for website dependency updates (npm, in
website/) - Check for GitHub Actions updates
- Create PRs for available updates (quarterly schedule)
All Workflows
| Workflow | Trigger | Purpose |
|---|---|---|
ci.yml | Push/PR to main | Format, lint, build |
nix-ci.yml | Push/PR to main | Nix flake validation |
release.yml | Manual dispatch (or triggered by pre-release.yml) | Build release artifacts |
pre-release.yml | Release published | Update CHANGELOG, Cargo version and website docs version, then trigger release.yml |
generate-installers.yml | Called by release | Build .deb/.rpm packages and test that they install |
gh-pages-deploy.yml | Push to main | Deploy website |
gh-pages-test.yml | PR | Test website build |
update-arch-package.yml | Called by release (post-announce) | Placeholder for AUR package updates (currently only echoes a message) |
release-drafter.yml | Push to main / PR | Auto-draft release notes, auto-label PRs |
remove-manifest-assets.yml | Called by release (post-announce) | Clean up dist manifests |
copr-build.yml | v* tag push / manual dispatch | Build an SRPM and trigger the Fedora Copr build |