Merge pull request #10392 from backstage/rugvip/tweaks

workflows: more tweaks to the changeset feedback automation
This commit is contained in:
Patrik Oldsberg
2022-03-23 13:10:08 +01:00
committed by GitHub
2 changed files with 32 additions and 24 deletions
@@ -7,6 +7,7 @@ on:
permissions:
issues: write
pull-requests: write
jobs:
feedback:
@@ -15,17 +16,19 @@ jobs:
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
# Fetch the commit that's merged into the base rather than the target ref
# This will let us diff only the contents of the PR, without fetching more history
ref: 'refs/pull/${{ github.event.pull_request.number }}/merge'
- name: fetch base
run: git fetch origin ${{ github.base_ref }}
run: git fetch --depth 1 origin ${{ github.base_ref }}
# We avoid using the in-source script since this workflow has elevated permissions that we don't want to expose
- name: Generate Feedback
id: generate-feedback
run: |
wget -O generate.js https://raw.githubusercontent.com/backstage/backstage/master/scripts/generate-changeset-feedback.js 1>&2
node generate.js origin/${{ github.base_ref }} > feedback.txt
node generate.js FETCH_HEAD > feedback.txt
- name: Post Feedback
uses: actions/github-script@v5
@@ -33,7 +36,6 @@ jobs:
env:
ISSUE_NUMBER: ${{ github.event.pull_request.number }}
with:
github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
script: |
const owner = "backstage";
const repo = "backstage";
+26 -20
View File
@@ -80,35 +80,41 @@ async function listPackages() {
}));
}
async function parseChangesets(filePaths) {
async function loadChangesets(filePaths) {
const changesets = [];
for (const filePath of filePaths) {
if (!filePath.startsWith('.changeset/') || !filePath.endsWith('.md')) {
continue;
}
const content = await fs.promises.readFile(filePath, 'utf8');
let lines = content.split(/\r?\n/);
try {
const content = await fs.promises.readFile(filePath, 'utf8');
let lines = content.split(/\r?\n/);
lines = lines.slice(lines.findIndex(line => line === '---') + 1);
lines = lines.slice(
0,
lines.findIndex(line => line === '---'),
);
lines = lines.slice(lines.findIndex(line => line === '---') + 1);
lines = lines.slice(
0,
lines.findIndex(line => line === '---'),
);
const bumps = new Map();
for (const line of lines) {
const match = line.match(/^'(.*)': (patch|minor|major)$/);
if (!match) {
throw new Error(`Invalid changeset line: ${line}`);
const bumps = new Map();
for (const line of lines) {
const match = line.match(/^'(.*)': (patch|minor|major)$/);
if (!match) {
throw new Error(`Invalid changeset line: ${line}`);
}
bumps.set(match[1], match[2]);
}
bumps.set(match[1], match[2]);
changesets.push({
filePath,
bumps,
});
} catch (error) {
if (error.code !== 'ENOENT') {
throw error;
}
}
changesets.push({
filePath,
bumps,
});
}
return changesets;
@@ -247,7 +253,7 @@ async function main() {
const changedFiles = await listChangedFiles(diffRef);
const packages = await listPackages();
const changesets = await parseChangesets(changedFiles);
const changesets = await loadChangesets(changedFiles);
const changedPackages = await listChangedPackages(changedFiles, packages);
process.stderr.write(