-
-
Notifications
You must be signed in to change notification settings - Fork 103
108 lines (89 loc) · 3.97 KB
/
update-tsc.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
name: TSC Member Update
on:
pull_request:
types: [closed]
paths:
- 'MAINTAINERS.yaml'
jobs:
update_tsc_member:
if: github.event.pull_request.merged
name: Update TSC Member
runs-on: ubuntu-latest
steps:
- name: Checkout main branch
uses: actions/checkout@v2
with:
ref: master
path: community-main
- name: Checkout one commit before last one
uses: actions/checkout@v2
with:
fetch-depth: 2
ref: master
path: community
- run: cd community && git checkout HEAD^
- name: Install js-yaml
run: npm install [email protected]
- name: Compare files
id: compare-files
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const yaml = require('js-yaml');
const mainFile = yaml.load(fs.readFileSync('./community-main/MAINTAINERS.yaml', 'utf8'));
const prFile = yaml.load(fs.readFileSync('./community/MAINTAINERS.yaml', 'utf8'));
// Variables to store the updated value and GitHub user
let updatedMaintainers = [];
let updatedValue;
// Function to check if isTscMember value has changed
function hasIsTscMemberChanged(maintainerGithub) {
const mainMaintainer = mainFile.find(m => m.github === maintainerGithub);
const prMaintainer = prFile.find(m => m.github === maintainerGithub);
console.log(`Checking for ${maintainerGithub}`);
if (!mainMaintainer || !prMaintainer) {
console.error('Maintainer not found:', maintainerGithub);
return;
}
console.log(`${maintainerGithub} in mainFile has isTscMember as:`, mainMaintainer.isTscMember);
console.log(`${maintainerGithub} in prFile has isTscMember as:`, prMaintainer.isTscMember);
if (mainMaintainer.isTscMember !== prMaintainer.isTscMember) {
console.log(`isTscMember value changed for ${maintainerGithub}`);
updatedMaintainers.push({ githubUser: maintainerGithub, updatedValue: mainMaintainer.isTscMember });
updatedValue = mainMaintainer.isTscMember;
}
}
// Loop over all maintainers and find the changes
mainFile.forEach(maintainer => hasIsTscMemberChanged(maintainer.github));
// Log final results
console.log("Final updatedValue:", updatedValue);
console.log("Final updatedMaintainers:", JSON.stringify(updatedMaintainers));
// Set outputs
core.setOutput("updatedValue", updatedValue);
core.setOutput("updatedMaintainers", JSON.stringify(updatedMaintainers));
outputs:
updatedValue: ${{ steps.compare-files.outputs.updatedValue }}
updatedMaintainers: ${{ steps.compare-files.outputs.updatedMaintainers }}
add_to_tsc_members_team:
needs: update_tsc_member
if: needs.update_tsc_member.outputs.updatedValue
runs-on: ubuntu-latest
steps:
- name: Add new maintainers to the team
uses: actions/github-script@v6
with:
github-token: ${{ secrets.BOT_TOKEN }}
script: |
const updatedMaintainers = JSON.parse('${{ needs.update_tsc_member.outputs.updatedMaintainers }}');
for (const maintainerObj of updatedMaintainers) {
const maintainer = maintainerObj.githubUser;
try {
await github.request('PUT /orgs/{org}/teams/{team_slug}/memberships/{username}', {
org: 'asyncapi',
team_slug: 'tsc_members',
username: tsc_members
});
} catch (error) {
console.error(`Failed to add ${maintainer} to the team:`, error);
}
}