aboutsummaryrefslogtreecommitdiff
path: root/.github/devcontainers-action/lib
diff options
context:
space:
mode:
Diffstat (limited to '.github/devcontainers-action/lib')
-rw-r--r--.github/devcontainers-action/lib/contracts/collection.js2
-rw-r--r--.github/devcontainers-action/lib/contracts/features.js2
-rw-r--r--.github/devcontainers-action/lib/contracts/templates.js2
-rw-r--r--.github/devcontainers-action/lib/generateDocs.js166
-rw-r--r--.github/devcontainers-action/lib/main.js93
-rw-r--r--.github/devcontainers-action/lib/utils.js107
6 files changed, 0 insertions, 372 deletions
diff --git a/.github/devcontainers-action/lib/contracts/collection.js b/.github/devcontainers-action/lib/contracts/collection.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/.github/devcontainers-action/lib/contracts/collection.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/.github/devcontainers-action/lib/contracts/features.js b/.github/devcontainers-action/lib/contracts/features.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/.github/devcontainers-action/lib/contracts/features.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/.github/devcontainers-action/lib/contracts/templates.js b/.github/devcontainers-action/lib/contracts/templates.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/.github/devcontainers-action/lib/contracts/templates.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/.github/devcontainers-action/lib/generateDocs.js b/.github/devcontainers-action/lib/generateDocs.js
deleted file mode 100644
index 4bbeeed..0000000
--- a/.github/devcontainers-action/lib/generateDocs.js
+++ /dev/null
@@ -1,166 +0,0 @@
-"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.generateTemplateDocumentation = exports.generateFeaturesDocumentation = void 0;
-const fs = __importStar(require("fs"));
-const core = __importStar(require("@actions/core"));
-const path = __importStar(require("path"));
-const utils_1 = require("./utils");
-const FEATURES_README_TEMPLATE = `
-# #{Name}
-
-#{Description}
-
-## Example Usage
-
-\`\`\`json
-"features": {
- "#{Registry}/#{Namespace}/#{Id}:#{Version}": {
- "version": "latest"
- }
-}
-\`\`\`
-
-## Options
-
-#{OptionsTable}
-
-#{Notes}
-
----
-
-_Note: This file was auto-generated from the [devcontainer-feature.json](#{RepoUrl}). Add additional notes to a \`NOTES.md\`._
-`;
-const TEMPLATE_README_TEMPLATE = `
-# #{Name}
-
-#{Description}
-
-## Options
-
-#{OptionsTable}
-`;
-function generateFeaturesDocumentation(basePath, ociRegistry, namespace) {
- return __awaiter(this, void 0, void 0, function* () {
- yield _generateDocumentation(basePath, FEATURES_README_TEMPLATE, 'devcontainer-feature.json', ociRegistry, namespace);
- });
-}
-exports.generateFeaturesDocumentation = generateFeaturesDocumentation;
-function generateTemplateDocumentation(basePath) {
- return __awaiter(this, void 0, void 0, function* () {
- yield _generateDocumentation(basePath, TEMPLATE_README_TEMPLATE, 'devcontainer-template.json');
- });
-}
-exports.generateTemplateDocumentation = generateTemplateDocumentation;
-function _generateDocumentation(basePath, readmeTemplate, metadataFile, ociRegistry = '', namespace = '') {
- return __awaiter(this, void 0, void 0, function* () {
- const directories = fs.readdirSync(basePath);
- yield Promise.all(directories.map((f) => __awaiter(this, void 0, void 0, function* () {
- var _a, _b, _c;
- if (!f.startsWith('.')) {
- const readmePath = path.join(basePath, f, 'README.md');
- // Reads in feature.json
- const jsonPath = path.join(basePath, f, metadataFile);
- if (!fs.existsSync(jsonPath)) {
- core.error(`${metadataFile} not found at path '${jsonPath}'`);
- return;
- }
- let parsedJson = undefined;
- try {
- parsedJson = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
- }
- catch (err) {
- core.error(`Failed to parse ${jsonPath}: ${err}`);
- return;
- }
- if (!parsedJson || !(parsedJson === null || parsedJson === void 0 ? void 0 : parsedJson.id)) {
- core.error(`${metadataFile} for '${f}' does not contain an 'id'`);
- return;
- }
- const srcInfo = (0, utils_1.getGitHubMetadata)();
- // Add version
- let version = 'latest';
- const parsedVersion = parsedJson === null || parsedJson === void 0 ? void 0 : parsedJson.version;
- if (parsedVersion) {
- // example - 1.0.0
- const splitVersion = parsedVersion.split('.');
- version = splitVersion[0];
- }
- const generateOptionsMarkdown = () => {
- const options = parsedJson === null || parsedJson === void 0 ? void 0 : parsedJson.options;
- if (!options) {
- return '';
- }
- const keys = Object.keys(options);
- const contents = keys
- .map(k => {
- const val = options[k];
- return `| ${k} | ${val.description || '-'} | ${val.type || '-'} | ${val.default || '-'} |`;
- })
- .join('\n');
- return '| Options Id | Description | Type | Default Value |\n' + '|-----|-----|-----|-----|\n' + contents;
- };
- const generateNotesMarkdown = () => {
- const notesPath = path.join(basePath, f, 'NOTES.md');
- return fs.existsSync(notesPath) ? fs.readFileSync(path.join(notesPath), 'utf8') : '';
- };
- let urlToConfig = './devcontainer-feature.json';
- const basePathTrimmed = basePath.startsWith('./') ? basePath.substring(2) : basePath;
- if (srcInfo.owner && srcInfo.repo) {
- urlToConfig = `https://github.com/${srcInfo.owner}/${srcInfo.repo}/blob/main/${basePathTrimmed}/${f}/devcontainer-feature.json`;
- }
- const newReadme = readmeTemplate
- // Templates & Features
- .replace('#{Id}', parsedJson.id)
- .replace('#{Name}', parsedJson.name ? `${parsedJson.name} (${parsedJson.id})` : `${parsedJson.id}`)
- .replace('#{Description}', (_a = parsedJson.description) !== null && _a !== void 0 ? _a : '')
- .replace('#{OptionsTable}', generateOptionsMarkdown())
- .replace('#{Notes}', generateNotesMarkdown())
- // Features Only
- .replace('#{Registry}', ociRegistry)
- .replace('#{Namespace}', namespace)
- .replace('#{Version}', version)
- // Templates Only
- .replace('#{ManifestName}', (_c = (_b = parsedJson === null || parsedJson === void 0 ? void 0 : parsedJson.image) === null || _b === void 0 ? void 0 : _b.manifest) !== null && _c !== void 0 ? _c : '')
- .replace('#{RepoUrl}', urlToConfig);
- // Remove previous readme
- if (fs.existsSync(readmePath)) {
- fs.unlinkSync(readmePath);
- }
- // Write new readme
- fs.writeFileSync(readmePath, newReadme);
- }
- })));
- });
-}
diff --git a/.github/devcontainers-action/lib/main.js b/.github/devcontainers-action/lib/main.js
deleted file mode 100644
index b00b44f..0000000
--- a/.github/devcontainers-action/lib/main.js
+++ /dev/null
@@ -1,93 +0,0 @@
-"use strict";
-/*--------------------------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
- *-------------------------------------------------------------------------------------------------------------*/
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const core = __importStar(require("@actions/core"));
-const generateDocs_1 = require("./generateDocs");
-const utils_1 = require("./utils");
-const exec = __importStar(require("@actions/exec"));
-function run() {
- return __awaiter(this, void 0, void 0, function* () {
- core.debug('Reading input parameters...');
- // Read inputs
- const shouldPublishFeatures = core.getInput('publish-features').toLowerCase() === 'true';
- const shouldGenerateDocumentation = core.getInput('generate-docs').toLowerCase() === 'true';
- const featuresBasePath = core.getInput('base-path-to-features');
- const sourceMetadata = (0, utils_1.getGitHubMetadata)();
- const inputOciRegistry = core.getInput('oci-registry');
- const ociRegistry = inputOciRegistry && inputOciRegistry !== '' ? inputOciRegistry : 'ghcr.io';
- const inputNamespace = core.getInput('namespace');
- const namespace = inputNamespace && inputNamespace !== '' ? inputNamespace : `${sourceMetadata.owner}/${sourceMetadata.repo}`;
- const cliDebugMode = core.getInput('devcontainer-cli-debug-mode').toLowerCase() === 'true';
- // -- Publish
- if (shouldPublishFeatures) {
- core.info('Publishing features...');
- yield publishFeatures(featuresBasePath, ociRegistry, namespace, cliDebugMode);
- }
- // -- Generate Documentation
- if (shouldGenerateDocumentation && featuresBasePath) {
- core.info('Generating documentation for features...');
- yield (0, generateDocs_1.generateFeaturesDocumentation)(featuresBasePath, ociRegistry, namespace);
- }
- });
-}
-function publishFeatures(basePath, ociRegistry, namespace, cliDebugMode = false) {
- return __awaiter(this, void 0, void 0, function* () {
- // Ensures we have the devcontainer CLI installed.
- if (!(yield (0, utils_1.ensureDevcontainerCliPresent)(cliDebugMode))) {
- core.setFailed('Failed to install devcontainer CLI');
- return false;
- }
- try {
- let cmd = 'devcontainer';
- let args = ['features', 'publish', '-r', ociRegistry, '-n', namespace, basePath];
- if (cliDebugMode) {
- cmd = 'npx';
- args = ['-y', './devcontainer.tgz', ...args];
- }
- const res = yield exec.getExecOutput(cmd, args, {
- ignoreReturnCode: true
- });
- return res.exitCode === 0;
- }
- catch (err) {
- core.setFailed(err === null || err === void 0 ? void 0 : err.message);
- return false;
- }
- });
-}
-run();
diff --git a/.github/devcontainers-action/lib/utils.js b/.github/devcontainers-action/lib/utils.js
deleted file mode 100644
index f0885ce..0000000
--- a/.github/devcontainers-action/lib/utils.js
+++ /dev/null
@@ -1,107 +0,0 @@
-"use strict";
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.ensureDevcontainerCliPresent = exports.isDevcontainerCliAvailable = exports.getGitHubMetadata = exports.renameLocal = exports.mkdirLocal = exports.writeLocalFile = exports.readLocalFile = void 0;
-const github = __importStar(require("@actions/github"));
-const fs = __importStar(require("fs"));
-const util_1 = require("util");
-const core = __importStar(require("@actions/core"));
-const exec = __importStar(require("@actions/exec"));
-exports.readLocalFile = (0, util_1.promisify)(fs.readFile);
-exports.writeLocalFile = (0, util_1.promisify)(fs.writeFile);
-exports.mkdirLocal = (0, util_1.promisify)(fs.mkdir);
-exports.renameLocal = (0, util_1.promisify)(fs.rename);
-function getGitHubMetadata() {
- // Insert github repo metadata
- const ref = github.context.ref;
- let metadata = {
- owner: github.context.repo.owner,
- repo: github.context.repo.repo,
- ref,
- sha: github.context.sha
- };
- // Add tag if parseable
- if (ref.includes('refs/tags/')) {
- const tag = ref.replace('refs/tags/', '');
- metadata = Object.assign(Object.assign({}, metadata), { tag });
- }
- return metadata;
-}
-exports.getGitHubMetadata = getGitHubMetadata;
-function isDevcontainerCliAvailable(cliDebugMode = false) {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- let cmd = 'devcontainer';
- let args = ['--version'];
- if (cliDebugMode) {
- cmd = 'npx';
- args = ['-y', './devcontainer.tgz', ...args];
- }
- const res = yield exec.getExecOutput(cmd, args, {
- ignoreReturnCode: true,
- silent: true
- });
- core.info(`Devcontainer CLI version '${res.stdout}' is installed.`);
- return res.exitCode === 0;
- }
- catch (err) {
- return false;
- }
- });
-}
-exports.isDevcontainerCliAvailable = isDevcontainerCliAvailable;
-function ensureDevcontainerCliPresent(cliDebugMode = false) {
- return __awaiter(this, void 0, void 0, function* () {
- if (yield isDevcontainerCliAvailable(cliDebugMode)) {
- core.info('devcontainer CLI is already installed');
- return true;
- }
- if (cliDebugMode) {
- core.error('Cannot remotely fetch CLI in debug mode');
- return false;
- }
- try {
- core.info('Fetching the latest @devcontainer/cli...');
- const res = yield exec.getExecOutput('npm', ['install', '-g', '@devcontainers/cli'], {
- ignoreReturnCode: true,
- silent: true
- });
- return res.exitCode === 0;
- }
- catch (err) {
- return false;
- }
- });
-}
-exports.ensureDevcontainerCliPresent = ensureDevcontainerCliPresent;