mirror of
https://github.com/dani-garcia/vaultwarden.git
synced 2026-03-24 10:49:20 -07:00
Updated all crates which are possible. Updated all GitHub Actions to their latest version. There was a supply-chain attack on the trivy action to which we were not exposed since we were using pinned sha hashes. The latest version v0.35.0 is not vulnerable and that version will be used with this commit. Also removed `dtolnay/rust-toolchain` as suggested by zizmor and adjusted the way to install the correct toolchain. Since this GitHub Action did not used any version tagging, it was also cumbersome to update. Signed-off-by: BlackDex <black.dex@gmail.com>
221 lines
7.9 KiB
YAML
221 lines
7.9 KiB
YAML
name: Build
|
|
permissions: {}
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- ".github/workflows/build.yml"
|
|
- "src/**"
|
|
- "migrations/**"
|
|
- "Cargo.*"
|
|
- "build.rs"
|
|
- "rust-toolchain.toml"
|
|
- "rustfmt.toml"
|
|
- "diesel.toml"
|
|
- "docker/Dockerfile.j2"
|
|
- "docker/DockerSettings.yaml"
|
|
- "macros/**"
|
|
|
|
pull_request:
|
|
paths:
|
|
- ".github/workflows/build.yml"
|
|
- "src/**"
|
|
- "migrations/**"
|
|
- "Cargo.*"
|
|
- "build.rs"
|
|
- "rust-toolchain.toml"
|
|
- "rustfmt.toml"
|
|
- "diesel.toml"
|
|
- "docker/Dockerfile.j2"
|
|
- "docker/DockerSettings.yaml"
|
|
- "macros/**"
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
build:
|
|
name: Build and Test ${{ matrix.channel }}
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 120
|
|
# Make warnings errors, this is to prevent warnings slipping through.
|
|
# This is done globally to prevent rebuilds when the RUSTFLAGS env variable changes.
|
|
env:
|
|
RUSTFLAGS: "-Dwarnings"
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
channel:
|
|
- "rust-toolchain" # The version defined in rust-toolchain
|
|
- "msrv" # The supported MSRV
|
|
|
|
steps:
|
|
# Install dependencies
|
|
- name: "Install dependencies Ubuntu"
|
|
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends openssl build-essential libmariadb-dev-compat libpq-dev libssl-dev pkg-config
|
|
# End Install dependencies
|
|
|
|
# Checkout the repo
|
|
- name: "Checkout"
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
with:
|
|
persist-credentials: false
|
|
fetch-depth: 0
|
|
# End Checkout the repo
|
|
|
|
# Determine rust-toolchain version
|
|
- name: Init Variables
|
|
id: toolchain
|
|
env:
|
|
CHANNEL: ${{ matrix.channel }}
|
|
run: |
|
|
if [[ "${CHANNEL}" == 'rust-toolchain' ]]; then
|
|
RUST_TOOLCHAIN="$(grep -m1 -oP 'channel.*"(\K.*?)(?=")' rust-toolchain.toml)"
|
|
elif [[ "${CHANNEL}" == 'msrv' ]]; then
|
|
RUST_TOOLCHAIN="$(grep -m1 -oP 'rust-version\s.*"(\K.*?)(?=")' Cargo.toml)"
|
|
else
|
|
RUST_TOOLCHAIN="${CHANNEL}"
|
|
fi
|
|
echo "RUST_TOOLCHAIN=${RUST_TOOLCHAIN}" | tee -a "${GITHUB_OUTPUT}"
|
|
# End Determine rust-toolchain version
|
|
|
|
|
|
- name: "Install toolchain ${{steps.toolchain.outputs.RUST_TOOLCHAIN}} as default"
|
|
env:
|
|
CHANNEL: ${{ matrix.channel }}
|
|
RUST_TOOLCHAIN: ${{steps.toolchain.outputs.RUST_TOOLCHAIN}}
|
|
run: |
|
|
# Remove the rust-toolchain.toml
|
|
rm rust-toolchain.toml
|
|
|
|
# Install the correct toolchain version
|
|
rustup toolchain install "${RUST_TOOLCHAIN}" --profile minimal --no-self-update
|
|
|
|
# If this matrix is the `rust-toolchain` flow, also install rustfmt and clippy
|
|
if [[ "${CHANNEL}" == 'rust-toolchain' ]]; then
|
|
rustup component add --toolchain "${RUST_TOOLCHAIN}" rustfmt clippy
|
|
fi
|
|
|
|
# Set as the default toolchain
|
|
rustup default "${RUST_TOOLCHAIN}"
|
|
|
|
# Show environment
|
|
- name: "Show environment"
|
|
run: |
|
|
rustc -vV
|
|
cargo -vV
|
|
# End Show environment
|
|
|
|
# Enable Rust Caching
|
|
- name: Rust Caching
|
|
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
|
|
with:
|
|
# Use a custom prefix-key to force a fresh start. This is sometimes needed with bigger changes.
|
|
# Like changing the build host from Ubuntu 20.04 to 22.04 for example.
|
|
# Only update when really needed! Use a <year>.<month>[.<inc>] format.
|
|
prefix-key: "v2025.09-rust"
|
|
# End Enable Rust Caching
|
|
|
|
# Run cargo tests
|
|
# First test all features together, afterwards test them separately.
|
|
- name: "test features: sqlite,mysql,postgresql,enable_mimalloc,s3"
|
|
id: test_sqlite_mysql_postgresql_mimalloc_s3
|
|
if: ${{ !cancelled() }}
|
|
run: |
|
|
cargo test --profile ci --features sqlite,mysql,postgresql,enable_mimalloc,s3
|
|
|
|
- name: "test features: sqlite,mysql,postgresql,enable_mimalloc"
|
|
id: test_sqlite_mysql_postgresql_mimalloc
|
|
if: ${{ !cancelled() }}
|
|
run: |
|
|
cargo test --profile ci --features sqlite,mysql,postgresql,enable_mimalloc
|
|
|
|
- name: "test features: sqlite,mysql,postgresql"
|
|
id: test_sqlite_mysql_postgresql
|
|
if: ${{ !cancelled() }}
|
|
run: |
|
|
cargo test --profile ci --features sqlite,mysql,postgresql
|
|
|
|
- name: "test features: sqlite"
|
|
id: test_sqlite
|
|
if: ${{ !cancelled() }}
|
|
run: |
|
|
cargo test --profile ci --features sqlite
|
|
|
|
- name: "test features: mysql"
|
|
id: test_mysql
|
|
if: ${{ !cancelled() }}
|
|
run: |
|
|
cargo test --profile ci --features mysql
|
|
|
|
- name: "test features: postgresql"
|
|
id: test_postgresql
|
|
if: ${{ !cancelled() }}
|
|
run: |
|
|
cargo test --profile ci --features postgresql
|
|
# End Run cargo tests
|
|
|
|
|
|
# Run cargo clippy, and fail on warnings
|
|
- name: "clippy features: sqlite,mysql,postgresql,enable_mimalloc,s3"
|
|
id: clippy
|
|
if: ${{ !cancelled() && matrix.channel == 'rust-toolchain' }}
|
|
run: |
|
|
cargo clippy --profile ci --features sqlite,mysql,postgresql,enable_mimalloc,s3
|
|
# End Run cargo clippy
|
|
|
|
|
|
# Run cargo fmt (Only run on rust-toolchain defined version)
|
|
- name: "check formatting"
|
|
id: formatting
|
|
if: ${{ !cancelled() && matrix.channel == 'rust-toolchain' }}
|
|
run: |
|
|
cargo fmt --all -- --check
|
|
# End Run cargo fmt
|
|
|
|
|
|
# Check for any previous failures, if there are stop, else continue.
|
|
# This is useful so all test/clippy/fmt actions are done, and they can all be addressed
|
|
- name: "Some checks failed"
|
|
if: ${{ failure() }}
|
|
env:
|
|
TEST_DB_M_S3: ${{ steps.test_sqlite_mysql_postgresql_mimalloc_s3.outcome }}
|
|
TEST_DB_M: ${{ steps.test_sqlite_mysql_postgresql_mimalloc.outcome }}
|
|
TEST_DB: ${{ steps.test_sqlite_mysql_postgresql.outcome }}
|
|
TEST_SQLITE: ${{ steps.test_sqlite.outcome }}
|
|
TEST_MYSQL: ${{ steps.test_mysql.outcome }}
|
|
TEST_POSTGRESQL: ${{ steps.test_postgresql.outcome }}
|
|
CLIPPY: ${{ steps.clippy.outcome }}
|
|
FMT: ${{ steps.formatting.outcome }}
|
|
run: |
|
|
echo "### :x: Checks Failed!" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|Job|Status|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|---|------|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|test (sqlite,mysql,postgresql,enable_mimalloc,s3)|${TEST_DB_M_S3}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|test (sqlite,mysql,postgresql,enable_mimalloc)|${TEST_DB_M}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|test (sqlite,mysql,postgresql)|${TEST_DB}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|test (sqlite)|${TEST_SQLITE}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|test (mysql)|${TEST_MYSQL}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|test (postgresql)|${TEST_POSTGRESQL}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|clippy (sqlite,mysql,postgresql,enable_mimalloc,s3)|${CLIPPY}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "|fmt|${FMT}|" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "Please check the failed jobs and fix where needed." >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "" >> "${GITHUB_STEP_SUMMARY}"
|
|
exit 1
|
|
|
|
|
|
# Check for any previous failures, if there are stop, else continue.
|
|
# This is useful so all test/clippy/fmt actions are done, and they can all be addressed
|
|
- name: "All checks passed"
|
|
if: ${{ success() }}
|
|
run: |
|
|
echo "### :tada: Checks Passed!" >> "${GITHUB_STEP_SUMMARY}"
|
|
echo "" >> "${GITHUB_STEP_SUMMARY}"
|