Skip to content

Merge pull request #298 from EC-USGS/v1.1.0 #29

Merge pull request #298 from EC-USGS/v1.1.0

Merge pull request #298 from EC-USGS/v1.1.0 #29

Workflow file for this run

name: Release
on:
push:
branches:
- main
- 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 != 'main' }}
permissions:
contents: write
pull-requests: write
defaults:
run:
shell: bash -l {0}
steps:
- name: Free Disk Space (Ubuntu)
if: runner.os == 'Linux'
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- name: Checkout release branch
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup gfortran
uses: fortran-lang/setup-fortran@v1
with:
compiler: gcc
version: 11
- name: Install Dependencies via Micromamba
uses: mamba-org/setup-micromamba@v1
with:
environment-file: environment.yml
cache-environment: true
cache-downloads: true
create-args: >-
python=3.10
conda
- name: Checkout MODFLOW 6
uses: actions/checkout@v3
with:
repository: MODFLOW-USGS/modflow6
ref: develop
path: modflow6
- name: Update flopy MODFLOW 6 classes
working-directory: modflow6/autotest
run: |
python update_flopy.py
- name: Set environment variables
run: |
echo "PYTHON_VERSION=${{ matrix.python-version }}" >> $GITHUB_ENV
echo "PYWS_FORTRAN=true" >> $GITHUB_ENV
echo 'SETUPTOOLS_ENABLE_FEATURES="legacy-editable"' >> $GITHUB_ENV
cat .mf6_ci_ref_remote >> $GITHUB_ENV
- name: Install pywatershed
run: |
pip install .
- name: Version info
run: |
pip -V
pip list
- name: hru_1 - generate and manage test data domain, run PRMS and convert csv output to NetCDF
working-directory: autotest
run: |
python generate_test_data.py \
-n=auto --domain=hru_1 --remove_prms_csvs --remove_prms_output_dirs
- name: hru_1 - list netcdf input files
working-directory: test_data
run: |
find hru_1/output/ -name '*.nc'
- name: hru_1 - pywatershed tests
working-directory: autotest
run: pytest
-vv
-n=auto
--domain_yaml=../test_data/hru_1/hru_1.yaml
--durations=0
--cov=pywatershed
--cov-report=xml
--junitxml=pytest_hru_1.xml
- name: drb_2yr - generate and manage test data
working-directory: autotest
run: |
python generate_test_data.py \
-n=auto --domain=drb_2yr --remove_prms_csvs --remove_prms_output_dirs
- name: drb_2yr - list netcdf input files
working-directory: test_data
run: |
find drb_2yr/output/ -name '*.nc'
- name: drb_2yr - pywatershed tests
working-directory: autotest
run: pytest
-vv
-n=auto
--domain_yaml=../test_data/drb_2yr/drb_2yr.yaml
--durations=0
--cov=pywatershed
--cov-report=xml
--junitxml=pytest_drb_2yr.xml
- name: ucb_2yr - generate and manage test data
working-directory: autotest
run: |
python generate_test_data.py \
-n=auto --domain=ucb_2yr --remove_prms_csvs --remove_prms_output_dirs
- name: ucb_2yr - list netcdf input files
working-directory: test_data
run: |
find ucb_2yr/output/ -name '*.nc'
- name: ucb_2yr - pywatershed tests
working-directory: autotest
run: pytest
-vv
-n=auto
--domain_yaml=../test_data/ucb_2yr/ucb_2yr.yaml
--durations=0
--cov=pywatershed
--cov-report=xml
--junitxml=pytest_ucb_2yr.xml
- name: Update version
id: version
run: |
ref="${{ github.ref_name }}"
version="${ref#"v"}"
python .github/scripts/update_version.py -v "$version"
python -c "import pywatershed; print('Version: ', pywatershed.__version__)"
echo "version=$version" >> $GITHUB_OUTPUT
- name: Format files
run: |
isort ./pywatershed
black ./pywatershed
- name: Update release branch, draft PR to main
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
ver="${{ steps.version.outputs.version }}"
# commit and push changes
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 pywatershed
git add version.txt
git commit -m "ci(release): set version to ${{ steps.version.outputs.version }}"
git push origin "${{ github.ref_name }}"
title="Release $ver"
body='
# Release '$ver'
The release can be approved by merging this pull request into `main`. This will trigger jobs to publish the release to PyPI and reset `develop` from `main`.
'
gh pr create -B "main" -H "${{ github.ref_name }}" --title "$title" --draft --body "$body"
release:
name: Draft release
# runs only when changes are merged to main
if: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout repo
uses: actions/checkout@v3
with:
ref: main
- name: Download artifacts
uses: dawidd6/action-download-artifact@v2
- name: Draft release
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
version=$(cat version.txt | xargs)
title="pywatershed $version"
gh release create "$version" \
--target main \
--title "$title" \
--draft \
--latest
publish:
name: Publish package
# runs only when GitHub release is published (manually promoted from draft)
if: ${{ github.event_name == 'release' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
id-token: write # mandatory for trusted publishing
environment: # requires a 'pypi' environment in repo settings
name: pypi
url: https://pypi.org/p/pywatershed
steps:
- name: Checkout main branch
uses: actions/checkout@v3
with:
ref: main
- name: Setup Python
uses: actions/setup-python@v4
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 .
- name: Build package
run: python -m build
- name: Check package
run: twine check --strict dist/*
- name: Upload package artifact
uses: actions/upload-artifact@v3
with:
name: dist
path: dist
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true