name: Rust # rust/ workspace (ping-collector): format, clippy, tests (including the # database tests against a throwaway PostgreSQL service), release build. # The Linux binary is uploaded as an artifact for scripts/install_collector.sh. on: push: branches: [master, develop] paths: - "rust/**" - "src/data/stations.json" - ".gitea/workflows/rust.yml" pull_request: branches: [master] paths: - "rust/**" - "src/data/stations.json" - ".gitea/workflows/rust.yml" workflow_dispatch: jobs: rust: name: fmt, clippy, test, build runs-on: ubuntu-latest services: postgres: image: postgres:16 env: POSTGRES_PASSWORD: ping POSTGRES_DB: ping options: >- --health-cmd pg_isready --health-interval 5s --health-timeout 5s --health-retries 20 env: CARGO_TERM_COLOR: always TEST_DATABASE_URL: postgres://postgres:ping@postgres:5432/ping defaults: run: working-directory: rust steps: - uses: actions/checkout@v4 - name: System packages (OpenSSL headers for native-tls) run: | SUDO=$(command -v sudo || true) $SUDO apt-get update -qq $SUDO apt-get install -y -qq pkg-config libssl-dev - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: fmt run: cargo fmt --all --check - name: clippy run: cargo clippy --all-targets --locked -- -D warnings - name: test run: cargo test --locked - name: release build run: cargo build --release --locked - uses: actions/upload-artifact@v3 with: name: ping-collector-linux-x86_64 path: rust/target/release/ping-collector