Skip to content

Commit a8e3be0

Browse files
authored
fix(validation): resolve manifest URL failures (#154)
1 parent 769c31d commit a8e3be0

26 files changed

Lines changed: 291 additions & 186 deletions

.github/workflows/scheduled-checks.yml

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,20 @@ jobs:
2929

3030
- name: Validate URLs
3131
id: validate
32-
run: npm run test:urls
32+
run: npm run test:urls 2>&1 | tee url-validation.log
3333
continue-on-error: true
34+
env:
35+
NO_COLOR: '1'
3436

3537
- name: Create issue if URLs are broken
3638
if: steps.validate.outcome == 'failure'
3739
uses: actions/github-script@v8
3840
with:
3941
script: |
42+
const fs = require('node:fs');
4043
const title = '🔗 Broken URLs detected in manifests';
44+
const output = fs.readFileSync('url-validation.log', 'utf8');
45+
const excerpt = output.slice(-6000);
4146
const body = `## Scheduled URL Validation Failed
4247
4348
The weekly URL validation check has detected broken or inaccessible URLs in the manifest files.
@@ -49,8 +54,10 @@ jobs:
4954
- Update or remove broken URLs
5055
- Consider if these tools/services have been discontinued
5156
52-
### Affected Files
53-
Check the workflow logs for specific files and URLs that failed validation.
57+
### Validation Output
58+
\`\`\`text
59+
${excerpt}
60+
\`\`\`
5461
5562
---
5663
*This issue was automatically created by the scheduled URL validation workflow.*`;
@@ -80,6 +87,35 @@ jobs:
8087
});
8188
}
8289
90+
- name: Close resolved URL validation issues
91+
if: steps.validate.outcome == 'success'
92+
uses: actions/github-script@v8
93+
with:
94+
script: |
95+
const issues = await github.paginate(github.rest.issues.listForRepo, {
96+
owner: context.repo.owner,
97+
repo: context.repo.repo,
98+
state: 'open',
99+
labels: 'automated,url-validation',
100+
per_page: 100
101+
});
102+
103+
for (const issue of issues) {
104+
await github.rest.issues.createComment({
105+
owner: context.repo.owner,
106+
repo: context.repo.repo,
107+
issue_number: issue.number,
108+
body: `URL validation passed in ${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}. Closing this automated maintenance issue.`
109+
});
110+
await github.rest.issues.update({
111+
owner: context.repo.owner,
112+
repo: context.repo.repo,
113+
issue_number: issue.number,
114+
state: 'closed',
115+
state_reason: 'completed'
116+
});
117+
}
118+
83119
- name: Fail workflow after reporting broken URLs
84120
if: steps.validate.outcome == 'failure'
85121
run: exit 1

