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

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@v2
        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 }} --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@v2
        with:
          path: upstream
          name: upstream

  linux:
    # https://github.com/sagemath/sage/blob/develop/.github/workflows/docker.yml
    # Use branch of ticket https://trac.sagemath.org/ticket/33288
    uses: sagemath/sagetrac-mirror/.github/workflows/docker.yml@u/mkoeppe/setuptools_ci_target
    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
      sage_trac_git: https://github.com/sagemath/sagetrac-mirror.git
      # Test with the branch from https://trac.sagemath.org/ticket/33288
      # This may provide hotfixes for the CI that have not been merged into
      # the sage develop branch yet.
      sage_trac_ticket: 33288
      # 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]
