@dependabit/action 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +225 -0
  4. package/action.yml +85 -0
  5. package/dist/actions/check.d.ts +33 -0
  6. package/dist/actions/check.d.ts.map +1 -0
  7. package/dist/actions/check.js +162 -0
  8. package/dist/actions/check.js.map +1 -0
  9. package/dist/actions/generate.d.ts +9 -0
  10. package/dist/actions/generate.d.ts.map +1 -0
  11. package/dist/actions/generate.js +152 -0
  12. package/dist/actions/generate.js.map +1 -0
  13. package/dist/actions/update.d.ts +9 -0
  14. package/dist/actions/update.d.ts.map +1 -0
  15. package/dist/actions/update.js +246 -0
  16. package/dist/actions/update.js.map +1 -0
  17. package/dist/actions/validate.d.ts +33 -0
  18. package/dist/actions/validate.d.ts.map +1 -0
  19. package/dist/actions/validate.js +226 -0
  20. package/dist/actions/validate.js.map +1 -0
  21. package/dist/index.d.ts +8 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +35 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/logger.d.ts +114 -0
  26. package/dist/logger.d.ts.map +1 -0
  27. package/dist/logger.js +154 -0
  28. package/dist/logger.js.map +1 -0
  29. package/dist/utils/agent-config.d.ts +31 -0
  30. package/dist/utils/agent-config.d.ts.map +1 -0
  31. package/dist/utils/agent-config.js +42 -0
  32. package/dist/utils/agent-config.js.map +1 -0
  33. package/dist/utils/agent-router.d.ts +33 -0
  34. package/dist/utils/agent-router.d.ts.map +1 -0
  35. package/dist/utils/agent-router.js +57 -0
  36. package/dist/utils/agent-router.js.map +1 -0
  37. package/dist/utils/errors.d.ts +51 -0
  38. package/dist/utils/errors.d.ts.map +1 -0
  39. package/dist/utils/errors.js +219 -0
  40. package/dist/utils/errors.js.map +1 -0
  41. package/dist/utils/inputs.d.ts +35 -0
  42. package/dist/utils/inputs.d.ts.map +1 -0
  43. package/dist/utils/inputs.js +47 -0
  44. package/dist/utils/inputs.js.map +1 -0
  45. package/dist/utils/metrics.d.ts +66 -0
  46. package/dist/utils/metrics.d.ts.map +1 -0
  47. package/dist/utils/metrics.js +116 -0
  48. package/dist/utils/metrics.js.map +1 -0
  49. package/dist/utils/outputs.d.ts +43 -0
  50. package/dist/utils/outputs.d.ts.map +1 -0
  51. package/dist/utils/outputs.js +146 -0
  52. package/dist/utils/outputs.js.map +1 -0
  53. package/dist/utils/performance.d.ts +100 -0
  54. package/dist/utils/performance.d.ts.map +1 -0
  55. package/dist/utils/performance.js +185 -0
  56. package/dist/utils/performance.js.map +1 -0
  57. package/dist/utils/reporter.d.ts +43 -0
  58. package/dist/utils/reporter.d.ts.map +1 -0
  59. package/dist/utils/reporter.js +122 -0
  60. package/dist/utils/reporter.js.map +1 -0
  61. package/dist/utils/secrets.d.ts +45 -0
  62. package/dist/utils/secrets.d.ts.map +1 -0
  63. package/dist/utils/secrets.js +94 -0
  64. package/dist/utils/secrets.js.map +1 -0
  65. package/package.json +45 -0
  66. package/src/actions/check.ts +223 -0
  67. package/src/actions/generate.ts +181 -0
  68. package/src/actions/update.ts +284 -0
  69. package/src/actions/validate.ts +292 -0
  70. package/src/index.ts +43 -0
  71. package/src/logger.test.ts +200 -0
  72. package/src/logger.ts +210 -0
  73. package/src/utils/agent-config.ts +61 -0
  74. package/src/utils/agent-router.ts +67 -0
  75. package/src/utils/errors.ts +251 -0
  76. package/src/utils/inputs.ts +75 -0
  77. package/src/utils/metrics.ts +169 -0
  78. package/src/utils/outputs.ts +202 -0
  79. package/src/utils/performance.ts +248 -0
  80. package/src/utils/reporter.ts +169 -0
  81. package/src/utils/secrets.ts +124 -0
  82. package/test/actions/check.test.ts +216 -0
  83. package/test/actions/generate.test.ts +82 -0
  84. package/test/actions/update.test.ts +70 -0
  85. package/test/actions/validate.test.ts +257 -0
  86. package/test/utils/agent-config.test.ts +112 -0
  87. package/test/utils/agent-router.test.ts +129 -0
  88. package/test/utils/metrics.test.ts +221 -0
  89. package/test/utils/reporter.test.ts +196 -0
  90. package/test/utils/secrets.test.ts +217 -0
  91. package/tsconfig.json +15 -0
  92. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Generate Action
