Skip to content
Latchkey

Run Sage CI for Linux workflow (pypa/setuptools)

The Run Sage CI for Linux workflow from pypa/setuptools, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get run de-duplication, job timeouts, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: pypa/setuptools.github/workflows/ci-sage.ymlLicense MITView source

What it does

This is the Run Sage CI for Linux workflow from the pypa/setuptools repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: Run Sage CI for Linux

## This GitHub Actions workflow provides:
##
##  - portability testing, by building and testing this project on many platforms
##
##  - continuous integration, by building and testing other software
##    that depends on this project.
##
## It runs on every push of a tag to the GitHub repository.
##
## The testing can be monitored in the "Actions" tab of the GitHub repository.
##
## After all jobs have finished (or are canceled) and a short delay,
## tar files of all logs are made available as "build artifacts".
##
## This GitHub Actions workflow uses the portability testing framework
## of SageMath (https://www.sagemath.org/).  For more information, see
## https://doc.sagemath.org/html/en/developer/portability_testing.html

## The workflow consists of two jobs:
##
##  - First, it builds a source distribution of the project
##    and generates a script "update-pkgs.sh".  It uploads them
##    as a build artifact named upstream.
##
##  - Second, it checks out a copy of the SageMath source tree.
##    It downloads the upstream artifact and replaces the project's
##    package in the SageMath distribution by the newly packaged one
##    from the upstream artifact, by running the script "update-pkgs.sh".
##    Then it builds a small portion of the Sage distribution.
##
## Many copies of the second step are run in parallel for each of the tested
## systems/configurations.

on:
  push:
    tags:
      - '*'
  pull_request:
    paths:
      - .github/workflows/ci-sage.yml
  workflow_dispatch:
    # Allow to run manually

permissions:
  contents: read

env:
  # Ubuntu packages to install so that the project's "setup.py sdist" can succeed
  DIST_PREREQ: python3
  # Name of this project in the Sage distribution
  SPKG:        setuptools

