name: Build on: push: paths-ignore: - "*.md" - "*.txt" - ".dockerignore" - ".env.template" - ".gitattributes" - ".gitignore" - "azure-pipelines.yml" - "docker/**" - "hooks/**" - "tools/**" - ".github/FUNDING.yml" - ".github/ISSUE_TEMPLATE/**" - ".github/security-contact.gif" pull_request: # Ignore when there are only changes done too one of these paths paths-ignore: - "*.md" - "*.txt" - ".dockerignore" - ".env.template" - ".gitattributes" - ".gitignore" - "azure-pipelines.yml" - "docker/**" - "hooks/**" - "tools/**" - ".github/FUNDING.yml" - ".github/ISSUE_TEMPLATE/**" - ".github/security-contact.gif" jobs: build: # 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: - nightly # - stable target-triple: - x86_64-unknown-linux-gnu # - x86_64-unknown-linux-musl include: - target-triple: x86_64-unknown-linux-gnu host-triple: x86_64-unknown-linux-gnu features: [sqlite,mysql,postgresql] # Remember to update the `cargo test` to match the amount of features channel: nightly os: ubuntu-18.04 ext: "" # - target-triple: x86_64-unknown-linux-gnu # host-triple: x86_64-unknown-linux-gnu # features: "sqlite,mysql,postgresql" # channel: stable # os: ubuntu-18.04 # ext: "" name: Building ${{ matrix.channel }}-${{ matrix.target-triple }} runs-on: ${{ matrix.os }} steps: # Checkout the repo - name: Checkout uses: actions/checkout@v2 # 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' ) # End Install dependencies # Enable Rust Caching - uses: Swatinem/rust-cache@v1 # End Enable Rust Caching # Uses the rust-toolchain file to determine version - name: 'Install ${{ matrix.channel }}-${{ matrix.host-triple }} for target: ${{ matrix.target-triple }}' uses: actions-rs/toolchain@v1 with: profile: minimal target: ${{ matrix.target-triple }} components: clippy, rustfmt # End Uses the rust-toolchain file to determine version # 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 }}`" uses: actions-rs/cargo@v1 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 }}`" uses: actions-rs/cargo@v1 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 }}`" uses: actions-rs/cargo@v1 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 }}`" uses: actions-rs/cargo@v1 with: command: test args: --release --features ${{ matrix.features[2] }} --target ${{ matrix.target-triple }} if: ${{ matrix.features[2] != '' }} # 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 }}`" uses: actions-rs/cargo@v1 with: command: clippy args: --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }} -- -D warnings # End Run cargo clippy # Run cargo fmt - name: '`cargo fmt`' uses: actions-rs/cargo@v1 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 }}`" uses: actions-rs/cargo@v1 with: command: build args: --release --features ${{ join(matrix.features, ',') }} --target ${{ matrix.target-triple }} # End Build the binary # Upload artifact to Github Actions - name: Upload artifact uses: actions/upload-artifact@v2 with: name: vaultwarden-${{ matrix.target-triple }}${{ matrix.ext }} path: target/${{ matrix.target-triple }}/release/vaultwarden${{ matrix.ext }} # End Upload artifact to Github Actions ## This is not used at the moment ## We could start using this when we can build static binaries # Upload to github actions release # - name: Release # uses: Shopify/upload-to-release@1 # if: startsWith(github.ref, 'refs/tags/') # with: # name: vaultwarden-${{ matrix.target-triple }}${{ matrix.ext }} # path: target/${{ matrix.target-triple }}/release/vaultwarden${{ matrix.ext }} # repo-token: ${{ secrets.GITHUB_TOKEN }} # End Upload to github actions release