Skip to content

Commit

Permalink
Check knex filenames and rename json-yaml-validate.yml → validate.yml…
Browse files Browse the repository at this point in the history
… for general purposes (louislam#5263)
  • Loading branch information
louislam authored Oct 28, 2024
1 parent ca09429 commit 5ee986c
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: json-yaml-validate
name: validate
on:
push:
branches:
Expand Down Expand Up @@ -26,12 +26,18 @@ jobs:
comment: "true" # enable comment mode
exclude_file: ".github/config/exclude.txt" # gitignore style file for exclusions

check-lang-json:
# General validations
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
- run: node ./extra/check-lang-json.js

- name: Validate language JSON files
run: node ./extra/check-lang-json.js

- name: Validate knex migrations filename
run: node ./extra/check-knex-filenames.mjs
72 changes: 72 additions & 0 deletions extra/check-knex-filenames.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import fs from "fs";
const dir = "./db/knex_migrations";

// Get the file list (ending with .js) from the directory
const files = fs.readdirSync(dir).filter((file) => file !== "README.md");

// They are wrong, but they had been merged, so allowed.
const exceptionList = [
"2024-08-24-000-add-cache-bust.js",
"2024-10-1315-rabbitmq-monitor.js",
];

// Correct format: YYYY-MM-DD-HHmm-description.js

for (const file of files) {
if (exceptionList.includes(file)) {
continue;
}

// Check ending with .js
if (!file.endsWith(".js")) {
console.error(`It should end with .js: ${file}`);
process.exit(1);
}

const parts = file.split("-");

// Should be at least 5 parts
if (parts.length < 5) {
console.error(`Invalid format: ${file}`);
process.exit(1);
}

// First part should be a year >= 2024
const year = parseInt(parts[0], 10);
if (isNaN(year) || year < 2023) {
console.error(`Invalid year: ${file}`);
process.exit(1);
}

// Second part should be a month
const month = parseInt(parts[1], 10);
if (isNaN(month) || month < 1 || month > 12) {
console.error(`Invalid month: ${file}`);
process.exit(1);
}

// Third part should be a day
const day = parseInt(parts[2], 10);
if (isNaN(day) || day < 1 || day > 31) {
console.error(`Invalid day: ${file}`);
process.exit(1);
}

// Fourth part should be HHmm
const time = parts[3];

// Check length is 4
if (time.length !== 4) {
console.error(`Invalid time: ${file}`);
process.exit(1);
}

const hour = parseInt(time.substring(0, 2), 10);
const minute = parseInt(time.substring(2), 10);
if (isNaN(hour) || hour < 0 || hour > 23 || isNaN(minute) || minute < 0 || minute > 59) {
console.error(`Invalid time: ${file}`);
process.exit(1);
}
}

console.log("All knex filenames are correct.");

0 comments on commit 5ee986c

Please sign in to comment.