jobs:

  dist:
    runs-on: ubuntu-latest
    steps:
      - name: Check out ${{ env.SPKG }}
        uses: actions/checkout@v4
        with:
          path: build/pkgs/${{ env.SPKG }}/src
      - name: Install prerequisites
        run: |
          sudo DEBIAN_FRONTEND=noninteractive apt-get update
          sudo DEBIAN_FRONTEND=noninteractive apt-get install $DIST_PREREQ
          python3 -m pip install build
      - name: Run make dist, prepare upstream artifact
        run: |
          (cd build/pkgs/${{ env.SPKG }}/src && python3 -m build --sdist) \
          && mkdir -p upstream && cp build/pkgs/${{ env.SPKG }}/src/dist/*.tar.gz upstream/${{ env.SPKG }}-git.tar.gz \
          && echo "sage-package create ${{ env.SPKG }} --pypi --source normal --type standard; sage-package create ${{ env.SPKG }} --version git --tarball ${{ env.SPKG }}-git.tar.gz --type=standard" > upstream/update-pkgs.sh \
          && if [ -n "${{ env.REMOVE_PATCHES }}" ]; then echo "(cd ../build/pkgs/${{ env.SPKG }}/patches && rm -f ${{ env.REMOVE_PATCHES }}; :)" >> upstream/update-pkgs.sh; fi \
          && ls -l upstream/
      - uses: actions/upload-artifact@v3
        with:
          path: upstream
          name: upstream

  linux:
    # https://github.com/sagemath/sage/blob/develop/.github/workflows/docker.yml
    uses: sagemath/sage/.github/workflows/docker.yml@develop
    with:
      # Sage distribution packages to build
      targets: setuptools pyzmq
      # Standard setting: Test the current beta release of Sage:
      sage_repo: sagemath/sage
      sage_ref: develop
      upstream_artifact: upstream
      # We prefix the image name with the SPKG name ("setuptools-") to avoid the error
      # 'Package "sage-docker-..." is already associated with another repository.'
      docker_push_repository: ghcr.io/${{ github.repository }}/setuptools-
    needs: [dist]

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

name: Run Sage CI for Linux
 
## This GitHub Actions workflow provides:
##
##  - portability testing, by building and testing this project on many platforms
##
##  - continuous integration, by building and testing other software
##    that depends on this project.
##
## It runs on every push of a tag to the GitHub repository.
##
## The testing can be monitored in the "Actions" tab of the GitHub repository.
##
## After all jobs have finished (or are canceled) and a short delay,
## tar files of all logs are made available as "build artifacts".
##
## This GitHub Actions workflow uses the portability testing framework
## of SageMath (https://www.sagemath.org/).  For more information, see
## https://doc.sagemath.org/html/en/developer/portability_testing.html
 
## The workflow consists of two jobs:
##
##  - First, it builds a source distribution of the project
##    and generates a script "update-pkgs.sh".  It uploads them
##    as a build artifact named upstream.
##
##  - Second, it checks out a copy of the SageMath source tree.
##    It downloads the upstream artifact and replaces the project's
##    package in the SageMath distribution by the newly packaged one
##    from the upstream artifact, by running the script "update-pkgs.sh".
##    Then it builds a small portion of the Sage distribution.
##
## Many copies of the second step are run in parallel for each of the tested
## systems/configurations.
 
on:
  push:
    tags:
      - '*'
  pull_request:
    paths:
      - .github/workflows/ci-sage.yml
  workflow_dispatch:
    # Allow to run manually
 
permissions:
  contents: read
 
env:
  # Ubuntu packages to install so that the project's "setup.py sdist" can succeed
  DIST_PREREQ: python3
  # Name of this project in the Sage distribution
  SPKG:        setuptools
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
 
  dist:
    timeout-minutes: 30
    runs-on: latchkey-small
    steps:
      - name: Check out ${{ env.SPKG }}
        uses: actions/checkout@v4
        with:
          path: build/pkgs/${{ env.SPKG }}/src
      - name: Install prerequisites
        run: |
          sudo DEBIAN_FRONTEND=noninteractive apt-get update
          sudo DEBIAN_FRONTEND=noninteractive apt-get install $DIST_PREREQ
          python3 -m pip install build
      - name: Run make dist, prepare upstream artifact
        run: |
          (cd build/pkgs/${{ env.SPKG }}/src && python3 -m build --sdist) \
          && mkdir -p upstream && cp build/pkgs/${{ env.SPKG }}/src/dist/*.tar.gz upstream/${{ env.SPKG }}-git.tar.gz \
          && echo "sage-package create ${{ env.SPKG }} --pypi --source normal --type standard; sage-package create ${{ env.SPKG }} --version git --tarball ${{ env.SPKG }}-git.tar.gz --type=standard" > upstream/update-pkgs.sh \
          && if [ -n "${{ env.REMOVE_PATCHES }}" ]; then echo "(cd ../build/pkgs/${{ env.SPKG }}/patches && rm -f ${{ env.REMOVE_PATCHES }}; :)" >> upstream/update-pkgs.sh; fi \
          && ls -l upstream/
      - uses: actions/upload-artifact@v3
        with:
          path: upstream
          name: upstream
 
  linux:
    timeout-minutes: 30
    # https://github.com/sagemath/sage/blob/develop/.github/workflows/docker.yml
    uses: sagemath/sage/.github/workflows/docker.yml@develop
    with:
      # Sage distribution packages to build
      targets: setuptools pyzmq
      # Standard setting: Test the current beta release of Sage:
      sage_repo: sagemath/sage
      sage_ref: develop
      upstream_artifact: upstream
      # We prefix the image name with the SPKG name ("setuptools-") to avoid the error
      # 'Package "sage-docker-..." is already associated with another repository.'
      docker_push_repository: ghcr.io/${{ github.repository }}/setuptools-
    needs: [dist]
 

What changed

1 third-party action is referenced by a movable tag. Pin it to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 2 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow