diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml new file mode 100644 index 0000000..ee8b78c --- /dev/null +++ b/.github/workflows/audit.yml @@ -0,0 +1,20 @@ +name: Security audit + +on: + schedule: + - cron: '0 0 * * *' + push: + paths: + - '**/Cargo.toml' + - '**/Cargo.lock' + - '**/audit.toml' + +jobs: + audit: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - uses: actions-rs/audit-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 20727ef..e96d988 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,21 +2,126 @@ name: CI on: push: - branches: [ "canary" ] + tags: [ 'v[0-9]+.[0-9]+.[0-9]+(-canary.[0-9]+)?' ] pull_request: - branches: [ "canary" ] - -env: - CARGO_TERM_COLOR: always + branches: [ 'canary' ] jobs: - build: + unit_tests: + name: Unit tests + runs-on: ${{ matrix.job.os }} + strategy: + matrix: + job: + - os: macos-latest + target: aarch64-apple-darwin + use-cross: false + - os: macos-13 + target: x86_64-apple-darwin + use-cross: false + - os: windows-latest + target: x86_64-pc-windows-msvc + use-cross: false + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + use-cross: false + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + use-cross: true + - os: ubuntu-latest + target: i686-unknown-linux-gnu + use-cross: true + - os: ubuntu-latest + target: arm-unknown-linux-gnueabihf + use-cross: true + - os: ubuntu-latest + target: aarch64-unknown-linux-gnu + use-cross: true + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.job.target }} + - name: Install cross + if: matrix.job.use-cross + uses: taiki-e/install-action@v2 + with: + tool: cross + - name: Unit tests + shell: bash + run: | + if [[ "${{ matrix.job.use-cross }}" == "true" ]]; then + cross test --target ${{ matrix.job.target }} --verbose -- --nocapture + else + cargo test --target ${{ matrix.job.target }} --verbose -- --nocapture + fi + integration_tests: + name: Integration tests + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ macos-latest, ubuntu-latest ] + include: + - os: macos-latest + target: aarch64-apple-darwin + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + - name: Build for release + run: cargo build --target ${{ matrix.target }} --release + - name: Run executable + run: cargo run --release --target ${{ matrix.target }} init -- < /dev/null + + rustfmt: + name: Rustfmt runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + - name: Check formatting + run: cargo fmt --all --check + clippy: + name: Clippy + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + - name: Clippy Check + run: cargo clippy -- -D warnings + + coverage: + name: Code coverage + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install stable toolchain + uses: dtolnay/rust-toolchain@stable + - name: Install cargo-tarpaulin + uses: taiki-e/install-action@v2 + with: + tool: cargo-tarpaulin + - name: Run cargo-tarpaulin + run: cargo tarpaulin --ignore-tests --out Lcov --output-dir target/tarpaulin + - name: Upload to Coveralls + if: ${{ github.event_name == 'push' }} + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: './target/tarpaulin/lcov.info'