@ -20,6 +20,7 @@ on:
jobs:
build:
runs-on : ubuntu-20.04
# Make warnings errors, this is to prevent warnings slipping through.
# This is done globally to prevent rebuilds when the RUSTFLAGS env variable changes.
env:
@ -28,118 +29,169 @@ jobs:
fail-fast : false
matrix:
channel:
- stable
target-triple:
- x86_64-unknown-linux-gnu
include:
- target-triple : x86_64-unknown-linux-gnu
host-triple : x86_64-unknown-linux-gnu
features : [ sqlite,mysql,postgresql,enable_mimalloc] # Remember to update the `cargo test` to match the amount of features
channel : stable
os : ubuntu-20.04
ext : ""
name : Building ${{ matrix.channel }}-${{ matrix.target-triple }}
runs-on : ${{ matrix.os }}
- "rust-toolchain" # The version defined in rust-toolchain
- "1.59.0" # The supported MSRV
name : Build and Test ${{ matrix.channel }}
steps:
# Checkout the repo
- name : Checkout
- name : "Checkout"
uses : actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2
# End Checkout the repo
# Install musl-tools when needed
- name : Install musl tools
run : sudo apt-get update && sudo apt-get install -y --no-install-recommends musl-dev musl-tools cmake
if : matrix.target-triple == 'x86_64-unknown-linux-musl'
# End Install musl-tools when needed
# Install dependencies
- 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 pkgconf
if : startsWith( matrix.os, 'ubuntu' )
- 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
# End Install dependencies
# Enable Rust Caching
- uses : Swatinem/rust-cache@842ef286fff290e445b90b4002cc9807c3669641 # v1.3.0
# End Enable Rust Caching
# Uses the rust-toolchain file to determine version
- name : 'Install ${{ matrix.channel }}-${{ matrix.host-triple }} for target: ${{ matrix.target-triple }}'
- name : "Install rust-toolchain version"
uses : actions-rs/toolchain@b2417cde72dcf67f306c0ae8e0828a81bf0b189f # v1.0.6
if : ${{ matrix.channel == 'rust-toolchain' }}
with:
profile : minimal
target : ${{ matrix.target-triple }}
components : clippy, rustfmt
# End Uses the rust-toolchain file to determine version
# Install the MSRV channel to be used
- name : "Install MSRV version"
uses : actions-rs/toolchain@b2417cde72dcf67f306c0ae8e0828a81bf0b189f # v1.0.6
if : ${{ matrix.channel != 'rust-toolchain' }}
with:
profile : minimal
override : true
toolchain : ${{ matrix.channel }}
# End Install the MSRV channel to be used
# Enable Rust Caching
- uses : Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0
# End Enable Rust Caching
# Show environment
- name : "Show environment"
run : |
rustc -vV
cargo -vV
# End Show environment
# Run cargo tests (In release mode to speed up future builds)
# First test all features together, afterwards test them separately.
- name : "`cargo test --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }}`"
- name : "test features: sqlite,mysql,postgresql,enable_mimalloc"
id : test_sqlite_mysql_postgresql_mimalloc
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : $${{ always() }}
with:
command : test
args : --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }}
# Test single features
# 0: sqlite
- name : "`cargo test --release --features ${{ matrix.features[0] }} --target ${{ matrix.target-triple }}`"
args : --release --features sqlite,mysql,postgresql,enable_mimalloc
- name : "test features: sqlite,mysql,postgresql"
id : test_sqlite_mysql_postgresql
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : $${{ always() }}
with:
command : test
args : --release --features ${{ matrix.features[0] }} --target ${{ matrix.target-triple }}
if : ${{ matrix.features[0] != '' }}
# 1: mysql
- name : "`cargo test --release --features ${{ matrix.features[1] }} --target ${{ matrix.target-triple }}`"
args : --release --features sqlite,mysql,postgresql
- name : "test features: sqlite"
id : test_sqlite
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : $${{ always() }}
with:
command : test
args : --release --features sqlite
- name : "test features: mysql"
id : test_mysql
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : $${{ always() }}
with:
command : test
args : --release --features ${{ matrix.features[1] }} --target ${{ matrix.target-triple }}
if : ${{ matrix.features[1] != '' }}
# 2: postgresql
- name : "`cargo test --release --features ${{ matrix.features[2] }} --target ${{ matrix.target-triple }}`"
args : --release --features mysql
- name : "test features: postgresql"
id : test_postgresql
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : $${{ always() }}
with:
command : test
args : --release --features ${{ matrix.features[2] }} --target ${{ matrix.target-triple }}
if : ${{ matrix.features[2] != '' }}
args : --release --features postgresql
# End Run cargo tests
# Run cargo clippy, and fail on warnings (In release mode to speed up future builds)
- name : "`cargo clippy --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }}`"
- name : "clippy features: sqlite,mysql,postgresql,enable_mimalloc"
id : clippy
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : ${{ always() && matrix.channel == 'rust-toolchain' }}
with:
command : clippy
args : --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }} -- -D warnings
args : --release --features sqlite,mysql,postgresql,enable_mimalloc -- -D warnings
# End Run cargo clippy
# Run cargo fmt
- name : '`cargo fmt`'
# Run cargo fmt (Only run on rust-toolchain defined version)
- name : "check formatting"
id : formatting
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : ${{ always() && matrix.channel == 'rust-toolchain' }}
with:
command : fmt
args : --all -- --check
# End Run cargo fmt
# Build the binary
- name : "`cargo build --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }}`"
# 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"
uses : actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
if : ${{ matrix.channel == 'rust-toolchain' }}
with:
command : build
args : --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }}
args : --release --features sqlite,mysql,postgresql
# End Build the binary
# Upload artifact to Github Actions
- name : Upload artifact
- name : "Upload artifact"
uses : actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
if : ${{ matrix.channel == 'rust-toolchain' }}
with:
name : vaultwarden-${{ matrix.target-triple }}${{ matrix.ext }}
path : target/${{ matrix.target-triple }}/release/vaultwarden${{ matrix.ext }}
name : vaultwarden
path : target/${{ matrix.target-triple }}/release/vaultwarden
# End Upload artifact to Github Actions