Skip to content

Commit b67b214

Browse files
committed
testing-release-ntoes
1 parent 2eb4b9f commit b67b214

File tree

4 files changed

+273
-0
lines changed

4 files changed

+273
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Generate Release Notes
2+
3+
on:
4+
schedule:
5+
- cron: '0 20 * * 5' # Runs every Friday at 8 PM PST
6+
workflow_dispatch: # Allows manual triggering of the workflow
7+
8+
jobs:
9+
generate-release-notes:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout repository
14+
uses: actions/checkout@v2
15+
16+
- name: Set up Node.js
17+
uses: actions/setup-node@v2
18+
with:
19+
node-version: '14'
20+
21+
- name: Install dependencies
22+
run: npm install
23+
24+
- name: Generate Release Notes
25+
run: node generate-release-notes.js
26+
env:
27+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

generate-release-notes.js

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
const { Octokit } = require("@octokit/rest");
2+
const fs = require('fs');
3+
const path = require('path');
4+
5+
const octokit = new Octokit({
6+
auth: process.env.GITHUB_TOKEN,
7+
});
8+
9+
const owner = 'your-github-username';
10+
const repo = 'your-repository-name';
11+
const developBranch = 'develop';
12+
const releaseNotesDir = 'release-notes';
13+
const releaseNotesFile = path.join(releaseNotesDir, 'release-notes.md');
14+
15+
async function getMergedPRsSinceLastRelease() {
16+
const { data: pulls } = await octokit.pulls.list({
17+
owner,
18+
repo,
19+
state: 'closed',
20+
base: developBranch,
21+
sort: 'updated',
22+
direction: 'desc',
23+
});
24+
25+
const lastReleaseDate = await getLastReleaseDate();
26+
return pulls.filter(pr => new Date(pr.merged_at) > new Date(lastReleaseDate));
27+
}
28+
29+
async function getLastReleaseDate() {
30+
if (!fs.existsSync(releaseNotesFile)) {
31+
return new Date(0); // Return epoch if no release notes exist
32+
}
33+
34+
const content = fs.readFileSync(releaseNotesFile, 'utf8');
35+
const match = content.match(/Release Date: (.*)/);
36+
return match ? new Date(match[1]) : new Date(0);
37+
}
38+
39+
async function generateReleaseNotes() {
40+
const prs = await getMergedPRsSinceLastRelease();
41+
const newDocs = [];
42+
const majorChanges = [];
43+
const minorChanges = [];
44+
const releaseNotes = [];
45+
46+
for (const pr of prs) {
47+
const { data: files } = await octokit.pulls.listFiles({
48+
owner,
49+
repo,
50+
pull_number: pr.number,
51+
});
52+
53+
const mdxFiles = files.filter(file => file.filename.endsWith('.mdx'));
54+
if (mdxFiles.length === 0) continue;
55+
56+
const summary = pr.body.split('\n').slice(0, 2).join(' '); // First 2 lines of PR body
57+
58+
if (pr.labels.some(label => label.name === 'From_TW')) {
59+
majorChanges.push({
60+
title: pr.title,
61+
summary,
62+
url: pr.html_url,
63+
});
64+
} else {
65+
minorChanges.push({
66+
title: pr.title,
67+
summary,
68+
url: pr.html_url,
69+
});
70+
}
71+
72+
for (const file of mdxFiles) {
73+
if (file.status === 'added') {
74+
newDocs.push({
75+
filename: file.filename,
76+
summary,
77+
url: pr.html_url,
78+
});
79+
}
80+
}
81+
}
82+
83+
const releaseNumber = getNextReleaseNumber();
84+
const releaseOverview = prs.map(pr => `- ${pr.title}`).join('\n');
85+
86+
const releaseNotesContent = `
87+
# Docs Release Notes for ${releaseNumber}
88+
89+
## Release Overview
90+
${releaseOverview}
91+
92+
## New Documentation
93+
${newDocs.map(doc => `- [${doc.filename}](${doc.url}): ${doc.summary}`).join('\n')}
94+
95+
## Major Changes
96+
${majorChanges.map(change => `- [${change.title}](${change.url}): ${change.summary}`).join('\n')}
97+
98+
## Minor Changes
99+
${minorChanges.map(change => `- [${change.title}](${change.url}): ${change.summary}`).join('\n')}
100+
101+
## Release Notes
102+
${releaseNotes.map(note => `- ${note}`).join('\n')}
103+
104+
Release Date: ${new Date().toISOString()}
105+
`;
106+
107+
if (!fs.existsSync(releaseNotesDir)) {
108+
fs.mkdirSync(releaseNotesDir);
109+
}
110+
111+
fs.writeFileSync(releaseNotesFile, releaseNotesContent.trim());
112+
console.log('Release notes generated successfully.');
113+
}
114+
115+
function getNextReleaseNumber() {
116+
// Implement logic to determine the next release number
117+
// This could be based on tags, previous release notes, or any other versioning strategy
118+
// For simplicity, let's assume a simple incrementing number
119+
const previousReleaseNumber = getLastReleaseNumber();
120+
return previousReleaseNumber + 1;
121+
}
122+
123+
function getLastReleaseNumber() {
124+
if (!fs.existsSync(releaseNotesFile)) {
125+
return 0; // Start from 0 if no release notes exist
126+
}
127+
128+
const content = fs.readFileSync(releaseNotesFile, 'utf8');
129+
const match = content.match(/Docs Release Notes for (\d+)/);
130+
return match ? parseInt(match[1], 10) : 0;
131+
}
132+
133+
generateReleaseNotes().catch(error => {
134+
console.error('Error generating release notes:', error);
135+
process.exit(1);
136+
});

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"@mdx-js/mdx": "2.0.0-next.8",
1212
"@mdx-js/react": "2.0.0-next.8",
1313
"@newrelic/gatsby-theme-newrelic": "9.11.1",
14+
"@octokit/rest": "^21.1.1",
1415
"@splitsoftware/splitio-react": "^1.2.4",
1516
"ansi-colors": "^4.1.3",
1617
"cockatiel": "^3.0.0-beta.0",

