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

cicd: Add a Github Action to release automatically #118

Merged
merged 2 commits into from
May 13, 2022
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
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 "[email protected]"
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 `[email protected]` with the subject `[ANNOUNCE] kubernetes-template-project $VERSION is released`
## Announcement

The release issue is closed

An announcement email is sent to `[email protected]` with the subject `[ANNOUNCE] kubernetes-template-project $VERSION is released`