Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 0.1.1 #8

Merged
merged 16 commits into from
Apr 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
267 changes: 267 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,267 @@
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
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]"

- name: Update version
id: version
run: |
ref="${{ github.ref_name }}"
version="${ref#"v"}"
python scripts/update_version.py -v "$version"
python -c "import modflowapi; print('Version: ', modflowapi.__version__)"
echo "version=$version" >> $GITHUB_OUTPUT

- 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
uses: actions/upload-artifact@v3
with:
name: changelog
path: ${{ steps.update-changelog.outputs.changelog }}

- name: Push release branch
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 -A
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`, incrementing the minor version number.

## 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

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.8

- name: Install Python dependencies
run: |
pip install --upgrade pip
pip install .
pip install ".[test]"

# 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=$(python scripts/update_version.py -g)
title="modflowapi $version"
notes=$(cat "changelog/CHANGELOG_$version.md" | grep -v "### Version $version")
gh release create "$version" \
--target main \
--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' && github.repository_owner == 'MODFLOW-USGS'
runs-on: ubuntu-22.04
permissions:
contents: write
pull-requests: write
steps:

- name: Checkout main branch
uses: actions/checkout@v3
with:
ref: main

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.8

- 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: Publish package
run: twine upload dist/*

reset:
name: Draft reset PR
if: ${{ github.event_name == 'release' }}
runs-on: ubuntu-22.04
permissions:
contents: write
pull-requests: write
steps:

- name: Checkout main branch
uses: actions/checkout@v3
with:
ref: main

- 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 .
pip install ".[lint, test]"

- name: Get release tag
uses: oprypin/find-latest-tag@v1
id: latest_tag
with:
repository: ${{ github.repository }}
releases-only: true

- name: Draft pull request
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
# create reset branch from main
reset_branch="post-release-${{ steps.latest_tag.outputs.tag }}-reset"
git switch -c $reset_branch

# increment minor version
major_version=$(echo "${{ steps.latest_tag.outputs.tag }}" | cut -d. -f1)
minor_version=$(echo "${{ steps.latest_tag.outputs.tag }}" | cut -d. -f2)
patch_version=$(echo "${{ steps.latest_tag.outputs.tag }}" | cut -d. -f3)
version="$major_version.$((minor_version + 1)).$patch_version"
python scripts/update_version.py -v "$version"

# commit and push reset branch
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): update to development version $version"
git push -u origin $reset_branch

# create PR into develop
body='
# Reinitialize for development

Updates the `develop` branch from `main` following a successful release. Increments the minor version number.
'
gh pr create -B "develop" -H "$reset_branch" --title "Reinitialize develop branch" --draft --body "$body"
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ message: If you use this software, please cite both the article from preferred-c
and the software itself.
type: software
title: MODFLOW API
version: 0.1.0
version: 0.1.1
date-released: '2023-04-19'
abstract: An extension to xmipy for the MODFLOW API.
repository-artifact: https://pypi.org/project/modflowapi
Expand Down
16 changes: 16 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
### Version 0.1.1

#### New features

* [feat(modflowapi)](https://github.com/MODFLOW-USGS/modflowapi/commit/3cc77dad6eae6c0fdb8ea856bc3ea3e7285ca658): Base files for modflowapi package. Committed by Joseph D Hughes on 2021-05-11.

#### Bug fixes

* [fix(get value)](https://github.com/MODFLOW-USGS/modflowapi/commit/defd2ee2bfc840ee2b7b3df76fcea4af651f1936): Fixed error handling when modflowapi fails to get a pointer to a value from the API (#9). Committed by spaulins-usgs on 2023-02-24.

#### Refactoring

* [refactor(rhs, hcof, AdvancedInput)](https://github.com/MODFLOW-USGS/modflowapi/commit/2c4d893eaa96457be099313a220c7c7d8fca888a): Bug fixes for setting variable values for advanced inputs. Committed by Joshua Larsen on 2023-02-25.
* [refactor(EOL)](https://github.com/MODFLOW-USGS/modflowapi/commit/e0ca9e80a60ae6c85933a69ec322a5bc861a32ab): Change CRLF to LF line endings for source files (#12). Committed by Mike Taves on 2023-03-24.
* [refactor(test_rhs_hcof_advanced)](https://github.com/MODFLOW-USGS/modflowapi/commit/a8e241df1def5899ccbf22368eddc76da0d7a60c): Add additional test (#13). Committed by Joshua Larsen on 2023-03-29.

46 changes: 46 additions & 0 deletions cliff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# configuration file for git-cliff (0.1.0)

[changelog]
body = """
{% if version %}\
### Version {{ version | trim_start_matches(pat="v") }}
{% else %}\
### [unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
#### {{ group | upper_first }}
{% for commit in commits %}
* [{{ commit.group }}{% if commit.scope %}({{ commit.scope }}){% endif %}](https://github.com/MODFLOW-USGS/modflowapi/commit/{{ commit.id }}): {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}. Committed by {{ commit.author.name }} on {{ commit.author.timestamp | date(format="%Y-%m-%d") }}.\
{% endfor %}
{% endfor %}\n
"""
trim = true

[git]
conventional_commits = true
filter_unconventional = true
split_commits = false
commit_parsers = [
{ message = "^[fF]eat", group = "feat"},
{ message = "^[fF]ix", group = "fix"},
{ message = "^[bB]ug", group = "fix"},
{ message = "^[pP]erf", group = "perf"},
{ message = "^[rR]efactor", group = "refactor"},
{ message = "^[uU]pdate", group = "refactor"},
{ message = "^[aA]dd", group = "refactor"},
{ message = "^[dD]oc.*", group = "docs", skip = true},
{ message = "^[bB]inder", group = "docs", skip = true},
{ message = "^[nN]otebook.*", group = "docs", skip = true},
{ message = "^[rR][eE][aA][dD].*", group = "docs", skip = true},
{ message = "^[sS]tyl.*", group = "style", skip = true},
{ message = "^[tT]est.*", group = "test", skip = true},
{ message = "^[cC][iI]", skip = true},
{ message = "^[cC][iI]\\(release\\):", skip = true},
{ message = "^[rR]elease", skip = true},
{ message = "^[cC]hore", group = "chore", skip = true},
]
protect_breaking_commits = false
filter_commits = false
tag_pattern = "[0-9].[0-9].[0-9]"
ignore_tags = ""
sort_commits = "oldest"
Loading