|
|
|
name: Build
|
|
|
|
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
paths:
|
|
|
|
- ".github/workflows/build.yml"
|
|
|
|
- "src/**"
|
|
|
|
- "migrations/**"
|
|
|
|
- "Cargo.*"
|
|
|
|
- "build.rs"
|
|
|
|
- "rust-toolchain"
|
|
|
|
pull_request:
|
|
|
|
paths:
|
|
|
|
- ".github/workflows/build.yml"
|
|
|
|
- "src/**"
|
|
|
|
- "migrations/**"
|
|
|
|
- "Cargo.*"
|
|
|
|
- "build.rs"
|
|
|
|
- "rust-toolchain"
|
|
|
|
|
|
|
|
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:
|
|
|
|
RUSTFLAGS: "-D warnings"
|
|
|
|
strategy:
|
|
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
|
|
channel:
|
|
|
|
- "rust-toolchain" # The version defined in rust-toolchain
|
|
|
|
- "1.60.0" # The supported MSRV
|
|
|
|
|
|
|
|
name: Build and Test ${{ matrix.channel }}
|
|
|
|
|
|
|
|
steps:
|
|
|
|
# Checkout the repo
|
|
|
|
- name: "Checkout"
|
|
|
|
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2
|
|
|
|
# End Checkout the repo
|
|
|
|
|
|
|
|
# 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 pkg-config
|
|
|
|
# End Install dependencies
|
|
|
|
|
|
|
|
|
|
|
|
# Uses the rust-toolchain file to determine version
|
|
|
|
- name: "Install rust-toolchain version"
|
|
|
|
uses: actions-rs/toolchain@b2417cde72dcf67f306c0ae8e0828a81bf0b189f # v1.0.6
|
|
|
|
if: ${{ matrix.channel == 'rust-toolchain' }}
|
|
|
|
with:
|
|
|
|
profile: minimal
|
|
|
|
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: "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 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 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 mysql
|
|
|
|
|
|
|
|
- name: "test features: postgresql"
|
|
|
|
id: test_postgresql
|
|
|
|
uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
|
|
|
|
if: $${{ always() }}
|
|
|
|
with:
|
|
|
|
command: test
|
|
|
|
args: --release --features postgresql
|
|
|
|
# End Run cargo tests
|
|
|
|
|
|
|
|
|
|
|
|
# Run cargo clippy, and fail on warnings (In release mode to speed up future builds)
|
|
|
|
- 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 sqlite,mysql,postgresql,enable_mimalloc -- -D warnings
|
|
|
|
# End Run cargo clippy
|
|
|
|
|
|
|
|
|
|
|
|
# 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
|
|
|
|
|
|
|
|
|
|
|
|
# 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 sqlite,mysql,postgresql
|
|
|
|
# End Build the binary
|
|
|
|
|
|
|
|
|
|
|
|
# Upload artifact to Github Actions
|
|
|
|
- name: "Upload artifact"
|
|
|
|
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
|
|
|
|
if: ${{ matrix.channel == 'rust-toolchain' }}
|
|
|
|
with:
|
|
|
|
name: vaultwarden
|
|
|
|
path: target/${{ matrix.target-triple }}/release/vaultwarden
|
|
|
|
# End Upload artifact to Github Actions
|