no-ci - update action (generate features collection artifact)

This commit is contained in:
Josh Spicer 2022-06-22 18:51:23 +00:00 committed by GitHub
parent 6f107d547e
commit 43fd91f7b3
4 changed files with 49 additions and 21 deletions

View file

@ -197,14 +197,17 @@ function run() {
const shouldPublishFeatures = core.getInput('publish-features').toLowerCase() === 'true';
const shouldPublishTemplate = core.getInput('publish-templates').toLowerCase() === 'true';
const shouldGenerateDocumentation = core.getInput('generate-docs').toLowerCase() === 'true';
let featuresMetadata = undefined;
let templatesMetadata = undefined;
if (shouldPublishFeatures) {
core.info('Publishing features...');
const featuresBasePath = core.getInput('base-path-to-features');
yield packageFeatures(featuresBasePath);
featuresMetadata = yield packageFeatures(featuresBasePath);
}
if (shouldPublishTemplate) {
core.info('Publishing template...');
const basePathToDefinitions = core.getInput('base-path-to-templates');
templatesMetadata = undefined; // TODO
yield packageTemplates(basePathToDefinitions);
}
if (shouldGenerateDocumentation) {
@ -220,20 +223,23 @@ function run() {
}
// TODO: Programatically add feature/template fino with relevant metadata for UX clients.
core.info('Generation metadata file: devcontainer-collection.json');
yield (0, utils_1.addCollectionsMetadataFile)();
yield (0, utils_1.addCollectionsMetadataFile)(featuresMetadata, templatesMetadata);
});
}
function packageFeatures(basePath) {
return __awaiter(this, void 0, void 0, function* () {
try {
core.info(`Archiving all features in ${basePath}`);
yield (0, utils_1.getFeaturesAndPackage)(basePath);
const metadata = yield (0, utils_1.getFeaturesAndPackage)(basePath);
core.info('Packaging features has finished.');
return metadata;
}
catch (error) {
if (error instanceof Error)
if (error instanceof Error) {
core.setFailed(error.message);
}
}
return;
});
}
function packageTemplates(basePath) {
@ -323,7 +329,7 @@ function tarDirectory(path, tgzName) {
});
}
exports.tarDirectory = tarDirectory;
function addCollectionsMetadataFile() {
function addCollectionsMetadataFile(featuresMetadata, templatesMetadata) {
return __awaiter(this, void 0, void 0, function* () {
const p = path_1.default.join('.', 'devcontainer-collection.json');
// Insert github repo metadata
@ -342,8 +348,8 @@ function addCollectionsMetadataFile() {
}
const metadata = {
sourceInformation,
features: [],
templates: []
features: featuresMetadata || [],
templates: templatesMetadata || []
};
// Write to the file
yield (0, exports.writeLocalFile)(p, JSON.stringify(metadata, undefined, 4));
@ -352,7 +358,7 @@ function addCollectionsMetadataFile() {
exports.addCollectionsMetadataFile = addCollectionsMetadataFile;
function getFeaturesAndPackage(basePath) {
return __awaiter(this, void 0, void 0, function* () {
let archives = [];
let metadatas = [];
fs.readdir(basePath, (err, files) => {
if (err) {
core.error(err.message);
@ -362,13 +368,21 @@ function getFeaturesAndPackage(basePath) {
files.forEach(file => {
core.info(`feature ==> ${file}`);
if (file !== '.' && file !== '..') {
const featureFolder = path_1.default.join(basePath, file);
const archiveName = `${file}.tgz`;
tarDirectory(`${basePath}/${file}`, archiveName);
archives.push(archiveName);
const featureJsonPath = path_1.default.join(featureFolder, "devcontainer-feature.json");
if (!fs.existsSync(featureJsonPath)) {
core.error(`Feature ${file} is missing a devcontainer-feature.json`);
core.setFailed('All features must have a devcontainer-feature.json');
return;
}
const featureMetadata = JSON.parse(fs.readFileSync(featureJsonPath, "utf8"));
metadatas.push(featureMetadata);
}
});
});
return archives;
return metadatas;
});
}
exports.getFeaturesAndPackage = getFeaturesAndPackage;

File diff suppressed because one or more lines are too long

View file

@ -46,14 +46,17 @@ function run() {
const shouldPublishFeatures = core.getInput('publish-features').toLowerCase() === 'true';
const shouldPublishTemplate = core.getInput('publish-templates').toLowerCase() === 'true';
const shouldGenerateDocumentation = core.getInput('generate-docs').toLowerCase() === 'true';
let featuresMetadata = undefined;
let templatesMetadata = undefined;
if (shouldPublishFeatures) {
core.info('Publishing features...');
const featuresBasePath = core.getInput('base-path-to-features');
yield packageFeatures(featuresBasePath);
featuresMetadata = yield packageFeatures(featuresBasePath);
}
if (shouldPublishTemplate) {
core.info('Publishing template...');
const basePathToDefinitions = core.getInput('base-path-to-templates');
templatesMetadata = undefined; // TODO
yield packageTemplates(basePathToDefinitions);
}
if (shouldGenerateDocumentation) {
@ -69,20 +72,23 @@ function run() {
}
// TODO: Programatically add feature/template fino with relevant metadata for UX clients.
core.info('Generation metadata file: devcontainer-collection.json');
yield (0, utils_1.addCollectionsMetadataFile)();
yield (0, utils_1.addCollectionsMetadataFile)(featuresMetadata, templatesMetadata);
});
}
function packageFeatures(basePath) {
return __awaiter(this, void 0, void 0, function* () {
try {
core.info(`Archiving all features in ${basePath}`);
yield (0, utils_1.getFeaturesAndPackage)(basePath);
const metadata = yield (0, utils_1.getFeaturesAndPackage)(basePath);
core.info('Packaging features has finished.');
return metadata;
}
catch (error) {
if (error instanceof Error)
if (error instanceof Error) {
core.setFailed(error.message);
}
}
return;
});
}
function packageTemplates(basePath) {

View file

@ -62,7 +62,7 @@ function tarDirectory(path, tgzName) {
});
}
exports.tarDirectory = tarDirectory;
function addCollectionsMetadataFile() {
function addCollectionsMetadataFile(featuresMetadata, templatesMetadata) {
return __awaiter(this, void 0, void 0, function* () {
const p = path_1.default.join('.', 'devcontainer-collection.json');
// Insert github repo metadata
@ -81,8 +81,8 @@ function addCollectionsMetadataFile() {
}
const metadata = {
sourceInformation,
features: [],
templates: []
features: featuresMetadata || [],
templates: templatesMetadata || []
};
// Write to the file
yield (0, exports.writeLocalFile)(p, JSON.stringify(metadata, undefined, 4));
@ -91,7 +91,7 @@ function addCollectionsMetadataFile() {
exports.addCollectionsMetadataFile = addCollectionsMetadataFile;
function getFeaturesAndPackage(basePath) {
return __awaiter(this, void 0, void 0, function* () {
let archives = [];
let metadatas = [];
fs.readdir(basePath, (err, files) => {
if (err) {
core.error(err.message);
@ -101,13 +101,21 @@ function getFeaturesAndPackage(basePath) {
files.forEach(file => {
core.info(`feature ==> ${file}`);
if (file !== '.' && file !== '..') {
const featureFolder = path_1.default.join(basePath, file);
const archiveName = `${file}.tgz`;
tarDirectory(`${basePath}/${file}`, archiveName);
archives.push(archiveName);
const featureJsonPath = path_1.default.join(featureFolder, "devcontainer-feature.json");
if (!fs.existsSync(featureJsonPath)) {
core.error(`Feature ${file} is missing a devcontainer-feature.json`);
core.setFailed('All features must have a devcontainer-feature.json');
return;
}
const featureMetadata = JSON.parse(fs.readFileSync(featureJsonPath, "utf8"));
metadatas.push(featureMetadata);
}
});
});
return archives;
return metadatas;
});
}
exports.getFeaturesAndPackage = getFeaturesAndPackage;