| name: Reusable macOS | |
| on: | |
| workflow_call: | |
| inputs: | |
| free-threading: | |
| required: false | |
| type: boolean | |
| default: false | |
| os: | |
| description: OS to run the job | |
| required: true | |
| type: string | |
| permissions: | |
| contents: read | |
| env: | |
| FORCE_COLOR: 1 | |
| jobs: | |
| build-macos: | |
| name: build and test (${{ inputs.os }}) | |
| runs-on: ${{ inputs.os }} | |
| timeout-minutes: 60 | |
| env: | |
| HOMEBREW_NO_ANALYTICS: 1 | |
| HOMEBREW_NO_AUTO_UPDATE: 1 | |
| HOMEBREW_NO_INSTALL_CLEANUP: 1 | |
| HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 | |
| PYTHONSTRICTEXTENSIONBUILD: 1 | |
| TERM: linux | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Runner image version | |
| run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV" | |
| - name: Install Homebrew dependencies | |
| run: | | |
| brew bundle --file=Misc/Brewfile | |
| brew install make | |
| - name: Configure CPython | |
| run: | | |
| MACOSX_DEPLOYMENT_TARGET=10.15 \ | |
| GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \ | |
| GDBM_LIBS="-L$(brew --prefix gdbm)/lib -lgdbm" \ | |
| ./configure \ | |
| --config-cache \ | |
| --with-pydebug \ | |
| --enable-slower-safety \ | |
| --enable-safety \ | |
| ${{ inputs.free-threading && '--disable-gil' || '' }} \ | |
| --prefix=/opt/python-dev \ | |
| --with-openssl="$(brew --prefix openssl@3.5)" | |
| - name: Build CPython | |
| if : ${{ inputs.free-threading || inputs.os != 'macos-26-intel' }} | |
| run: gmake -j8 | |
| - name: Build CPython for compiler warning check | |
| if : ${{ !inputs.free-threading && inputs.os == 'macos-26-intel' }} | |
| run: set -o pipefail; gmake -j8 --output-sync 2>&1 | tee compiler_output_macos.txt | |
| - name: Display build info | |
| run: make pythoninfo | |
| - name: Check compiler warnings | |
| if : ${{ !inputs.free-threading && inputs.os == 'macos-26-intel' }} | |
| run: >- | |
| python3 Tools/build/check_warnings.py | |
| --compiler-output-file-path=compiler_output_macos.txt | |
| --warning-ignore-file-path=Tools/build/.warningignore_macos | |
| --compiler-output-type=clang | |
| --fail-on-regression | |
| --fail-on-improvement | |
| --path-prefix="./" | |
| - name: Tests | |
| run: make ci |