UNPKG

@pagopa/dx-cli

Version:

A CLI useful to manage DX tools.

61 lines (60 loc) 2.17 kB
import { getLogger } from "@logtape/logtape"; import { replaceInFile } from "replace-in-file"; import * as YAML from "yaml"; import { getLatestCommitSha } from "./git.js"; import { isChildOf } from "./yaml.js"; export const updateJSCodeReviewJob = (sha) => (workflow, filename) => { const logger = getLogger(["dx-cli", "codemod"]); const document = YAML.parseDocument(workflow); let updated = false; YAML.visit(document, { Map(_, map, path) { if (map.has("jobs") || isChildOf(path, "jobs")) { return undefined; } if (map.has("uses")) { const uses = map.get("uses"); if (typeof uses === "string" && uses.startsWith("pagopa/dx/.github/workflows/js_code_review.yaml@")) { map.set("secrets", "inherit"); map.set("permissions", { contents: "read", "pull-requests": "write", }); map.set("uses", `pagopa/dx/.github/workflows/js_code_review.yaml@${sha}`); updated = true; } } return YAML.visit.SKIP; }, }); if (updated) { logger.info("Workflow {filename} updated", { filename, }); return YAML.stringify(document); } return workflow; }; export const updateCodeReview = { apply: async () => { const logger = getLogger(["dx-cli", "codemod"]); const owner = "pagopa"; const repo = "dx"; return getLatestCommitSha(owner, repo) .then(async (sha) => { await replaceInFile({ allowEmptyPaths: true, files: [".github/workflows/*.yaml"], processor: updateJSCodeReviewJob(sha), }); }) .catch(() => { logger.error("Failed to fetch the latest commit sha from {repository}", { repository: `${owner}/${repo}`, }); }); }, description: "Update js_code_review workflow to its latest version", id: "update-code-review", };