1
+ name : Remove Lockdown Label from PRs
2
+
3
+ on :
4
+ pull_request :
5
+ types : [closed]
6
+
7
+ permissions :
8
+ actions : write
9
+ pull-requests : write
10
+
11
+ jobs :
12
+ remove-labels :
13
+ if : github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'Branding')
14
+ runs-on : ubuntu-latest
15
+ steps :
16
+ - name : Checkout repository
17
+ uses : actions/checkout@v2
18
+
19
+ - name : PR's only change is <VersionFeature> in eng/Versions.props
20
+ id : only_version_feature_changed
21
+ uses : actions/github-script@v4
22
+ with :
23
+ script : |
24
+ const otherChangesMessage = "❌ Changes in eng/Versions.props other than <VersionFeature> found";
25
+ const onlyVersionFeatureMessage = "✅ PR's only change is <VersionFeature> in eng/Versions.props";
26
+ const prNumber = context.payload.pull_request.number;
27
+ const { data: files } = await github.pulls.listFiles({
28
+ owner: context.repo.owner,
29
+ repo: context.repo.repo,
30
+ pull_number: prNumber
31
+ });
32
+ // If files other than eng/Versions.props are changed, output message and exit
33
+ if (files.some(file => file.filename !== "eng/Versions.props")) {
34
+ console.log(otherChangesMessage);
35
+ core.exportVariable("only_version_feature_changed", "false");
36
+ return;
37
+ }
38
+ // Iterate through the patch of eng/Versions.props to check for changes other than <VersionFeature>
39
+ const versionsPropsFile = files.find(file => file.filename === "eng/Versions.props");
40
+ const patchLines = versionsPropsFile.patch.split("\n").filter(l => l.startsWith("+") || l.startsWith("-"));
41
+ for (const line of patchLines) {
42
+ if (!line.includes("<VersionFeature>")) {
43
+ console.log(otherChangesMessage);
44
+ core.exportVariable("only_version_feature_changed", "false");
45
+ return;
46
+ }
47
+ }
48
+ console.log(onlyVersionFeatureMessage);
49
+ core.exportVariable("only_version_feature_changed", "true");
50
+
51
+ - name : Remove Branch Lockdown label from other PRs targeting this branch
52
+ if : steps.only_version_feature_changed.outputs.only_version_feature_changed == 'true'
53
+ uses : actions/github-script@v4
54
+ with :
55
+ script : |
56
+ const prs = await github.pulls.list({
57
+ owner: context.repo.owner,
58
+ repo: context.repo.repo,
59
+ state: 'open',
60
+ base: github.event.pull_request.base.ref,
61
+ per_page: 300
62
+ });
63
+ const filtered_prs = prs.data
64
+ .filter(pr => pr.number !== github.context.payload.pull_request.number)
65
+ .filter(pr => pr.labels.map(label => label.name).includes('Branch Lockdown'));
66
+ for (const pr of filtered_prs) {
67
+ await github.issues.removeLabel({
68
+ owner: context.repo.owner,
69
+ repo: context.repo.repo,
70
+ issue_number: pr.number,
71
+ name: 'Branch Lockdown'
72
+ });
73
+ console.log(`Removed Branch Lockdown label from PR #${pr.number}`);
74
+ }
0 commit comments