fix update release workflow #37
Workflow file for this run
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: 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@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set environment variables | |
run: | | |
echo "PYTHON_VERSION=${{ matrix.python-version }}" >> $GITHUB_ENV | |
echo "PYWS_FORTRAN=false" >> $GITHUB_ENV | |
cat .mf6_ci_ref_remote >> $GITHUB_ENV | |
- name: Setup gfortran | |
uses: fortran-lang/setup-fortran@v1 | |
with: | |
compiler: gcc | |
version: 11 | |
- name: Install Dependencies via Micromamba | |
uses: mamba-org/[email protected] | |
with: | |
micromamba-version: '1.5.10-0' | |
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: Install mf6 nightly build binaries | |
uses: modflowpy/install-modflow-action@v1 | |
with: | |
repo: modflow6-nightly-build | |
- name: Install pywatershed | |
run: | | |
pip install . | |
- name: Version info | |
run: | | |
pip -V | |
pip list | |
- name: Get GIS files for tests | |
run: | | |
python pywatershed/utils/gis_files.py | |
- name: domainless - run tests not requiring domain data | |
working-directory: autotest | |
run: pytest | |
-m domainless | |
-n=auto | |
-vv | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_domainless.xml | |
- name: sagehen_5yr_no_cascades - 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=sagehen_5yr --control_pattern=sagehen_no_cascades.control \ | |
--remove_prms_csvs --remove_prms_output_dirs | |
- name: sagehen_5yr_no_cascades - list netcdf input files | |
working-directory: test_data | |
run: | | |
find sagehen_5yr/output_no_cascades -name '*.nc' | |
- name: sagehen_5yr_no_cascades - pywatershed tests | |
working-directory: autotest | |
run: pytest | |
-vv | |
-rs | |
-n=auto | |
-m "not domainless" | |
--domain=sagehen_5yr | |
--control_pattern=sagehen_no_cascades.control | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_sagehen_5yr_no_cascades.xml | |
- name: hru_1_nhm - 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 --control_pattern=nhm.control \ | |
--remove_prms_csvs --remove_prms_output_dirs | |
- name: hru_1_nhm - list netcdf input files | |
working-directory: test_data | |
run: | | |
find hru_1/output -name '*.nc' | |
- name: hru_1_nhm - pywatershed tests | |
working-directory: autotest | |
run: pytest | |
-vv | |
-rs | |
-n=auto | |
-m "not domainless" | |
--domain=hru_1 | |
--control_pattern=nhm.control | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_hru_1_nhm.xml | |
- name: drb_2yr with and without dprst and obsin - 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_nhm - list netcdf input files | |
working-directory: test_data | |
run: | | |
find drb_2yr/output -name '*.nc' | |
- name: drb_2yr_no_dprst - list netcdf input files | |
working-directory: test_data | |
run: | | |
find drb_2yr/output_no_dprst -name '*.nc' | |
- name: drb_2yr_nhm - pywatershed tests | |
working-directory: autotest | |
run: pytest | |
-vv | |
-rs | |
-n=auto | |
-m "not domainless" | |
--domain=drb_2yr | |
--control_pattern=nhm.control | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_drb_2yr_nhm.xml | |
# Specific tests not redundant with dprst | |
- name: drb_2yr_no_dprst - pywatershed tests | |
working-directory: autotest | |
run: pytest | |
test_prms_runoff.py | |
test_prms_soilzone.py | |
test_prms_groundwater.py | |
test_prms_above_snow.py | |
test_prms_below_snow.py | |
-vv | |
-rs | |
-n=auto | |
-m "not domainless" | |
--domain=drb_2yr | |
--control_pattern=no_dprst | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_drb_2yr_no_dprst.xml | |
# Specific tests not redundant with dprst | |
- name: drb_2yr_obsin - pywatershed tests | |
working-directory: autotest | |
run: pytest | |
test_obsin_flow_node.py | |
-vv | |
-n=0 | |
-m "not domainless" | |
--domain=drb_2yr | |
--control_pattern=nhm_obsin.control | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_drb_2yr_no_dprst.xml | |
- name: ucb_2yr_nhm - generate and manage test data | |
working-directory: autotest | |
run: | | |
python generate_test_data.py \ | |
-n=auto --domain=ucb_2yr --control_pattern=nhm.control \ | |
--remove_prms_csvs --remove_prms_output_dirs | |
- name: ucb_2yr_nhm - list netcdf input files | |
working-directory: test_data | |
run: | | |
find ucb_2yr/output -name '*.nc' | |
- name: ucb_2yr_nhm - pywatershed tests | |
working-directory: autotest | |
run: pytest | |
-vv | |
-n=auto | |
-m "not domainless" | |
--domain=ucb_2yr | |
--control_pattern=nhm.control | |
--durations=0 | |
--cov=pywatershed | |
--cov-report=xml | |
--junitxml=pytest_ucb_2yr_nhm.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: | | |
ruff check . | |
ruff format . | |
- 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: 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.10 | |
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 |