projen
Version:
CDK for software projects
63 lines • 7.37 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9naXRodWIvcHJpdmF0ZS91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esd0NBRUM7QUFFRCwwQkFFQztBQUdELG9DQUVDO0FBR0Qsa0RBSUM7QUFLRCxvQ0FnQkM7QUFjRCxzRUFJQztBQTlERCx5Q0FBcUM7QUFFckMscUNBQW9EO0FBQ3BELDBDQUFrRTtBQUVsRSxTQUFnQixjQUFjLENBQUMsVUFBa0I7SUFDL0MsT0FBTyxnQkFBZ0IsVUFBVSxLQUFLLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxLQUFhO0lBQ25DLE9BQU8sUUFBUSxLQUFLLEtBQUssQ0FBQztBQUM1QixDQUFDO0FBRUQsNENBQTRDO0FBQzVDLFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCx3Q0FBd0M7QUFDeEMsU0FBZ0IsbUJBQW1CLENBQUMsS0FBYSxFQUFFLElBQVk7SUFDN0QsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksa0NBQWtDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxDQUFtQjtJQUM5QyxRQUFRLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDakIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDdEMsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFNBQVM7WUFDWixvRkFBb0Y7WUFDcEYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEtBQUssUUFBUTtZQUNYLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNmLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxPQUFPLFlBQVksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hEO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQiw2QkFBNkIsQ0FBQyxPQUFnQjtJQUM1RCxPQUFPLElBQUEsc0NBQStCLEVBQ3BDLElBQUEsNkJBQXNCLEVBQUMsSUFBQSxvQkFBUSxFQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN0RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi8uLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBub3JtYWxpemVQZXJzaXN0ZWRQYXRoIH0gZnJvbSBcIi4uLy4uL3V0aWxcIjtcbmltcG9ydCB7IGVuc3VyZVJlbGF0aXZlUGF0aFN0YXJ0c1dpdGhEb3QgfSBmcm9tIFwiLi4vLi4vdXRpbC9wYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNyZXRUb1N0cmluZyhzZWNyZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFxcJHt7IHNlY3JldHMuJHtzZWNyZXROYW1lfSB9fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGBcXCR7eyAke3ZhbHVlfSB9fWA7XG59XG5cbi8vIENoZWNrcyBpZiBwYXJ0IG9mIHRoZSBmaWxlIHBhdGggaXMgaGlkZGVuXG5leHBvcnQgZnVuY3Rpb24gaXNIaWRkZW5QYXRoKHBhdGg6IHN0cmluZykge1xuICByZXR1cm4gLyhefFxcLylcXC5bXlxcL1xcLl0vZy50ZXN0KHBhdGgpO1xufVxuXG4vLyBIZWxwZXIgdG8gYXNzZXJ0IGEgcGF0aCBpcyBub3QgaGlkZGVuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90SGlkZGVuUGF0aCh2YWx1ZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgaWYgKGlzSGlkZGVuUGF0aCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBFcnJvcihgJHtuYW1lfSBjYW5ub3QgYmUgYSBoaWRkZW4gcGF0aCwgZ290OiAke3ZhbHVlfWApO1xuICB9XG59XG5cbi8qKlxuICogVHVybiBhbnkgSmF2YVNjcmlwdCB2YWx1ZSBpbnRvIGEgR2l0SHViIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR2l0SHViRXhwcih4OiBOb25OdWxsYWJsZTxhbnk+KTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlb2YgeCkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBgJyR7eC5yZXBsYWNlKC8nL2csIGAnJ2ApfSdgO1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhpcyB2YWx1ZSBpcyBhbHNvIHRoZSBHSCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHZhbHVlXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeCk7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBmcm9tSlNPTigke3RvR2l0SHViRXhwcihKU09OLnN0cmluZ2lmeSh4KSl9KWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlb2YgeH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggb2YgYSBwcm9qZWN0IGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnlcbiAqXG4gKiBUaGlzIGlzIGEgYml0IG9mIGhhY2sgYXQgdGhlIG1vbWVudCwgYmVjYXVzZSBwcm9qZWN0cyBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiBhIHJlcG9zaXRvcnkuXG4gKiBUaGUgYC5naXRodWJgIGRpcmVjdG9yeSBpcyBhbHdheXMgY3JlYXRlZCB3aXRoaW4gdGhlIG91dGRpciBvZiB0aGUgcm9vdCBwcm9qZWN0LlxuICogQ29uc2VxdWVudGx5IHRoaXMgbWVhbnMgYSBHaXRIdWIgcm9vdCBwcm9qZWN0IGNhbm5vdCByZWFsbHkgaGF2ZSBhbiBvdXRkaXIgYW5kIEdIIFdvcmtmbG93cyBhdCB0aGUgc2FtZSB0aW1lLlxuICogT3IgaW4gb3RoZXIgd29yZHMsIHRoZSBvdXRkaXIgb2YgdGhlIHJvb3QgcHJvamVjdCBpcyB0byBiZSBhc3N1bWVkIHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gKlxuICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIGNvcnJlY3QgYHdvcmtpbmctZGlyZWN0b3J5YCBmb3IgYSBnaXZlbiBwcm9qZWN0LlxuICpcbiAqIEByZXR1cm5zIHBhdGggdG8gYmUgdXNlZCBhcyBgd29ya2luZy1kaXJlY3RvcnlgIG9mIGEgR2l0SHViIHdvcmtmbG93LCB0aGlzIGlzIG5ldmVyIGVtcHR5IGFuZCB3aWxsIHJldHVybiBgLi9gIGZvciB0aGUgcm9vdCBwcm9qZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0UGF0aFJlbGF0aXZlVG9SZXBvUm9vdChwcm9qZWN0OiBQcm9qZWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGVuc3VyZVJlbGF0aXZlUGF0aFN0YXJ0c1dpdGhEb3QoXG4gICAgbm9ybWFsaXplUGVyc2lzdGVkUGF0aChyZWxhdGl2ZShwcm9qZWN0LnJvb3Qub3V0ZGlyLCBwcm9qZWN0Lm91dGRpcikpXG4gICk7XG59XG4iXX0=