cicd: Add a Github action to release automatically
This commit is contained in:
46
.github/workflows/release.yml
vendored
Normal file
46
.github/workflows/release.yml
vendored
Normal 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 }}
|
||||
63
RELEASE.md
63
RELEASE.md
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user