3
+ * Initial manifest generation by analyzing the repository
4
+ */
5
+ import * as core from '@actions/core';
6
+ import { join } from 'node:path';
7
+ import { Detector, GitHubCopilotProvider } from '@dependabit/detector';
8
+ import { writeManifest } from '@dependabit/manifest';
9
+ import { createLogger, withTiming } from '../logger.js';
10
+ import { parseGenerateInputs } from '../utils/inputs.js';
11
+ import { setGenerateOutputs, createGenerateSummary, createDependencyListSummary } from '../utils/outputs.js';
12
+ /**
13
+ * Main entry point for the generate action wrapped for error handling
14
+ */
15
+ export async function run() {
16
+ try {
17
+ await generateAction();
18
+ }
19
+ catch (error) {
20
+ core.setFailed(error instanceof Error ? error.message : String(error));
21
+ }
22
+ }
23
+ /**
24
+ * Generate action implementation
25
+ */
26
+ async function generateAction() {
27
+ const logger = createLogger({ enableDebug: true });
28
+ try {
29
+ logger.startGroup('📋 Parsing Action Inputs');
30
+ const inputs = parseGenerateInputs();
31
+ logger.info('Action inputs parsed', {
32
+ repoPath: inputs.repoPath,
33
+ llmProvider: inputs.llmProvider,
34
+ llmModel: inputs.llmModel || 'default',
35
+ manifestPath: inputs.manifestPath
36
+ });
37
+ logger.endGroup();
38
+ // Initialize LLM provider
39
+ logger.startGroup('🤖 Initializing LLM Provider');
40
+ const llmProvider = new GitHubCopilotProvider({
41
+ ...(inputs.llmApiKey && { apiKey: inputs.llmApiKey }),
42
+ ...(inputs.llmModel && { model: inputs.llmModel })
43
+ });
44
+ logger.info('LLM provider initialized', {
45
+ provider: inputs.llmProvider,
46
+ model: inputs.llmModel || 'gpt-4',
47
+ hasApiKey: !!inputs.llmApiKey
48
+ });
49
+ logger.endGroup();
50
+ // Create detector
51
+ logger.startGroup('🔍 Detecting Dependencies');
52
+ const detector = new Detector({
53
+ repoPath: inputs.repoPath,
54
+ llmProvider
55
+ });
56
+ const result = await withTiming(logger, 'dependency-detection', async () => {
57
+ return await detector.detectDependencies();
58
+ });
59
+ logger.info('Detection complete', {
60
+ dependencyCount: result.dependencies.length,
61
+ filesScanned: result.statistics.filesScanned,
62
+ urlsFound: result.statistics.urlsFound,
63
+ llmCalls: result.statistics.llmCalls,
64
+ totalTokens: result.statistics.totalTokens
65
+ });
66
+ logger.endGroup();
67
+ // Create manifest
68
+ logger.startGroup('📄 Creating Manifest');
69
+ const manifest = await createManifest(inputs.repoPath, result.dependencies, inputs.llmProvider);
70
+ const manifestPath = join(inputs.repoPath, inputs.manifestPath);
71
+ await writeManifest(manifestPath, manifest);
72
+ logger.info('Manifest written', {
73
+ path: manifestPath,
74
+ dependencyCount: manifest.dependencies.length
75
+ });
76
+ logger.endGroup();
77
+ // Set outputs
78
+ logger.startGroup('📊 Setting Outputs');
79
+ setGenerateOutputs(manifest, inputs.manifestPath, result.statistics);
80
+ logger.endGroup();
81
+ // Create summary
82
+ logger.startGroup('📝 Creating Summary');
83
+ await createGenerateSummary(manifest, result.statistics);
84
+ await createDependencyListSummary(manifest.dependencies.map((dep) => ({
85
+ name: dep.name,
86
+ url: dep.url,
87
+ type: dep.type,
88
+ confidence: dep.detectionConfidence
89
+ })));
90
+ logger.endGroup();
91
+ logger.info('✅ Generate action completed successfully');
92
+ }
93
+ catch (error) {
94
+ logger.error('Generate action failed', {
95
+ error: error instanceof Error ? error.message : String(error),
96
+ stack: error instanceof Error ? error.stack : undefined
97
+ });
98
+ core.setFailed(error instanceof Error ? error.message : String(error));
99
+ }
100
+ }
101
+ /**
102
+ * Create the manifest structure
103
+ */
104
+ async function createManifest(repoPath, dependencies, llmProvider) {
105
+ // Get repository info from GitHub context or git
106
+ const owner = process.env['GITHUB_REPOSITORY']?.split('/')[0] || 'unknown';
107
+ const name = process.env['GITHUB_REPOSITORY']?.split('/')[1] || 'unknown';
108
+ const branch = process.env['GITHUB_REF_NAME'] || 'main';
109
+ const commit = process.env['GITHUB_SHA'] || 'unknown';
110
+ // Calculate statistics
111
+ const byType = {};
112
+ const byAccessMethod = {};
113
+ const byDetectionMethod = {};
114
+ let totalConfidence = 0;
115
+ for (const dep of dependencies) {
116
+ byType[dep.type] = (byType[dep.type] || 0) + 1;
117
+ byAccessMethod[dep.accessMethod] = (byAccessMethod[dep.accessMethod] || 0) + 1;
118
+ byDetectionMethod[dep.detectionMethod] = (byDetectionMethod[dep.detectionMethod] || 0) + 1;
119
+ totalConfidence += dep.detectionConfidence;
120
+ }
121
+ const averageConfidence = dependencies.length > 0 ? totalConfidence / dependencies.length : 0;
122
+ const manifest = {
123
+ version: '1.0.0',
124
+ generatedAt: new Date().toISOString(),
125
+ generatedBy: {
126
+ action: 'dependabit',
127
+ version: '1.0.0',
128
+ llmProvider: llmProvider,
129
+ llmModel: 'gpt-4'
130
+ },
131
+ repository: {
132
+ owner,
133
+ name,
134
+ branch,
135
+ commit
136
+ },
137
+ dependencies,
138
+ statistics: {
139
+ totalDependencies: dependencies.length,
140
+ byType,
141
+ byAccessMethod,
142
+ byDetectionMethod,
143
+ averageConfidence
144
+ }
145
+ };
146
+ return manifest;
147
+ }
148
+ // Run the action
149
+ if (import.meta.url === `file://${process.argv[1]}`) {
150
+ run();
151
+ }
152
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/actions/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Update Action
3
+ * Analyze commits and update manifest with new/removed dependencies
4
+ */
5
+ /**
6
+ * Main entry point for the update action
7
+ */
8
+ export declare function run(): Promise<void>;
9
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/actions/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;GAEG;AACH,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA8PzC"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Update Action
3
+ * Analyze commits and update manifest with new/removed dependencies
4
+ */
5
+ import * as core from '@actions/core';
6
+ import { join } from 'node:path';
7
+ import { existsSync } from 'node:fs';
8
+ import { readFile } from 'node:fs/promises';
9
+ import { Detector, GitHubCopilotProvider, extractDependencyChanges } from '@dependabit/detector';
10
+ import { readManifest, writeManifest, mergeManifests } from '@dependabit/manifest';
11
+ import { createGitHubClient, getCommitDiff } from '@dependabit/github-client';
12
+ import { createLogger, withTiming } from '../logger.js';
13
+ import { parseUpdateInputs } from '../utils/inputs.js';
14
+ import { setUpdateOutputs, createUpdateSummary } from '../utils/outputs.js';
15
+ /**
16
+ * Main entry point for the update action
17
+ */
18
+ export async function run() {
19
+ const logger = createLogger({ enableDebug: true });
20
+ try {
21
+ logger.startGroup('📋 Parsing Action Inputs');
22
+ const inputs = parseUpdateInputs();
23
+ logger.info('Action inputs parsed', {
24
+ repoPath: inputs.repoPath,
25
+ manifestPath: inputs.manifestPath,
26
+ commits: inputs.commits.length > 0 ? inputs.commits : 'auto-detect'
27
+ });
28
+ logger.endGroup();
29
+ // Get repository information from environment
30
+ const repository = process.env['GITHUB_REPOSITORY'];
31
+ if (!repository) {
32
+ throw new Error('GITHUB_REPOSITORY environment variable not set');
33
+ }
34
+ const [owner, repo] = repository.split('/');
35
+ if (!owner || !repo) {
36
+ throw new Error(`Invalid GITHUB_REPOSITORY format: ${repository}`);
37
+ }
38
+ // Check if manifest exists
39
+ const manifestPath = join(inputs.repoPath, inputs.manifestPath);
40
+ if (!existsSync(manifestPath)) {
41
+ logger.info('⚠️ No existing manifest found. Run generate action first.');
42
+ core.setOutput('changes_detected', false);
43
+ core.setOutput('dependencies_added', 0);
44
+ core.setOutput('dependencies_removed', 0);
45
+ core.setOutput('total_dependencies', 0);
46
+ core.setOutput('files_analyzed', 0);
47
+ return;
48
+ }
49
+ // Read existing manifest
50
+ logger.startGroup('📄 Reading Existing Manifest');
51
+ const existingManifest = await readManifest(manifestPath);
52
+ logger.info('Manifest loaded', {
53
+ dependencyCount: existingManifest.dependencies.length,
54
+ version: existingManifest.version
55
+ });
56
+ logger.endGroup();
57
+ // Initialize GitHub client
58
+ logger.startGroup('🔗 Initializing GitHub Client');
59
+ const githubToken = process.env['GITHUB_TOKEN'];
60
+ if (!githubToken) {
61
+ throw new Error('GITHUB_TOKEN environment variable not set');
62
+ }
63
+ const client = createGitHubClient({ auth: githubToken });
64
+ logger.info('GitHub client initialized');
65
+ logger.endGroup();
66
+ // Determine commits to analyze
67
+ logger.startGroup('📊 Analyzing Commits');
68
+ let commitsToAnalyze = inputs.commits;
69
+ if (commitsToAnalyze.length === 0) {
70
+ // Auto-detect commits from the push event
71
+ const headRef = process.env['GITHUB_SHA'];
72
+ if (headRef) {
73
+ // For push events, get commits from the push payload
74
+ const eventPath = process.env['GITHUB_EVENT_PATH'];
75
+ if (eventPath) {
76
+ try {
77
+ const eventContent = await readFile(eventPath, 'utf-8');
78
+ const event = JSON.parse(eventContent);
79
+ if (event.commits && Array.isArray(event.commits)) {
80
+ commitsToAnalyze = event.commits.map((c) => c.id || c.sha);
81
+ logger.info('Detected commits from push event', { count: commitsToAnalyze.length });
82
+ }
83
+ }
84
+ catch (error) {
85
+ logger.warning('Failed to parse GitHub event payload', {
86
+ error: String(error),
87
+ eventPath
88
+ });
89
+ }
90
+ }
91
+ // Fallback: analyze the last commit
92
+ if (commitsToAnalyze.length === 0) {
93
+ commitsToAnalyze = [headRef];
94
+ logger.info('Using HEAD commit', { sha: headRef });
95
+ }
96
+ }
97
+ }
98
+ if (commitsToAnalyze.length === 0) {
99
+ logger.info('⚠️ No commits to analyze');
100
+ core.setOutput('changes_detected', false);
101
+ return;
102
+ }
103
+ logger.info('Commits to analyze', {
104
+ count: commitsToAnalyze.length,
105
+ shas: commitsToAnalyze.slice(0, 5)
106
+ });
107
+ logger.endGroup();
108
+ // Fetch and analyze commit diffs
109
+ logger.startGroup('🔍 Analyzing Commit Diffs');
110
+ const allChangedFiles = [];
111
+ const allAddedUrls = new Set();
112
+ const allRemovedUrls = new Set();
113
+ for (const sha of commitsToAnalyze) {
114
+ const diff = await withTiming(logger, `fetch-commit-${sha.substring(0, 7)}`, async () => {
115
+ return await getCommitDiff(client, owner, repo, sha);
116
+ });
117
+ const changes = extractDependencyChanges(diff.files);
118
+ // Track changed files
119
+ for (const file of changes.changedFiles.relevantFiles) {
120
+ if (!allChangedFiles.includes(file)) {
121
+ allChangedFiles.push(file);
122
+ }
123
+ }
124
+ // Track URL changes
125
+ changes.addedUrls.forEach((url) => allAddedUrls.add(url));
126
+ changes.removedUrls.forEach((url) => allRemovedUrls.add(url));
127
+ logger.info('Commit analyzed', {
128
+ sha: sha.substring(0, 7),
129
+ filesChanged: diff.files.length,
130
+ relevantFiles: changes.changedFiles.relevantFiles.length,
131
+ addedUrls: changes.addedUrls.length,
132
+ removedUrls: changes.removedUrls.length
133
+ });
134
+ }
135
+ logger.info('All commits analyzed', {
136
+ totalChangedFiles: allChangedFiles.length,
137
+ totalAddedUrls: allAddedUrls.size,
138
+ totalRemovedUrls: allRemovedUrls.size
139
+ });
140
+ logger.endGroup();
141
+ // Re-analyze changed files if any
142
+ logger.startGroup('🔍 Re-analyzing Changed Files');
143
+ let newDependencies = [];
144
+ if (allChangedFiles.length > 0) {
145
+ // Initialize LLM provider for selective analysis
146
+ const llmProvider = new GitHubCopilotProvider({
147
+ apiKey: githubToken
148
+ });
149
+ // Create detector
150
+ const detector = new Detector({
151
+ repoPath: inputs.repoPath,
152
+ llmProvider
153
+ });
154
+ const result = await withTiming(logger, 'selective-analysis', async () => {
155
+ return await detector.analyzeFiles(allChangedFiles);
156
+ });
157
+ newDependencies = result.dependencies;
158
+ logger.info('Selective analysis complete', {
159
+ filesAnalyzed: result.statistics.filesScanned,
160
+ dependenciesFound: newDependencies.length,
161
+ llmCalls: result.statistics.llmCalls
162
+ });
163
+ }
164
+ logger.endGroup();
165
+ // Create updated manifest
166
+ logger.startGroup('🔄 Merging Manifests');
167
+ const updatedManifest = {
168
+ ...existingManifest,
169
+ generatedAt: new Date().toISOString(),
170
+ generatedBy: {
171
+ action: 'dependabit-update',
172
+ version: '1.0.0',
173
+ llmProvider: 'github-copilot',
174
+ llmModel: 'gpt-4'
175
+ },
176
+ repository: {
177
+ owner,
178
+ name: repo,
179
+ branch: process.env['GITHUB_REF_NAME'] || existingManifest.repository.branch || 'main',
180
+ commit: process.env['GITHUB_SHA'] || existingManifest.repository.commit || 'unknown'
181
+ },
182
+ dependencies: newDependencies
183
+ };
184
+ // Merge with existing manifest (preserves manual entries)
185
+ const merged = mergeManifests(existingManifest, updatedManifest, {
186
+ preserveManual: true,
187
+ preserveHistory: true
188
+ });
189
+ // Mark removed dependencies
190
+ const removedUrls = Array.from(allRemovedUrls);
191
+ for (const dep of merged.dependencies) {
192
+ if (removedUrls.includes(dep.url)) {
193
+ // Mark as potentially removed (could be a false positive)
194
+ logger.info('Dependency potentially removed', {
195
+ name: dep.name,
196
+ url: dep.url
197
+ });
198
+ }
199
+ }
200
+ const dependenciesAdded = merged.dependencies.length - existingManifest.dependencies.length;
201
+ const changesDetected = dependenciesAdded !== 0 || removedUrls.length > 0;
202
+ logger.info('Manifests merged', {
203
+ before: existingManifest.dependencies.length,
204
+ after: merged.dependencies.length,
205
+ added: Math.max(0, dependenciesAdded),
206
+ manualPreserved: merged.dependencies.filter((d) => d.detectionMethod === 'manual').length
207
+ });
208
+ logger.endGroup();
209
+ // Write updated manifest
210
+ logger.startGroup('💾 Writing Updated Manifest');
211
+ await writeManifest(manifestPath, merged);
212
+ logger.info('Manifest updated', { path: manifestPath });
213
+ logger.endGroup();
214
+ // Set outputs
215
+ logger.startGroup('📊 Setting Outputs');
216
+ setUpdateOutputs(merged, existingManifest, allChangedFiles.length);
217
+ logger.endGroup();
218
+ // Create summary
219
+ logger.startGroup('📝 Creating Summary');
220
+ await createUpdateSummary(existingManifest, merged, {
221
+ commitsAnalyzed: commitsToAnalyze.length,
222
+ filesChanged: allChangedFiles.length,
223
+ urlsAdded: allAddedUrls.size,
224
+ urlsRemoved: allRemovedUrls.size
225
+ });
226
+ logger.endGroup();
227
+ if (changesDetected) {
228
+ logger.info('✅ Update action completed with changes');
229
+ }
230
+ else {
231
+ logger.info('✅ Update action completed - no changes detected');
232
+ }
233
+ }
234
+ catch (error) {
235
+ logger.error('Update action failed', {
236
+ error: error instanceof Error ? error.message : String(error),
237
+ stack: error instanceof Error ? error.stack : undefined
238
+ });
239
+ core.setFailed(error instanceof Error ? error.message : String(error));
240
+ }
241
+ }
242
+ // Run the action
243
+ if (import.meta.url === `file://${process.argv[1]}`) {
244
+ run();
245
+ }
246
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/actions/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,GAAkB;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,4BAAyB,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;SACpE,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,8CAA8C;QAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,gEAA4D,CAAC,CAAC;YAC1E,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,CAAC,UAAU,CAAC,gCAA6B,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC7B,eAAe,EAAE,gBAAgB,CAAC,YAAY,CAAC,MAAM;YACrD,OAAO,EAAE,gBAAgB,CAAC,OAAO;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,2BAA2B;QAC3B,MAAM,CAAC,UAAU,CAAC,iCAA8B,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,+BAA+B;QAC/B,MAAM,CAAC,UAAU,CAAC,wBAAqB,CAAC,CAAC;QACzC,IAAI,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC;QAEtC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,0CAA0C;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE1C,IAAI,OAAO,EAAE,CAAC;gBACZ,qDAAqD;gBACrD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACnD,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;wBACvC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;4BAClD,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAChE,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;wBACtF,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,OAAO,CAAC,sCAAsC,EAAE;4BACrD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;4BACpB,SAAS;yBACV,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,oCAAoC;gBACpC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAClC,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,+BAA2B,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChC,KAAK,EAAE,gBAAgB,CAAC,MAAM;YAC9B,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,iCAAiC;QACjC,MAAM,CAAC,UAAU,CAAC,6BAA0B,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,YAAY,GAAgB,IAAI,GAAG,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;QAE9C,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;gBACvF,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAAA,CACtD,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAErD,sBAAsB;YACtB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;gBACtD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9D,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC7B,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;gBAC/B,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM;gBACxD,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;gBACnC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM;aACxC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAClC,iBAAiB,EAAE,eAAe,CAAC,MAAM;YACzC,cAAc,EAAE,YAAY,CAAC,IAAI;YACjC,gBAAgB,EAAE,cAAc,CAAC,IAAI;SACtC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,kCAAkC;QAClC,MAAM,CAAC,UAAU,CAAC,iCAA8B,CAAC,CAAC;QAClD,IAAI,eAAe,GAAuC,EAAE,CAAC;QAE7D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,iDAAiD;YACjD,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC;gBAC5C,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;gBAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW;aACZ,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC;gBACxE,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;YAAA,CACrD,CAAC,CAAC;YAEH,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC;YAEtC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBACzC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY;gBAC7C,iBAAiB,EAAE,eAAe,CAAC,MAAM;gBACzC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;aACrC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,0BAA0B;QAC1B,MAAM,CAAC,UAAU,CAAC,wBAAqB,CAAC,CAAC;QACzC,MAAM,eAAe,GAAuB;YAC1C,GAAG,gBAAgB;YACnB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,WAAW,EAAE;gBACX,MAAM,EAAE,mBAAmB;gBAC3B,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,OAAO;aAClB;YACD,UAAU,EAAE;gBACV,KAAK;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,MAAM,IAAI,MAAM;gBACtF,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS;aACrF;YACD,YAAY,EAAE,eAAe;SAC9B,CAAC;QAEF,0DAA0D;QAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,gBAAgB,EAAE,eAAe,EAAE;YAC/D,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,0DAA0D;gBAC1D,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;oBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,GAAG,EAAE,GAAG,CAAC,GAAG;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC;QAC5F,MAAM,eAAe,GAAG,iBAAiB,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1E,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC9B,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,MAAM;YAC5C,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;YACjC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC;YACrC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,MAAM;SAC1F,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,yBAAyB;QACzB,MAAM,CAAC,UAAU,CAAC,+BAA4B,CAAC,CAAC;QAChD,MAAM,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,cAAc;QACd,MAAM,CAAC,UAAU,CAAC,sBAAmB,CAAC,CAAC;QACvC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,iBAAiB;QACjB,MAAM,CAAC,UAAU,CAAC,uBAAoB,CAAC,CAAC;QACxC,MAAM,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE;YAClD,eAAe,EAAE,gBAAgB,CAAC,MAAM;YACxC,YAAY,EAAE,eAAe,CAAC,MAAM;YACpC,SAAS,EAAE,YAAY,CAAC,IAAI;YAC5B,WAAW,EAAE,cAAc,CAAC,IAAI;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,CAAC;QAElB,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,0CAAwC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,mDAAiD,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACnC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;AAAA,CACF;AAED,iBAAiB;AACjB,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,GAAG,EAAE,CAAC;AACR,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type DependencyManifest, type DependabitConfig } from '@dependabit/manifest';
2
+ /**
3
+ * Validation result
4
+ */
5
+ export interface ValidationResult {
6
+ valid: boolean;
7
+ errors: string[];
8
+ warnings: string[];
9
+ manifest?: DependencyManifest;
10
+ config: DependabitConfig | undefined;
11
+ }
12
+ /**
13
+ * Main entry point for the validate action wrapped for error handling
14
+ */
15
+ export declare function run(): Promise<void>;
16
+ /**
17
+ * Validate manifest file with comprehensive checks
18
+ *
19
+ * Performs:
20
+ * - Schema validation (Zod)
21
+ * - Business rule validation (duplicate IDs, valid URLs, timestamp order)
22
+ * - Optional config validation
23
+ *
24
+ * @param manifestPath Path to manifest.json
25
+ * @param configPath Optional path to config.yml
26
+ * @returns Validation result with errors and warnings
27
+ */
28
+ export declare function validateAction(manifestPath: string, configPath?: string): Promise<ValidationResult>;
29
+ /**
30
+ * Format validation errors for CLI output
31
+ */
32
+ export declare function formatValidationErrors(result: ValidationResult): string;
33
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/actions/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAG9B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;CACtC;AAED;;GAEG;AACH,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAiD3B;AAmJD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA8BvE"}