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 # hashgraph-like-consensus's build.rs shells out to protoc via prost-build. - run: sudo apt-get update && sudo apt-get install -y protobuf-compiler # chat-cli pulls in components' embedded_p2p_delivery feature, whose # build.rs links liblogosdelivery (built via Nix or 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 # hashgraph-like-consensus's build.rs shells out to protoc via prost-build. - run: sudo apt-get update && sudo apt-get install -y protobuf-compiler - 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 run: nix build .#logos-delivery --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