Skip to content

free disk space action in release.yaml workflow #26

free disk space action in release.yaml workflow

free disk space action in release.yaml workflow #26

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: Touch changelog
run: touch HISTORY.md
- name: Generate changelog
id: cliff
uses: orhun/git-cliff-action@v1
with:
config: cliff.toml
args: --verbose --unreleased --tag ${{ steps.version.outputs.version }}
env:
OUTPUT: CHANGELOG.md
- name: Update changelog
id: update-changelog
run: |
# move changelog
clog="CHANGELOG_${{ steps.version.outputs.version }}.md"
echo "changelog=$clog" >> $GITHUB_OUTPUT
sudo cp "${{ steps.cliff.outputs.changelog }}" "$clog"
# show current release changelog
cat "$clog"
# substitute full group names
sed -i 's/#### Ci/#### Continuous integration/' "$clog"
sed -i 's/#### Feat/#### New features/' "$clog"
sed -i 's/#### Fix/#### Bug fixes/' "$clog"
sed -i 's/#### Refactor/#### Refactoring/' "$clog"
sed -i 's/#### Test/#### Testing/' "$clog"
cat "$clog" HISTORY.md > temp_history.md
sudo mv temp_history.md HISTORY.md
# show full changelog
cat HISTORY.md
- name: Upload changelog artifact
uses: actions/upload-artifact@v3
with:
name: changelog
path: ${{ steps.update-changelog.outputs.changelog }}
- name: Update release branch, draft PR to main
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
ver="${{ steps.version.outputs.version }}"
changelog=$(cat ${{ steps.update-changelog.outputs.changelog }} | grep -v "### Version $ver")
# remove this release's changelog so we don't commit it
# the changes have already been prepended to HISTORY.md
rm ${{ steps.update-changelog.outputs.changelog }}
rm -f CHANGELOG.md
# 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 HISTORY.md
git add pywatershed
git add version.txt
git commit -m "ci(release): set version to ${{ steps.version.outputs.version }}, update changelog"
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`.
## Changelog
'$changelog'
'
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
# 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 | xargs)
title="pywatershed $version"
# don't fail if the changelog is empty
if [[ -s "changelog/CHANGELOG_$version.md" ]]; then
notes=$(cat "changelog/CHANGELOG_$version.md" | grep -v "### Version $version")
else
notes="No changes found, are recent commits conventional?"
fi
gh release create "$version" \
--target main \
--title "$title" \
--notes "$notes" \
--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