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

Prerelease v1.0.2-alpha.30 #47

Merged
merged 3 commits into from
Oct 26, 2023
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
69 changes: 69 additions & 0 deletions .github/workflows/release-notes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Collect Release Notes
on:
workflow_dispatch:
inputs:
repo:
description: 'artifact_name'
required: true
default: 'kungfu'
type: string
artifact:
description: 'artifact_version'
required: true
default: 'artifact-kungfu'
type: string
bucket-release-ci:
default: "kungfu-prebuilt"
type: string
required: false
aws-user-region:
default: "cn-northwest-1"
type: string
required: false

jobs:
release-note:
runs-on: ubuntu-20.04
steps:
- name: Configure AWS Crendentials (User)
uses: aws-actions/configure-aws-credentials@v1-node16
with:
aws-access-key-id: ${{ secrets.AWS_USER_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_USER_SECRET_ACCESS_KEY }}
aws-region: ${{ inputs.aws-user-region }}

- name: Create Release Note
continue-on-error: true
uses: kungfu-trader/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
apiKey: ${{ secrets.AIRTABLE_API_KEY }}
full-dose-repo: ${{ inputs.repo }}
full-dose-artifact: ${{ inputs.artifact }}

- name: Convert Release Note To Pdf
continue-on-error: true
uses: baileyjm02/markdown-to-pdf@v1
with:
input_dir: notes
output_dir: pdfs
build_html: true

- name: Publish Release Note To AWS
continue-on-error: true
uses: kungfu-trader/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
apiKey: ${{ secrets.AIRTABLE_API_KEY }}
bucket-release: ${{ inputs.bucket-release-ci }}
full-dose-repo: ${{ inputs.repo }}
full-dose-artifact: ${{ inputs.artifact }}

