2020-12-16 13:31:39 -05:00
name : Build
on :
push :
2021-08-28 11:29:13 -04:00
paths :
- ".github/workflows/build.yml"
- "src/**"
- "migrations/**"
- "Cargo.*"
- "build.rs"
- "rust-toolchain"
2023-03-04 13:18:38 -05:00
- "rustfmt.toml"
- "diesel.toml"
2021-03-27 11:21:00 -04:00
pull_request :
2021-08-28 11:29:13 -04:00
paths :
- ".github/workflows/build.yml"
- "src/**"
- "migrations/**"
- "Cargo.*"
- "build.rs"
- "rust-toolchain"
2023-03-04 13:18:38 -05:00
- "rustfmt.toml"
- "diesel.toml"
2020-12-16 13:31:39 -05:00
jobs :
build :
2022-07-19 13:13:54 -04:00
runs-on : ubuntu-20.04
2022-12-15 11:15:48 -05:00
timeout-minutes : 120
2021-05-08 10:48:48 -04:00
# 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 : "-D warnings"
2023-03-04 13:18:38 -05:00
CARGO_REGISTRIES_CRATES_IO_PROTOCOL : git # Use the old git protocol until it is stable probably in 1.68 or 1.69. MSRV needs to be at this before removed.
2020-12-16 13:31:39 -05:00
strategy :
fail-fast : false
matrix :
channel :
2022-07-19 13:13:54 -04:00
- "rust-toolchain" # The version defined in rust-toolchain
2022-09-15 10:51:52 -04:00
- "msrv" # The supported MSRV
2022-07-19 13:13:54 -04:00
name : Build and Test ${{ matrix.channel }}
2020-12-16 13:31:39 -05:00
steps :
# Checkout the repo
2022-07-19 13:13:54 -04:00
- name : "Checkout"
2023-03-23 07:30:07 -04:00
uses : actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
2020-12-16 13:31:39 -05:00
# End Checkout the repo
2023-03-04 13:18:38 -05:00
2020-12-16 13:31:39 -05:00
# Install dependencies
2022-07-19 13:13:54 -04:00
- name : "Install dependencies Ubuntu"
run : sudo apt-get update && sudo apt-get install -y --no-install-recommends openssl sqlite build-essential libmariadb-dev-compat libpq-dev libssl-dev pkg-config
2020-12-16 13:31:39 -05:00
# End Install dependencies
2023-03-04 13:18:38 -05:00
2022-11-04 07:56:02 -04:00
# Determine rust-toolchain version
- name : Init Variables
id : toolchain
shell : bash
run : |
2023-03-04 13:18:38 -05:00
if [[ "${{ matrix.channel }}" == 'rust-toolchain' ]]; then
RUST_TOOLCHAIN="$(cat rust-toolchain)"
elif [[ "${{ matrix.channel }}" == 'msrv' ]]; then
RUST_TOOLCHAIN="$(grep -oP 'rust-version.*"(\K.*?)(?=")' Cargo.toml)"
else
RUST_TOOLCHAIN="${{ matrix.channel }}"
fi
2022-11-04 07:56:02 -04:00
echo "RUST_TOOLCHAIN=${RUST_TOOLCHAIN}" | tee -a "${GITHUB_OUTPUT}"
# End Determine rust-toolchain version
2020-12-16 13:31:39 -05:00
2023-03-04 13:18:38 -05:00
# Only install the clippy and rustfmt components on the default rust-toolchain
2022-07-19 13:13:54 -04:00
- name : "Install rust-toolchain version"
2023-03-23 07:30:07 -04:00
uses : dtolnay/rust-toolchain@fc3253060d0c959bea12a59f10f8391454a0b02d # master @ 2023-03-21 - 06:36 GMT+1
2022-07-19 13:13:54 -04:00
if : ${{ matrix.channel == 'rust-toolchain' }}
2020-12-16 13:31:39 -05:00
with :
2022-11-04 07:56:02 -04:00
toolchain : "${{steps.toolchain.outputs.RUST_TOOLCHAIN}}"
2021-03-28 11:48:45 -04:00
components : clippy, rustfmt
2020-12-16 13:31:39 -05:00
# End Uses the rust-toolchain file to determine version
2023-03-04 13:18:38 -05:00
# Install the any other channel to be used for which we do not execute clippy and rustfmt
2022-07-19 13:13:54 -04:00
- name : "Install MSRV version"
2023-03-23 07:30:07 -04:00
uses : dtolnay/rust-toolchain@fc3253060d0c959bea12a59f10f8391454a0b02d # master @ 2023-03-21 - 06:36 GMT+1
2022-07-19 13:13:54 -04:00
if : ${{ matrix.channel != 'rust-toolchain' }}
with :
2023-03-04 13:18:38 -05:00
toolchain : "${{steps.toolchain.outputs.RUST_TOOLCHAIN}}"
2022-07-19 13:13:54 -04:00
# End Install the MSRV channel to be used
# Enable Rust Caching
2023-03-04 13:18:38 -05:00
- uses : Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f # v2.2.1
2022-07-19 13:13:54 -04:00
# End Enable Rust Caching
# Show environment
- name : "Show environment"
run : |
rustc -vV
cargo -vV
# End Show environment
2021-03-27 11:10:00 -04:00
# Run cargo tests (In release mode to speed up future builds)
2021-05-08 10:48:48 -04:00
# First test all features together, afterwards test them separately.
2022-07-19 13:13:54 -04:00
- name : "test features: sqlite,mysql,postgresql,enable_mimalloc"
id : test_sqlite_mysql_postgresql_mimalloc
if : $${{ always() }}
2022-11-04 07:56:02 -04:00
run : |
cargo test --release --features sqlite,mysql,postgresql,enable_mimalloc
2022-07-19 13:13:54 -04:00
- name : "test features: sqlite,mysql,postgresql"
id : test_sqlite_mysql_postgresql
if : $${{ always() }}
2022-11-04 07:56:02 -04:00
run : |
cargo test --release --features sqlite,mysql,postgresql
2022-07-19 13:13:54 -04:00
- name : "test features: sqlite"
id : test_sqlite
if : $${{ always() }}
2022-11-04 07:56:02 -04:00
run : |
cargo test --release --features sqlite
2022-07-19 13:13:54 -04:00
- name : "test features: mysql"
id : test_mysql
if : $${{ always() }}
2022-11-04 07:56:02 -04:00
run : |
cargo test --release --features mysql
2022-07-19 13:13:54 -04:00
- name : "test features: postgresql"
id : test_postgresql
if : $${{ always() }}
2022-11-04 07:56:02 -04:00
run : |
cargo test --release --features postgresql
2020-12-16 13:31:39 -05:00
# End Run cargo tests
2021-05-08 10:48:48 -04:00
# Run cargo clippy, and fail on warnings (In release mode to speed up future builds)
2022-07-19 13:13:54 -04:00
- name : "clippy features: sqlite,mysql,postgresql,enable_mimalloc"
id : clippy
if : ${{ always() && matrix.channel == 'rust-toolchain' }}
2022-11-04 07:56:02 -04:00
run : |
cargo clippy --release --features sqlite,mysql,postgresql,enable_mimalloc -- -D warnings
2021-03-27 11:10:00 -04:00
# End Run cargo clippy
2022-07-19 13:13:54 -04:00
# Run cargo fmt (Only run on rust-toolchain defined version)
- name : "check formatting"
id : formatting
if : ${{ always() && matrix.channel == 'rust-toolchain' }}
2022-11-04 07:56:02 -04:00
run : |
cargo fmt --all -- --check
2021-03-28 11:48:45 -04:00
# End Run cargo fmt
2022-07-19 13:13:54 -04:00
# 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() }}
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)|${{ steps.test_sqlite_mysql_postgresql_mimalloc.outcome }}|" >> $GITHUB_STEP_SUMMARY
echo "|test (sqlite,mysql,postgresql)|${{ steps.test_sqlite_mysql_postgresql.outcome }}|" >> $GITHUB_STEP_SUMMARY
echo "|test (sqlite)|${{ steps.test_sqlite.outcome }}|" >> $GITHUB_STEP_SUMMARY
echo "|test (mysql)|${{ steps.test_mysql.outcome }}|" >> $GITHUB_STEP_SUMMARY
echo "|test (postgresql)|${{ steps.test_postgresql.outcome }}|" >> $GITHUB_STEP_SUMMARY
echo "|clippy (sqlite,mysql,postgresql,enable_mimalloc)|${{ steps.clippy.outcome }}|" >> $GITHUB_STEP_SUMMARY
echo "|fmt|${{ steps.formatting.outcome }}|" >> $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
# Build the binary to upload to the artifacts
- name : "build features: sqlite,mysql,postgresql"
if : ${{ matrix.channel == 'rust-toolchain' }}
2022-11-04 07:56:02 -04:00
run : |
cargo build --release --features sqlite,mysql,postgresql
2020-12-16 13:31:39 -05:00
# End Build the binary
# Upload artifact to Github Actions
2022-07-19 13:13:54 -04:00
- name : "Upload artifact"
2023-03-04 13:18:38 -05:00
uses : actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
2022-07-19 13:13:54 -04:00
if : ${{ matrix.channel == 'rust-toolchain' }}
2020-12-16 13:31:39 -05:00
with :
2022-07-19 13:13:54 -04:00
name : vaultwarden
2022-09-15 10:51:52 -04:00
path : target/release/vaultwarden
2020-12-16 13:31:39 -05:00
# End Upload artifact to Github Actions