| name: macOS | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| - master | |
| - release/* | |
| pull_request: | |
| # labeled: the "🚀 ready to merge" label starts the full set (see below) | |
| types: [opened, synchronize, reopened, labeled] | |
| # Skip pull requests that change only files no job here reads. The list is checked by | |
| # tools/check_path_filters/check_path_filters.py (repository_checks.yml); change both together. | |
| paths: | |
| - '**' | |
| - '!docs/**' | |
| - '!**.md' | |
| - '!.github/*' | |
| - '!.github/ISSUE_TEMPLATE/**' | |
| - '!.github/external_ci/**' | |
| - '!.github/workflows/**' | |
| - '!.reuse/**' | |
| - '!LICENSES/**' | |
| - '!CITATION.cff' | |
| - '!REUSE.toml' | |
| # read by tools/check_build_options in the ci_meson_install job (ubuntu.yml) | |
| - 'docs/mkdocs/docs/integration/package_managers.md' | |
| # built by the swiftpm job (macos.yml) | |
| - 'docs/mkdocs/docs/integration/swift/**' | |
| - '.github/workflows/macos.yml' | |
| workflow_dispatch: | |
| # A run triggered by any other label gets a group of its own, so it does not | |
| # cancel the run of the last push; its jobs are skipped. | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event_name == 'schedule' && 'nightly' || github.ref || github.run_id }}${{ github.event.action == 'labeled' && github.event.label.name != '🚀 ready to merge' && format('-{0}', github.run_id) || '' }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| # The jobs are split into a PR set and a full set like in ubuntu.yml (see "How | |
| # CI runs" in docs/mkdocs/docs/community/quality_assurance.md): the PR set runs | |
| # on every push; the full set after the PR set passed, on pushes and on pull | |
| # requests with the "🚀 ready to merge" label. tools/ci_jobs checks that every | |
| # job belongs to exactly one set. | |
| jobs: | |
| ########################################################################### | |
| # PR set | |
| ########################################################################### | |
| macos-15: | |
| if: &pr_set ${{ github.event_name != 'schedule' && (github.event.action != 'labeled' || github.event.label.name == '🚀 ready to merge') }} | |
| runs-on: macos-15 # https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md | |
| strategy: | |
| matrix: | |
| xcode: ['16.0', '16.4', '26.3'] | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer | |
| steps: &xcode_steps | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Run CMake | |
| run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON | |
| - name: Build | |
| run: cmake --build build --parallel 10 | |
| - name: Test | |
| run: cd build ; ctest -j 10 --output-on-failure | |
| macos-26: | |
| if: *pr_set | |
| runs-on: macos-26 # https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md | |
| strategy: | |
| matrix: | |
| xcode: ['26.6'] | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Run CMake | |
| run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_FastTests=ON | |
| - name: Build | |
| run: cmake --build build --parallel 10 | |
| - name: Test | |
| run: cd build ; ctest -j 10 --output-on-failure | |
| xcode_standards: | |
| if: *pr_set | |
| runs-on: macos-latest | |
| strategy: | |
| matrix: | |
| standard: [14] | |
| steps: &xcode_standards_steps | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Run CMake | |
| run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug -DJSON_BuildTests=On -DJSON_TestStandards=${{ matrix.standard }} | |
| - name: Build | |
| run: cmake --build build --parallel 10 | |
| - name: Test | |
| run: cd build ; ctest -j 10 --output-on-failure | |
| swiftpm: | |
| if: *pr_set | |
| runs-on: macos-15 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Check that Package.swift resolves without a deprecation warning | |
| run: swift package dump-package | |
| - name: Build the SwiftPM documentation example against this checkout | |
| run: | | |
| mkdir -p /tmp/json-swiftpm-consumer/Sources/MyLibrary | |
| cp docs/mkdocs/docs/integration/swift/example.cpp /tmp/json-swiftpm-consumer/Sources/MyLibrary/example.cpp | |
| cat > /tmp/json-swiftpm-consumer/Package.swift << EOF | |
| // swift-tools-version: 5.9 | |
| import PackageDescription | |
| let package = Package( | |
| name: "MyPackage", | |
| dependencies: [ | |
| .package(path: "${{ github.workspace }}") | |
| ], | |
| targets: [ | |
| .target( | |
| name: "MyLibrary", | |
| dependencies: [ | |
| .product(name: "json", package: "json") | |
| ], | |
| publicHeadersPath: "." | |
| ) | |
| ] | |
| ) | |
| EOF | |
| cd /tmp/json-swiftpm-consumer | |
| swift build | |
| ########################################################################### | |
| # full set: starts after the PR set passed | |
| ########################################################################### | |
| macos-15_full: | |
| needs: &pr_set_jobs [macos-15, macos-26, xcode_standards, swiftpm] | |
| if: &full_set ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, '🚀 ready to merge') }} | |
| runs-on: macos-15 # https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md | |
| strategy: | |
| matrix: | |
| xcode: ['16.1', '16.2', '16.3', '26.0.1', '26.1.1', '26.2'] | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer | |
| steps: *xcode_steps | |
| macos-26_full: | |
| needs: *pr_set_jobs | |
| if: *full_set | |
| runs-on: macos-26 # https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md | |
| strategy: | |
| matrix: | |
| xcode: ['26.4.1', '26.5'] | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer | |
| steps: *xcode_steps | |
| xcode_standards_full: | |
| needs: *pr_set_jobs | |
| if: *full_set | |
| runs-on: macos-latest | |
| strategy: | |
| matrix: | |
| standard: [11, 17, 20, 23, 26] | |
| steps: *xcode_standards_steps |