@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.
- package/CHANGELOG.md +12 -0
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/action.yml +85 -0
- package/dist/actions/check.d.ts +33 -0
- package/dist/actions/check.d.ts.map +1 -0
- package/dist/actions/check.js +162 -0
- package/dist/actions/check.js.map +1 -0
- package/dist/actions/generate.d.ts +9 -0
- package/dist/actions/generate.d.ts.map +1 -0
- package/dist/actions/generate.js +152 -0
- package/dist/actions/generate.js.map +1 -0
- package/dist/actions/update.d.ts +9 -0
- package/dist/actions/update.d.ts.map +1 -0
- package/dist/actions/update.js +246 -0
- package/dist/actions/update.js.map +1 -0
- package/dist/actions/validate.d.ts +33 -0
- package/dist/actions/validate.d.ts.map +1 -0
- package/dist/actions/validate.js +226 -0
- package/dist/actions/validate.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +114 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +154 -0
- package/dist/logger.js.map +1 -0
- package/dist/utils/agent-config.d.ts +31 -0
- package/dist/utils/agent-config.d.ts.map +1 -0
- package/dist/utils/agent-config.js +42 -0
- package/dist/utils/agent-config.js.map +1 -0
- package/dist/utils/agent-router.d.ts +33 -0
- package/dist/utils/agent-router.d.ts.map +1 -0
- package/dist/utils/agent-router.js +57 -0
- package/dist/utils/agent-router.js.map +1 -0
- package/dist/utils/errors.d.ts +51 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +219 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/inputs.d.ts +35 -0
- package/dist/utils/inputs.d.ts.map +1 -0
- package/dist/utils/inputs.js +47 -0
- package/dist/utils/inputs.js.map +1 -0
- package/dist/utils/metrics.d.ts +66 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +116 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/outputs.d.ts +43 -0
- package/dist/utils/outputs.d.ts.map +1 -0
- package/dist/utils/outputs.js +146 -0
- package/dist/utils/outputs.js.map +1 -0
- package/dist/utils/performance.d.ts +100 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/performance.js +185 -0
- package/dist/utils/performance.js.map +1 -0
- package/dist/utils/reporter.d.ts +43 -0
- package/dist/utils/reporter.d.ts.map +1 -0
- package/dist/utils/reporter.js +122 -0
- package/dist/utils/reporter.js.map +1 -0
- package/dist/utils/secrets.d.ts +45 -0
- package/dist/utils/secrets.d.ts.map +1 -0
- package/dist/utils/secrets.js +94 -0
- package/dist/utils/secrets.js.map +1 -0
- package/package.json +45 -0
- package/src/actions/check.ts +223 -0
- package/src/actions/generate.ts +181 -0
- package/src/actions/update.ts +284 -0
- package/src/actions/validate.ts +292 -0
- package/src/index.ts +43 -0
- package/src/logger.test.ts +200 -0
- package/src/logger.ts +210 -0
- package/src/utils/agent-config.ts +61 -0
- package/src/utils/agent-router.ts +67 -0
- package/src/utils/errors.ts +251 -0
- package/src/utils/inputs.ts +75 -0
- package/src/utils/metrics.ts +169 -0
- package/src/utils/outputs.ts +202 -0
- package/src/utils/performance.ts +248 -0
- package/src/utils/reporter.ts +169 -0
- package/src/utils/secrets.ts +124 -0
- package/test/actions/check.test.ts +216 -0
- package/test/actions/generate.test.ts +82 -0
- package/test/actions/update.test.ts +70 -0
- package/test/actions/validate.test.ts +257 -0
- package/test/utils/agent-config.test.ts +112 -0
- package/test/utils/agent-router.test.ts +129 -0
- package/test/utils/metrics.test.ts +221 -0
- package/test/utils/reporter.test.ts +196 -0
- package/test/utils/secrets.test.ts +217 -0
- package/tsconfig.json +15 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|