diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 0000000..dcdbec7 --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,152 @@ + +name: "Linting" + +on: + pull_request: + workflow_dispatch: + # Need to run it on master redundantly, or caches don't work + push: + branches: ["master"] + +env: + RUST_BACKTRACE: full + CARGO_INCREMENTAL: 0 + YARY_COLOR: 0 + +jobs: + lint: + name: "[${{ matrix.os }}/${{ matrix.rust }}] ${{ matrix.just.name }}" + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + rust: + - stable + - 1.53 + just: + - name: "Lint" + recipe: lint + vars: "" + steps: + # Checkout code + - name: "Git checkout" + uses: actions/checkout@v2 + + # Install Rust toolchain + - name: "Install Rust ${{ matrix.rust }}" + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + default: true + components: rustfmt,clippy + + - name: "Install Rust rustfmt (nightly)" + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + profile: minimal + default: false + components: rustfmt + + - name: "Install Just" + uses: extractions/setup-just@v1 + with: + just-version: 1 + + - name: "Save Cargo cache" + uses: Swatinem/rust-cache@v1 + + - name: "Task ${{ matrix.just.name }}" + run: just ${{ matrix.just.vars }} ${{ matrix.just.recipe }} + + doclint: + name: "[${{ matrix.os }}/${{ matrix.rust }}] ${{ matrix.just.name }}" + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + rust: + - nightly + just: + - name: "Doc Lint" + recipe: lint-docs + vars: "" + steps: + # Checkout code + - name: "Git checkout" + uses: actions/checkout@v2 + + # Install Rust toolchain + - name: "Install Rust ${{ matrix.rust }}" + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + default: true + components: rustfmt + + # Install recipe runner + - name: "Install Just" + uses: extractions/setup-just@v1 + with: + just-version: 1 + + # Save cache + - name: "Save Cargo cache" + uses: Swatinem/rust-cache@v1 + with: + sharedKey: docs + + # Run tasks + - name: "Task ${{ matrix.just.name }}" + run: just ${{ matrix.just.vars }} ${{ matrix.just.recipe }} + + audit: + name: "[${{ matrix.os }}/${{ matrix.rust }}] ${{ matrix.just.name }}" + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + rust: + - nightly + just: + - name: "Unused Deps" + recipe: udeps + vars: "" + - name: "Audit Deps" + recipe: audit + vars: "" + steps: + # Checkout code + - name: "Git checkout" + uses: actions/checkout@v2 + + # Install Rust toolchain + - name: "Install Rust ${{ matrix.rust }}" + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + default: true + components: rustfmt + + # Install recipe runner + - name: "Install Just" + uses: extractions/setup-just@v1 + with: + just-version: 1 + + # Save cache + - name: "Save Cargo cache" + uses: Swatinem/rust-cache@v1 + + # Run tasks + - name: "Task ${{ matrix.just.name }}" + run: just ${{ matrix.just.vars }} ${{ matrix.just.recipe }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml deleted file mode 100644 index 7434c15..0000000 --- a/.github/workflows/pr.yaml +++ /dev/null @@ -1,106 +0,0 @@ - -name: "[CI]: Pull Request" - -on: - pull_request: - workflow_dispatch: - -jobs: - prtasks: - name: "[${{ matrix.os }}/${{ matrix.rust }}] ${{ matrix.cargo.name }}" - runs-on: "${{ matrix.os }}" - strategy: - fail-fast: false - matrix: - os: - - ubuntu-latest - rust: - - stable - - 1.53 # Project MSRV - cargo: - - name: "Clippy" - cmd: clippy - args: -- -D clippy::all -W clippy::style - - name: "Unit Tests" - cmd: test - args: --lib --bins - - name: "Unit Tests {test_lazy}" - cmd: test - args: --lib --features=test_lazy - - name: "Unit Tests {test_buffer_small}" - cmd: test - args: --lib --features=test_buffer_small - - name: "Unit Tests {test_buffer_small,test_lazy}" - cmd: test - args: --lib --features=test_buffer_small,test_lazy - include: - - os: ubuntu-latest - sccache-path: /home/runner/.cache/sccache - env: - RUST_BACKTRACE: full - RUSTC_WRAPPER: sccache - SCCACHE_CACHE_SIZE: 1G - SCCACHE_DIR: ${{ matrix.sccache-path }} - steps: - - # Checkout code - - name: "Git checkout" - uses: actions/checkout@v2 - - # Install sccache - - name: "Install sccache" - if: matrix.os == 'ubuntu-latest' - env: - SCCACHE_URL: https://github.com/mozilla/sccache/releases/download - SCCACHE_VERSION: v0.2.15 - run: | - SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl - curl -sSL "$SCCACHE_URL/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz - install -vDm 755 "$SCCACHE_FILE/sccache" "$HOME/.local/bin/sccache" - echo "$HOME/.local/bin" >> "$GITHUB_PATH" - - # Install Rust toolchain - - name: "Install Rust ${{ matrix.rust }}" - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ matrix.rust }} - profile: minimal - default: true - components: rustfmt,clippy - - # Rebuild cache - - name: Cache cargo registry - uses: actions/cache@v2 - continue-on-error: false - with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - restore-keys: | - ${{ runner.os }}-cargo- - - name: Save sccache - uses: actions/cache@v2 - continue-on-error: false - with: - path: ${{ matrix.sccache-path }} - key: ${{ runner.os }}-sccache-${{ hashFiles('**/Cargo.lock') }} - restore-keys: | - ${{ runner.os }}-sccache- - - # Run job - - name: "Start sccache server" - run: sccache --start-server - - - name: "Task ${{ matrix.cargo.name }}" - uses: actions-rs/cargo@v1 - with: - command: ${{ matrix.cargo.cmd }} - args: ${{ matrix.cargo.args }} - - - name: "Print sccache stats" - run: sccache --show-stats - - - name: "Stop sccache server" - run: sccache --stop-server || true - diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..b70dd8f --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,74 @@ + +name: "Tests" + +on: + pull_request: + workflow_dispatch: + # Need to run it on master redundantly, or caches don't work + push: + branches: ["master"] + +env: + RUST_BACKTRACE: full + CARGO_INCREMENTAL: 0 + YARY_COLOR: 0 + +jobs: + tests: + name: "[${{ matrix.os }}/${{ matrix.rust }}] ${{ matrix.just.name }}" + runs-on: "${{ matrix.os }}" + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + rust: + - stable + - 1.53 + just: + - name: "Unit Tests" + recipe: test + vars: "" + - name: "Unit Tests {test_lazy}" + recipe: test + vars: Features=test_lazy + - name: "Unit Tests {test_buffer_small}" + recipe: test + vars: Features=test_buffer_small + - name: "Unit Tests {test_buffer_small,test_lazy}" + recipe: test + vars: Features=test_buffer_small,test_lazy + - name: "Doc Tests" + recipe: test-docs + vars: "" + - name: "Test Examples" + recipe: test-examples + vars: "" + steps: + # Checkout code + - name: "Git checkout" + uses: actions/checkout@v2 + + # Install Rust toolchain + - name: "Install Rust ${{ matrix.rust }}" + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + default: true + components: rustfmt + + # Install recipe runner + - name: "Install Just" + uses: extractions/setup-just@v1 + with: + just-version: 1 + + # Save cache + - name: "Save Cargo cache" + uses: Swatinem/rust-cache@v1 + + # Run tasks + - name: "Task ${{ matrix.just.name }}" + run: just ${{ matrix.just.vars }} ${{ matrix.just.recipe }} +