mirror of
https://github.com/dani-garcia/vaultwarden
synced 2024-12-05 01:59:16 +00:00
81984c4bce
Currently the branch protection is set on specific workflows which needs to be run every time a PR is created (or a push). Because it isn't possible to tell the branch protection only to do it's job if specific files are touched or not, we just need to make sure these jobs are always started. Also, because we now check the builds for an MSRV, and the title would change all the time, that would cause the branch protection to be updated everytime the MSRV would change. This is now also addressed by naming that job 'msrv' instead of the version number.
200 lines
7.2 KiB
YAML
200 lines
7.2 KiB
YAML
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
|
|
- "msrv" # The supported MSRV
|
|
include:
|
|
- channel: "msrv"
|
|
version: "1.60.0"
|
|
|
|
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.version }}
|
|
# 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/release/vaultwarden
|
|
# End Upload artifact to Github Actions
|