Skip to content

Commit 45c5525

Browse files
committed
(config) Labels automaticos: has_conflicts, aprobado, andes
1 parent 83a7057 commit 45c5525

4 files changed

Lines changed: 179 additions & 0 deletions

File tree

.github/workflows/label_andes.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Andes linked PR label
2+
3+
on:
4+
pull_request:
5+
types: [opened, edited, synchronize, reopened]
6+
7+
jobs:
8+
andes-linked:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/github-script@v7
12+
with:
13+
script: |
14+
const pr = context.payload.pull_request;
15+
const { owner, repo } = context.repo;
16+
const issue_number = pr.number;
17+
18+
const body = pr.body || '';
19+
const regex = /https:\/\/github\.com\/andes\/(app|api)\/pull\/\d+/g;
20+
const linked = regex.test(body);
21+
22+
if (linked) {
23+
await github.rest.issues.addLabels({
24+
owner,
25+
repo,
26+
issue_number,
27+
labels: ['Andes']
28+
});
29+
} else {
30+
try {
31+
await github.rest.issues.removeLabel({
32+
owner,
33+
repo,
34+
issue_number,
35+
name: 'Andes'
36+
});
37+
} catch (e) {
38+
// label no existía
39+
}
40+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Approved label
2+
3+
on:
4+
pull_request_review:
5+
types: [submitted, dismissed, edited]
6+
7+
jobs:
8+
approved:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/github-script@v7
12+
with:
13+
script: |
14+
const { owner, repo } = context.repo;
15+
const pr = context.payload.pull_request;
16+
const issue_number = pr.number;
17+
18+
const reviews = await github.rest.pulls.listReviews({
19+
owner,
20+
repo,
21+
pull_number: issue_number
22+
});
23+
24+
const approvals = new Set(
25+
reviews.data
26+
.filter(r => r.state === 'APPROVED')
27+
.map(r => r.user.login)
28+
);
29+
30+
const labels = pr.labels.map(l => l.name);
31+
32+
if (approvals.size >= 2 && !labels.includes('En desarrollo') && !labels.includes('Cambio Requerido')) {
33+
await github.rest.issues.addLabels({
34+
owner,
35+
repo,
36+
issue_number,
37+
labels: ['Aprobado']
38+
});
39+
}
40+
else {
41+
try {
42+
await github.rest.issues.removeLabel({
43+
owner,
44+
repo,
45+
issue_number,
46+
name: 'Aprobado'
47+
});
48+
} catch (e) {
49+
// label no existía
50+
}
51+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Changes requested label
2+
3+
on:
4+
pull_request_review:
5+
types: [submitted, edited]
6+
7+
jobs:
8+
changes-requested:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/github-script@v7
12+
with:
13+
script: |
14+
const { owner, repo } = context.repo;
15+
const pr = context.payload.pull_request;
16+
const issue_number = pr.number;
17+
18+
const reviews = await github.rest.pulls.listReviews({
19+
owner,
20+
repo,
21+
pull_number: issue_number
22+
});
23+
24+
// última review por usuario
25+
const latestByUser = {};
26+
for (const r of reviews.data) {
27+
latestByUser[r.user.login] = r.state;
28+
}
29+
30+
const hasChangesRequested = Object.values(latestByUser)
31+
.includes('CHANGES_REQUESTED');
32+
33+
if (hasChangesRequested) {
34+
await github.rest.issues.addLabels({
35+
owner,
36+
repo,
37+
issue_number,
38+
labels: ['Cambio Requerido']
39+
});
40+
} else {
41+
try {
42+
await github.rest.issues.removeLabel({
43+
owner,
44+
repo,
45+
issue_number,
46+
name: 'Cambio Requerido'
47+
});
48+
} catch (e) {
49+
// label no existía
50+
}
51+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: PR conflict label
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize, reopened]
6+
7+
jobs:
8+
conflicts:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Check conflicts
12+
uses: actions/github-script@v7
13+
with:
14+
script: |
15+
const pr = context.payload.pull_request;
16+
const { owner, repo } = context.repo;
17+
const issue_number = pr.number;
18+
19+
if (pr.mergeable_state === 'dirty') {
20+
await github.rest.issues.addLabels({
21+
owner,
22+
repo,
23+
issue_number,
24+
labels: ['Conflictos']
25+
});
26+
} else {
27+
try {
28+
await github.rest.issues.removeLabel({
29+
owner,
30+
repo,
31+
issue_number,
32+
name: 'Conflictos'
33+
});
34+
} catch (e) {
35+
// label no existía
36+
}
37+
}

0 commit comments

Comments
 (0)