fix(binary file): Was writing binary file information twice to extern… #22
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: 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@v3 | |
with: | |
fetch-depth: 0 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
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" --approve | |
fi | |
# show version and set output | |
python -c "import flopy; print(f'FloPy version: {flopy.__version__}')" | |
echo "version=${ver#"v"}" >> $GITHUB_OUTPUT | |
- name: Update FloPy packages | |
run: python -c 'import flopy; flopy.mf6.utils.generate_classes(branch="master", backup=False)' | |
- name: Lint Python files | |
run: python scripts/pull_request_prepare.py | |
- name: Run tests | |
working-directory: autotest | |
run: pytest -v -m="not example and not regression" -n=auto --durations=0 --keep-failed=.failed | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload failed test outputs | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: failed-${{ matrix.os }}-${{ matrix.python-version }} | |
path: | | |
./autotest/.failed/** | |
- name: Run notebooks | |
working-directory: scripts | |
run: python run_notebooks.py | |
- name: Generate changelog | |
id: cliff | |
uses: orhun/git-cliff-action@v2 | |
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 changelog to docs/version_changes.md | |
cat CHANGELOG.md docs/version_changes.md > version_changes.md | |
sudo mv version_changes.md docs/version_changes.md | |
- name: Upload changelog | |
uses: actions/upload-artifact@v3 | |
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 -A | |
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@v3 | |
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@v3 | |
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@v2 | |
- 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@v3 | |
with: | |
ref: master | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
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@v3 | |
with: | |
name: dist | |
path: dist | |
- name: Publish to PyPI | |
run: python -m twine upload dist/* |