yarn.lock

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3700,6 +3700,11 @@
37003700
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7"
37013701
integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==
37023702

3703+
"@octokit/auth-token@^5.0.0":
3704+
version "5.1.2"
3705+
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.2.tgz#68a486714d7a7fd1df56cb9bc89a860a0de866de"
3706+
integrity sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==
3707+
37033708
"@octokit/core@^5.0.1":
37043709
version "5.1.0"
37053710
resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.1.0.tgz#81dacf0197ed7855e6413f128bd6dd9e121e7d2f"
@@ -3713,6 +3718,27 @@
37133718
before-after-hook "^2.2.0"
37143719
universal-user-agent "^6.0.0"
37153720

3721+
"@octokit/core@^6.1.4":
3722+
version "6.1.4"
3723+
resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.4.tgz#f5ccf911cc95b1ce9daf6de425d1664392f867db"
3724+
integrity sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==
3725+
dependencies:
3726+
"@octokit/auth-token" "^5.0.0"
3727+
"@octokit/graphql" "^8.1.2"
3728+
"@octokit/request" "^9.2.1"
3729+
"@octokit/request-error" "^6.1.7"
3730+
"@octokit/types" "^13.6.2"
3731+
before-after-hook "^3.0.2"
3732+
universal-user-agent "^7.0.0"
3733+
3734+
"@octokit/endpoint@^10.1.3":
3735+
version "10.1.3"
3736+
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.3.tgz#bfe8ff2ec213eb4216065e77654bfbba0fc6d4de"
3737+
integrity sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==
3738+
dependencies:
3739+
"@octokit/types" "^13.6.2"
3740+
universal-user-agent "^7.0.2"
3741+
37163742
"@octokit/endpoint@^9.0.6":
37173743
version "9.0.6"
37183744
resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0"
@@ -3730,6 +3756,15 @@
37303756
"@octokit/types" "^12.0.0"
37313757
universal-user-agent "^6.0.0"
37323758

3759+
"@octokit/graphql@^8.1.2":
3760+
version "8.2.1"
3761+
resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.2.1.tgz#0cb83600e6b4009805acc1c56ae8e07e6c991b78"
3762+
integrity sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==
3763+
dependencies:
3764+
"@octokit/request" "^9.2.2"
3765+
"@octokit/types" "^13.8.0"
3766+
universal-user-agent "^7.0.0"
3767+
37333768
"@octokit/openapi-types@^19.1.0":
37343769
version "19.1.0"
37353770
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-19.1.0.tgz#75ec7e64743870fc73e1ab4bc6ec252ecdd624dc"
@@ -3745,20 +3780,44 @@
37453780
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-23.0.1.tgz#3721646ecd36b596ddb12650e0e89d3ebb2dd50e"
37463781
integrity sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==
37473782

3783+
"@octokit/openapi-types@^24.2.0":
3784+
version "24.2.0"
3785+
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3"
3786+
integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==
3787+
3788+
"@octokit/plugin-paginate-rest@^11.4.2":
3789+
version "11.6.0"
3790+
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz#e5e9ff3530e867c3837fdbff94ce15a2468a1f37"
3791+
integrity sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==
3792+
dependencies:
3793+
"@octokit/types" "^13.10.0"
3794+
37483795
"@octokit/plugin-paginate-rest@^9.0.0":
37493796
version "9.2.2"
37503797
resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz#c516bc498736bcdaa9095b9a1d10d9d0501ae831"
37513798
integrity sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==
37523799
dependencies:
37533800
"@octokit/types" "^12.6.0"
37543801

