Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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):

  1. 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
    
  2. Format check: cargo fmt --all -- --check

    • Fails if any code is not properly formatted.
  3. Clippy lint: cargo clippy --workspace --all-features -- -D warnings

    • Zero warnings policy. All clippy warnings are treated as errors.
  4. 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 with mdbook build and 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

WorkflowTriggerPurpose
ci.ymlPush/PR to mainFormat, lint, build
nix-ci.ymlPush/PR to mainNix flake validation
release.ymlManual dispatch (or triggered by pre-release.yml)Build release artifacts
pre-release.ymlRelease publishedUpdate CHANGELOG, Cargo version and website docs version, then trigger release.yml
generate-installers.ymlCalled by releaseBuild .deb/.rpm packages and test that they install
gh-pages-deploy.ymlPush to mainDeploy website
gh-pages-test.ymlPRTest website build
update-arch-package.ymlCalled by release (post-announce)Placeholder for AUR package updates (currently only echoes a message)
release-drafter.ymlPush to main / PRAuto-draft release notes, auto-label PRs
remove-manifest-assets.ymlCalled by release (post-announce)Clean up dist manifests
copr-build.ymlv* tag push / manual dispatchBuild an SRPM and trigger the Fedora Copr build