cicd: Add a Github action to release automatically

This commit is contained in:
Hui Yu
2022-05-10 15:04:55 +08:00
parent 7291d0a3c3
commit 7dfe89bf6e
2 changed files with 104 additions and 5 deletions

46
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: Release
on:
workflow_dispatch:
inputs:
releaseVersion:
type: string
required: true
description: The release version of this release. Must be a semantic version of the form X.Y.Z
dry-run:
type: boolean
required: true
description: Dry run, will not push tags to branch and release.
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Validate Input
run: |
echo "${{ github.ref_type }}" | perl -ne 'die unless m/^branch$/'
echo "${{ github.ref_name }}" | perl -ne 'die unless m/^release-\d+\.\d+$/'
echo "${{ github.event.inputs.releaseVersion }}" | perl -ne 'die unless m/^\d+\.\d+\.\d+$/'
- name: Checkout
uses: actions/checkout@v3
- name: Check Actor
run: |
# Release actor should be in the OWNER list
cat OWNERS | grep ${{ github.actor }}
- name: Prepare
run: |
git config user.email "k8s.ci.robot@gmail.com"
git config user.name "Kubernetes Prow Robot"
- name: Release Prepare
run: |
git tag -a v${{ github.event.inputs.releaseVersion }} -m "version ${{ github.event.inputs.releaseVersion }}"
- name: Release Perform
if: ${{ github.event.inputs.dry-run != 'true' }}
run: |
git push https://${{ github.token }}@github.com/${{ github.repository }}.git v${{ github.event.inputs.releaseVersion }}
- name: Publish Release
if: ${{ github.event.inputs.dry-run != 'true' }}
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: v${{ github.event.inputs.releaseVersion }}

View File

@@ -2,9 +2,59 @@
The Kubernetes C Client Project is released on an as-needed basis. The process is as follows:
1. An issue is proposing a new release with a changelog since the last release
1. All [OWNERS](OWNERS) must LGTM this release
1. An OWNER runs `git tag -s $VERSION` or `git tag -a $VERSION` (If GPG-signed tag is not required) and inserts the changelog and pushes the tag with `git push origin $VERSION`
## Request
An issue is proposing a new release with a changelog since the last release
All [OWNERS](OWNERS) must LGTM this release
## Prepare
Before release, we need to determine our release branch.
The release branch will always be of the form `release-<MAJOR>.<MINOR>`. Any
time a `<MAJOR>` or `<MINOR>` version number is incremented, a new release
branch needs to be created with `git checkout -b release-<MAJOR>.<MINOR>` _from
the branch containing the changes you want to release_. If you are only
releasing bug fixes for an existing `<MAJOR>.<MINOR>` release (a patch
release), you simply checkout that existing release branch `git checkout
release-<MAJOR>.<MINOR>`.
Now we are ready to perform the release.
## Release
There are 2 options to release: via Github Action or by manul
### Release via Github Action
Maintainers meeting the following requirements will be able to perform automated
release:
* Has "collaborator" permission or higher (otherwise they can't run the job manually).
* Should be in the OWNERS file.
#### Fill in the release workflow inputs manually
The Github Action workflow [Release](https://github.com/kubernetes-client/c/actions/workflows/release.yml) will require three manual inputs:
* The branch on which the workflow runs, must be a release branch, e.g. `release-X.Y`
* The releasing version, must be a valid semver `X.Y.Z` (without "v" prefix).
* Dry-Run: Indicating whether the release job will push the generated tag to the release branch and actually do a Github release.
Fill in the inputs, then click "Run" to start the job.
#### Release note, announcements
After the release job successfully finishes, we're supposed to see a git tag `vX.Y.Z` pushed to the release branch, a GITHUB release will also be packed on the tag.
In the end, don't forget to clarify the release notes on the GITHUB release.
### Release by manual
An OWNER runs `git tag -s $VERSION` or `git tag -a $VERSION` (If GPG-signed tag is not required) and inserts the changelog and pushes the tag with `git push origin $VERSION`
e.g
```shell
@@ -12,5 +62,8 @@ The Kubernetes C Client Project is released on an as-needed basis. The process i
git push origin v0.1.0
```
1. The release issue is closed
1. An announcement email is sent to `kubernetes-dev@googlegroups.com` with the subject `[ANNOUNCE] kubernetes-template-project $VERSION is released`
## Announcement
The release issue is closed
An announcement email is sent to `kubernetes-dev@googlegroups.com` with the subject `[ANNOUNCE] kubernetes-template-project $VERSION is released`