summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.github/workflows/ci.generate.ts24
-rw-r--r--.github/workflows/ci.yml2
-rwxr-xr-xtools/lint.js26
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",
+ );
+ }
+}