-
Notifications
You must be signed in to change notification settings - Fork 476
132 lines (115 loc) · 4.71 KB
/
cross-version-links.yml
File metadata and controls
132 lines (115 loc) · 4.71 KB
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
name: Cross-Version Link Check
on:
pull_request:
types: [opened, synchronize, reopened]
paths:
- 'src/current/**/*.md'
- 'src/current/_includes/**/*.md'
jobs:
check-cross-version-links:
name: Check for cross-version links
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Need full history to get all changed files
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@cc08e170f4447237bcaf8acaacfa615b9cb86612 # v35
with:
files: |
src/current/**/*.md
src/current/_includes/**/*.md
separator: ' '
- name: Debug - List changed files
if: steps.changed-files.outputs.any_changed == 'true'
run: |
echo "Changed files:"
echo "${{ steps.changed-files.outputs.all_changed_files }}"
- name: Run cross-version link linter
if: steps.changed-files.outputs.any_changed == 'true'
id: lint
run: |
echo "Running cross-version link linter on changed files..."
python .github/scripts/cross_version_link_linter.py ${{ steps.changed-files.outputs.all_changed_files }}
continue-on-error: true
- name: Post PR comment with violations
if: steps.changed-files.outputs.any_changed == 'true' && steps.lint.outcome == 'failure'
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
// Read the comment from the file created by the linter
let comment = '';
try {
comment = fs.readFileSync('pr-comment.md', 'utf8');
} catch (error) {
comment = '❌ **Cross-Version Link Check Failed**\n\nCross-version link violations were detected, but the detailed report could not be generated.';
}
// Check if we've already commented on this PR
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('Cross-Version Link Check')
);
if (botComment) {
// Update existing comment
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: comment
});
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: comment
});
}
- name: Post success comment if previously failed
if: steps.changed-files.outputs.any_changed == 'true' && steps.lint.outcome == 'success'
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// Check if we've previously commented with failures
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const botComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('Cross-Version Link Check Failed')
);
if (botComment) {
// Update to success message
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: '✅ **Cross-Version Link Check Passed**\n\nAll cross-version link issues have been resolved. Good job!'
});
}
- name: Fail if violations found
if: steps.changed-files.outputs.any_changed == 'true' && steps.lint.outcome == 'failure'
run: |
echo "❌ Cross-version link violations were found. Please fix them before merging."
exit 1
- name: Success message
if: steps.changed-files.outputs.any_changed == 'true' && steps.lint.outcome == 'success'
run: |
echo "✅ No cross-version link violations found!"