diff --git a/.github/workflows/draft-release-notes-on-tag2.yaml b/.github/workflows/draft-release-notes-on-tag2.yaml new file mode 100644 index 00000000000..966e4a9eb3f --- /dev/null +++ b/.github/workflows/draft-release-notes-on-tag2.yaml @@ -0,0 +1,79 @@ +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 + + console.log(pullRequests) + + + var prByComponents = new Map() + var prByInstrumentations = new Map() + for (let pullRequest of pullRequests) { + 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) + } + } + } + + console.log("components: ") + console.log(prByComponents) + console.log("instrumentations: ") + console.log(prByInstrumentations) + \ No newline at end of file