diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index 7c0d22118c0..76d915be2c9 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -1,246 +1,91 @@ name: CI Linux -## This GitHub Actions workflow runs SAGE_ROOT/tox.ini with select environments, -## whenever a GitHub pull request is opened or synchronized in a repository -## where GitHub Actions are enabled. -## -## It builds and checks some sage spkgs as defined in TARGETS. -## -## A job succeeds if there is no error. -## -## The build is run with "make V=0", so the build logs of individual packages are suppressed. -## -## At the end, all package build logs that contain an error are printed out. -## -## After all jobs have finished (or are canceled) and a short delay, -## tar files of all logs are made available as "build artifacts". - -#on: [push, pull_request] - on: push: - tags: - - '*' + # TODO: Reenable this before merging + # tags: + # - '*' workflow_dispatch: # Allow to run manually -env: - TARGETS_PRE: all-sage-local - TARGETS: build doc-html - TARGETS_OPTIONAL: ptest - -permissions: - packages: write - jobs: - - # standard-pre and standard (without ptest) for the default platform (used by build.yml etc.) - default: - uses: ./.github/workflows/docker.yml - with: - # Build from scratch - docker_targets: "with-system-packages configured with-targets-pre with-targets" - # FIXME: duplicated from env.TARGETS - targets_pre: all-sage-local - targets: build doc-html - targets_optional: ptest - tox_system_factors: >- - ["ubuntu-focal"] - tox_packages_factors: >- - ["standard"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - - # All platforms. This duplicates the default platform, but why not, - # it makes it more robust regarding random timeouts. - - standard-pre: - if: ${{ success() || failure() }} - uses: ./.github/workflows/docker.yml - with: - # Build from scratch - docker_targets: "with-system-packages configured with-targets-pre" - # FIXME: duplicated from env.TARGETS - targets_pre: all-sage-local - tox_packages_factors: >- - ["standard"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - # Make sure that all "standard-pre" jobs can start simultaneously, - # so that runners are available by the time that "default" starts. - max_parallel: 50 - - standard: - if: ${{ success() || failure() }} - needs: [standard-pre] - uses: ./.github/workflows/docker.yml - with: - # Build incrementally from previous stage (pre) - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - docker_targets: "with-targets with-targets-optional" - # FIXME: duplicated from env.TARGETS - targets: build doc-html - targets_optional: ptest - tox_packages_factors: >- - ["standard"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - # Reduce from 30 to 20 because it runs in parallel with 'standard-sitepackages' - # and 'minimal-pre' below - max_parallel: 20 - - standard-sitepackages: - if: ${{ success() || failure() }} - needs: [standard-pre] - uses: ./.github/workflows/docker.yml - with: - # Build incrementally from previous stage (pre) - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - docker_targets: "with-targets with-targets-optional" - # FIXME: duplicated from env.TARGETS - targets: build doc-html - targets_optional: ptest - tox_packages_factors: >- - ["standard-sitepackages"] - # Only test systems with a usable system python (>= 3.9) - tox_system_factors: >- - ["ubuntu-jammy", - "ubuntu-lunar", - "ubuntu-mantic", - "debian-bullseye", - "debian-bookworm", - "debian-trixie", - "debian-sid", - "linuxmint-21", - "linuxmint-21.1", - "linuxmint-21.2", - "fedora-33", - "fedora-34", - "fedora-35", - "fedora-36", - "fedora-37", - "fedora-38", - "fedora-39", - "centos-stream-8-python3.9", - "centos-stream-9-python3.9", - "almalinux-8-python3.9", - "gentoo-python3.10", - "gentoo-python3.11", - "archlinux-latest", - "opensuse-15.4-gcc_11-python3.10", - "opensuse-15.5-gcc_11-python3.11", - "opensuse-tumbleweed-python3.10", - "opensuse-tumbleweed", - "debian-bullseye-i386"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - max_parallel: 8 - - minimal-pre: - if: ${{ success() || failure() }} - uses: ./.github/workflows/docker.yml - with: - # Build from scratch - docker_targets: "with-system-packages configured with-targets-pre" - # FIXME: duplicated from env.TARGETS - targets_pre: all-sage-local - tox_packages_factors: >- - ["minimal"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - # Reduced from 30 because it may run in parallel with 'standard' and 'standard-sitepackages' above. - # Calibrated for clogging the job pipeline until the "default" job has finished. - max_parallel: 24 - - minimal: - if: ${{ success() || failure() }} - needs: [minimal-pre] - uses: ./.github/workflows/docker.yml - with: - # Build incrementally from previous stage (pre) - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - docker_targets: "with-targets with-targets-optional" - # FIXME: duplicated from env.TARGETS - targets: build doc-html - targets_optional: ptest - tox_packages_factors: >- - ["minimal"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - max_parallel: 24 - - maximal-pre: - if: ${{ success() || failure() }} - needs: [minimal] - uses: ./.github/workflows/docker.yml - with: - free_disk_space: true - # Build from scratch - docker_targets: "with-system-packages configured with-targets-pre" - # FIXME: duplicated from env.TARGETS - targets_pre: all-sage-local - tox_packages_factors: >- - ["maximal"] - docker_push_repository: ghcr.io/${{ github.repository }}/ - - optional-0-o: - if: ${{ success() || failure() }} - needs: [maximal-pre] - uses: ./.github/workflows/docker.yml - with: - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - tox_packages_factors: >- - ["maximal"] - docker_targets: "with-targets-optional" - # [0-9a-o] excludes _, in particular package _develop - 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 ^[0-9a-o]))' - - - optional-p-z: - if: ${{ success() || failure() }} - needs: [optional-0-o] - uses: ./.github/workflows/docker.yml - with: - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - tox_packages_factors: >- - ["maximal"] - docker_targets: "with-targets-optional" - # [0-9a-o] excludes _, in particular package _develop - 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 ^[p-z]))' - - experimental-0-o: - if: ${{ success() || failure() }} - needs: [optional-p-z] - uses: ./.github/workflows/docker.yml - with: - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - tox_packages_factors: >- - ["maximal"] - docker_targets: "with-targets-optional" - 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 ^[0-9a-o]))' - - experimental-p-z: - if: ${{ success() || failure() }} - needs: [experimental-0-o] - uses: ./.github/workflows/docker.yml - with: - incremental: true - free_disk_space: true - from_docker_repository: ghcr.io/${{ github.repository }}/ - from_docker_target: "with-targets-pre" - tox_packages_factors: >- - ["maximal"] - docker_targets: "with-targets-optional" - 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 ^[p-z]))' + build: + runs-on: ubuntu-latest + strategy: + matrix: + container: + - ubuntu-trusty-toolchain-gcc_9 + - ubuntu-xenial-toolchain-gcc_9 + - ubuntu-bionic-gcc_8 + - ubuntu-focal + - ubuntu-jammy + - ubuntu-lunar + - ubuntu-mantic + - debian-buster-gcc_spkg + - debian-bullseye + - debian-bookworm + - debian-trixie + - debian-sid + - linuxmint-20.1 + - linuxmint-20.2 + - linuxmint-20.3 + - linuxmint-21 + - linuxmint-21.1 + - linuxmint-21.2 + - fedora-30 + - fedora-31 + - fedora-32 + - fedora-33 + - fedora-34 + - fedora-35 + - fedora-36 + - fedora-37 + - fedora-38 + - fedora-39 + - centos-7-devtoolset-gcc_11 + - centos-stream-8-python3.9 + - centos-stream-9-python3.9 + - almalinux-8-python3.9 + - almalinux-9-python3.11 + - sheerluck/sage-on-gentoo-stage4 + - archlinux-latest + - opensuse-15.3-gcc_11-python3.9 + - opensuse-15.4-gcc_11-python3.10 + - opensuse-15.5-gcc_11-python3.11 + - opensuse/tumbleweed + - ubuntu-bionic-gcc_8-i386 + - debian-bullseye-i386 + container: + image: ${{ matrix.container }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Check for Python version + run: | + echo "install_python=$(python -c 'import sys; print(sys.version_info < (3, 9))'" >> $GITHUB_ENV + + - name: Setup Python + uses: actions/setup-python@v2 + if: ${{ env.install_python }} + with: + python-version: 3.9 + + - name: Install dependencies + run: | + eval $(build/bin/sage-print-system-package-command auto update) + eval $(build/bin/sage-print-system-package-command auto --yes install $(build/bin/sage-get-system-packages auto $(build/bin/sage-package list :standard:))) + + - name: Bootstrap + run: python -m sage_setup.autogen.interpreters src/sage/ext/interpreters + env: + PYTHONPATH: src + + - name: Build + run: pip install --no-build-isolation --config-settings=builddir=builddir . -v + + - name: Test + allow_failure: true + run: ./sage -t --all -p4 + \ No newline at end of file diff --git a/build/bin/sage-package b/build/bin/sage-package index 02a07140875..1d4cf8f8b25 100755 --- a/build/bin/sage-package +++ b/build/bin/sage-package @@ -1,4 +1,4 @@ -#!/usr/bin/env sage-bootstrap-python +#!/usr/bin/env python # Script to manage third-party tarballs. #