summaryrefslogtreecommitdiffhomepage
path: root/.github/workflows/ios.yml
blob: 767790d9f192ff99bf4dfffb1019f04c6cc30153 (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
---
name: iOS app
on:
  pull_request:
    paths:
      - .github/workflows/ios.yml
      - ios/build-rust-library.sh
      - ios/.swiftformat
      - ios/**/*.swift
      - ios/**/*.xctestplan
  workflow_dispatch:

permissions: {}

jobs:
  check-formatting:
    name: Check formatting
    runs-on: macos-13
    steps:
      - name: Install SwiftFormat
        run: |
          brew update
          brew upgrade swiftformat

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

      - name: Check formatting
        run: |
          swiftformat --version
          swiftformat --lint .
        working-directory: ios

  swiftlint:
    name: Run swiftlint
    runs-on: macos-13
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Run swiftlint
        run: |
          brew install swiftlint
          swiftlint --version
          swiftlint --reporter github-actions-logging
        working-directory: ios

  test:
    name: Unit tests
    runs-on: macos-13-xlarge
    env:
      SOURCE_PACKAGES_PATH: .spm
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Configure cache
        uses: actions/cache@v3
        with:
          path: ios/${{ env.SOURCE_PACKAGES_PATH }}
          key: ${{ runner.os }}-spm-${{ hashFiles('ios/**/Package.resolved') }}
          restore-keys: |
            ${{ runner.os }}-spm-

      - name: Setup go-lang
        uses: actions/setup-go@v3
        with:
          go-version: 1.21.13

      - name: Install xcbeautify
        run: |
          brew update
          brew install xcbeautify

      - name: Install protobuf
        run: |
          brew update
          brew install protobuf

      - name: Set up yeetd to workaround XCode being slow in CI
        run: |
          wget https://github.com/biscuitehh/yeetd/releases/download/1.0/yeetd-normal.pkg
          sudo installer -pkg yeetd-normal.pkg -target /
          yeetd &
      - name: Configure Xcode
        uses: maxim-lobanov/setup-xcode@v1
        with:
          xcode-version: '15.0.1'
      - name: Configure Rust
        # Since the https://github.com/actions/runner-images/releases/tag/macos-13-arm64%2F20240721.1 release
        # Brew does not install tools at the correct location anymore
        # This update broke the rust build script which was assuming the cargo binary was located in ~/.cargo/bin/cargo
        # The workaround is to fix brew paths by running brew bundle dump, and then brew bundle
        # WARNING: This has to be the last brew "upgrade" commands that is ran,
        # otherwise the brew path will be broken again.
        run: |
          brew bundle dump
          brew bundle
          rustup default stable
          rustup update stable
          rustup target add aarch64-apple-ios-sim

      - name: Configure Xcode project
        run: |
          cp Base.xcconfig.template Base.xcconfig
          cp App.xcconfig.template App.xcconfig
          cp PacketTunnel.xcconfig.template PacketTunnel.xcconfig
          cp Screenshots.xcconfig.template Screenshots.xcconfig
          cp Api.xcconfig.template Api.xcconfig
        working-directory: ios/Configurations

      - name: Run unit tests
        run: |
          set -o pipefail && env NSUnbufferedIO=YES xcodebuild \
            -project MullvadVPN.xcodeproj \
            -scheme MullvadVPN \
            -testPlan MullvadVPNCI \
            -destination "platform=iOS Simulator,name=iPhone 15" \
            -clonedSourcePackagesDirPath "$SOURCE_PACKAGES_PATH" \
            -disableAutomaticPackageResolution \
            -resultBundlePath xcode-test-report \
            test 2>&1 | xcbeautify
        working-directory: ios/

      - name: Archive test report
        if: always()
        run: zip -r test-report.zip ios/xcode-test-report.xcresult

      - name: Store test report artifact
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-report
          path: test-report.zip