Skip to content

Commit

Permalink
Release helper script (conda-incubator#1006)
Browse files Browse the repository at this point in the history
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
soapy1 and pre-commit-ci[bot] authored Dec 9, 2024
1 parent 7642a27 commit 0cff9e7
Show file tree
Hide file tree
Showing 2 changed files with 138 additions and 22 deletions.
32 changes: 10 additions & 22 deletions .github/ISSUE_TEMPLATE/new-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,34 +22,24 @@ Release captain responsible - <@gh_username>

### 2. Prepare the codebase for a new release

- [ ] Create a new git branch for the release `git checkout -b release-2024.9.1`
- [ ] Prepare the branch just in case `git clean -fxdq`
- [ ] Bump `conda-store` version in [`conda-store/conda-store/__init__.py`](https://github.com/conda-incubator/conda-store/blob/main/conda-store/conda_store/__init__.py)
- [ ] Bump `conda-store-server` version in [`conda-store-server/conda-store-server/__init__.py`](https://github.com/conda-incubator/conda-store/blob/main/conda-store/conda_store/__init__.py)
- [ ] Update the `conda-store-ui` version used in `conda-store-server` [`conda-store-server/hatch_build.py`](https://github.com/conda-incubator/conda-store/blob/main/conda-store-server/hatch_build.py)
- [ ] Update the [CHANGELOG.md](./CHANGELOG.md) file with the new version, release date, and relevant changes[^github-activity].
- [ ] Check the version locally with `hatch version`
- [ ] Build and test locally
- [ ] For `conda-store` and `conda-store-server`:
- [ ] Prepare the release by running the `cut-release-pr.sh` script

```bash
# Note you will need to run this twice, once for each package
cd conda-store # or cd conda-store-server
hatch build
twine check dist/*
hatch clean
```
```bash
./cut-release-pr.sh -r <conda-store version> -c <conda-store-ui version>
```

- [ ] Ensure that the conda-store, conda-store-server, conda-store-ui versions have been updated

- [ ] After building `conda-store-server` and before `hatch clean` run the server in standalone mode:
- [ ] Manually review the CHANGELOG and remove/organize important contributions

- [ ] Test that the application is working. In particular, do a manual inspection of the build and `ui` vendoring process:

```bash
cd conda-store-server
hatch build
conda-store-server --standalone
```

To do a manual inspection of the build and `ui` vendoring process.

- [ ] Make a release commit: ``git commit -m 'REL - 2024.9.1'``
- [ ] Push the release (REL) commit ``git push upstream main``
- [ ] If a **release candidate** is needed, tick this box when we're ready for a full release.
Expand All @@ -70,5 +60,3 @@ Release captain responsible - <@gh_username>
- [ ] Open a follow-up PR to bump `conda-store` and `conda-store-server` versions to the next dev-release number (for example `2024.10.1`).
- [ ] Open a follow-up PR to bump the `conda-store-server` version in the [`conda-store-ui` compose file](https://github.com/conda-incubator/conda-store-ui/blob/main/docker-compose.yml).
- [ ] Celebrate, you're done! 🎉
[^github-activity]: If you wish, use [`github-activity` to generate a Changelog](https://github.com/choldgraf/github-activity), e.g. `github-activity conda-incubator/conda-store --since 2024.9.1 --until 2023.10.1`.
128 changes: 128 additions & 0 deletions cut-release-pr.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#!/bin/bash

# Requirements
# - packages
# - github-activity https://github.com/choldgraf/github-activity
# - jq
# - GITHUB_ACCESS_TOKEN env var set
# - `conda-store-server-dev` conda env is activated

function usage {
echo -e "Usage: ./cut-release-pr.sh -r release_version -c conda_store_ui_version\n"
exit 1
}

function build_and_check () {
# Runs a hatch build, twine check, and checks the version of the package
# Assumes that you are in the directory for the package
#
# args:
# CHECK_TARGET: the name of the package to check
CHECK_TARGET=$1

echo "${CHECK_TARGET}: Checking hatch versions..."
HV=$(hatch version)
if [[ "$HV" == "$RELEASE_VERSION" ]]; then
echo "${CHECK_TARGET}: hatch version matches ${RELEASE_VERSION}"
else
echo "${CHECK_TARGET}: hatch version does not match the requested release version. Something has gone wrong, exiting!"
exit 1
fi

echo "${CHECK_TARGET}: Running build and checking package..."
hatch build
rc=$(twine check dist/*)
if [[ $rc =~ "FAILED" ]]; then
echo "${CHECK_TARGET}: package is not in a good state, exiting!"
exit 1
else
echo "${CHECK_TARGET}: package is in a good state"
fi

echo "${CHECK_TARGET}: cleaning up..."
hatch clean
}

while [[ $# -gt 0 ]]
do
key="$1"

case $key in
-h|--help)
usage
exit 0
shift
shift
;;
-r|--release_version)
RELEASE_VERSION="$2"
shift
shift
;;
-c|--conda_store_ui_version)
CONDA_STORE_UI_VERSION="$2"
shift
shift
;;
*)
usage
exit 0
shift
;;
esac
done

CURRENT_DATE=$(date '+%Y-%m-%d')

echo "Today is ${CURRENT_DATE}
Building a release for
* conda-store version ${RELEASE_VERSION}
with
* conda-store-ui version ${CONDA_STORE_UI_VERSION}
"

# prepare repo
git checkout -b release-"$RELEASE_VERSION"
git clean -fxdq

# bump versions
sed -E -r -i "s/__version__ = .+/__version__ = \"$RELEASE_VERSION\"/g" conda-store-server/conda_store_server/__init__.py
sed -E -r -i "s/__version__ = .+/__version__ = \"$RELEASE_VERSION\"/g" conda-store/conda_store/__init__.py
sed -E -r -i "s/CONDA_STORE_UI_VERSION = .+/CONDA_STORE_UI_VERSION = \"$CONDA_STORE_UI_VERSION\"/g" conda-store-server/hatch_build.py

# create changelog
LATEST_TAG=$(curl https://api.github.com/repos/conda-incubator/conda-store/releases | jq -r '.[0].tag_name')
PYTHONWARNINGS="ignore" github-activity conda-incubator/conda-store --since $LATEST_TAG --heading-level=2 > tmp_changes.txt
# remove first line of changes - it's always a message about which GH token is used
sed -n -i '1!p' tmp_changes.txt
# replace the header for the changes with the appropriate title
sed -n -i '1!p' tmp_changes.txt
sed -i "1s/^/## [$RELEASE_VERSION] - $CURRENT_DATE\n/" tmp_changes.txt
# insert changes into changelog
sed -i "/---/r tmp_changes.txt" CHANGELOG.md
# clean up temp file
rm tmp_changes.txt

cd conda-store-server
build_and_check conda-store-server
cd ..

cd conda-store
build_and_check conda-store
cd ..


# add files to git
git add conda-store conda-store-server CHANGELOG.md
git commit -m "REL - $RELEASE_VERSION"

echo "
Finished preparing the release!
Next steps:
* Validate that the changes made are correct
* Follow any testing/validation steps
* Push them changes up to github
git push origin release-"$RELEASE_VERSION"
"

0 comments on commit 0cff9e7

Please sign in to comment.