Skip to content

Regenerate lock file #79

Regenerate lock file

Regenerate lock file #79

Workflow file for this run

name: Python Linting, Test and Upload
on:
push:
pull_request:
workflow_dispatch:
jobs:
# JOB
# This job runs unit tests, linting and format checks
tests:
runs-on: ubuntu-latest
strategy:
# If either the tests for 3.8 or 3.11 fail all workflows
# are terminated to safe computing resources.
fail-fast: true
# To safe runtime least and latest version supported are
# chosen. We go for 3.8 due to some dependencies. For more
# info see the pyproject.toml
matrix:
python-version: ["3.8", "3.11"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install Task
run: |
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d
# Cache dependencies from poetry to speed things up
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
- name: Install and upgrade pip and poetry
run: python -m pip install --upgrade pip poetry
- name: Install Dependencies
run: ./bin/task setup
- name: Lint code
run: ./bin/task lint
- name: Test code
run: ./bin/task test
# JOB
# This job publishes the package to test-pipy.
test-publish:
# Will run after the job 'tests'
needs: [tests]
if: >
startsWith(github.ref, 'refs/tags/') ||
startsWith(github.ref, 'refs/heads/release/')
runs-on: ubuntu-latest
# Required for installation of the test package in the
# next job.
outputs:
version: ${{ steps.extract_version.outputs.version }}
steps:
- uses: actions/checkout@v3
- name: Remember version
id: extract_version
run: |
VERSION=$(cat pyproject.toml | grep -oE -m 1 "version = \"(.*)\"" | cut -f2 -d '"')
echo "Version: ${VERSION}"
echo "version=${VERSION}" >> $GITHUB_OUTPUT
# For publishing any version will do
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install Task
run: |
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
- name: Install Dependencies
run: |
python -m pip install --upgrade pip poetry
./bin/task setup
- name: Build packages for release
run: ./bin/task build
- name: Publish distribution to Test PyPI
env:
TWINE_REPOSITORY_URL: https://test.pypi.org/legacy/
TWINE_USERNAME: __token__
TWINE_NON_INTERACTIVE: 1
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
run: poetry run twine upload --skip-existing --verbose 'dist/*'
# JOB
# Test install from pypi to see if we have any installation bugs.
test-install:
needs: [test-publish]
if: >
startsWith(github.ref, 'refs/tags/') ||
startsWith(github.ref, 'refs/heads/release/')
runs-on: ubuntu-latest
# Use the version from the previous job
env:
VERSION: ${{ needs.test-publish.outputs.version }}
steps:
# Install python (be aware NO checkout action)
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
# Check if it installs without errors
- name: Install package
run: |
python -m pip install \
--index-url https://test.pypi.org/simple/ \
--extra-index-url https://pypi.org/simple \
lasso-python=="${VERSION}"
# We run the D3plot import here as it is the most delicate piece of the
# package for importing C-libraries.
- name: Test if the installed package works
run: python -c 'from lasso.dyna import D3plot'
# JOB
# Finally publish the code to pypi
publish:
needs: [test-install]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# We need the entire git history for building the docs
with:
fetch-depth: 0
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install Task
run: |
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
- name: Install Dependencies
run: |
python -m pip install --upgrade poetry pip
./bin/task setup
- name: Build packages for release
run: ./bin/task build
# Not required but this saves the distribution files
# with the package upload for debugging purposes.
- name: Save packages as artifacts
uses: actions/upload-artifact@v2
with:
name: dist
path: dist
if-no-files-found: error
- name: Publish distribution to PyPI
env:
TWINE_USERNAME: __token__
TWINE_NON_INTERACTIVE: 1
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: poetry run twine upload --skip-existing --verbose 'dist/*'
- name: Upload new docs
# We run a git pull first to ensure the runner has the latest pages
# branch. It did fail because of it in the past.
run: |
git pull origin gh-pages --rebase
./bin/task docs:deploy