Skip to content

FloPy 3.9.1

FloPy 3.9.1 #73

Workflow file for this run

name: FloPy release
on:
push:
branches:
- master
- v[0-9]+.[0-9]+.[0-9]+*
release:
types:
- published
jobs:
prep:
name: Prepare release
runs-on: ubuntu-latest
if: ${{ github.event_name == 'push' && github.ref_name != 'master' }}
permissions:
contents: write
defaults:
run:
shell: bash
steps:
- name: Checkout release branch
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.9
cache: 'pip'
cache-dependency-path: pyproject.toml
- name: Install Python dependencies
run: |
pip install --upgrade pip
pip install build twine
pip install .
pip install ".[lint, test, optional]"
- name: Install MODFLOW
run: |
mkdir -p ~/.local/bin
get-modflow ~/.local/bin
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update FloPy version
id: version
run: |
# extract version from branch name
ref="${{ github.ref_name }}"
ver="${ref#"v"}"
# update version files
if [[ "$ver" == *"rc"* ]]; then
python scripts/update_version.py -v "${ver%"rc"}"
else
python scripts/update_version.py -v "$ver"
fi
# show version and set output
python -c "import flopy; print(f'FloPy version: {flopy.__version__}')"
echo "version=${ver#"v"}" >> $GITHUB_OUTPUT
- name: Lint and format Python files
run: |
ruff check . --fix
ruff format .
- name: Run tests
working-directory: autotest
run: pytest -v -m="not example and not regression" -n=auto --durations=0 --keep-failed=.failed --dist loadfile
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload failed test outputs
uses: actions/upload-artifact@v4
if: failure()
with:
name: failed-${{ matrix.os }}-${{ matrix.python-version }}
path: |
./autotest/.failed/**
- name: Generate changelog
id: cliff
uses: orhun/git-cliff-action@v4
with:
config: cliff.toml
args: --verbose --unreleased --tag ${{ steps.version.outputs.version }}
env:
OUTPUT: CHANGELOG.md
- name: Update changelog
run: |
# substitute full group names
sed -i 's/#### Ci/#### Continuous integration/' CHANGELOG.md
sed -i 's/#### Feat/#### New features/' CHANGELOG.md
sed -i 's/#### Fix/#### Bug fixes/' CHANGELOG.md
sed -i 's/#### Refactor/#### Refactoring/' CHANGELOG.md
sed -i 's/#### Test/#### Testing/' CHANGELOG.md
# prepend release changelog to cumulative changelog
clog=".docs/md/version_changes.md"
temp="version_changes.md"
echo "$(tail -n +2 $clog)" > $clog
cat CHANGELOG.md $clog > $temp
sudo mv $temp $clog
sed -i '1i # Changelog' $clog
- name: Upload changelog
uses: actions/upload-artifact@v4
with:
name: changelog
path: CHANGELOG.md
- name: Push release branch
run: |
rm CHANGELOG.md
git config core.sharedRepository true
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add flopy docs .docs CITATION.cff README.md version.txt
git commit -m "ci(release): set version to ${{ steps.version.outputs.version }}, update plugins from DFN files, update changelog"
git push origin "${{ github.ref_name }}"
pr:
name: Draft release PR
needs: prep
if: ${{ github.event_name == 'push' && !(contains(github.ref_name, 'rc')) }}
runs-on: ubuntu-22.04
permissions:
contents: write
pull-requests: write
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout release branch
uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
- name: Draft pull request
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
ref="${{ github.ref_name }}"
ver="${ref#"v"}"
title="Release $ver"
body='
# FloPy '$ver'
The release can be approved by merging this pull request into `master`. This will trigger a final job to publish the release to PyPI.
'
gh pr create -B "master" -H "$ref" --title "$title" --draft --body "$body"
release:
name: Draft release
# runs only when changes are merged to master
if: ${{ github.event_name == 'push' && github.ref_name == 'master' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout master branch
uses: actions/checkout@v4
with:
ref: master
# actions/download-artifact won't look at previous workflow runs but we need to in order to get changelog
- name: Download artifacts
uses: dawidd6/action-download-artifact@v7
- name: Draft release
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
version=$(cat version.txt)
title="FloPy $version"
notes=$(cat changelog/CHANGELOG.md)
gh release create "$version" \
--target master \
--title "$title" \
--notes "$notes" \
--draft \
--latest
publish:
name: Publish package
# runs only after release is published (manually promoted from draft)
if: ${{ github.event_name == 'release' }}
runs-on: ubuntu-22.04
permissions:
contents: write
pull-requests: write
id-token: write # mandatory for trusted publishing
environment: # requires a 'release' environment in repo settings
name: release
url: https://pypi.org/p/flopy
steps:
- name: Checkout master branch
uses: actions/checkout@v4
with:
ref: master
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.9
cache: 'pip'
cache-dependency-path: pyproject.toml
- name: Install Python dependencies
run: |
pip install --upgrade pip
pip install build twine
pip install .
pip install ".[lint, test, optional]"
- name: Build package
run: python -m build
- name: Check package
run: twine check --strict dist/*
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: dist
path: dist
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1