Perf: speed up public folder setup / remove unused mkdir call

This commit is contained in:
SukkaW 2023-12-19 23:08:28 +08:00
parent 74293ac2f8
commit 38be4ab0c6
5 changed files with 31 additions and 38 deletions

View File

@ -1,4 +1,3 @@
import fsp from 'fs/promises';
import path from 'path';
import * as tldts from 'tldts';
import { processLine } from './lib/process-line';
@ -67,9 +66,7 @@ export const buildInternalCDNDomains = task(import.meta.path, async () => {
processLocalRuleSet(path.resolve(import.meta.dir, '../List/non_ip/stream.conf')),
processLocalRuleSet(path.resolve(import.meta.dir, '../List/non_ip/telegram.conf')),
processLocalDomainSet(path.resolve(import.meta.dir, '../List/domainset/cdn.conf')),
processLocalDomainSet(path.resolve(import.meta.dir, '../List/domainset/download.conf')),
fsp.mkdir(path.resolve(import.meta.dir, '../List/internal'), { recursive: true })
processLocalDomainSet(path.resolve(import.meta.dir, '../List/domainset/download.conf'))
]))[0];
return compareAndWriteFile(

View File

@ -1,7 +1,6 @@
import { fetchRemoteTextAndReadByLine } from './lib/fetch-text-by-line';
import { processLineFromReadline } from './lib/process-line';
import path from 'path';
import fsp from 'fs/promises';
import { task } from './lib/trace-runner';
import { exclude, merge } from 'fast-cidr-tools';
@ -27,10 +26,7 @@ const RESERVED_IPV4_CIDR = [
];
export const buildInternalReverseChnCIDR = task(import.meta.path, async () => {
const cidr = (await Promise.all([
processLineFromReadline(await fetchRemoteTextAndReadByLine('https://raw.githubusercontent.com/misakaio/chnroutes2/master/chnroutes.txt')),
fsp.mkdir(path.resolve(import.meta.dir, '../List/internal'), { recursive: true })
]))[0];
const cidr = await processLineFromReadline(await fetchRemoteTextAndReadByLine('https://raw.githubusercontent.com/misakaio/chnroutes2/master/chnroutes.txt'));
const reversedCidr = merge(
exclude(

View File

@ -1,31 +1,37 @@
import path from 'path';
import fsp from 'fs/promises';
import { task } from './lib/trace-runner';
import { treeDir } from './lib/tree-dir';
import type { TreeType, TreeTypeArray } from './lib/tree-dir';
import listDir from '@sukka/listdir';
const rootPath = path.resolve(import.meta.dir, '../');
const publicPath = path.resolve(import.meta.dir, '../public');
const folderAndFilesToBeDeployed = [
'Mock',
'List',
'Clash',
'Modules',
'Script',
`Mock${path.sep}`,
`List${path.sep}`,
`Clash${path.sep}`,
`Modules${path.sep}`,
`Script${path.sep}`,
'LICENSE'
];
export const buildPublic = task(import.meta.path, async () => {
await fsp.mkdir(publicPath, { recursive: true });
await Promise.all(folderAndFilesToBeDeployed.map(dir => fsp.cp(
path.resolve(rootPath, dir),
path.resolve(publicPath, dir),
{ force: true, recursive: true }
)));
const filesToBeCopied = (await listDir(
rootPath, {
ignoreHidden: true,
ignorePattern: /node_modules|Build|public/
}
)).filter(file => folderAndFilesToBeDeployed.some(folderOrFile => file.startsWith(folderOrFile)));
await Promise.all(filesToBeCopied.map(file => {
const src = path.resolve(rootPath, file);
const dest = path.resolve(publicPath, file);
return Bun.write(dest, Bun.file(src));
}));
const html = generateHtml(await treeDir(publicPath));
return Bun.write(path.join(publicPath, 'index.html'), html);
});
@ -99,7 +105,7 @@ function generateHtml(tree: TreeTypeArray) {
<p>
Made by <a href="https://skk.moe">Sukka</a> | <a href="https://github.com/SukkaW/Surge/">Source @ GitHub</a> | Licensed under <a href="/LICENSE" target="_blank">AGPL-3.0</a>
</p>
<p>Last Build: 2023-12-03T16:54:15.820Z</p>
<p>Last Build: ${new Date().toISOString()}</p>
<br>`;
html += '<ul class="directory-list">';

View File

@ -101,8 +101,6 @@ export const buildSSPanelUIMAppProfile = task(import.meta.path, async () => {
]
);
await fsp.mkdir(path.resolve(import.meta.dir, '../List/internal'), { recursive: true });
await compareAndWriteFile(
output,
path.resolve(import.meta.dir, '../List/internal/appprofile.php')

View File

@ -47,19 +47,20 @@ export const downloadPreviousBuild = task(import.meta.path, async () => {
return;
}
const extractedPath = path.join(os.tmpdir(), `sukka-surge-last-build-extracted-${Date.now()}`);
const filesList = buildOutputList.map(f => path.join('ruleset.skk.moe-master', f));
await traceAsync(
'Download and extract previous build',
async () => {
const resp = (await Promise.all([
fetchWithRetry('https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master', defaultRequestInit),
fsp.mkdir(extractedPath, { recursive: true })
]))[0];
const resp = await fetchWithRetry('https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master', defaultRequestInit);
if (!resp.body) {
throw new Error('Download previous build failed! No body found');
}
const extract = tarStream.extract();
Readable.fromWeb(resp.body!).pipe(zlib.createGunzip()).pipe(extract);
Readable.fromWeb(resp.body).pipe(zlib.createGunzip()).pipe(extract);
for await (const entry of extract) {
if (entry.header.type !== 'file') {
entry.resume(); // Drain the entry
@ -85,13 +86,8 @@ export const downloadPreviousBuild = task(import.meta.path, async () => {
});
export const downloadPublicSuffixList = task(import.meta.path, async () => {
const publicSuffixDir = path.resolve(import.meta.dir, '../node_modules/.cache');
const publicSuffixPath = path.join(publicSuffixDir, 'public_suffix_list_dat.txt');
const resp = (await Promise.all([
fetchWithRetry('https://publicsuffix.org/list/public_suffix_list.dat', defaultRequestInit),
fsp.mkdir(publicSuffixDir, { recursive: true })
]))[0];
const publicSuffixPath = path.resolve(import.meta.dir, '../node_modules/.cache/public_suffix_list_dat.txt');
const resp = await fetchWithRetry('https://publicsuffix.org/list/public_suffix_list.dat', defaultRequestInit);
return Bun.write(publicSuffixPath, resp as Response);
}, 'download-publicsuffixlist');