0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2024-12-16 20:26:19 -05:00
logto/.scripts/check-alterations-sequence.js
2024-01-11 14:38:37 +08:00

40 lines
1.2 KiB
JavaScript

/**
* This script runs a task to check alteration files sequence:
* Newest files should come last.
*/
import { execSync } from "child_process";
const alterationFilePrefix = "packages/schemas/alterations/";
const allAlterations = execSync("pnpm cli db alter list", {
encoding: "utf-8",
})
.split("\n")
.filter((filename) => Boolean(filename))
.map((filename) => filename.replace(".js", ""));
const diffFiles = execSync("git diff HEAD~1 HEAD --name-only --diff-filter=ACR", {
encoding: "utf-8",
});
const committedAlterations = diffFiles
.split("\n")
.filter((filename) =>
filename.startsWith(alterationFilePrefix) &&
!filename.slice(alterationFilePrefix.length).includes("/")
)
.map((filename) =>
filename.replace(alterationFilePrefix, "").replace(".ts", "")
);
for (const alteration of committedAlterations) {
const index = allAlterations.indexOf(alteration);
if (index < allAlterations.length - committedAlterations.length) {
throw new Error(
`Wrong alteration sequence for committed file: ${alteration}\nAll timestamps of committed alteration files should be greater than the biggest one in the base branch.`
);
}
console.log(`${alteration}`);
}