Skip to content

Commit

Permalink
Merge pull request #118 from ityuhui/yh-release-action-0510
Browse files Browse the repository at this point in the history
cicd: Add a Github Action to release automatically
  • Loading branch information
k8s-ci-robot authored May 13, 2022
2 parents 7291d0a + c7d16dc commit 099924a
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 5 deletions.
46 changes: 46 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -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' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create -d --generate-notes v${{ github.event.inputs.releaseVersion }}
63 changes: 58 additions & 5 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,68 @@

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 draft release will also be packed on the tag.

In the end, manually update the release notes and publish the release on the GitHub release page.

### 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
git tag -a v0.1.0 -m "version 0.1.0"
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`

0 comments on commit 099924a

Please sign in to comment.