Merge pull request #64 from honzatomek/bugfix/element_solid_strain #97
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
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.9 or 3.12 fail, all workflows | |
# are terminated to save computing resources. | |
fail-fast: true | |
# To safe runtime least and latest version supported are | |
# chosen. For more info see the pyproject.toml | |
matrix: | |
python-version: ["3.9", "3.12"] | |
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 |