summaryrefslogtreecommitdiffhomepage
path: root/.github/workflows/daemon.yml
blob: c295f9fb520797cb39619ceaf84ff135fb71e7d2 (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
---
name: Daemon+CLI - Build and test
on:
  pull_request:
    paths:
      - "**"
      - "!**/**.md"
      - "!.github/workflows/**"
      - ".github/workflows/daemon.yml"
      - "!.github/CODEOWNERS"
      - "!android/**"
      - 'android/translations-converter/**'
      - "!audits/**"
      - "!build.sh"
      - "!ci/**"
      - "ci/cargo-ci.sh"
      - "!clippy.toml"
      - "!deny.toml"
      - "!docs/**"
      - "!graphics/**"
      - "!desktop/**"
      - "!ios/**"
      - "!scripts/**"
      - "!.*ignore"
      - "!prepare-release.sh"
      - "!rustfmt.toml"
      - "!.yamllint"
      - "!**/osv-scanner.toml"

  workflow_dispatch:
    inputs:
      override_container_image:
        description: Override container image
        type: string
        required: false

permissions: {}

jobs:
  prepare-linux:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Use custom container image if specified
        if: ${{ github.event.inputs.override_container_image != '' }}
        run:
          echo "inner_container_image=${{ github.event.inputs.override_container_image }}"
          >> $GITHUB_ENV

      - name: Use default container image and resolve digest
        if: ${{ github.event.inputs.override_container_image == '' }}
        run: echo "inner_container_image=$(cat ./building/linux-container-image.txt)" >> $GITHUB_ENV

    outputs:
      container_image: ${{ env.inner_container_image }}

  build-linux:
    needs: prepare-linux
    runs-on: ubuntu-latest
    container:
      image: ${{ needs.prepare-linux.outputs.container_image }}

    strategy:
      matrix:
        rust: [stable, beta, nightly]
    continue-on-error: true
    steps:
      # Fix for HOME path overridden by GH runners when building in containers, see:
      # https://github.com/actions/runner/issues/863
      - name: Fix HOME path
        run: echo "HOME=/root" >> $GITHUB_ENV

      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Checkout submodules
        run: |
          git config --global --add safe.directory '*'
          git submodule update --init --depth=1 dist-assets/binaries
          git submodule update --init wireguard-go-rs/libwg/wireguard-go

      # The container image already has rustup and the pinned version of Rust
      - name: Install Rust toolchain
        # When running this job for "stable" test against our pinned rust version
        # instead of the stable channel.
        # TODO: Improve this so both "stable" and the pinned version are tested if
        # they differ.
        if: ${{ matrix.rust != 'stable' }}
        run: rustup override set ${{ matrix.rust }}

      - name: Setup Rust cache
        uses: Swatinem/rust-cache@v2
        with:
          add-job-id-key: "false" # Preserve cache across jobs
          cache-targets: "false" # Only cache cargo registry

      - name: Test crates
        run: ci/cargo-ci.sh test --workspace

  build-macos:
    runs-on: macos-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - uses: ./.github/actions/mullvad-build-env

      - name: Test crates
        run: ci/cargo-ci.sh test --workspace

  build-windows:
    strategy:
      # Even if onw of the Windows jobs fail, the other should not be cancelled.
      fail-fast: false
      matrix:
        config:
          - os: windows-latest
            arch: x64
          - os: windows-11-arm
            arch: arm64
    runs-on: ${{ matrix.config.os }}
    steps:
      # By default, the longest path a filename can have in git on Windows is 260 character.
      - name: Set git config for long paths
        run: |
          git config --system core.longpaths true

      - name: Checkout repository
        uses: actions/checkout@v4

      - uses: ./.github/actions/mullvad-build-env
        with:
          rust-cache-targets: "true"

      - name: Build Windows modules (x86_64)
        if: ${{ matrix.config.arch == 'x64' }}
        shell: bash
        run: ./build-windows-modules.sh build winfw

      - name: Build Windows modules (ARM64)
        if: ${{ matrix.config.arch == 'arm64' }}
        shell: bash
        # By default, ./build-windows-modules.sh will use 4 concurrent processes during compilation
        # because the Windows 11 ARM runner has 4 cores:
        # https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job#standard-github-hosted-runners-for-public-repositories
        #
        # Cap the number of concurrent processes to something less than 4 to avoid OOM issues.
        run: ./build-windows-modules.sh --max-concurrent-processes 2 build winfw

      # Excluding windows-installer because it builds an actual full installer
      # at the build step, which is not desired in a CI environment. Instead
      # we just `cargo check` it below.
      - name: Test crates
        shell: bash
        run: ci/cargo-ci.sh test --workspace  --exclude windows-installer