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 helper script #1006

Merged
merged 5 commits into from
Dec 9, 2024
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
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
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having this as a bash script is pretty clunky. It would be nice if this was a github action workflow. I think that would take a bit more work. Can iterate on it if this is a direction we want to go.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes please! If it's totally automated, we should be able to run this in github-actions.


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