Skip to content

Commit 2c61c60

Browse files
authored
npm pinning (again) (#2462)
1 parent 9b46465 commit 2c61c60

File tree

5 files changed

+330
-57
lines changed

5 files changed

+330
-57
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const fs = require('fs');
2+
const { parse } = require('yaml');
3+
const { Octokit } = require('@octokit/rest');
4+
5+
async function main() {
6+
// Get inputs from environment
7+
const token = process.env.GITHUB_TOKEN;
8+
const labelName = process.env.LABEL_NAME;
9+
const issueNumber = parseInt(process.env.ISSUE_NUMBER);
10+
const owner = process.env.REPO_OWNER;
11+
const repo = process.env.REPO_NAME;
12+
13+
if (!labelName.startsWith('component:')) {
14+
console.error('Label does not match expected pattern');
15+
process.exit(1);
16+
}
17+
18+
const componentName = labelName.replace('component:', '');
19+
console.log(`Processing component: ${componentName}`);
20+
21+
// Read and parse component_owners.yml
22+
const yamlContent = fs.readFileSync('.github/component_owners.yml', 'utf8');
23+
const data = parse(yamlContent);
24+
25+
if (!data || !data.components) {
26+
console.error('Invalid component_owners.yml structure');
27+
process.exit(1);
28+
}
29+
30+
const components = data.components;
31+
32+
if (!(componentName in components)) {
33+
console.error(`Component '${componentName}' not found in component_owners.yml`);
34+
process.exit(1);
35+
}
36+
37+
const owners = components[componentName];
38+
39+
if (!owners || owners.length === 0) {
40+
console.error(`No owners found for component '${componentName}'`);
41+
process.exit(1);
42+
}
43+
44+
console.log(`Found owners: ${owners.join(', ')}`);
45+
46+
// Assign the issue to the owners
47+
const octokit = new Octokit({ auth: token });
48+
49+
await octokit.rest.issues.addAssignees({
50+
owner,
51+
repo,
52+
issue_number: issueNumber,
53+
assignees: owners
54+
});
55+
56+
console.log(`Successfully assigned issue #${issueNumber} to ${owners.join(', ')}`);
57+
}
58+
59+
main().catch(error => {
60+
console.error(error);
61+
process.exit(1);
62+
});

.github/scripts/package-lock.json

Lines changed: 240 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/scripts/package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"name": "workflows",
3+
"version": "1.0.0",
4+
"description": "Dependencies for GitHub Action workflows",
5+
"private": true,
6+
"dependencies": {
7+
"@octokit/rest": "^21.0.2",
8+
"yaml": "2.8.1"
9+
}
10+
}

.github/workflows/assign-issue-owners.yml

Lines changed: 15 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -21,61 +21,19 @@ jobs:
2121

2222
- name: Setup Node.js
2323
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
24-
25-
- name: Install yaml dependency used below
26-
run: npm install [email protected] --integrity=sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==
27-
28-
- name: Parse component label and assign owners
29-
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
3024
with:
31-
script: |
32-
const fs = require('fs');
33-
const { parse } = require('yaml');
34-
35-
// Extract component name from label
36-
const labelName = context.payload.label.name;
37-
38-
if (!labelName.startsWith('component:')) {
39-
core.setFailed('Label does not match expected pattern');
40-
return;
41-
}
42-
43-
const componentName = labelName.replace('component:', '');
44-
console.log(`Processing component: ${componentName}`);
45-
46-
// Read and parse component_owners.yml
47-
const yamlContent = fs.readFileSync('.github/component_owners.yml', 'utf8');
48-
const data = parse(yamlContent);
49-
50-
if (!data || !data.components) {
51-
core.setFailed('Invalid component_owners.yml structure');
52-
return;
53-
}
54-
55-
const components = data.components;
56-
57-
if (!(componentName in components)) {
58-
core.setFailed(`Component '${componentName}' not found in component_owners.yml`);
59-
return;
60-
}
61-
62-
const owners = components[componentName];
63-
64-
if (!owners || owners.length === 0) {
65-
core.setFailed(`No owners found for component '${componentName}'`);
66-
return;
67-
}
68-
69-
console.log(`Found owners: ${owners.join(', ')}`);
70-
71-
// Assign the issue to the owners
72-
const issueNumber = context.payload.issue.number;
73-
74-
await github.rest.issues.addAssignees({
75-
owner: context.repo.owner,
76-
repo: context.repo.repo,
77-
issue_number: issueNumber,
78-
assignees: owners
79-
});
80-
81-
console.log(`Successfully assigned issue #${issueNumber} to ${owners.join(', ')}`);
25+
cache: npm
26+
cache-dependency-path: .github/scripts/package-lock.json
27+
28+
- name: Install dependencies
29+
run: npm ci
30+
working-directory: .github/scripts
31+
32+
- name: Assign issue to component owners
33+
run: node .github/scripts/assign-issue-owners.js
34+
env:
35+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36+
LABEL_NAME: ${{ github.event.label.name }}
37+
ISSUE_NUMBER: ${{ github.event.issue.number }}
38+
REPO_OWNER: ${{ github.repository_owner }}
39+
REPO_NAME: ${{ github.event.repository.name }}

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,6 @@ bin
5656

5757
# Gradle build scans
5858
build-scan.txt
59+
60+
# Node
61+
node_modules

0 commit comments

Comments
 (0)