Skip to content

[Do not merge] Test MacOS installation on CircleCI#280

Draft
vasdommes wants to merge 5 commits intomasterfrom
circleci-macos
Draft

[Do not merge] Test MacOS installation on CircleCI#280
vasdommes wants to merge 5 commits intomasterfrom
circleci-macos

Conversation

@vasdommes
Copy link
Collaborator

Description

This PR adds job build-test-macos to the CircleCI workflow.

It essentially reproduces updated Apple MacBook instructions from e65e666, i.e. installs dependencies via homebrew and then builds Elemental, MPSolve, and SDPB.

Why [Do not merge]?

TL;DR it's too expensive.

The job runs on m4pro.medium machine, the latest xcode version 26.1.1.
It takes about 11 minutes, see e.g. https://app.circleci.com/pipelines/github/davidsd/sdpb/464/workflows/8e3c997c-3ffb-403c-a37b-cec4250d5893/jobs/924

It slightly faster than other jobs (build-test-linux-arm64 and build-test-linux-amd64), but the problem is the credit usage:
Linux Large VMs (x86 and arm64) cost 20 credit/min, and M4 Pro Medium costs 200 credits/min.
See https://circleci.com/pricing/price-list/

According to Pricing FAQ,

Open source projects can access up to 400,000 credits per month (equivalent to 80,000 build minutes) to use on Linux, Arm, and Docker.
Open source Windows and macOS builds or private repositories can use the 30,000 credits offered in our free plan.

Which means that MacOS testing is too expensive: we'll run out of the monthly limit of credits in less that 15 pushes to SDPB repo.

So, the idea is to keep this branch around and occasionally merge master into it (updating installation commands accordingly) to check if MacOS build still works.

Potential optimization

Note that building SDPB takes only 1 minute and running tests - also 1 minute; the most expensive step is Elemental (7m20s).
So, if necessary, we could store prebuilt Elemental+MPSolve in persistent storage, and only compile SDPB each time. This way, each test would cost only 400 credits (similar to 20-minute x86 and ARM tests).

- Refactor integration_tests to use Boost.Process V2 when available (1.80+), fallback to V1 for older versions.
- Update waf-tools/boost.py, link to boost_process when necessary (i.e. V2)
- Also do not link to boost_system (it's header-only since 1.69, library stub removed since 1.89)
… images (alpine:3.18 + Boost 1.82)

Prior to Boost 1.86, V2 failed to compile on Alpine Linux (musl-libc)
See boostorg/process#376
@vasdommes vasdommes added this to the Backlog milestone Nov 20, 2025
@vasdommes vasdommes self-assigned this Nov 20, 2025
@vasdommes vasdommes marked this pull request as draft November 20, 2025 00:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant