Improve 'cargo tree' check (#1200) #956
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
repository_dispatch: | |
workflow_dispatch: | |
push: | |
branches: | |
- master | |
tags: | |
- "*.*.*" | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: taiki-e/install-action@nextest | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run tests | |
run: make test | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: clippy | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run cargo fmt (check if all code is rustfmt-ed) | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
- name: Run cargo clippy (deny warnings) | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
# --all-targets makes it lint tests too | |
args: --all-targets --all-features -- -D warnings | |
publish-check: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: cargo fetch | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fetch | |
- name: cargo publish lychee-lib | |
uses: actions-rs/cargo@v1 | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
with: | |
command: publish | |
args: --dry-run --manifest-path lychee-lib/Cargo.toml | |
# Can't check lychee binary as it depends on the lib above | |
# and `--dry-run` doesn't allow unpublished crates yet. | |
# https://github.com/rust-lang/cargo/issues/1169 | |
# `cargo-publish-all` is a solution but it doesn't work with | |
# Rust edition 2021. | |
# Therefore skip the check for now, which is probably fine | |
# because the binary is just a small wrapper around the CLI | |
# anyway. | |
# | |
# - name: cargo publish lychee | |
# uses: actions-rs/cargo@v1 | |
# env: | |
# CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
# with: | |
# command: publish | |
# args: --dry-run --manifest-path lychee-bin/Cargo.toml | |
publish: | |
if: startsWith(github.ref, 'refs/tags/') | |
needs: | |
- test | |
- lint | |
- check-feature-flags | |
- publish-check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: cargo fetch | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fetch | |
- name: cargo publish lychee-lib | |
uses: actions-rs/cargo@v1 | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
with: | |
command: publish | |
args: --manifest-path lychee-lib/Cargo.toml | |
- name: Wait for crates.io publication | |
run: sleep 60s | |
shell: bash | |
- name: cargo publish lychee | |
uses: actions-rs/cargo@v1 | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
with: | |
command: publish | |
args: --manifest-path lychee-bin/Cargo.toml | |
check-feature-flags: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
- name: Check that rustls-tls feature doesn't depend on OpenSSL | |
run: test -z "$( cargo tree --package lychee --no-default-features --features rustls-tls --prefix none | sed -n '/^openssl-sys /p' )" | |
- name: Run cargo check with default features | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
args: --workspace --all-targets | |
- name: Run cargo check with all features | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
args: --workspace --all-targets --all-features | |
- name: Run cargo check with rustls-tls feature | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
args: --workspace --all-targets --no-default-features --features rustls-tls |