Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate PyPI release to GitHub Actions #679

Merged
merged 12 commits into from
Nov 6, 2020
65 changes: 65 additions & 0 deletions .github/workflows/publish-to-pypi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Publish archives to PyPI and TestPyPI using GitHub Actions

name: Publish to PyPI

# Only run for pushes to the master branch and releases.
on:
push:
branches:
- master
release:
types:
- published
# Runs for pull requests should be disable unless for testing purposes
pull_request:
branches:
- master
seisman marked this conversation as resolved.
Show resolved Hide resolved

jobs:
publish-pypi:
name: Publish to PyPI
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v2.3.4
with:
# fecth all history so that versioneer works
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8

- name: Install dependencies
run: python -m pip install setuptools wheel

- name: Fix up version string
run: |
# Change the versioneer format to "pre" so that the commit hash isn't
# included (PyPI doesn't allow it). Can't do this permanently because
# we rely on the hash to tell the tests that this is a local version
# instead of a published version.
#
# The step is only necessary for testing purpose
sed --in-place "s/pep440/pep440-pre/g" setup.cfg

- name: Build source and wheel distributions
run: |
python setup.py sdist bdist_wheel
echo ""
echo "Generated files:"
ls -lh dist/

- name: Publish to Test PyPI
uses: pypa/gh-action-pypi-publish@v1.4.1
with:
password: ${{ secrets.test_pypi_password }}
repository_url: https://test.pypi.org/legacy/
seisman marked this conversation as resolved.
Show resolved Hide resolved

- name: Publish to PyPI
if: startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@v1.4.1
with:
password: ${{ secrets.pypi_password }}
8 changes: 0 additions & 8 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ env:
# Encrypted variables
# GitHub Token for pushing the built docs (GH_TOKEN)
- secure: "QII0477v0mmCCW3qSNXLCOtqraJaCICtSghiyrxYsuUdJTrXzXBNhX2KLIjcKYXOK1HdwYOFGf8xBVLl44clHlAW7R32ecEGeTJizr0yqTBvT3rNG1Xb7+E6jdXqrIs//PmPRaF8zOZxPl1SJKDK4jJpCx5HnAflg7wl/6tQLD6K3/dQ6FG2s3UKsc8o4qchOiEfxYhOuKo3jt2S0HdsNAQFw3mFHCCrclxDr3llSQtWSY0mirZnta7AI4nMvzxl2nUhdHEpxgzIjWxCWLAwmj3/NxLz0VSgNCtl2bNYk6AYrc5RcANGk2fcYaZr9mTU3Aax60S4389B39Pq95hBN21jYdbw9vCN810dYpTUk2siLysx8gF6r2JWEF8SskXlF79r3phtaFTMOS4GqeiuwjifZeaLAL/H1PTQFDDG/UKEwBpLuzrPMDw/84iRtyWKqWR/f14YdKhH4YAkcOuRglEXiI/1A0qWKiZ1iZfky8Tys+wN5nyss23w/JeYXVgBdTkNzvp3diFWK8+Wl9j3HYpX9LlEHJwASA1wHLL85t4ToymgLjo9gvLvwzB7T+fWNtEbh4ELbvI7jaKrvir8uSGYy4bGbfRclh5CktD//mTLhDyAsQDS8obF/Ri9mVqFzjK6417ORfu8qnpXU+mIHPRBoKvpS2WqnPtSwF8KPv8="
# TWINE_PASSWORD to deploy to PyPI
- secure: "md4fgPt9RC/sCoN5//5PcNHLUd9gWQGewV5hFpWW88MRTjxTng1Zfs8r7SqlF2AkEEepFfyzq0BEe9c3FMAnFbec3KmqdlQen4V8xDbLrcTlvkPlTrYGbAScUvdhhqojB//hMHoTD4KvxAv9CiUwFBO4hCMmj2buWHUbV9Ksu5WCW9mF/gkt/hIuYAU6Mbwt8PiYyMgUpzMHO1vruofcWRaVnvKwmBqHB0ae86D4/drpwn4CWjlM12WUnphT2bssiyPkw24FZtCN6kPVta6bLZKBxu0bZpw2vbXuUG+Yh19Q4mp8wNYT3XSHJf8Hl5LfujF48+cLWu+6rlCkdcelyVylhWLFc3rGOONAv4G8jWW2yNSz/bLQfJnMpd81fQEu5eySmFxB7mdB0uyKpvIG1jMJQ73LlYKakKLAPdYhMFyQAHoX9gvCE3S4QR95DBMi5gM/pZubOCcMLdjPHB5JKpJHSjxbOzyVwgmsUIEgd5Bi2vZvvYQXn1plk4xpQ3PhXc+/gi33bzY89mKcfOn0HJ2pD1vLqDXRCBsMCakoLZ0JB/6bacaz4FngbsGWuQ+I1cz20lJGL/MSi9bW1G7Uoidt3GXXWDmXrWt70vIXlLIxr8XV0Mu/rPbauGgWE+ZSYEfvdM5sP+FNF7vQ5de+Fkvzg5Z3tTfR+O1W+d7+vM4="
- TWINE_USERNAME=Leonardo.Uieda
# The file with the listed requirements to be installed by conda
- CONDA_REQUIREMENTS=requirements.txt
Expand Down Expand Up @@ -60,12 +58,6 @@ script:
- make -C doc all

deploy:
# Make a release on PyPI
- provider: script
script: continuous-integration/travis/deploy-pypi.sh
on:
tags: true
condition: '$DEPLOY == "true"'
# Push the built HTML in doc/_build/html to the gh-pages branch
- provider: script
script: continuous-integration/travis/deploy-gh-pages.sh
Expand Down
12 changes: 9 additions & 3 deletions MAINTENANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ conda and the `Makefile` to run the tests and checks.

### GitHub Actions

There are 3 configuration files located in `.github/workflows`:
There are 4 configuration files located in `.github/workflows`:

1. `ci_tests.yaml` (Style Checks, Tests on Linux/macOS/Windows)

Expand All @@ -65,14 +65,20 @@ This is scheduled to run every Sunday at 12 noon.
If new remote files are needed urgently, maintainers can manually uncomment
the 'pull_request:' line in that `cache_data.yaml` file to refresh the cache.

4. `publish-to-pypi.yml` (Publish archives to PyPI and TestPyPI)

This workflow is ran to publish archives to PyPI and TestPyPI (for testing only).
Archives will be pushed to TestPyPI for every commit on the *master* branch and
tagged releases, and to PyPI for tagged releases only.
seisman marked this conversation as resolved.
Show resolved Hide resolved


### Travis CI

The configuration file is at `.travis.yml`.
Travis runs tests (Linux only) and handles all of our deployments automatically:
Travis runs tests (Linux only) and handles the documentation deployment automatically:

* Updating the development documentation by pushing the built HTML pages from the
*master* branch onto the `dev` folder of the *gh-pages* branch.
* Uploading new releases to PyPI (only when the build was triggered by a git tag).
* Updated the `latest` documentation link to the new release.

This way, most day-to-day maintenance operations are automatic.
Expand Down