projen
Version:
CDK for software projects
63 lines • 7.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.secretToString = secretToString;
exports.context = context;
exports.isHiddenPath = isHiddenPath;
exports.ensureNotHiddenPath = ensureNotHiddenPath;
exports.toGitHubExpr = toGitHubExpr;
exports.projectPathRelativeToRepoRoot = projectPathRelativeToRepoRoot;
const node_path_1 = require("node:path");
const util_1 = require("../../util");
const path_1 = require("../../util/path");
function secretToString(secretName) {
return `\${{ secrets.${secretName} }}`;
}
function context(value) {
return `\${{ ${value} }}`;
}
// Checks if part of the file path is hidden
function isHiddenPath(path) {
return /(^|\/)\.[^\/\.]/g.test(path);
}
// Helper to assert a path is not hidden
function ensureNotHiddenPath(value, name) {
if (isHiddenPath(value)) {
throw Error(`${name} cannot be a hidden path, got: ${value}`);
}
}
/**
* Turn any JavaScript value into a GitHub expression
*/
function toGitHubExpr(x) {
switch (typeof x) {
case "string":
return `'${x.replace(/'/g, `''`)}'`;
case "number":
case "boolean":
// The JSON representation of this value is also the GH representation of this value
return JSON.stringify(x);
case "object":
if (x === null) {
return "null";
}
return `fromJSON(${toGitHubExpr(JSON.stringify(x))})`;
default:
throw new Error(`Unsupported type: ${typeof x}`);
}
}
/**
* Returns the relative path of a project from the root of the repository
*
* This is a bit of hack at the moment, because projects currently don't have the concept of a repository.
* The `.github` directory is always created within the outdir of the root project.
* Consequently this means a GitHub root project cannot really have an outdir and GH Workflows at the same time.
* Or in other words, the outdir of the root project is to be assumed the repository root.
*
* This helper function can be used to retrieve the correct `working-directory` for a given project.
*
* @returns path to be used as `working-directory` of a GitHub workflow, this is never empty and will return `./` for the root project
*/
function projectPathRelativeToRepoRoot(project) {
return (0, path_1.ensureRelativePathStartsWithDot)((0, util_1.normalizePersistedPath)((0, node_path_1.relative)(project.root.outdir, project.outdir)));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9naXRodWIvcHJpdmF0ZS91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esd0NBRUM7QUFFRCwwQkFFQztBQUdELG9DQUVDO0FBR0Qsa0RBSUM7QUFLRCxvQ0FnQkM7QUFjRCxzRUFJQztBQTlERCx5Q0FBcUM7QUFFckMscUNBQW9EO0FBQ3BELDBDQUFrRTtBQUVsRSxTQUFnQixjQUFjLENBQUMsVUFBa0I7SUFDL0MsT0FBTyxnQkFBZ0IsVUFBVSxLQUFLLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxLQUFhO0lBQ25DLE9BQU8sUUFBUSxLQUFLLEtBQUssQ0FBQztBQUM1QixDQUFDO0FBRUQsNENBQTRDO0FBQzVDLFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCx3Q0FBd0M7QUFDeEMsU0FBZ0IsbUJBQW1CLENBQUMsS0FBYSxFQUFFLElBQVk7SUFDN0QsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksa0NBQWtDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxDQUFtQjtJQUM5QyxRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDakIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDdEMsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFNBQVM7WUFDWixvRkFBb0Y7WUFDcEYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEtBQUssUUFBUTtZQUNYLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNmLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxPQUFPLFlBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hEO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQiw2QkFBNkIsQ0FBQyxPQUFnQjtJQUM1RCxPQUFPLElBQUEsc0NBQStCLEVBQ3BDLElBQUEsNkJBQXNCLEVBQUMsSUFBQSxvQkFBUSxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN0RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uLy4uL3Byb2plY3RcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGggfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xuaW1wb3J0IHsgZW5zdXJlUmVsYXRpdmVQYXRoU3RhcnRzV2l0aERvdCB9IGZyb20gXCIuLi8uLi91dGlsL3BhdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3JldFRvU3RyaW5nKHNlY3JldE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFwke3sgc2VjcmV0cy4ke3NlY3JldE5hbWV9IH19YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHQodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gYFxcJHt7ICR7dmFsdWV9IH19YDtcbn1cblxuLy8gQ2hlY2tzIGlmIHBhcnQgb2YgdGhlIGZpbGUgcGF0aCBpcyBoaWRkZW5cbmV4cG9ydCBmdW5jdGlvbiBpc0hpZGRlblBhdGgocGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiAvKF58XFwvKVxcLlteXFwvXFwuXS9nLnRlc3QocGF0aCk7XG59XG5cbi8vIEhlbHBlciB0byBhc3NlcnQgYSBwYXRoIGlzIG5vdCBoaWRkZW5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOb3RIaWRkZW5QYXRoKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICBpZiAoaXNIaWRkZW5QYXRoKHZhbHVlKSkge1xuICAgIHRocm93IEVycm9yKGAke25hbWV9IGNhbm5vdCBiZSBhIGhpZGRlbiBwYXRoLCBnb3Q6ICR7dmFsdWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUdXJuIGFueSBKYXZhU2NyaXB0IHZhbHVlIGludG8gYSBHaXRIdWIgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HaXRIdWJFeHByKHg6IE5vbk51bGxhYmxlPGFueT4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGVvZiB4KSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGAnJHt4LnJlcGxhY2UoLycvZywgYCcnYCl9J2A7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAvLyBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHZhbHVlIGlzIGFsc28gdGhlIEdIIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdmFsdWVcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KTtcbiAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYGZyb21KU09OKCR7dG9HaXRIdWJFeHByKEpTT04uc3RyaW5naWZ5KHgpKX0pYDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke3R5cGVvZiB4fWApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBvZiBhIHByb2plY3QgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeVxuICpcbiAqIFRoaXMgaXMgYSBiaXQgb2YgaGFjayBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIHByb2plY3RzIGN1cnJlbnRseSBkb24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIGEgcmVwb3NpdG9yeS5cbiAqIFRoZSBgLmdpdGh1YmAgZGlyZWN0b3J5IGlzIGFsd2F5cyBjcmVhdGVkIHdpdGhpbiB0aGUgb3V0ZGlyIG9mIHRoZSByb290IHByb2plY3QuXG4gKiBDb25zZXF1ZW50bHkgdGhpcyBtZWFucyBhIEdpdEh1YiByb290IHByb2plY3QgY2Fubm90IHJlYWxseSBoYXZlIGFuIG91dGRpciBhbmQgR0ggV29ya2Zsb3dzIGF0IHRoZSBzYW1lIHRpbWUuXG4gKiBPciBpbiBvdGhlciB3b3JkcywgdGhlIG91dGRpciBvZiB0aGUgcm9vdCBwcm9qZWN0IGlzIHRvIGJlIGFzc3VtZWQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAqXG4gKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgY29ycmVjdCBgd29ya2luZy1kaXJlY3RvcnlgIGZvciBhIGdpdmVuIHByb2plY3QuXG4gKlxuICogQHJldHVybnMgcGF0aCB0byBiZSB1c2VkIGFzIGB3b3JraW5nLWRpcmVjdG9yeWAgb2YgYSBHaXRIdWIgd29ya2Zsb3csIHRoaXMgaXMgbmV2ZXIgZW1wdHkgYW5kIHdpbGwgcmV0dXJuIGAuL2AgZm9yIHRoZSByb290IHByb2plY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RQYXRoUmVsYXRpdmVUb1JlcG9Sb290KHByb2plY3Q6IFByb2plY3QpOiBzdHJpbmcge1xuICByZXR1cm4gZW5zdXJlUmVsYXRpdmVQYXRoU3RhcnRzV2l0aERvdChcbiAgICBub3JtYWxpemVQZXJzaXN0ZWRQYXRoKHJlbGF0aXZlKHByb2plY3Qucm9vdC5vdXRkaXIsIHByb2plY3Qub3V0ZGlyKSksXG4gICk7XG59XG4iXX0=