Files
vaultwarden/.github/workflows/build.yml
T

199 lines
7.3 KiB
YAML
Raw Normal View History

2020-12-16 19:31:39 +01:00
name: Build
on:
push:
2021-08-28 17:29:13 +02:00
paths:
- ".github/workflows/build.yml"
- "src/**"
- "migrations/**"
- "Cargo.*"
- "build.rs"
2023-08-28 16:48:42 +02:00
- "rust-toolchain.toml"
- "rustfmt.toml"
- "diesel.toml"
2023-08-28 16:48:42 +02:00
- "docker/Dockerfile.j2"
2023-10-23 00:18:38 +02:00
- "docker/DockerSettings.yaml"
2021-03-27 15:21:00 +00:00
pull_request:
2021-08-28 17:29:13 +02:00
paths:
- ".github/workflows/build.yml"
- "src/**"
- "migrations/**"
- "Cargo.*"
- "build.rs"
2023-08-28 16:48:42 +02:00
- "rust-toolchain.toml"
- "rustfmt.toml"
- "diesel.toml"
2023-08-28 16:48:42 +02:00
- "docker/Dockerfile.j2"
2023-10-23 00:18:38 +02:00
- "docker/DockerSettings.yaml"
2020-12-16 19:31:39 +01:00
jobs:
build:
2024-08-13 12:52:07 +02:00
# We use Ubuntu 22.04 here because this matches the library versions used within the Debian docker containers
2023-06-11 18:11:09 +02:00
runs-on: ubuntu-22.04
timeout-minutes: 120
2021-05-08 16:48:48 +02: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"
2020-12-16 19:31:39 +01:00
strategy:
fail-fast: false
matrix:
channel:
2022-07-19 19:13:54 +02:00
- "rust-toolchain" # The version defined in rust-toolchain
2022-09-15 16:51:52 +02:00
- "msrv" # The supported MSRV
2022-07-19 19:13:54 +02:00
name: Build and Test ${{ matrix.channel }}
2020-12-16 19:31:39 +01:00
steps:
# Checkout the repo
2022-07-19 19:13:54 +02:00
- name: "Checkout"
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 #v4.2.1
2020-12-16 19:31:39 +01:00
# End Checkout the repo
2020-12-16 19:31:39 +01:00
# Install dependencies
2022-07-19 19:13:54 +02:00
- name: "Install dependencies Ubuntu"
2023-06-11 18:11:09 +02:00
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
2020-12-16 19:31:39 +01:00
# End Install dependencies
2022-11-04 12:56:02 +01:00
# Determine rust-toolchain version
- name: Init Variables
id: toolchain
shell: bash
run: |
if [[ "${{ matrix.channel }}" == 'rust-toolchain' ]]; then
2023-08-28 16:48:42 +02:00
RUST_TOOLCHAIN="$(grep -oP 'channel.*"(\K.*?)(?=")' rust-toolchain.toml)"
elif [[ "${{ matrix.channel }}" == 'msrv' ]]; then
RUST_TOOLCHAIN="$(grep -oP 'rust-version.*"(\K.*?)(?=")' Cargo.toml)"
else
RUST_TOOLCHAIN="${{ matrix.channel }}"
fi
2022-11-04 12:56:02 +01:00
echo "RUST_TOOLCHAIN=${RUST_TOOLCHAIN}" | tee -a "${GITHUB_OUTPUT}"
# End Determine rust-toolchain version
2020-12-16 19:31:39 +01:00
# Only install the clippy and rustfmt components on the default rust-toolchain
2022-07-19 19:13:54 +02:00
- name: "Install rust-toolchain version"
2024-08-13 12:52:07 +02:00
uses: dtolnay/rust-toolchain@7b1c307e0dcbda6122208f10795a713336a9b35a # master @ Aug 8, 2024, 7:36 PM GMT+2
2022-07-19 19:13:54 +02:00
if: ${{ matrix.channel == 'rust-toolchain' }}
2020-12-16 19:31:39 +01:00
with:
2022-11-04 12:56:02 +01:00
toolchain: "${{steps.toolchain.outputs.RUST_TOOLCHAIN}}"
2021-03-28 16:48:45 +01:00
components: clippy, rustfmt
2020-12-16 19:31:39 +01:00
# End Uses the rust-toolchain file to determine version
# Install the any other channel to be used for which we do not execute clippy and rustfmt
2022-07-19 19:13:54 +02:00
- name: "Install MSRV version"
2024-08-13 12:52:07 +02:00
uses: dtolnay/rust-toolchain@7b1c307e0dcbda6122208f10795a713336a9b35a # master @ Aug 8, 2024, 7:36 PM GMT+2
2022-07-19 19:13:54 +02:00
if: ${{ matrix.channel != 'rust-toolchain' }}
with:
toolchain: "${{steps.toolchain.outputs.RUST_TOOLCHAIN}}"
2022-07-19 19:13:54 +02:00
# End Install the MSRV channel to be used
2023-09-22 20:27:03 +02:00
# Set the current matrix toolchain version as default
- name: "Set toolchain ${{steps.toolchain.outputs.RUST_TOOLCHAIN}} as default"
run: |
# Remove the rust-toolchain.toml
rm rust-toolchain.toml
# Set the default
rustup default ${{steps.toolchain.outputs.RUST_TOOLCHAIN}}
2022-07-19 19:13:54 +02:00
# Show environment
- name: "Show environment"
run: |
rustc -vV
cargo -vV
# End Show environment
2023-09-22 20:27:03 +02:00
# Enable Rust Caching
2024-01-26 20:19:53 +01:00
- uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2.7.3
2023-09-22 20:27:03 +02:00
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: "v2023.07-rust"
# End Enable Rust Caching
2022-07-19 19:13:54 +02:00
2023-10-23 00:18:38 +02:00
# Run cargo tests
2021-05-08 16:48:48 +02:00
# First test all features together, afterwards test them separately.
2022-07-19 19:13:54 +02:00
- name: "test features: sqlite,mysql,postgresql,enable_mimalloc"
id: test_sqlite_mysql_postgresql_mimalloc
if: $${{ always() }}
2022-11-04 12:56:02 +01:00
run: |
2023-10-23 00:18:38 +02:00
cargo test --features sqlite,mysql,postgresql,enable_mimalloc
2022-07-19 19:13:54 +02:00
- name: "test features: sqlite,mysql,postgresql"
id: test_sqlite_mysql_postgresql
if: $${{ always() }}
2022-11-04 12:56:02 +01:00
run: |
2023-10-23 00:18:38 +02:00
cargo test --features sqlite,mysql,postgresql
2022-07-19 19:13:54 +02:00
- name: "test features: sqlite"
id: test_sqlite
if: $${{ always() }}
2022-11-04 12:56:02 +01:00
run: |
2023-10-23 00:18:38 +02:00
cargo test --features sqlite
2022-07-19 19:13:54 +02:00
- name: "test features: mysql"
id: test_mysql
if: $${{ always() }}
2022-11-04 12:56:02 +01:00
run: |
2023-10-23 00:18:38 +02:00
cargo test --features mysql
2022-07-19 19:13:54 +02:00
- name: "test features: postgresql"
id: test_postgresql
if: $${{ always() }}
2022-11-04 12:56:02 +01:00
run: |
2023-10-23 00:18:38 +02:00
cargo test --features postgresql
2020-12-16 19:31:39 +01:00
# End Run cargo tests
2023-10-23 00:18:38 +02:00
# Run cargo clippy, and fail on warnings
2022-07-19 19:13:54 +02:00
- name: "clippy features: sqlite,mysql,postgresql,enable_mimalloc"
id: clippy
if: ${{ always() && matrix.channel == 'rust-toolchain' }}
2022-11-04 12:56:02 +01:00
run: |
2023-10-23 00:18:38 +02:00
cargo clippy --features sqlite,mysql,postgresql,enable_mimalloc -- -D warnings
2021-03-27 15:10:00 +00:00
# End Run cargo clippy
2022-07-19 19:13:54 +02: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 12:56:02 +01:00
run: |
cargo fmt --all -- --check
2021-03-28 16:48:45 +01:00
# End Run cargo fmt
2022-07-19 19:13:54 +02: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