name: CI on: [push, pull_request] defaults: run: shell: bash env: CARGO_TERM_COLOR: always MOONFIRE_COLOR: always RUST_BACKTRACE: 1 jobs: rust: name: Rust ${{ matrix.rust }} strategy: matrix: rust: [ "stable", "1.70", "nightly" ] include: - rust: nightly extra_args: "--features nightly --benches" - rust: stable extra_components: rustfmt runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: # `git describe` output gets baked into the binary for `moonfire-nvr --version`. # Fetch all revs so it can see tag history. fetch-depth: 0 filter: 'tree:0' - name: Cache uses: actions/cache@v2 with: path: | ~/.cargo/registry ~/.cargo/git server/target key: cargo-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }} restore-keys: | cargo-${{ matrix.rust }}- cargo- - uses: actions/setup-node@v3 with: node-version: 18 - name: Install Rust uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ matrix.rust }} override: true components: ${{ matrix.extra_components }} - name: Test run: | cd server cargo test --features=rusqlite/bundled ${{ matrix.extra_args }} --all continue-on-error: ${{ matrix.rust == 'nightly' }} - name: Check formatting if: matrix.rust == 'stable' run: cd server && cargo fmt --all -- --check js: name: Node ${{ matrix.node }} strategy: matrix: node: [ "14", "16", "18" ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} - run: cd ui && npm ci - run: cd ui && npm run build - run: cd ui && npm run test - run: cd ui && npm run lint - run: cd ui && npm run check-format license: name: Check copyright/license headers runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v4 - run: find . -type f -print0 | xargs -0 .github/workflows/check-license.py