Skip to content

Commit

Permalink
Switch to draft-release action (#3675)
Browse files Browse the repository at this point in the history
Currently, we have a script that takes care of generating the release notes (draft) for the next release. As this piece of code is been used in more and more repositories, it makes sense to use a proper GitHub Action to perform that step.
  • Loading branch information
lucacome authored Mar 23, 2023
1 parent 3db26cb commit d7e0b50
Showing 1 changed file with 21 additions and 127 deletions.
148 changes: 21 additions & 127 deletions .github/workflows/draft-release.yaml
Original file line number Diff line number Diff line change
@@ -1,138 +1,32 @@
name: Create Draft Release
name: Create Release Draft

on:
push:
branches:
- release-*
workflow_dispatch:
inputs:
tagFrom:
description: The tag to create the release from.
required: true
type: string
tagTo:
description: The tag to create the release to.
required: true
type: string
branch:
description: The branch where the release will be created.
required: true
type: string

jobs:

binary:
name: Create Draft Release
draft-release:
name: Create Release Draft
runs-on: ubuntu-22.04
steps:
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
- run: npm install semver
- uses: actions/github-script@98814c53be79b1d30f795b907e553d8679345975 # v6.4.0
continue-on-error: true
with:
script: |
const semver = require('semver');
const ref = context.ref.split("/")[2]
const releases = (await github.rest.repos.listReleases({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
per_page: 100,
})).data
let latest_release
const latest_release_current_branch = releases.find(release => !release.draft && release.tag_name.startsWith("v" + ref.split("-")[1]))
if (latest_release_current_branch === undefined){
latest_release = (await github.rest.repos.getLatestRelease({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
})).data.tag_name
} else {
latest_release = latest_release_current_branch.tag_name
}
let tagFrom, tagTo, branch
if (context.eventName === 'workflow_dispatch'){
console.log(`Dispatch run with inputs: ${JSON.stringify(context.payload.inputs)}`)
;({ tagFrom, tagTo, branch } = context.payload.inputs)
} else {
;({ tagFrom, tagTo, branch } = {
tagFrom: latest_release,
tagTo: 'next',
branch: ref,
})
console.log(`Push run with: { tagFrom: ${tagFrom}, tagTo: ${tagTo}, branch: ${branch} }`)
}
console.log(`The latest release was ${tagFrom}`)
let version = tagTo.replace('v', '')
if (version === 'next'){
const temp_notes = (await github.rest.repos.generateReleaseNotes({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
tag_name: tagTo,
previous_tag_name: tagFrom,
target_commitish: branch,
})).data.body
let level
temp_notes.includes("### 🚀 Features") ? level = 'minor' : level = 'patch'
temp_notes.includes("### 💣 Breaking Changes") ? level = 'major' : level = level
version = semver.inc(tagFrom, level)
console.log(`The level of the release is ${level}`)
}
const draft = releases.find((r) => r.draft && r.tag_name === "v"+version)
const draft_found = !(draft === undefined)
- name: Checkout Repository
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0

console.log(`The next version is v${version}`)
const footer = `
## Upgrade
- For NGINX, use the v${version} image from our [DockerHub](https://hub.docker.com/r/nginx/nginx-ingress/tags?page=1&ordering=last_updated&name=${version}), [GitHub Container](https://github.com/nginxinc/kubernetes-ingress/pkgs/container/kubernetes-ingress), [Amazon ECR Public Gallery](https://gallery.ecr.aws/nginx/nginx-ingress) or [Quay.io](https://quay.io/repository/nginx/nginx-ingress).
- For NGINX Plus, use the v${version} image from the F5 Container registry or the [AWS Marketplace](https://aws.amazon.com/marketplace/search/?CREATOR=741df81b-dfdc-4d36-b8da-945ea66b522c&FULFILLMENT_OPTION_TYPE=CONTAINER&filters=CREATOR%2CFULFILLMENT_OPTION_TYPE) or build your own image using the v${version} source code.
- For Helm, use version %HELM_CHART_VERSION% of the chart.
## Resources
- Documentation -- https://docs.nginx.com/nginx-ingress-controller/
- Configuration examples -- https://github.com/nginxinc/kubernetes-ingress/tree/v${version}/examples
- Helm Chart -- https://github.com/nginxinc/kubernetes-ingress/tree/v${version}/deployments/helm-chart
- Operator -- https://github.com/nginxinc/nginx-ingress-operator/
`
const release_notes = (await github.rest.repos.generateReleaseNotes({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
tag_name: 'v' + version,
previous_tag_name: tagFrom,
target_commitish: branch,
}))
let release
if (draft_found){
console.log("Draft found")
release = (await github.rest.repos.updateRelease({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
release_id: draft.id,
tag_name: 'v' + version,
target_commitish: branch,
name: 'v' + version,
body: release_notes.data.body + footer,
draft: true,
}))
} else {
console.log("Draft not found")
release = (await github.rest.repos.createRelease({
owner: context.payload.repository.owner.login,
repo: context.payload.repository.name,
tag_name: 'v' + version,
target_commitish: ref,
name: 'v' + version,
body: release_notes.data.body + footer,
draft: true,
}))
}
console.log(`Release created: ${release.data.html_url}`)
console.log(`Release notes: ${release_notes.data.body}`)
- name: Create/Update Draft
uses: lucacome/draft-release@e1aa7cbd04dbd6baa6c06add5f84e271b21e45ea # v0.1.1
with:
minor-label: 'enhancement'
major-label: 'change'
notes-footer: |
## Upgrade
- For NGINX, use the {{version}} image from our [DockerHub](https://hub.docker.com/r/nginx/nginx-ingress/tags?page=1&ordering=last_updated&name={{version-number}}), [GitHub Container](https://github.com/nginxinc/kubernetes-ingress/pkgs/container/kubernetes-ingress), [Amazon ECR Public Gallery](https://gallery.ecr.aws/nginx/nginx-ingress) or [Quay.io](https://quay.io/repository/nginx/nginx-ingress).
- For NGINX Plus, use the {{version}} image from the F5 Container registry or the [AWS Marketplace](https://aws.amazon.com/marketplace/search/?CREATOR=741df81b-dfdc-4d36-b8da-945ea66b522c&FULFILLMENT_OPTION_TYPE=CONTAINER&filters=CREATOR%2CFULFILLMENT_OPTION_TYPE) or build your own image using the {{version}} source code.
- For Helm, use version %HELM_CHART_VERSION% of the chart.
## Resources
- Documentation -- https://docs.nginx.com/nginx-ingress-controller/
- Configuration examples -- https://github.com/nginxinc/kubernetes-ingress/tree/{{version}}/examples
- Helm Chart -- https://github.com/nginxinc/kubernetes-ingress/tree/{{version}}/deployments/helm-chart
- Operator -- https://github.com/nginxinc/nginx-ingress-operator/

0 comments on commit d7e0b50

Please sign in to comment.