- name: Upload Release Note
uses: actions/upload-artifact@v3
with:
name: Release-Note-${{github.repository.name}}-${{github.sha}}
path: |
notes/*
pdfs/*
if-no-files-found: ignore
5 changes: 3 additions & 2 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ inputs:
description: "airtable table for pr issues"
default: 'tblJabUQUuS6ywW5Z'
required: false
full-dose:
default: false
full-dose-repo:
required: false
full-dose-artifact:
required: false
outputs:
has_notes:
Expand Down
58 changes: 29 additions & 29 deletions dist/index.js

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,21 @@ const main = async function () {
repo: context.payload.repository.name,
pullRequestTitle: context.payload.pull_request.title,
pullRequestNumber: context.payload.pull_request.number,
fullDoseRepo: core.getInput("full-dose-repo"),
fullDoseArtifact: core.getInput("full-dose-artifact"),
};
if (!argv.apiKey) {
console.error("has not airtable access token");
return;
}
if (core.getInput("full-dose")) {
lib.refreshFullDose(argv);
return;
}
if (argv.bucketRelease) {
await lib.teleportNotes(argv);
return;
}
if (argv.fullDoseRepo && argv.fullDoseArtifact) {
lib.refreshFullDose(argv);
return;
}
const notes = await lib.createReleaseNote(argv);
core.setOutput("has_notes", notes?.length > 0 ? "true" : "false");
};
Expand Down
36 changes: 33 additions & 3 deletions lib/collect.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const { Octokit } = require("@octokit/rest");
const { getPkgNameMap } = require("./utils");
const sortBy = require("lodash.sortby");
const omit = require("lodash.omit");
const {
Expand Down Expand Up @@ -33,7 +32,7 @@ const getPrIssues = async (argv) => {
pullRequestTitle: current.title,
pullRequestNumber: current.number,
version: current.title.split(" v")?.[1],
pkgName: getPkgNameMap(),
pkgName: await getPkgNames(argv),
});
if (baseRef.startsWith("alpha/")) {
await findIssues(argv, argv.pullRequestNumber);
Expand Down Expand Up @@ -212,7 +211,7 @@ const getPrBatch = async (argv, baseRef, page = 1) => {
return pull.filter((v) => v.merged_at);
}
return sortBy(
[...pull, ...(await getPrBatch(argv, option, page + 1))],
[...pull, ...(await getPrBatch(argv, baseRef, page + 1))],
(v) => v.merged_at * -1
);
};
Expand Down Expand Up @@ -265,6 +264,36 @@ const findIssues = async (argv, pullRequestNumber) => {
createAirtableRecord.collect(issues);
};

const getRepoPackages = async (argv, page = 1) => {
const packages = await octokit
.request("GET /orgs/{org}/packages", {
package_type: "npm",
org: argv.owner,
page,
per_page: 100,
headers: {
"X-GitHub-Api-Version": "2022-11-28",
},
})
.then((res) => {
return res.data;
})
.catch((e) => console.error(e));
if (!packages) {
return [];
}
if (packages.length < 100) {
return packages;
}
return [...packages, ...(await getRepoPackages(argv, page + 1))];
};

const getPkgNames = async (argv) => {
const packages = await getRepoPackages(argv);
return packages
.filter((v) => v.repository?.name === argv.repo)
.map((v) => `@${argv.owner}/${v.name}`);
};
class CreateAirtableRecord {
constructor(argv) {
this.records = [];
Expand Down Expand Up @@ -309,6 +338,7 @@ class CreateAirtableRecord {
return this.records;
}
async submit(baseId, tableId) {
console.log(this.records);
const origin = await getTableRecords({
apiKey: this.argv.apiKey,
baseId,
Expand Down
20 changes: 11 additions & 9 deletions lib/print.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,17 @@ exports.teleportNotes = async function (argv) {
v.replace("-release-notes.md", "").replace(`notes/${argv.repo}-`, "")
);
for (const currentVersion of versions) {
const artifacts = (await teleport(argv, currentVersion)) || [];
for (const artifact of artifacts) {
await generateHTML({
...argv,
bucketRelease: argv.bucketRelease,
bucketPrebuilt: argv.bucketPrebuilt,
artifactName: artifact.split("/")[0],
version: `v${currentVersion}`,
});
const artifacts = (await teleport(argv, currentVersion, argv.fullDoseArtifact)) || [];
if (!argv.fullDoseArtifact) {
for (const artifact of artifacts) {
await generateHTML({
...argv,
bucketRelease: argv.bucketRelease,
bucketPrebuilt: argv.bucketPrebuilt,
artifactName: artifact.split("/")[0],
version: `v${currentVersion}`,
});
}
}
}
};
Expand Down
2 changes: 2 additions & 0 deletions lib/schedule.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ const refreshFullDose = async (argv) => {
...argv,
pullRequestNumber: record.number,
pullRequestTitle: record.title,
repo: argv.fullDoseRepo
}, pulls);
if (changed) {
await createNote(
{
...argv,
pullRequestNumber: record.number,
pullRequestTitle: record.title,
repo: argv.fullDoseRepo
},
true
);
Expand Down
15 changes: 10 additions & 5 deletions lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,19 @@ function awsCall(args, opts = spawnOptsInherit) {
return result;
}

function teleport(argv, version) {
function teleport(argv, version, fullDoseArtifact) {
const { bucketRelease } = argv;
if (!bucketRelease) {
return;
}
const artifacts = getArtifactNameMap(version);
const pkgName = getArtifactPath(getPkgConfig().name, version);
const items = artifacts?.length > 0 ? artifacts : [pkgName];
let items;
if (fullDoseArtifact) {
items = fullDoseArtifact.split(",").map((v) => v.trim());
} else {
const artifacts = getArtifactNameMap(version);
const pkgName = getArtifactPath(getPkgConfig().name, version);
items = artifacts?.length > 0 ? artifacts : [pkgName];
}
const sources = [
`${noteDir}/${argv.repo}-${version}-release-notes.md`,
`${noteDir}/${argv.repo}-${version}-release-notes.rst`,
Expand All @@ -126,7 +131,7 @@ function teleport(argv, version) {
items.forEach((name) => {
const dest = `s3://${bucketRelease}/${name}`;
sources.forEach((source) => {
const items = source.split('.');
const items = source.split(".");
const expanded = items[items.length - 1];
awsCall([
"s3",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@kungfu-trader/action-release-note",
"version": "1.0.2-alpha.29",
"version": "1.0.2-alpha.30",
"main": "dist/index.js",
"repository": "https://github.com/kungfu-trader/action-release-note",
"author": "Kungfu Trader",
Expand Down