mirror of
https://github.com/LukeHagar/usage-statistics.git
synced 2025-12-06 04:21:55 +00:00
95 lines
4.4 KiB
JavaScript
95 lines
4.4 KiB
JavaScript
import * as core from '@actions/core';
|
|
import { collectNpmBatch } from './collectors/npm.js';
|
|
import { collectGithubBatch } from './collectors/github.js';
|
|
import { collectPowerShellBatch } from './collectors/powershell.js';
|
|
import { collectPypiBatch } from './collectors/pypi.js';
|
|
import { getInputs, updateRepositoryReadme } from './utils.js';
|
|
import { writeFile } from 'fs/promises';
|
|
try {
|
|
const { npmPackages, githubRepositories, pypiPackages, powershellModules, jsonOutputPath, updateReadme, commitMessage, readmePath, } = getInputs();
|
|
// Debug logs are only output if the `ACTIONS_STEP_DEBUG` secret is true
|
|
core.debug(`NPM Packages: ${npmPackages.join(', ')}`);
|
|
core.debug(`GitHub Repositories: ${githubRepositories.join(', ')}`);
|
|
core.debug(`PyPI Packages: ${pypiPackages.join(', ')}`);
|
|
core.debug(`PowerShell Modules: ${powershellModules.join(', ')}`);
|
|
core.debug(``);
|
|
core.debug(`JSON Output Path: ${jsonOutputPath}`);
|
|
core.debug(`Update README: ${updateReadme}`);
|
|
core.debug(`Commit Message: ${commitMessage}`);
|
|
// Track which platforms are being used
|
|
const platformsTracked = [];
|
|
if (npmPackages.length > 0)
|
|
platformsTracked.push('NPM');
|
|
if (githubRepositories.length > 0)
|
|
platformsTracked.push('GitHub');
|
|
if (pypiPackages.length > 0)
|
|
platformsTracked.push('PyPI');
|
|
if (powershellModules.length > 0)
|
|
platformsTracked.push('PowerShell');
|
|
core.debug(`Platforms to track: ${platformsTracked.join(', ')}`);
|
|
core.info(`Successfully configured usage statistics tracker for ${platformsTracked.length} platforms`);
|
|
const metricPromises = [];
|
|
const metrics = [];
|
|
for (const platform of platformsTracked) {
|
|
core.info(`Collecting ${platform} metrics...`);
|
|
switch (platform) {
|
|
case 'NPM':
|
|
console.log(`Collecting NPM metrics for ${npmPackages.join(', ')}`);
|
|
console.time(`Collecting NPM metrics`);
|
|
metricPromises.push(collectNpmBatch(npmPackages).then(results => {
|
|
console.timeEnd(`Collecting NPM metrics`);
|
|
return results;
|
|
}));
|
|
break;
|
|
case 'GitHub':
|
|
console.log(`Collecting GitHub metrics for ${githubRepositories.join(', ')}`);
|
|
console.time(`Collecting GitHub metrics`);
|
|
metricPromises.push(collectGithubBatch(githubRepositories).then(results => {
|
|
console.timeEnd(`Collecting GitHub metrics`);
|
|
return results;
|
|
}));
|
|
break;
|
|
case 'PyPI':
|
|
console.log(`Collecting PyPI metrics for ${pypiPackages.join(', ')}`);
|
|
console.time(`Collecting PyPI metrics`);
|
|
metricPromises.push(collectPypiBatch(pypiPackages).then(results => {
|
|
console.timeEnd(`Collecting PyPI metrics`);
|
|
return results;
|
|
}));
|
|
break;
|
|
case 'PowerShell':
|
|
console.log(`Collecting PowerShell metrics for ${powershellModules.join(', ')}`);
|
|
console.time(`Collecting PowerShell metrics`);
|
|
metricPromises.push(collectPowerShellBatch(powershellModules).then(results => {
|
|
console.timeEnd(`Collecting PowerShell metrics`);
|
|
return results;
|
|
}));
|
|
break;
|
|
}
|
|
}
|
|
console.log('All metrics collecting started');
|
|
const metricResults = await Promise.all(metricPromises);
|
|
metrics.push(...metricResults.flat());
|
|
console.log('All metrics collecting completed');
|
|
if (updateReadme) {
|
|
console.log('Updating repository readme...');
|
|
await updateRepositoryReadme(metrics, readmePath);
|
|
}
|
|
console.log('Repository readme updated');
|
|
// Persist full result set to JSON for downstream consumption
|
|
try {
|
|
await writeFile(jsonOutputPath, JSON.stringify(metrics, null, 2), 'utf8');
|
|
core.setOutput('json-output', jsonOutputPath);
|
|
console.log(`Wrote metrics JSON to ${jsonOutputPath}`);
|
|
}
|
|
catch (writeErr) {
|
|
console.warn(`Failed to write metrics JSON to ${jsonOutputPath}:`, writeErr);
|
|
}
|
|
core.setOutput('commit-message', commitMessage);
|
|
}
|
|
catch (error) {
|
|
// Fail the workflow run if an error occurs
|
|
if (error instanceof Error)
|
|
core.setFailed(error.message);
|
|
}
|