forked from sympy/sympy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'sympy:master' into master
- Loading branch information
Showing
1,292 changed files
with
73,099 additions
and
31,300 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,171 @@ | ||
name: Run Sage CI | ||
|
||
## 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. | ||
## | ||
## 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: | ||
branches: | ||
- master | ||
# match release branches - https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet | ||
- '[0-9]+.[0-9]+' | ||
workflow_dispatch: | ||
# Allow to run manually | ||
|
||
env: | ||
# Ubuntu packages to install so that the project's "make dist" can succeed | ||
DIST_PREREQ: python3-setuptools | ||
# Name of this project in the Sage distribution | ||
SPKG: sympy | ||
# Sage distribution packages to build | ||
TARGETS_PRE: build/make/Makefile | ||
TARGETS: SAGE_CHECK=no SAGE_CHECK_PACKAGES=sympy build ptest | ||
TARGETS_OPTIONAL: build/make/Makefile | ||
# Standard setting: Test the current beta release of Sage: | ||
SAGE_REPO: sagemath/sage | ||
SAGE_REF: develop | ||
# Uncomment to temporarily test with the branch from a sage ticket | ||
# (this is a no-op after that ticket is merged) | ||
SAGE_TRAC_GIT: https://github.com/sagemath/sagetrac-mirror.git | ||
SAGE_TICKET: 32420 | ||
REMOVE_PATCHES: "*" | ||
|
||
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 | ||
- name: Run make dist, prepare upstream artifact | ||
run: | | ||
(cd build/pkgs/${{ env.SPKG }}/src && python3 setup.py 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 | ||
|
||
docker: | ||
runs-on: ubuntu-latest | ||
needs: [dist] | ||
strategy: | ||
fail-fast: false | ||
max-parallel: 32 | ||
matrix: | ||
# debian-buster uses system python 3.7 | ||
# archlinux-latest is at the cutting edge | ||
tox_system_factor: [debian-buster, archlinux-latest] | ||
# "standard" installs lots of system packages, reducing the full build and test of the | ||
# Sage distribution to 3-4 hours | ||
tox_packages_factor: [standard] | ||
env: | ||
TOX_ENV: docker-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }} | ||
LOGS_ARTIFACT_NAME: logs-commit-${{ github.sha }}-tox-docker-${{ matrix.tox_system_factor }}-${{ matrix.tox_packages_factor }} | ||
DOCKER_TARGETS: configured with-targets with-targets-optional | ||
steps: | ||
- name: Check out SageMath | ||
uses: actions/checkout@v2 | ||
with: | ||
repository: ${{ env.SAGE_REPO }} | ||
ref: ${{ env.SAGE_REF }} | ||
fetch-depth: 2000 | ||
if: env.SAGE_REPO != '' | ||
- name: Check out git-trac-command | ||
uses: actions/checkout@v2 | ||
with: | ||
repository: sagemath/git-trac-command | ||
path: git-trac-command | ||
if: env.SAGE_TRAC_GIT != '' | ||
- name: Check out SageMath from trac.sagemath.org | ||
shell: bash {0} | ||
run: | | ||
git config --global user.email "[email protected]" | ||
git config --global user.name "ci-sage workflow" | ||
if [ ! -d .git ]; then git init; fi; git remote add trac ${{ env.SAGE_TRAC_GIT }} && x=1 && while [ $x -le 5 ]; do x=$(( $x + 1 )); sleep $(( $RANDOM % 60 + 1 )); if git-trac-command/git-trac fetch $SAGE_TICKET; then git merge FETCH_HEAD || echo "(ignored)"; exit 0; fi; sleep 40; done; exit 1 | ||
if: env.SAGE_TRAC_GIT != '' | ||
- uses: actions/download-artifact@v2 | ||
with: | ||
path: upstream | ||
name: upstream | ||
- name: Install test prerequisites | ||
run: | | ||
sudo DEBIAN_FRONTEND=noninteractive apt-get update | ||
sudo DEBIAN_FRONTEND=noninteractive apt-get install tox python3-setuptools | ||
- name: Update Sage packages from upstream artifact | ||
run: | | ||
(export PATH=$(pwd)/build/bin:$PATH; (cd upstream && bash -x update-pkgs.sh) && sed -i.bak '/upstream/d' .dockerignore && echo "/:toolchain:/i ADD upstream upstream" | sed -i.bak -f - build/bin/write-dockerfile.sh && git diff) | ||
- name: Configure and build Sage distribution within a Docker container | ||
run: | | ||
set -o pipefail; EXTRA_DOCKER_BUILD_ARGS="--build-arg USE_MAKEFLAGS=\"-k V=0 SAGE_NUM_THREADS=3\"" tox -e $TOX_ENV -- $TARGETS 2>&1 | sed "/^configure: notice:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: warning:/s|^|::warning file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;/^configure: error:/s|^|::error file=artifacts/$LOGS_ARTIFACT_NAME/config.log::|;" | ||
- name: Copy logs from the Docker image or build container | ||
run: | | ||
mkdir -p "artifacts/$LOGS_ARTIFACT_NAME" | ||
cp -r .tox/$TOX_ENV/Dockerfile .tox/$TOX_ENV/log "artifacts/$LOGS_ARTIFACT_NAME" | ||
if [ -f .tox/$TOX_ENV/Dockertags ]; then CONTAINERS=$(docker create $(tail -1 .tox/$TOX_ENV/Dockertags) /bin/bash || true); fi | ||
if [ -n "$CONTAINERS" ]; then for CONTAINER in $CONTAINERS; do for ARTIFACT in /sage/logs; do docker cp $CONTAINER:$ARTIFACT artifacts/$LOGS_ARTIFACT_NAME && HAVE_LOG=1; done; if [ -n "$HAVE_LOG" ]; then break; fi; done; fi | ||
if: always() | ||
- uses: actions/upload-artifact@v2 | ||
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: Push Docker images | ||
run: | | ||
if [ -f .tox/$TOX_ENV/Dockertags ]; then | ||
TOKEN="${{ secrets.DOCKER_PKG_GITHUB_TOKEN }}" | ||
if [ -z "$TOKEN" ]; then | ||
TOKEN="${{ secrets.GITHUB_TOKEN }}" | ||
fi | ||
echo "$TOKEN" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin | ||
for a in $(cat .tox/$TOX_ENV/Dockertags); do | ||
FULL_TAG=docker.pkg.github.com/$(echo ${{ github.repository }}|tr 'A-Z' 'a-z')/$a | ||
docker tag $a $FULL_TAG | ||
echo Pushing $FULL_TAG | ||
docker push $FULL_TAG | ||
done || echo "(Ignoring errors)" | ||
fi | ||
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
# ------------------------------------------------------------------ # | ||
# # | ||
# SymPy CI script to comment on a PR # | ||
# # | ||
# Runs after the main tests are complete and reports results. # | ||
# # | ||
# ------------------------------------------------------------------ # | ||
|
||
name: Report CI results to PR | ||
|
||
on: | ||
workflow_run: | ||
# test is the name given for the workflow in runtests.yml | ||
workflows: ["test"] | ||
types: [completed] | ||
|
||
jobs: | ||
comment-on-pr: | ||
runs-on: ubuntu-latest | ||
# Only run if the tests passed: | ||
if: ${{ github.event.workflow_run.conclusion == 'success' }} | ||
steps: | ||
|
||
# The previous workflow stored the issue number for the PR. We need it | ||
# here to be able to comment on the PR | ||
|
||
- name: Download benchmarks | ||
uses: dawidd6/action-download-artifact@v2 | ||
with: | ||
workflow: runtests.yml | ||
workflow_conclusion: success | ||
name: pr_number | ||
|
||
- name: Read the PR number | ||
id: pr_number_reader | ||
uses: juliangruber/[email protected] | ||
with: | ||
path: pr_number.txt | ||
|
||
# This may be running after a push with no associated PR in which case | ||
# the PR number variable is empty. All further steps will be skipped in | ||
# that case. | ||
|
||
# Retrieve benchmark results | ||
|
||
- name: Download benchmarks | ||
if: ${{ steps.pr_number_reader.outputs.content != '' }} | ||
uses: dawidd6/action-download-artifact@v2 | ||
with: | ||
workflow: runtests.yml | ||
workflow_conclusion: success | ||
name: benchmarks | ||
|
||
- name: Read benchmark output 1 | ||
if: ${{ steps.pr_number_reader.outputs.content != '' }} | ||
id: pr_vs_master_changed | ||
uses: juliangruber/[email protected] | ||
with: | ||
path: pr_vs_master_changed.txt | ||
|
||
- name: Read benchmark output 2 | ||
if: ${{ steps.pr_number_reader.outputs.content != '' }} | ||
id: master_vs_release_changed | ||
uses: juliangruber/[email protected] | ||
with: | ||
path: master_vs_release_changed.txt | ||
|
||
# The two steps below should create a new comment or update the | ||
# existing comment (edit-mode: replace). Note that the opening line of | ||
# the comment body is matched by body-includes so if that does not | ||
# match then a new comment will always be created. | ||
|
||
- name: Find Comment | ||
if: ${{ steps.pr_number_reader.outputs.content != '' }} | ||
uses: peter-evans/find-comment@v1 | ||
id: fc | ||
with: | ||
issue-number: ${{ steps.pr_number_reader.outputs.content }} | ||
comment-author: 'github-actions[bot]' | ||
body-includes: Benchmark results from GitHub Actions | ||
|
||
- name: Create or update comment | ||
if: ${{ steps.pr_number_reader.outputs.content != '' }} | ||
uses: peter-evans/create-or-update-comment@v1 | ||
with: | ||
comment-id: ${{ steps.fc.outputs.comment-id }} | ||
issue-number: ${{ steps.pr_number_reader.outputs.content }} | ||
body: | | ||
Benchmark results from GitHub Actions | ||
Lower numbers are good, higher numbers are bad. A ratio less than 1 | ||
means a speed up and greater than 1 means a slowdown. Green lines | ||
beginning with `+` are slowdowns (the PR is slower then master or | ||
master is slower than the previous release). Red lines beginning | ||
with `-` are speedups. | ||
Significantly changed benchmark results (PR vs master) | ||
```diff | ||
${{ steps.pr_vs_master_changed.outputs.content }} | ||
``` | ||
Significantly changed benchmark results (master vs previous release) | ||
```diff | ||
${{ steps.master_vs_release_changed.outputs.content }} | ||
``` | ||
Full benchmark results can be found as artifacts in GitHub Actions | ||
(click on checks at the top of the PR). | ||
edit-mode: replace |
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,79 @@ | ||
# ------------------------------------------------------------------ # | ||
# # | ||
# SymPy CI script for Github Actions # | ||
# # | ||
# Run on the release branch and builds the release artifacts. # | ||
# # | ||
# ------------------------------------------------------------------ # | ||
|
||
name: release | ||
on: | ||
push: | ||
branches: | ||
- '1.10' | ||
pull_request: | ||
branches: | ||
- '1.10' | ||
env: | ||
release_branch: '1.10' | ||
release_version: '1.10rc1' | ||
previous_version: '1.9' | ||
|
||
jobs: | ||
|
||
# -------------------- Build artifacts --------------------------- # | ||
|
||
build: | ||
|
||
runs-on: ubuntu-20.04 | ||
steps: | ||
# Check out with full git history for authors check: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- name: Setup Python | ||
uses: actions/setup-python@v3 | ||
with: | ||
python-version: '3.9' | ||
|
||
- name: Build release files | ||
run: release/ci_release_script.sh ${{ env.release_version }} ${{ env.previous_version }} | ||
|
||
- name: Store release files | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: release_files | ||
path: release-${{ env.release_version }} | ||
|
||
# -------------------- Test installation ------------------------- # | ||
|
||
test-install: | ||
needs: [build] | ||
|
||
runs-on: ubuntu-20.04 | ||
strategy: | ||
matrix: | ||
python-version: ['3.7', '3.8', '3.9', '3.10', 'pypy-3.8'] | ||
|
||
name: Python ${{ matrix.python-version }} test install | ||
steps: | ||
- name: Setup python | ||
uses: actions/setup-python@v3 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
architecture: x64 | ||
|
||
- name: Retrieve release files | ||
uses: actions/download-artifact@v2 | ||
with: | ||
name: release_files | ||
|
||
- name: List files | ||
run: ls -R | ||
|
||
- name: Install wheel | ||
run: pip install sympy-${{ env.release_version }}-py3-none-any.whl | ||
|
||
- name: Run tests after install | ||
run: python -c 'import sympy; sympy.test()' |
Oops, something went wrong.