Skip to content

Commit

Permalink
fix: Fix release creation
Browse files Browse the repository at this point in the history
  • Loading branch information
PerfectSlayer committed Jun 28, 2023
1 parent 768b145 commit aaad113
Show file tree
Hide file tree
Showing 2 changed files with 160 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/draft-release-notes-on-tag.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ jobs:
}
// Create release with the draft changelog
await github.repos.createRelease({
await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: '${{ github.event.ref }}',
Expand Down
159 changes: 159 additions & 0 deletions .github/workflows/draft-release-notes-on-tag2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
name: Draft release notes on tag
on:
push

jobs:
draft_release_notes2:
name: Draft release notes
#if: github.event.ref_type == 'tag' && github.event.master_branch == 'master'
runs-on: ubuntu-latest
steps:
- name: Get milestone title
id: milestoneTitle
uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # 6.4.1
with:
result-encoding: string
script: |
// Get the milestone title ("X.Y.Z") from tag name ("vX.Y.Z")
//const milestoneTitle = '${{github.event.ref}}'.startsWith('v') ?
// '${{github.event.ref}}'.substring(1) :
// '${{github.event.ref}}'
const milestoneTitle = '1.16.0'
// Look for the milestone
const milestone = (await github.paginate('GET /repos/{owner}/{repo}/milestones', {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'all'
})).find(m => m.title == milestoneTitle)
if (!milestone) {
core.setFailed('Failed to find milestone: ${milestoneTitle}')
return
}
// Get pull requests of the milestone
const pullRequests = (await github.paginate('/repos/{owner}/{repo}/issues', {
owner: context.repo.owner,
repo: context.repo.repo,
milestone: milestone.number,
state: 'closed'
}))
.filter(i => i.pull_request && i.pull_request.merged_at) // Skip closed but not merged
.filter(p => !p.labels.find(label => label.name == 'tag: no release notes')) // Skip excluded
// Group PR by components and instrumentations
var prByComponents = new Map()
var prByInstrumentations = new Map()
var otherPRs = new Array()
for (let pullRequest of pullRequests) {
var captured = false
for (let label of pullRequest.labels) {
const index = label.name.indexOf(':')
if (index == -1) {
core.notice('Unsupported label: ${label.name}')
continue
}
const labelKey = label.name.substring(0, index)
const labelValue = label.name.slice(index + 1)
var map = null
if (labelKey == 'comp') {
map = prByComponents
} else if (labelKey == 'inst') {
map = prByInstrumentations
}
if (map) {
var prs = map.get(label.description)
if (!prs) {
prs = new Array()
map.set(label.description, prs)
}
prs.push(pullRequest)
captured = true
}
}
if (!captured) {
otherPRs.push(pullRequest)
}
}
// Sort components and instrumenations
prByComponents = new Map([...prByComponents].sort());
const lastInstrumentation = 'All other instrumentations'
prByInstrumentations = new Map([...prByInstrumentations].sort(
(a, b) => {
if (a[0] == lastInstrumentation) {
return 1
} else if (b[0] == lastInstrumentation) {
return -1
}
return String(a[0]).localeCompare(b[0])
}
));
// Generate changelog
const decorators = {
'tag: breaking change': ':warning:',
'tag: experimental': ':test_tube:',
'tag: diagnostics': ':mag:',
'tag: performance': ':zap:',
'tag: security': ':closed_lock_with_key:',
'type: bug': ':bug:',
'type: documentation': ':book:',
'type: enhancement': ':sparkles:',
'type: feature request': ':bulb:',
'type: refactoring': ':broom:'
}
function decorate(pullRequest) {
var line = ''
var decorated = false;
for (let label of pullRequest.labels) {
if (decorators[label.name]) {
line += decorators[label.name]
decorated = true
}
}
if (decorated) {
line += ' '
}
return line
}
function format(pullRequest) {
var line = `${decorate(pullRequest)}${pullRequest.title} (#${pullRequest.number}`
// Add author if community labeled
if (pullRequest.labels.some(label => label.name == "tag: community")) {
line += ` - thanks @${pull.user.login} for the contribution!`
}
line += ')'
return line;
}
var changelog = '# Components\n\n';
for (let pair of prByComponents) {
changelog += '## '+pair[0]+'\n\n'
for (let pullRequest of pair[1]) {
changelog += '* ' + format(pullRequest) + '\n'
}
changelog += '\n'
}
changelog += '# Instrumentations\n\n'
for (let pair of prByInstrumentations) {
changelog += '## '+pair[0]+'\n\n'
for (let pullRequest of pair[1]) {
changelog += '* ' + format(pullRequest) + '\n'
}
changelog += '\n'
}
changelog += '# Other changes\n\n'
for (let pullRequest of otherPRs) {
changelog += '* ' + format(pullRequest) + '\n'
}
// Create release with the draft changelog
await github.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: '${{ github.event.ref }}',
name: milestoneTitle,
draft: true,
body: changelog
})

0 comments on commit aaad113

Please sign in to comment.