aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/macos.yml
blob: 449504096a77546a00aad79297cbef9e3b104f87 (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
name: macos

concurrency:
  group: macos-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

on:
  push:
    branches:
      - master
      # Stable branches such as 0.56 or 1.0
      - '[0-9]+.[0-9]+'
    paths:
      - "mesonbuild/**"
      - "test cases/**"
      - "unittests/**"
      - ".github/workflows/macos.yml"
      - "run*tests.py"
  pull_request:
    paths:
      - "mesonbuild/**"
      - "test cases/**"
      - "unittests/**"
      - ".github/workflows/macos.yml"
      - "run*tests.py"

permissions:
  contents: read

jobs:
  unittests-appleclang:
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v4
      with:
        python-version: '3.x'
    - run: |
        python -m pip install --upgrade pip
        python -m pip install pytest pytest-xdist pytest-subtests fastjsonschema coverage
    - run: brew install pkg-config ninja llvm qt@5
    - env:
        CPPFLAGS: "-I/opt/homebrew/include"
        LDFLAGS: "-L/opt/homebrew/lib"
        MESON_CI_JOBNAME: unittests-appleclang
        MESON_UNIT_TEST_BACKEND: ninja
        HOMEBREW_NO_AUTO_UPDATE: 1
        # These cannot evaluate anything, so we cannot set PATH or SDKROOT here
      run: |
        export SDKROOT="$(xcodebuild -version -sdk macosx Path)"
        export PATH="$HOME/tools:/opt/homebrew/opt/qt@5/bin:/opt/homebrew/opt/llvm/bin:$PATH"
        export PKG_CONFIG_PATH="/opt/homebrew/opt/qt@5/lib/pkgconfig:$PKG_CONFIG_PATH"
        ./tools/run_with_cov.py ./run_unittests.py

    - name: Aggregate coverage reports
      run: ./ci/combine_cov.sh

    - name: Upload coverage report
      uses: codecov/codecov-action@v3
      with:
        files: .coverage/coverage.xml
        name: "appleclang [unit tests]"
        fail_ci_if_error: false
        verbose: true


  project-tests-appleclang:
    runs-on: macos-latest
    strategy:
      fail-fast: false
      matrix:
        include:
        - NAME: macos-clang
          unity: off
        - NAME: macos-clang-unity
          unity: on

    name: ${{ matrix.NAME }}
    env:
      MESON_CI_JOBNAME: ${{ matrix.NAME }}
      HOMEBREW_NO_AUTO_UPDATE: 1

    steps:
    - uses: actions/checkout@v3
    # Avoid picking up an older version of LLVM that does not work.
    - run: brew update
    # github actions overwrites brew's python. Force it to reassert itself, by running in a separate step.
    - name: unbreak python in github actions
      run: |
        find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
        sudo rm -rf /Library/Frameworks/Python.framework/
        brew install --force python3 && brew unlink python3 && brew unlink python3 && brew link --overwrite python3
        # Delete nonsensical PEP 668 breakage. It is the wrong solution to the problem and isn't designed to be
        # productive -- only victim blaming -- however it bites particularly badly because this is a container/VM
        # See commit 5c479d7a13a518c18ccb4dc3b6bdd7bfc2a9bdb5 for a more thorough analysis.
        find /opt/homebrew/Cellar/python* -name EXTERNALLY-MANAGED -print0 | xargs -0 rm -vf
    # use python3 from homebrew because it is a valid framework, unlike the actions one:
    # https://github.com/actions/setup-python/issues/58
    - run: brew install pkg-config ninja llvm qt@5 boost ldc hdf5 openmpi lapack scalapack sdl2 boost-python3 gtk-doc zstd ncurses objfw
    - run: |
        python3 -m pip install --upgrade setuptools
        python3 -m pip install --upgrade pip
        python3 -m pip install cython coverage
    - env:
        CPPFLAGS: "-I/opt/homebrew/include"
        LDFLAGS: "-L/opt/homebrew/lib"
        MESON_ARGS: --unity=${{ matrix.unity }}
        XML_CATALOG_FILES: "/opt/homebrew/etc/xml/catalog"
        CI: 1
        # These cannot evaluate anything, so we cannot set PATH or SDKROOT here
      run: |
        export SDKROOT="$(xcodebuild -version -sdk macosx Path)"
        export PATH="$HOME/tools:/opt/homebrew/opt/qt@5/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/ncurses/bin:$PATH"
        export PKG_CONFIG_PATH="/opt/homebrew/opt/qt@5/lib/pkgconfig:/opt/homebrew/opt/lapack/lib/pkgconfig:/opt/homebrew/opt/ncurses/lib/pkgconfig:$PKG_CONFIG_PATH"
        ./tools/run_with_cov.py ./run_project_tests.py --backend=ninja

    - name: Aggregate coverage reports
      run: ./ci/combine_cov.sh

    - name: Upload coverage report
      uses: codecov/codecov-action@v3
      with:
        files: .coverage/coverage.xml
        name: "appleclang [project tests; unity=${{ matrix.unity }}]"
        fail_ci_if_error: false
        verbose: true

  Qt4macos:
    # This job only works on Intel Macs, because OpenSSL 1.0 doesn't build on
    # Apple ARM
    runs-on: macos-13
    env:
      HOMEBREW_NO_AUTO_UPDATE: 1
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v4
      with:
        python-version: '3.x'
    - run: python -m pip install -e .
    - run: brew install pkg-config ninja gcc
    - run: brew tap cartr/qt4
    - run: brew install qt@4
    - run: brew link qt@4
      # qt4 tap seems to be broken
    - run: ln -sfn /usr/local/Cellar/qt@4/4.8.7_6.reinstall /usr/local/Cellar/qt@4/4.8.7_6
    - run: meson setup "test cases/frameworks/4 qt" build -Drequired=qt4
    - run: meson compile -C build
    - uses: actions/upload-artifact@v3
      if: failure()
      with:
        name: Qt4_Mac_build
        path: build/meson-logs/meson-log.txt
    - run: meson test -C build -v
    - uses: actions/upload-artifact@v3
      if: failure()
      with:
        name: Qt4_Mac_test
        path: build/meson-logs/testlog.txt