forked from sagemath/sage
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
.github/workflows/ci-macos.yml: Factor through new reusable workflow …
…macos.yml
- Loading branch information
Showing
3 changed files
with
153 additions
and
82 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
name: Reusable workflow for macOS portability CI | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
targets_pre: | ||
default: build/make/Makefile | ||
type: string | ||
targets: | ||
default: build/make/Makefile | ||
type: string | ||
targets_optional: | ||
default: build/make/Makefile | ||
type: string | ||
osversion_xcodeversion_toxenv_tuples: | ||
description: 'Stringified JSON object' | ||
default: >- | ||
[["latest", "", "homebrew-macos-usrlocal-minimal"], | ||
["latest", "", "homebrew-macos-usrlocal-standard"], | ||
["11", "11.7", "homebrew-macos-usrlocal-standard"], | ||
["12", "", "homebrew-macos-usrlocal-standard"], | ||
["13", "15.0", "homebrew-macos-usrlocal-standard"], | ||
["latest", "", "homebrew-macos-usrlocal-maximal"], | ||
["latest", "", "homebrew-macos-usrlocal-python3_xcode-standard"], | ||
["latest", "", "conda-forge-macos-minimal"], | ||
["latest", "", "conda-forge-macos-standard"], | ||
["latest", "", "conda-forge-macos-maximal"]] | ||
extra_sage_packages: | ||
description: 'Extra Sage packages to install as system packages' | ||
type: string | ||
default: "" | ||
max_parallel: | ||
type: number | ||
default: 10 | ||
free_disk_space: | ||
default: false | ||
type: boolean | ||
# | ||
# For use in upstream CIs. | ||
# | ||
upstream_artifact: | ||
required: false | ||
type: string | ||
sage_repo: | ||
required: false | ||
type: string | ||
sage_ref: | ||
required: false | ||
type: string | ||
|
||
jobs: | ||
local-macos: | ||
|
||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
osversion_xcodeversion_toxenv: ${{ fromJson(inputs.osversion_xcodeversion_toxenv_tuples) }} | ||
stage: ["1", "2", "2-optional-0-o", "2-optional-p-z", "2-experimental-0-o", "2-experimental-p-z"] | ||
env: | ||
TOX_ENV: local-${{ matrix.osversion_xcodeversion_toxenv[2] }}-xcode_${{ matrix.osversion_xcodeversion_toxenv[1] }} | ||
LOCAL_ARTIFACT_NAME: sage-local-commit-${{ github.sha }}-tox-local-${{ matrix.osversion_xcodeversion_toxenv[2] }}-macos-${{ matrix.osversion_xcodeversion_toxenv[0] }}-xcode_${{ matrix.osversion_xcodeversion_toxenv[1] }} | ||
LOGS_ARTIFACT_NAME: logs-commit-${{ github.sha }}-tox-local-${{ matrix.osversion_xcodeversion_toxenv[2] }}-macos-${{ matrix.osversion_xcodeversion_toxenv[0] }}-xcode_${{ matrix.osversion_xcodeversion_toxenv[1] }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install test prerequisites | ||
run: | | ||
brew install tox | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
path: sage-local-artifact | ||
name: ${{ env.LOCAL_ARTIFACT_NAME }} | ||
if: contains(matrix.stage, '2') | ||
- name: Extract sage-local artifact | ||
# This is macOS tar -- cannot use --listed-incremental | ||
run: | | ||
export SAGE_LOCAL=$(pwd)/.tox/$TOX_ENV/local | ||
.github/workflows/extract-sage-local.sh sage-local-artifact/sage-local-*.tar | ||
if: contains(matrix.stage, '2') | ||
- name: Build and test with tox | ||
# We use a high parallelization on purpose in order to catch possible parallelization bugs in the build scripts. | ||
# For doctesting, we use a lower parallelization to avoid timeouts. | ||
run: | | ||
case "${{ matrix.stage }}" in | ||
1) export TARGETS_PRE="all-sage-local" TARGETS="all-sage-local" TARGETS_OPTIONAL="build/make/Makefile" | ||
;; | ||
2) export TARGETS_PRE="all-sage-local" TARGETS="build doc-html" TARGETS_OPTIONAL="ptest" | ||
;; | ||
2-optional*) export TARGETS_PRE="build/make/Makefile" TARGETS="build/make/Makefile" | ||
targets_pattern="${{ matrix.stage }}" | ||
targets_pattern="${targets_pattern#2-optional-}" | ||
export TARGETS_OPTIONAL=$( echo $(export PATH=build/bin:$PATH && sage-package list :optional: --has-file 'spkg-install.in|spkg-install|requirements.txt' --no-file huge|has_nonfree_dependencies | grep -v sagemath_doc | grep "^[$targets_pattern]" ) ) | ||
;; | ||
2-experimental*) export TARGETS_PRE="build/make/Makefile" TARGETS="build/make/Makefile" | ||
targets_pattern="${{ matrix.stage }}" | ||
targets_pattern="${targets_pattern#2-experimental-}" | ||
export TARGETS_OPTIONAL=$( echo $(export PATH=build/bin:$PATH && sage-package list :experimental: --has-file 'spkg-install.in|spkg-install|requirements.txt' --no-file huge|has_nonfree_dependencies | grep -v sagemath_doc | grep "^[$targets_pattern]" ) ) | ||
;; | ||
esac | ||
MAKE="make -j12" tox -e $TOX_ENV -- SAGE_NUM_THREADS=4 $TARGETS | ||
- name: Prepare logs artifact | ||
run: | | ||
mkdir -p "artifacts/$LOGS_ARTIFACT_NAME"; cp -r .tox/*/log "artifacts/$LOGS_ARTIFACT_NAME" | ||
if: always() | ||
- uses: actions/upload-artifact@v3 | ||
with: | ||
path: artifacts | ||
name: ${{ env.LOGS_ARTIFACT_NAME }} | ||
if: always() | ||
- name: Print out logs for immediate inspection | ||
# and markup the output with GitHub Actions logging commands | ||
run: | | ||
.github/workflows/scan-logs.sh "artifacts/$LOGS_ARTIFACT_NAME" | ||
if: always() | ||
- name: Prepare sage-local artifact | ||
# This also includes the copies of homebrew or conda installed in the tox environment. | ||
# We use absolute pathnames in the tar file. | ||
# This is macOS tar -- cannot use --remove-files. | ||
# We remove the $SAGE_LOCAL/lib64 link, which will be recreated by the next stage. | ||
run: | | ||
mkdir -p sage-local-artifact && (cd .tox/$TOX_ENV && rm -f "local/lib64" && tar -cf - $(pwd)) > sage-local-artifact/sage-${{ env.TOX_ENV }}-${{ matrix.stage }}.tar | ||
if: contains(matrix.stage, '1') | ||
- uses: actions/upload-artifact@v3 | ||
with: | ||
path: sage-local-artifact/sage-${{ env.TOX_ENV }}-${{ matrix.stage }}.tar | ||
name: ${{ env.LOCAL_ARTIFACT_NAME }} | ||
if: always() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters