name: CI on: push: branches: [main] pull_request: branches: [main] schedule: - cron: "0 0 * * *" # Every night at midnight UTC env: CARGO_TERM_COLOR: always jobs: test: name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: rustup update stable && rustup default stable # chat-cli's build.rs unconditionally links liblogosdelivery and requires # LOGOS_DELIVERY_LIB_DIR. The smoketest job builds and exercises it under # Nix; here we keep the toolchain-only job fast by skipping it. - run: cargo build --verbose --workspace --exclude chat-cli - run: cargo test --verbose --workspace --exclude chat-cli clippy: name: Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: rustup update stable && rustup default stable - run: rustup component add clippy - run: cargo clippy --all-targets --all-features --workspace --exclude chat-cli -- -D warnings fmt: name: Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: rustup update stable && rustup default stable - run: rustup component add rustfmt - run: cargo fmt --all -- --check smoketest: name: Smoketest strategy: matrix: os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v31 with: nix_version: 2.34.6 extra_nix_config: | experimental-features = nix-command flakes - uses: nix-community/cache-nix-action@v6 with: primary-key: nix-${{ runner.os }}-fixtest-${{ hashFiles('flake.nix', 'flake.lock') }} restore-prefixes-first-match: nix-${{ runner.os }}- - name: Build logos-delivery # Build through a patched nixpkgs (kaichaosun/nixpkgs fix-gitfetch), # whose nix-prefetch-git disables git background auto-maintenance so the # nim-zlib submodule fetch no longer races `.git` removal. The override # flows into logos-delivery via its `nixpkgs.follows`. The bumped cache # key (`-fixtest-`) forces a cold store, so this genuinely re-fetches # nim-zlib instead of reusing a cached output. No retry on purpose: a # single build must now succeed deterministically. Re-run the job a few # times for more samples. run: nix build .#logos-delivery --override-input nixpkgs github:kaichaosun/nixpkgs/fix-gitfetch --print-build-logs # Build and run chat-cli through the dev shell so it links against the # same Nix glibc as the prebuilt liblogosdelivery.so. A plain `cargo # build` uses the runner's system glibc, which is older than Nix's and # mismatches it at runtime (libc.so.6: version `GLIBC_ABI_DT_X86_64_PLT' # not found, required by Nix glibc's libm.so.6). - name: Build chat-cli (logos-delivery) run: nix develop -c bash -c 'LOGOS_DELIVERY_LIB_DIR=./result/lib cargo build --release -p chat-cli' - name: Run chat-cli smoketest run: nix develop -c ./target/release/chat-cli --name ci-test --smoketest