fix(build): generate Suwayomi WebUI revision
This commit is contained in:
@@ -8,7 +8,8 @@
|
||||
"setup": "pnpm i --frozen-lockfile && pnpm setup-env-files",
|
||||
"dev": "pnpm setup && vite",
|
||||
"preview": "pnpm setup && vite preview",
|
||||
"build": "pnpm setup && vite build",
|
||||
"build": "pnpm setup && vite build && pnpm build-revision",
|
||||
"build-revision": "tsx tools/scripts/writeWebUIRevision.ts",
|
||||
"test": "pnpm test:material-you",
|
||||
"test:material-you": "tsx --test src/features/theme/services/*.test.ts",
|
||||
"build-md5": "find build -type f | sort | xargs md5sum | awk '{ print $1 }' | tr -d '\n' | md5sum| awk '{ print $1 }' > buildZip/md5sum ",
|
||||
|
||||
22
src/features/theme/services/MaterialYouRevision.test.ts
Normal file
22
src/features/theme/services/MaterialYouRevision.test.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (C) Contributors to the Suwayomi project
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, it } from 'node:test';
|
||||
import { formatWebUIRevision } from '@/features/theme/services/MaterialYouRevision.ts';
|
||||
|
||||
describe('formatWebUIRevision', () => {
|
||||
it('matches the revision format required by Suwayomi custom WebUI builds', () => {
|
||||
assert.equal(formatWebUIRevision(3356), 'r3356\n');
|
||||
});
|
||||
|
||||
it('rejects invalid git commit counts', () => {
|
||||
assert.throws(() => formatWebUIRevision(0), /positive integer/);
|
||||
assert.throws(() => formatWebUIRevision(4.5), /positive integer/);
|
||||
});
|
||||
});
|
||||
15
src/features/theme/services/MaterialYouRevision.ts
Normal file
15
src/features/theme/services/MaterialYouRevision.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) Contributors to the Suwayomi project
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
export const formatWebUIRevision = (commitCount: number): string => {
|
||||
if (!Number.isInteger(commitCount) || commitCount < 1) {
|
||||
throw new Error('WebUI revision commit count must be a positive integer');
|
||||
}
|
||||
|
||||
return `r${commitCount}\n`;
|
||||
};
|
||||
16
tools/scripts/writeWebUIRevision.ts
Normal file
16
tools/scripts/writeWebUIRevision.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (C) Contributors to the Suwayomi project
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import { execFileSync } from 'node:child_process';
|
||||
import { writeFileSync } from 'node:fs';
|
||||
import { formatWebUIRevision } from '@/features/theme/services/MaterialYouRevision.ts';
|
||||
|
||||
const commitCount = Number(execFileSync('git', ['rev-list', 'HEAD', '--count'], { encoding: 'utf8' }).trim());
|
||||
const revisionPath = new URL('../../build/revision', import.meta.url);
|
||||
|
||||
writeFileSync(revisionPath, formatWebUIRevision(commitCount), 'utf8');
|
||||
Reference in New Issue
Block a user