From 825e5b344f353a164d397c14a802b9a1fa4c4493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Orhun=20Parmaks=C4=B1z?= Date: Tue, 26 Apr 2022 20:56:37 +0300 Subject: [PATCH] chore(ci): add continuous integration workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use GitHub Actions to build/test project Signed-off-by: Orhun Parmaksız --- .github/workflows/ci.yml | 128 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e54df6c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,128 @@ +name: Continuous Integration + +on: + push: + branches: + - master + pull_request: + branches: + - master + schedule: + - cron: "0 0 * * 0" + +jobs: + build: + name: Build on ${{ matrix.OS }} using Rust ${{ matrix.TOOLCHAIN }} + runs-on: ${{ matrix.OS }} + strategy: + fail-fast: false + matrix: + OS: [ubuntu-latest, macos-latest, windows-latest] + TOOLCHAIN: [stable, nightly] + steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.TOOLCHAIN }} + override: true + + - name: Cache Cargo dependencies + uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.toml') }} + + - name: Build + run: | + cargo build + cargo build --no-default-features + + test: + name: Run tests + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + + - name: Setup cargo-tarpaulin + shell: bash + run: | + curl -s https://api.github.com/repos/xd009642/tarpaulin/releases/latest | \ + grep "browser_download_url.*tar.gz" | cut -d : -f 2,3 | tr -d \" | wget -qi - + tar -xzf cargo-tarpaulin-*.tar.gz + mv cargo-tarpaulin ~/.cargo/bin/ + + - name: Run tests + run: cargo tarpaulin --out Xml --verbose + + - name: Upload reports to codecov + uses: codecov/codecov-action@v2 + with: + fail_ci_if_error: true + verbose: true + token: ${{ secrets.CODECOV_TOKEN }} + + lint: + name: Check lints + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + components: rustfmt, clippy + + - name: Check formatting + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + - name: Run clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: -- -D warnings + + - name: Run cargo-msrv + shell: bash + run: | + curl -s 'https://api.github.com/repos/foresterre/cargo-msrv/releases' | \ + jq -r ".[0].assets[] | select(.name | contains (\"Linux_x86_64\")).browser_download_url" | \ + wget -qi - + tar -xvf cargo-msrv*_Linux_x86_64.tar -C ~/.cargo/bin/ cargo-msrv + printf "Checking MSRV..." + cargo msrv --output-format json verify | tail -n 1 | jq --exit-status '.success' + + - name: Run cargo-audit + uses: actions-rs/audit-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Run lychee + uses: lycheeverse/lychee-action@v1 + with: + args: --exclude "docs.rs" -v *.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}