109 lines
3.2 KiB
Markdown
109 lines
3.2 KiB
Markdown
# How to create a `govmomi` Release on Github
|
|
|
|
> **Note**
|
|
>
|
|
> The steps outlined in this document can only be performed by maintainers or
|
|
> administrators of this project.
|
|
|
|
The release automation is based on Github
|
|
[Actions](https://github.com/features/actions) and has been improved over time
|
|
to simplify the experience for creating `govmomi` releases.
|
|
|
|
The Github Actions release [workflow](.github/workflows/govmomi-release.yaml)
|
|
uses [`goreleaser`](http://goreleaser.com/) and automatically creates/pushes:
|
|
|
|
- Release artifacts for `govc` and `vcsim` to the
|
|
[release](https://github.com/vmware/govmomi/releases) page, including
|
|
`LICENSE.txt`, `README` and `CHANGELOG`
|
|
- Docker images for `vmware/govc` and `vmware/vcsim` to Docker Hub
|
|
- Source code
|
|
|
|
Releases are not tagged on the `main` branch, but a dedicated release branch, for example `release-0.35`.
|
|
|
|
### Verify `main` branch is up to date with the remote
|
|
|
|
```console
|
|
git checkout main
|
|
git fetch -avp
|
|
git diff main origin/main
|
|
|
|
# if your local and remote branches diverge run
|
|
git pull origin/main
|
|
```
|
|
|
|
> **Warning**
|
|
>
|
|
> These steps assume `origin` to point to the remote
|
|
> `https://github.com/vmware/govmomi`, respectively
|
|
> `git@github.com:vmware/govmomi`.
|
|
|
|
### Create a release branch
|
|
|
|
For new releases, create a release branch from the most recent commit in
|
|
`main`, e.g. `release-0.35`.
|
|
|
|
```console
|
|
export RELEASE_BRANCH=release-0.35
|
|
git checkout -b ${RELEASE_BRANCH}
|
|
```
|
|
|
|
For maintenance/patch releases on **existing** release branches, simply checkout the existing
|
|
release branch and add commits to the existing release branch.
|
|
|
|
### Verify `make docs` and `CONTRIBUTORS` are up to date
|
|
|
|
> **Warning**
|
|
>
|
|
> Run the following commands and commit any changes to the release branch before
|
|
> proceeding with the release.
|
|
|
|
```console
|
|
make doc
|
|
./scripts/contributors.sh
|
|
if [ -z "$(git status --porcelain)" ]; then
|
|
echo "working directory clean: proceed with release"
|
|
else
|
|
echo "working directory dirty: please commit changes"
|
|
fi
|
|
|
|
# perform git add && git commit ... in case there were changes
|
|
```
|
|
|
|
### Push the release branch
|
|
|
|
> **Warning**
|
|
>
|
|
> Do not create a tag as this will be done by the release automation.
|
|
|
|
The final step is pushing the new/updated release branch.
|
|
|
|
```console
|
|
git push origin ${RELEASE_BRANCH}
|
|
```
|
|
|
|
### Create a release in the Github UI
|
|
|
|
Open the `govmomi` Github [repository](https://github.com/vmware/govmomi) and
|
|
navigate to `Actions -> Workflows -> Release`.
|
|
|
|
Click `Run Workflow` which opens a dropdown list.
|
|
|
|
Select the new/updated branch, e.g. `release-0.35`, i.e. **not** the `main`
|
|
branch.
|
|
|
|
Specify a semantic `tag` to associate with the release, e.g. `v0.35.0`.
|
|
|
|
> **Warning**
|
|
>
|
|
> This tag **must not** exist or the release will fail during the validation
|
|
> phase.
|
|
|
|
By default, a dry-run is performed to rule out most (but not all) errors during
|
|
a release. If you do not want to perform a dry-run, e.g. to finally create a
|
|
release, deselect the `Verify release workflow ...` checkbox.
|
|
|
|
Click `Run Workflow` to kick off the workflow.
|
|
|
|
After successful completion and if the newly created `tag` is the **latest**
|
|
(semantic version sorted) tag in the repository, a PR is automatically opened
|
|
against the `main` branch to update the `CHANGELOG`.
|