data/changelogs.json

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,139 @@
11
{
22
"version": 1,
33
"entries": [
4+
{
5+
"id": "2026-07-21-url-validation",
6+
"date": "2026-07-21",
7+
"summary": "Normalized and repaired manifest URLs flagged by scheduled validation",
8+
"changes": [
9+
{
10+
"category": "clis",
11+
"id": "amazon-q-developer-cli",
12+
"change": "updated",
13+
"fields": ["websiteUrl"]
14+
},
15+
{
16+
"category": "clis",
17+
"id": "deepv-code",
18+
"change": "updated",
19+
"fields": ["docsUrl", "websiteUrl"]
20+
},
21+
{
22+
"category": "clis",
23+
"id": "droid-cli",
24+
"change": "updated",
25+
"fields": ["resourceUrls"]
26+
},
27+
{
28+
"category": "clis",
29+
"id": "qoder-cli",
30+
"change": "updated",
31+
"fields": ["docsUrl"]
32+
},
33+
{
34+
"category": "extensions",
35+
"id": "gemini-code-assist",
36+
"change": "updated",
37+
"fields": ["communityUrls", "websiteUrl"]
38+
},
39+
{
40+
"category": "ides",
41+
"id": "air",
42+
"change": "updated",
43+
"fields": ["docsUrl", "resourceUrls", "websiteUrl"]
44+
},
45+
{
46+
"category": "models",
47+
"id": "gemini-3-1-pro-preview",
48+
"change": "updated",
49+
"fields": ["sources"]
50+
},
51+
{
52+
"category": "models",
53+
"id": "gemini-3-flash",
54+
"change": "updated",
55+
"fields": ["sources"]
56+
},
57+
{
58+
"category": "models",
59+
"id": "glm-4-6v",
60+
"change": "updated",
61+
"fields": ["websiteUrl"]
62+
},
63+
{
64+
"category": "models",
65+
"id": "gpt-5-2",
66+
"change": "updated",
67+
"fields": ["sources"]
68+
},
69+
{
70+
"category": "models",
71+
"id": "gpt-5-6-luna",
72+
"change": "updated",
73+
"fields": ["sources"]
74+
},
75+
{
76+
"category": "models",
77+
"id": "gpt-5-6-sol",
78+
"change": "updated",
79+
"fields": ["sources"]
80+
},
81+
{
82+
"category": "models",
83+
"id": "gpt-5-6-terra",
84+
"change": "updated",
85+
"fields": ["sources"]
86+
},
87+
{
88+
"category": "providers",
89+
"id": "alibaba",
90+
"change": "updated",
91+
"fields": ["communityUrls"]
92+
},
93+
{
94+
"category": "providers",
95+
"id": "anthropic",
96+
"change": "updated",
97+
"fields": ["applyKeyUrl", "sources"]
98+
},
99+
{
100+
"category": "providers",
101+
"id": "google",
102+
"change": "updated",
103+
"fields": ["sources"]
104+
},
105+
{
106+
"category": "providers",
107+
"id": "meta",
108+
"change": "updated",
109+
"fields": ["applyKeyUrl", "docsUrl"]
110+
},
111+
{
112+
"category": "providers",
113+
"id": "moonshot",
114+
"change": "updated",
115+
"fields": ["platformUrls"]
116+
},
117+
{
118+
"category": "providers",
119+
"id": "openai",
120+
"change": "updated",
121+
"fields": ["sources"]
122+
},
123+
{
124+
"category": "vendors",
125+
"id": "orionstar",
126+
"change": "updated",
127+
"fields": ["communityUrls"]
128+
},
129+
{
130+
"category": "vendors",
131+
"id": "tabnine",
132+
"change": "updated",
133+
"fields": ["communityUrls"]
134+
}
135+
]
136+
},
4137
{
5138
"id": "2026-07-20-latest-models",
6139
"date": "2026-07-20",

manifests/clis/amazon-q-developer-cli.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
}
4040
},
4141
"verified": false,
42-
"websiteUrl": "https://aws.amazon.com/q/developer/",
42+
"websiteUrl": "https://aws.amazon.com/q/developer",
4343
"docsUrl": "https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line.html",
4444
"vendor": "AWS",
4545
"latestVersion": "v1.18.1",

manifests/clis/deepv-code.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
}
4040
},
4141
"verified": false,
42-
"websiteUrl": "https://dvcode.deepvlab.ai/",
43-
"docsUrl": "https://deepvcode.com/guides/",
42+
"websiteUrl": "https://dvcode.deepvlab.ai",
43+
"docsUrl": "https://deepvcode.com/guides",
4444
"vendor": "OrionStar",
4545
"latestVersion": "0.1.0",
4646
"githubUrl": "https://github.com/OrionStarAI/DeepVCode",

manifests/clis/droid-cli.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"download": "https://app.factory.ai/cli",
7373
"changelog": null,
7474
"pricing": "https://docs.factory.ai/pricing",
75-
"mcp": "https://docs.factory.ai/cli/configuration/model-context-protocol",
75+
"mcp": "https://docs.factory.ai/cli/configuration/mcp",
7676
"issue": null
7777
},
7878
"communityUrls": {

manifests/clis/qoder-cli.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
},
4141
"verified": false,
4242
"websiteUrl": "https://qoder.com/cli",
43-
"docsUrl": "https://docs.qoder.com/cli/quick-start",
43+
"docsUrl": "https://docs.qoder.com/en/cli/quick-start",
4444
"vendor": "Alibaba",
4545
"latestVersion": "Latest",
4646
"githubUrl": null,

