aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: 26fcb6632b9aee10cb5f0111db5b9371e00e4c07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
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