aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: bcb1638147d709eff3795c71931458bd6228f00f (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
name: Build

on:
  push:
  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/**"

jobs:
  build:
    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"
            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:
          # - target-triple: x86_64-unknown-linux-musl
          #   host-triple: x86_64-unknown-linux-gnu
          #   features: "sqlite,postgresql"
          #   channel: nightly
          #   os: ubuntu-18.04
          #   ext:
          # - target-triple: x86_64-unknown-linux-musl
          #   host-triple: x86_64-unknown-linux-gnu
          #   features: "sqlite,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)
      - name: '`cargo test --release --features ${{ matrix.features }} --target ${{ matrix.target-triple }}`'
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --release --features ${{ matrix.features }} --target ${{ matrix.target-triple }}
      # End Run cargo tests


      # Run cargo clippy (In release mode to speed up future builds)
      - name: '`cargo clippy --release --features ${{ matrix.features }} --target ${{ matrix.target-triple }}`'
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --release --features ${{ matrix.features }} --target ${{ matrix.target-triple }}
      # 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 ${{ matrix.features }} --target ${{ matrix.target-triple }}`'
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --release --features ${{ 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