manifests/collections.json

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,7 +1078,7 @@
10781078
}
10791079
},
10801080
"name": "Building with Claude Code",
1081-
"url": "https://www.anthropic.com/news/claude-code",
1081+
"url": "https://www.anthropic.com/news/claude-3-7-sonnet",
10821082
"description": "Introduction to Claude Code and its capabilities"
10831083
},
10841084
{
@@ -1233,61 +1233,6 @@
12331233
"name": "AI-Native Development",
12341234
"url": "https://lovable.dev/blog",
12351235
"description": "Building applications designed for AI-first workflows"
1236-
},
1237-
{
1238-
"translations": {
1239-
"en": {
1240-
"name": "The Coding Copilot Pattern",
1241-
"description": "Common patterns for effective AI pair programming"
1242-
},
1243-
"de": {
1244-
"name": "Das Coding-Copilot-Muster",
1245-
"description": "Gemeinsame Muster für effektives KI-Pair-Programming"
1246-
},
1247-
"es": {
1248-
"name": "El Patrón de Copiloto de Codificación",
1249-
"description": "Patrones comunes para programación en pareja IA efectiva"
1250-
},
1251-
"fr": {
1252-
"name": "Le Pattern Copilote de Codage",
1253-
"description": "Motifs courants pour la programmation en paire IA efficace"
1254-
},
1255-
"id": {
1256-
"name": "Pola Coding Copilot",
1257-
"description": "Pola umum untuk pair programming AI yang efektif"
1258-
},
1259-
"ja": {
1260-
"name": "コーディングコパイロットパターン",
1261-
"description": "効果的なAIペアプログラミングのための一般的なパターン"
1262-
},
1263-
"ko": {
1264-
"name": "코딩 코파일럿 패턴",
1265-
"description": "효과적인 AI 페어 프로그래밍을 위한 일반적인 패턴"
1266-
},
1267-
"pt": {
1268-
"name": "O Padrão Copiloto de Codificação",
1269-
"description": "Padrões comuns para programação em par AI eficaz"
1270-
},
1271-
"ru": {
1272-
"name": "Паттерн coding-копилота",
1273-
"description": "Общие паттерны для эффективной pair-программирования с ИИ"
1274-
},
1275-
"tr": {
1276-
"name": "Kodlama Copilot Pattern",
1277-
"description": "Etkili AI pair programming için yaygın patternlar"
1278-
},
1279-
"zh-Hans": {
1280-
"name": "编码副驾驶模式",
1281-
"description": "有效 AI 结对编程的常见模式"
1282-
},
1283-
"zh-Hant": {
1284-
"name": "編碼副駕駛員模式",
1285-
"description": "有效 AI 結對編程的常見模式"
1286-
}
1287-
},
1288-
"name": "The Coding Copilot Pattern",
1289-
"url": "https://lovable.dev/patterns",
1290-
"description": "Common patterns for effective AI pair programming"
12911236
}
12921237
]
12931238
}

manifests/extensions/gemini-code-assist.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"lastVerifiedAt": "2026-07-19",
6565
"verifiedBy": "codex-agent",
6666
"confidence": "medium",
67-
"websiteUrl": "https://codeassist.google/",
67+
"websiteUrl": "https://codeassist.google",
6868
"docsUrl": "https://docs.cloud.google.com/gemini/docs/codeassist/overview",
6969
"vendor": "Google",
7070
"latestVersion": "VS Code 2.87.0 / JetBrains 1.54.1",
@@ -114,7 +114,7 @@
114114
"youtube": "https://www.youtube.com/@GoogleDevelopers",
115115
"discord": null,
116116
"reddit": null,
117-
"blog": "https://developers.google.com/code-assist/blog"
117+
"blog": null
118118
},
119119
"relatedProducts": [],
120120
"supportedIdes": [

manifests/ides/air.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
}
4040
},
4141
"verified": false,
42-
"websiteUrl": "https://air.dev/",
43-
"docsUrl": "https://www.jetbrains.com/help/air/",
42+
"websiteUrl": "https://air.dev",
43+
"docsUrl": "https://www.jetbrains.com/help/air",
4444
"vendor": "JetBrains",
4545
"latestVersion": "Preview",
4646
"githubUrl": null,
@@ -55,7 +55,7 @@
5555
}
5656
],
5757
"resourceUrls": {
58-
"download": "https://air.dev/",
58+
"download": "https://air.dev",
5959
"changelog": null,
6060
"pricing": null,
6161
"mcp": null,

manifests/models/gemini-3-1-pro-preview.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"fields": ["tokenPricing"]
6060
},
6161
{
62-
"url": "https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro/",
62+
"url": "https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-pro",
6363
"title": "Gemini 3.1 Pro: A smarter model for your most complex tasks",
6464
"fields": ["name", "description", "releaseDate", "lifecycle"]
6565
}

0 commit comments

Comments
 (0)