diff options
-rwxr-xr-x | .github/workflows/ci.generate.ts | 24 | ||||
-rw-r--r-- | .github/workflows/ci.yml | 2 | ||||
-rwxr-xr-x | tools/lint.js | 26 |
3 files changed, 38 insertions, 14 deletions
diff --git a/.github/workflows/ci.generate.ts b/.github/workflows/ci.generate.ts index 01eb04315..b2a8c99c9 100755 --- a/.github/workflows/ci.generate.ts +++ b/.github/workflows/ci.generate.ts @@ -301,6 +301,9 @@ function handleMatrixItems(items: { const ci = { name: "ci", + permissions: { + contents: "write", + }, on: { push: { branches: ["main"], @@ -1075,11 +1078,18 @@ const ci = { }, }; -let finalText = `# GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT\n\n`; -finalText += yaml.stringify(ci, { - noRefs: true, - lineWidth: 10_000, - noCompatMode: true, -}); +export function generate() { + let finalText = `# GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT\n\n`; + finalText += yaml.stringify(ci, { + noRefs: true, + lineWidth: 10_000, + noCompatMode: true, + }); + return finalText; +} + +export const CI_YML_URL = new URL("./ci.yml", import.meta.url); -Deno.writeTextFileSync(new URL("./ci.yml", import.meta.url), finalText); +if (import.meta.main) { + Deno.writeTextFileSync(CI_YML_URL, generate()); +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17157ce5b..b36195beb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,8 @@ # GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT name: ci +permissions: + contents: write on: push: branches: diff --git a/tools/lint.js b/tools/lint.js index 14567ed1d..56662fdd8 100755 --- a/tools/lint.js +++ b/tools/lint.js @@ -2,6 +2,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. import { buildMode, getPrebuilt, getSources, join, ROOT_PATH } from "./util.js"; import { checkCopyright } from "./copyright_checker.js"; +import * as ciFile from "../.github/workflows/ci.generate.ts"; const promises = []; @@ -12,17 +13,18 @@ if (!js && !rs) { rs = true; } -if (js) { - promises.push(dlint()); - promises.push(dlintPreferPrimordials()); -} - if (rs) { promises.push(clippy()); } -if (js && rs) { - promises.push(checkCopyright()); +if (js) { + promises.push(dlint()); + promises.push(dlintPreferPrimordials()); + promises.push(ensureCiYmlUpToDate()); + + if (rs) { + promises.push(checkCopyright()); + } } const results = await Promise.allSettled(promises); @@ -164,3 +166,13 @@ async function clippy() { throw new Error("clippy failed"); } } + +async function ensureCiYmlUpToDate() { + const expectedCiFileText = ciFile.generate(); + const actualCiFileText = await Deno.readTextFile(ciFile.CI_YML_URL); + if (expectedCiFileText !== actualCiFileText) { + throw new Error( + "./.github/workflows/ci.yml is out of date. Run: ./.github/workflows/ci.generate.ts", + ); + } +} |