Fix nightly docker image (#1590) #1725
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 | |
CARGO_INCREMENTAL: 0 | |
RUSTFLAGS: -D warnings | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: taiki-e/install-action@nextest | |
- uses: Swatinem/rust-cache@v2 | |
- name: Compile | |
run: cargo check --locked | |
- name: Test | |
run: make test | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- 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 | |
args: --all-targets --all-features -- -D warnings | |
publish-check: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- 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@v4 | |
- name: cargo fetch | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fetch | |
# If there was an issue with the build pipeline, the lib might | |
# already be published but the binary not. In that case, we | |
# want to skip over the lib publishing step. | |
- name: Check if lychee-lib is already published | |
id: check-release | |
run: | | |
VERSION=$(cargo pkgid --manifest-path lychee-lib/Cargo.toml | cut -d "#" -f2) | |
if cargo search lychee-lib | grep -q \"$VERSION\"; then | |
echo "Lychee-lib version $VERSION is already published. Skipping." | |
echo "published=true" >> $GITHUB_OUTPUT | |
else | |
echo "published=false" >> $GITHUB_OUTPUT | |
fi | |
- name: cargo publish lychee-lib | |
if: steps.check-release.outputs.published == 'false' | |
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@v4 | |
- 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 |