-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathauto-copilot-code-cleanliness-review.yml
More file actions
310 lines (286 loc) · 11.4 KB
/
auto-copilot-code-cleanliness-review.yml
File metadata and controls
310 lines (286 loc) · 11.4 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
name: "Periodic Code Cleanliness Review"
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
on:
uto-amazonq-review.properties.json
schedule:
uto-amazonq-review.properties.json
# Run every 12 hours (at 00:00 and 12:00 UTC)
uto-amazonq-review.properties.json
- cron: '0 0,12 * * *'
uto-amazonq-review.properties.json
workflow_dispatch: # Allow manual trigger
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
permissions:
uto-amazonq-review.properties.json
contents: write
uto-amazonq-review.properties.json
pull-requests: write
uto-amazonq-review.properties.json
issues: write
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
jobs:
uto-amazonq-review.properties.json
code-cleanliness-review:
uto-amazonq-review.properties.json
runs-on: self-hosted
uto-amazonq-review.properties.json
steps:
uto-amazonq-review.properties.json
- name: Checkout code
uto-amazonq-review.properties.json
uses: actions/checkout@main
uto-amazonq-review.properties.json
with:
uto-amazonq-review.properties.json
fetch-depth: 0 # Full history for better analysis
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
- name: Analyze Large Files
uto-amazonq-review.properties.json
id: analyze
uto-amazonq-review.properties.json
run: |
uto-amazonq-review.properties.json
echo "## Large Files Analysis" > /tmp/analysis.md
uto-amazonq-review.properties.json
echo "" >> /tmp/analysis.md
uto-amazonq-review.properties.json
echo "Files larger than 500 lines that may benefit from splitting:" >> /tmp/analysis.md
uto-amazonq-review.properties.json
echo "" >> /tmp/analysis.md
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
# Find files larger than 500 lines (excluding common large files)
uto-amazonq-review.properties.json
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.java" -o -name "*.go" -o -name "*.cs" -o -name "*.rb" \) \
uto-amazonq-review.properties.json
! -path "*/node_modules/*" \
uto-amazonq-review.properties.json
! -path "*/dist/*" \
uto-amazonq-review.properties.json
! -path "*/build/*" \
uto-amazonq-review.properties.json
! -path "*/.venv/*" \
uto-amazonq-review.properties.json
! -path "*/vendor/*" \
uto-amazonq-review.properties.json
-exec wc -l {} \; | \
uto-amazonq-review.properties.json
awk '$1 > 500 {print $1 " lines: " $2}' | \
uto-amazonq-review.properties.json
sort -rn >> /tmp/analysis.md || echo "No large files found" >> /tmp/analysis.md
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
echo "" >> /tmp/analysis.md
uto-amazonq-review.properties.json
echo "## Code Complexity Analysis" >> /tmp/analysis.md
uto-amazonq-review.properties.json
echo "" >> /tmp/analysis.md
uto-amazonq-review.properties.json
echo "Files with potential complexity issues:" >> /tmp/analysis.md
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
# Find files with many functions/classes (basic heuristic)
uto-amazonq-review.properties.json
for ext in py js ts java go cs rb; do
uto-amazonq-review.properties.json
if [ "$ext" = "py" ]; then
uto-amazonq-review.properties.json
pattern="^def |^class "
uto-amazonq-review.properties.json
elif [ "$ext" = "js" ] || [ "$ext" = "ts" ]; then
uto-amazonq-review.properties.json
pattern="^function |^class |const.*=.*=>|function.*{$"
uto-amazonq-review.properties.json
else
uto-amazonq-review.properties.json
pattern="^class |^def |^func "
uto-amazonq-review.properties.json
fi
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
find . -type f -name "*.$ext" \
uto-amazonq-review.properties.json
! -path "*/node_modules/*" \
uto-amazonq-review.properties.json
! -path "*/dist/*" \
uto-amazonq-review.properties.json
! -path "*/build/*" \
uto-amazonq-review.properties.json
! -path "*/.venv/*" \
uto-amazonq-review.properties.json
! -path "*/vendor/*" \
uto-amazonq-review.properties.json
-exec sh -c 'count=$(grep -c "$1" "$2" 2>/dev/null || echo 0); if [ "$count" -gt 20 ]; then echo "$count definitions in $2"; fi' _ "$pattern" {} \; \
uto-amazonq-review.properties.json
2>/dev/null || true
uto-amazonq-review.properties.json
done | sort -rn >> /tmp/analysis.md
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
cat /tmp/analysis.md
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
- name: GitHub Copilot Code Review
uto-amazonq-review.properties.json
uses: github/copilot-cli-action@main
uto-amazonq-review.properties.json
with:
uto-amazonq-review.properties.json
query: |
uto-amazonq-review.properties.json
Review the codebase for code cleanliness issues:
uto-amazonq-review.properties.json
1. Identify files that are too large (>500 lines) and suggest how to split them into smaller, focused modules
uto-amazonq-review.properties.json
2. Look for code duplication and suggest refactoring opportunities
uto-amazonq-review.properties.json
3. Check for consistent code style and formatting
uto-amazonq-review.properties.json
4. Identify complex functions that could be simplified
uto-amazonq-review.properties.json
5. Suggest improvements for code organization and structure
uto-amazonq-review.properties.json
6. Check for proper separation of concerns
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
Provide actionable recommendations with specific file names and line numbers.
uto-amazonq-review.properties.json
env:
uto-amazonq-review.properties.json
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uto-amazonq-review.properties.json
continue-on-error: true
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
- name: Create Issue for Code Cleanliness Review
uto-amazonq-review.properties.json
uses: actions/github-script@main
uto-amazonq-review.properties.json
with:
uto-amazonq-review.properties.json
github-token: ${{ secrets.GITHUB_TOKEN }}
uto-amazonq-review.properties.json
script: |
uto-amazonq-review.properties.json
const fs = require('fs');
uto-amazonq-review.properties.json
const analysis = fs.readFileSync('/tmp/analysis.md', 'utf8');
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
const date = new Date().toISOString().split('T')[0];
uto-amazonq-review.properties.json
const title = `Code Cleanliness Review - ${date}`;
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
const body = `# Periodic Code Cleanliness Review
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
This is an automated review conducted every 12 hours to maintain code quality.
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
${analysis}
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
## Recommendations
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
Please review the analysis above and:
uto-amazonq-review.properties.json
1. Split large files (>500 lines) into smaller, focused modules
uto-amazonq-review.properties.json
2. Refactor complex functions into smaller, testable units
uto-amazonq-review.properties.json
3. Remove code duplication
uto-amazonq-review.properties.json
4. Ensure consistent code style
uto-amazonq-review.properties.json
5. Improve code organization and structure
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
## Next Steps
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
- Assign this issue to relevant team members
uto-amazonq-review.properties.json
- Create follow-up PRs to address findings
uto-amazonq-review.properties.json
- Document any architectural decisions
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
---
uto-amazonq-review.properties.json
*This issue was automatically generated by the Code Cleanliness Review workflow.*
uto-amazonq-review.properties.json
`;
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
// Check if similar issue exists (open, created in last 24 hours)
uto-amazonq-review.properties.json
const issues = await github.rest.issues.listForRepo({
uto-amazonq-review.properties.json
owner: context.repo.owner,
uto-amazonq-review.properties.json
repo: context.repo.repo,
uto-amazonq-review.properties.json
state: 'open',
uto-amazonq-review.properties.json
labels: ['code-cleanliness', 'automated'],
uto-amazonq-review.properties.json
per_page: 10
uto-amazonq-review.properties.json
});
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
const recentIssue = issues.data.find(issue => {
uto-amazonq-review.properties.json
const createdAt = new Date(issue.created_at);
uto-amazonq-review.properties.json
const hoursSinceCreation = (Date.now() - createdAt) / (1000 * 60 * 60);
uto-amazonq-review.properties.json
return hoursSinceCreation < 24;
uto-amazonq-review.properties.json
});
uto-amazonq-review.properties.json
uto-amazonq-review.properties.json
if (recentIssue) {
uto-amazonq-review.properties.json
console.log(`Recent issue found: #${recentIssue.number}, skipping creation`);
uto-amazonq-review.properties.json
// Update existing issue with new analysis
uto-amazonq-review.properties.json
await github.rest.issues.createComment({
uto-amazonq-review.properties.json
owner: context.repo.owner,
uto-amazonq-review.properties.json
repo: context.repo.repo,
uto-amazonq-review.properties.json
issue_number: recentIssue.number,
uto-amazonq-review.properties.json
body: `## Updated Analysis (${date})\n\n${analysis}`
uto-amazonq-review.properties.json
});
uto-amazonq-review.properties.json
} else {
uto-amazonq-review.properties.json
// Create new issue
uto-amazonq-review.properties.json
await github.rest.issues.create({
uto-amazonq-review.properties.json
owner: context.repo.owner,
uto-amazonq-review.properties.json
repo: context.repo.repo,
uto-amazonq-review.properties.json
title: title,
uto-amazonq-review.properties.json
body: body,
uto-amazonq-review.properties.json
labels: ['code-cleanliness', 'automated', 'needs-review']
uto-amazonq-review.properties.json
});
uto-amazonq-review.properties.json
}
uto-amazonq-review.properties.json