3802+
"@octokit/plugin-request-log@^5.3.1":
3803+
version "5.3.1"
3804+
resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz#ccb75d9705de769b2aa82bcd105cc96eb0c00f69"
3805+
integrity sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==
3806+
37553807
"@octokit/plugin-rest-endpoint-methods@^10.0.0":
37563808
version "10.2.0"
37573809
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.2.0.tgz#eeaa4de97a2ae26404dea30ce3e17b11928e027c"
37583810
integrity sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==
37593811
dependencies:
37603812
"@octokit/types" "^12.3.0"
37613813

3814+
"@octokit/plugin-rest-endpoint-methods@^13.3.0":
3815+
version "13.5.0"
3816+
resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz#d8c8ca2123b305596c959a9134dfa8b0495b0ba6"
3817+
integrity sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==
3818+
dependencies:
3819+
"@octokit/types" "^13.10.0"
3820+
37623821
"@octokit/request-error@^5.0.0", "@octokit/request-error@^5.1.1":
37633822
version "5.1.1"
37643823
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805"
@@ -3768,6 +3827,13 @@
37683827
deprecation "^2.0.0"
37693828
once "^1.4.0"
37703829

3830+
"@octokit/request-error@^6.1.7":
3831+
version "6.1.7"
3832+
resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.7.tgz#44fc598f5cdf4593e0e58b5155fe2e77230ff6da"
3833+
integrity sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==
3834+
dependencies:
3835+
"@octokit/types" "^13.6.2"
3836+
37713837
"@octokit/request@^8.0.1", "@octokit/request@^8.0.2":
37723838
version "8.4.1"
37733839
resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486"
@@ -3778,6 +3844,27 @@
37783844
"@octokit/types" "^13.1.0"
37793845
universal-user-agent "^6.0.0"
37803846

3847+
"@octokit/request@^9.2.1", "@octokit/request@^9.2.2":
3848+
version "9.2.2"
3849+
resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.2.2.tgz#754452ec4692d7fdc32438a14e028eba0e6b2c09"
3850+
integrity sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==
3851+
dependencies:
3852+
"@octokit/endpoint" "^10.1.3"
3853+
"@octokit/request-error" "^6.1.7"
3854+
"@octokit/types" "^13.6.2"
3855+
fast-content-type-parse "^2.0.0"
3856+
universal-user-agent "^7.0.2"
3857+
3858+
"@octokit/rest@^21.1.1":
3859+
version "21.1.1"
3860+
resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-21.1.1.tgz#7a70455ca451b1d253e5b706f35178ceefb74de2"
3861+
integrity sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==
3862+
dependencies:
3863+
"@octokit/core" "^6.1.4"
3864+
"@octokit/plugin-paginate-rest" "^11.4.2"
3865+
"@octokit/plugin-request-log" "^5.3.1"
3866+
"@octokit/plugin-rest-endpoint-methods" "^13.3.0"
3867+
37813868
"@octokit/types@^12.0.0", "@octokit/types@^12.3.0":
37823869
version "12.4.0"
37833870
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.4.0.tgz#8f97b601e91ce6b9776ed8152217e77a71be7aac"
@@ -3799,6 +3886,13 @@
37993886
dependencies:
38003887
"@octokit/openapi-types" "^23.0.1"
38013888

3889+
"@octokit/types@^13.10.0", "@octokit/types@^13.6.2", "@octokit/types@^13.8.0":
3890+
version "13.10.0"
3891+
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3"
3892+
integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==
3893+
dependencies:
3894+
"@octokit/openapi-types" "^24.2.0"
3895+
38023896
"@parcel/bundler-default@2.6.2":
38033897
version "2.6.2"
38043898
resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.6.2.tgz#bfa1be22af985ba2d6dbf1890a36ad4553f819d4"
@@ -7235,6 +7329,11 @@ before-after-hook@^2.2.0:
72357329
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c"
72367330
integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
72377331

7332+
before-after-hook@^3.0.2:
7333+
version "3.0.2"
7334+
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d"
7335+
integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==
7336+
72387337
better-opn@^2.1.1:
72397338
version "2.1.1"
72407339
resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.1.1.tgz#94a55b4695dc79288f31d7d0e5f658320759f7c6"
@@ -10147,6 +10246,11 @@ extsprintf@^1.2.0:
1014710246
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
1014810247
integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
1014910248

10249+
fast-content-type-parse@^2.0.0:
10250+
version "2.0.1"
10251+
resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz#c236124534ee2cb427c8d8e5ba35a4856947847b"
10252+
integrity sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==
10253+
1015010254
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1015110255
version "3.1.3"
1015210256
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -21830,6 +21934,11 @@ universal-user-agent@^6.0.0:
2183021934
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa"
2183121935
integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==
2183221936

21937+
universal-user-agent@^7.0.0, universal-user-agent@^7.0.2:
21938+
version "7.0.2"
21939+
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e"
21940+
integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==
21941+
2183321942
universalify@^0.1.0, universalify@^0.1.2:
2183421943
version "0.1.2"
2183521944
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"

0 commit comments

Comments
 (0)