CI: Move MSRV checks from manifest to lints

While MSRV is defined in the manifest files, it doesn't make sense to
verify the code compiles under the MSRV only when the manifest files
change. Code changes can break MSRV compliance.

Move the MSRV checks to the lints.yaml workflow instead.

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
This commit is contained in:
Manos Pitsidianakis 2024-12-05 09:33:49 +02:00
parent f944ebed81
commit d49344f9d8
No known key found for this signature in database
GPG key ID: 7729C7707F7E09D0
7 changed files with 46 additions and 95 deletions

View file

@ -14,9 +14,17 @@ NIGHTLY_EXISTS=`((cargo +nightly 2> /dev/null 1> /dev/null) && echo 0)|| echo 1)
GIT=env GIT_CONFIG_GLOBAL="" GIT_CONFIG_SYSTEM="" GIT_CONFIG_NOSYSTEM=1 git
.PHONY: all
all: rustfmt clippy cargo-derivefmt-melib cargo-derivefmt-meli cargo-derivefmt-tools
all: cargo-msrv rustfmt clippy cargo-derivefmt-melib cargo-derivefmt-meli cargo-derivefmt-tools
@printf "All checks completed.\n"
# Check both melib and meli in the same Make target, because if melib does not
# satisfy MSRV then meli won't either, since it depends on melib.
.PHONY: cargo-msrv
cargo-msrv:
@printf "cargo-msrv\n"
cargo msrv --output-format json --log-level trace --log-target stdout --path meli verify -- cargo check --all-targets
cargo msrv --output-format json --log-level trace --log-target stdout --path melib verify -- cargo check --all-targets
.PHONY: rustfmt
rustfmt:
@printf "rustfmt\n"

View file

@ -12,20 +12,16 @@ RUSTUP_MAX_RETRIES ?= 10
RUST_BACKTRACE ?= short
.PHONY: all
all: cargo-msrv cargo-sort check-debian-changelog
@printf "All completed.\n"
all: cargo-sort check-debian-changelog
@printf "All checks completed.\n"
.PHONY: cargo-msrv
cargo-msrv:
@printf "cargo-msrv\n"
cargo-msrv --output-format json --log-level trace --log-target stdout --path meli verify -- cargo check --all-targets
cargo-msrv --output-format json --log-level trace --log-target stdout --path melib verify -- cargo check --all-targets
.PHONY: cargo-sort
cargo-sort:
@printf "cargo-sort\n"
cargo-sort --check --check-format --grouped --order package,bin,lib,dependencies,features,build-dependencies,dev-dependencies,workspace fuzz
cargo-sort --check --check-format --grouped --order package,bin,lib,dependencies,features,build-dependencies,dev-dependencies,workspace tools
cargo-sort --check --check-format --grouped --order package,bin,lib,dependencies,features,build-dependencies,dev-dependencies,workspace --workspace
.PHONY: check-debian-changelog
check-debian-changelog:
@printf "Check debian/changelog is up-to-date.\n"

View file

@ -47,13 +47,6 @@ jobs:
run: |
apt-get update
apt-get install -y libdbus-1-dev pkg-config mandoc libssl-dev make
#- id: cache-rustup
# name: Cache Rust toolchain
# uses: https://github.com/actions/cache@v3
# with:
# path: ~/.rustup
# key: toolchain-${{ matrix.os }}-${{ matrix.rust }}
#- if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }}
- id: rustup-setup
name: Install rustup and toolchains
shell: bash
@ -62,22 +55,9 @@ jobs:
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
source "${HOME}/.cargo/env"
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
echo "CARGO_HOME=${CARGO_HOME:-$HOME/.cargo}" >> $GITHUB_ENV
rustup toolchain install --profile minimal ${{ matrix.rust }} --target ${{ matrix.target }}
fi
- name: Configure cargo data directory
# After this point, all cargo registry and crate data is stored in
# $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
# that are needed during the build process. Additionally, this works
# around a bug in the 'cache' action that causes directories outside of
# the workspace dir to be saved/restored incorrectly.
run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
#- id: cache-cargo
# name: Cache cargo configuration and installations
# uses: https://github.com/actions/cache@v3
# with:
# path: ${{ env.CARGO_HOME }}
# key: cargo-${{ matrix.os }}-${{ matrix.rust }}
#- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
- name: Setup Rust target
run: |
mkdir -p "${{ env.CARGO_HOME }}"
@ -85,8 +65,7 @@ jobs:
[build]
target = "${{ matrix.target }}"
EOF
- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
name: Add test dependencies
- name: Add test dependencies
run: |
cargo install --quiet --version 0.9.54 --target "${{ matrix.target }}" cargo-nextest
- name: cargo-check
@ -100,7 +79,7 @@ jobs:
run: |
make -f ./.gitea/Makefile.build cargo-test
- name: rustdoc build
if: success() || failure() # always run even if other steps fail, except when cancelled <https://stackoverflow.com/questions/58858429/how-to-run-a-github-actions-step-even-if-the-previous-step-fails-while-still-f>
if: success() || failure()
run: |
make -f ./.gitea/Makefile.build rustdoc-build
- name: rustdoc tests

View file

@ -43,13 +43,6 @@ jobs:
run: |
apt-get update
apt-get install -y libdbus-1-dev pkg-config mandoc libssl-dev
#- id: cache-rustup
# name: Cache Rust toolchain
# uses: https://github.com/actions/cache@v3
# with:
# path: ~/.rustup
# key: toolchain-${{ matrix.os }}-${{ matrix.rust }}
#- if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }}
- id: rustup-setup
name: Install rustup and toolchains
shell: bash
@ -58,22 +51,9 @@ jobs:
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
source "${HOME}/.cargo/env"
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
echo "CARGO_HOME=${CARGO_HOME:-$HOME/.cargo}" >> $GITHUB_ENV
rustup toolchain install --profile minimal ${{ matrix.rust }} --target ${{ matrix.target }}
fi
- name: Configure cargo data directory
# After this point, all cargo registry and crate data is stored in
# $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
# that are needed during the build process. Additionally, this works
# around a bug in the 'cache' action that causes directories outside of
# the workspace dir to be saved/restored incorrectly.
run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
#- id: cache-cargo
# name: Cache cargo configuration and installations
# uses: https://github.com/actions/cache@v3
# with:
# path: ${{ env.CARGO_HOME }}
# key: cargo-${{ matrix.os }}-${{ matrix.rust }}
#- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
- name: Setup Rust target
run: |
mkdir -p "${{ env.CARGO_HOME }}"
@ -83,15 +63,17 @@ jobs:
EOF
- name: Build binary
run: |
VERSION=$(grep -m1 version meli/Cargo.toml | head -n1 | cut -d'"' -f 2 | head -n1)
echo "VERSION=${VERSION}" >> $GITHUB_ENV
make
mkdir artifacts
mv target/*/release/* target/ || true
mv target/release/* target/ || true
mv target/meli artifacts/
mv target/meli artifacts/meli-${VERSION}-${{ matrix.target }}
- name: Upload Artifacts
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.artifact_name }}
path: artifacts/meli
name: ${{ matrix.artifact_name }}-${{ env.VERSION }}
path: artifacts/meli-${{ env.VERSION }}-${{ matrix.target }}
if-no-files-found: error
retention-days: 30

View file

@ -16,7 +16,7 @@ on:
- v*
jobs:
build:
build-debian:
name: Create debian package
runs-on: ${{ matrix.os }}
strategy:

View file

@ -22,7 +22,7 @@ on:
- 'Cargo.lock'
jobs:
test:
lints:
name: Run lints
runs-on: ${{ matrix.os }}
strategy:
@ -41,13 +41,10 @@ jobs:
run: |
apt-get update
apt-get install -y libdbus-1-dev pkg-config mandoc libssl-dev
#- id: cache-rustup
# name: Cache Rust toolchain
# uses: https://github.com/actions/cache@v3
# with:
# path: ~/.rustup
# key: toolchain-${{ matrix.os }}-${{ matrix.rust }}
#- if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }}
- name: Find meli MSRV from meli/Cargo.toml.
run: |
echo MELI_MSRV=$(grep -m1 rust-version meli/Cargo.toml | head -n1 | cut -d'"' -f 2 | head -n1) >> $GITHUB_ENV
printf "Rust MSRV is %s\n" $(grep -m1 rust-version meli/Cargo.toml | head -n1 | cut -d'"' -f 2 | head -n1)
- id: rustup-setup
name: Install Rustup and toolchains
shell: bash
@ -56,23 +53,13 @@ jobs:
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
source "${HOME}/.cargo/env"
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
rustup toolchain install --profile minimal --component clippy,rustfmt --target ${{ matrix.target }} -- "${{ matrix.rust }}"
echo "CARGO_HOME=${CARGO_HOME:-$HOME/.cargo}" >> $GITHUB_ENV
rustup toolchain install --profile minimal --component "rustfmt" --target "${{ matrix.target }}" -- "${{ env.MELI_MSRV }}"
rustup component add rustfmt --toolchain ${{ env.MELI_MSRV }}-${{ matrix.target }}
rustup toolchain install --profile minimal --component clippy,rustfmt --target "${{ matrix.target }}" -- "${{ matrix.rust }}"
rustup component add rustfmt --toolchain ${{ matrix.rust }}-${{ matrix.target }}
rustup default ${{ matrix.rust }}
fi
- name: Configure cargo data directory
# After this point, all cargo registry and crate data is stored in
# $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
# that are needed during the build process. Additionally, this works
# around a bug in the 'cache' action that causes directories outside of
# the workspace dir to be saved/restored incorrectly.
run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
#- id: cache-cargo
# name: Cache cargo configuration and installations
# uses: https://github.com/actions/cache@v3
# with:
# path: ${{ env.CARGO_HOME }}
# key: cargo-${{ matrix.os }}-${{ matrix.rust }}
#- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
- name: Setup Rust target
run: |
mkdir -p "${{ env.CARGO_HOME }}"
@ -80,29 +67,39 @@ jobs:
[build]
target = "${{ matrix.target }}"
EOF
- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
name: Add lint dependencies
- name: Add lint dependencies
shell: bash
run: |
cargo install --quiet --version 1.0.9 --target "${{ matrix.target }}" cargo-sort
cargo install --version 0.15.1 --target "${{ matrix.target }}" cargo-msrv
# "This package is currently implemented using rust-analyzer internals, so cannot be published on crates.io."
RUSTFLAGS="" cargo install --locked --target "${{ matrix.target }}" --git https://github.com/dcchut/cargo-derivefmt --rev 95da8eee343de4adb25850893873b979258aed7f --bin cargo-derivefmt
- name: cargo-msrv verify melib MSRV
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f ./.gitea/Makefile.lint cargo-msrv
- name: rustfmt
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f .gitea/Makefile.lint rustfmt
- name: clippy
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f .gitea/Makefile.lint clippy
- name: cargo-derivefmt melib
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f .gitea/Makefile.lint cargo-derivefmt-melib
- name: cargo-derivefmt meli
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f .gitea/Makefile.lint cargo-derivefmt-meli
- name: cargo-derivefmt tools
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f .gitea/Makefile.lint cargo-derivefmt-tools

View file

@ -42,8 +42,6 @@ jobs:
run: |
apt-get update
apt-get install -y mandoc
- name: Find meli MSRV from meli/Cargo.toml.
run: echo MELI_MSRV=$(grep -m1 rust-version meli/Cargo.toml | head -n1 | cut -d'"' -f 2 | head -n1) >> $GITHUB_ENV
- id: rustup-setup
name: Install Rustup and toolchains
shell: bash
@ -53,8 +51,6 @@ jobs:
source "${HOME}/.cargo/env"
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
echo "CARGO_HOME=${CARGO_HOME:-$HOME/.cargo}" >> $GITHUB_ENV
rustup toolchain install --profile minimal --component "rustfmt" --target "${{ matrix.target }}" -- "${{ env.MELI_MSRV }}"
rustup component add rustfmt --toolchain ${{ env.MELI_MSRV }}-${{ matrix.target }}
rustup toolchain install --profile minimal --component "rustfmt" --target "${{ matrix.target }}" -- "${{ matrix.rust }}"
rustup component add rustfmt --toolchain ${{ matrix.rust }}-${{ matrix.target }}
rustup default ${{ matrix.rust }}
@ -66,17 +62,10 @@ jobs:
[build]
target = "${{ matrix.target }}"
EOF
- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
name: Add manifest lint dependencies
- name: Add manifest lint dependencies
run: |
source "${HOME}/.cargo/env"
cargo install --quiet --version 1.0.9 --target "${{ matrix.target }}" cargo-sort
cargo install --quiet --version 0.15.1 --target "${{ matrix.target }}" cargo-msrv
- name: cargo-msrv verify melib MSRV
if: success() || failure()
run: |
source "${HOME}/.cargo/env"
make -f ./.gitea/Makefile.manifest-lint cargo-msrv
- name: cargo-sort
if: success() || failure()
run: |