mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-14 10:10:34 +08:00
Perf: run a few task during downloading previous dist
This commit is contained in:
parent
16ecf378a6
commit
a86308b69f
@ -48,18 +48,21 @@ const getS3OSSDomainsPromise = (async (): Promise<Set<string>> => {
|
|||||||
return S3OSSDomains;
|
return S3OSSDomains;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
const cdnDomainsListPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/cdn.conf'));
|
||||||
|
const downloadDomainSetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/download.conf'));
|
||||||
|
const steamDomainSetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/game-download.conf'));
|
||||||
|
|
||||||
export const buildCdnDownloadConf = task(require.main === module, __filename)(async (span) => {
|
export const buildCdnDownloadConf = task(require.main === module, __filename)(async (span) => {
|
||||||
const [
|
const [
|
||||||
S3OSSDomains,
|
S3OSSDomains,
|
||||||
|
|
||||||
cdnDomainsList,
|
cdnDomainsList,
|
||||||
downloadDomainSet,
|
downloadDomainSet,
|
||||||
steamDomainSet
|
steamDomainSet
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
getS3OSSDomainsPromise,
|
getS3OSSDomainsPromise,
|
||||||
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/cdn.conf')),
|
cdnDomainsListPromise,
|
||||||
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/download.conf')),
|
downloadDomainSetPromise,
|
||||||
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/game-download.conf'))
|
steamDomainSetPromise
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Move S3 domains to download domain set, since S3 files may be large
|
// Move S3 domains to download domain set, since S3 files may be large
|
||||||
|
|||||||
@ -18,10 +18,7 @@ const MAGIC_COMMAND_SGMODULE_MITM_HOSTNAMES = '# $ sgmodule_mitm_hostnames ';
|
|||||||
|
|
||||||
const domainsetSrcFolder = 'domainset' + path.sep;
|
const domainsetSrcFolder = 'domainset' + path.sep;
|
||||||
|
|
||||||
export const buildCommon = task(require.main === module, __filename)(async (span) => {
|
const clawSourceDirPromise = new Fdir()
|
||||||
const promises: Array<Promise<unknown>> = [];
|
|
||||||
|
|
||||||
const paths = await new Fdir()
|
|
||||||
.withRelativePaths()
|
.withRelativePaths()
|
||||||
.filter((filepath, isDirectory) => {
|
.filter((filepath, isDirectory) => {
|
||||||
if (isDirectory) return true;
|
if (isDirectory) return true;
|
||||||
@ -33,6 +30,11 @@ export const buildCommon = task(require.main === module, __filename)(async (span
|
|||||||
.crawl(SOURCE_DIR)
|
.crawl(SOURCE_DIR)
|
||||||
.withPromise();
|
.withPromise();
|
||||||
|
|
||||||
|
export const buildCommon = task(require.main === module, __filename)(async (span) => {
|
||||||
|
const promises: Array<Promise<unknown>> = [];
|
||||||
|
|
||||||
|
const paths = await clawSourceDirPromise;
|
||||||
|
|
||||||
for (let i = 0, len = paths.length; i < len; i++) {
|
for (let i = 0, len = paths.length; i < len; i++) {
|
||||||
const relativePath = paths[i];
|
const relativePath = paths[i];
|
||||||
const fullPath = SOURCE_DIR + path.sep + relativePath;
|
const fullPath = SOURCE_DIR + path.sep + relativePath;
|
||||||
|
|||||||
@ -19,6 +19,8 @@ import { appendArrayInPlace } from './lib/append-array-in-place';
|
|||||||
import { OUTPUT_INTERNAL_DIR, SOURCE_DIR } from './constants/dir';
|
import { OUTPUT_INTERNAL_DIR, SOURCE_DIR } from './constants/dir';
|
||||||
import { DomainsetOutput } from './lib/create-file';
|
import { DomainsetOutput } from './lib/create-file';
|
||||||
|
|
||||||
|
const readLocalNonIpRejectRulesetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/reject_sukka.conf'));
|
||||||
|
|
||||||
export const buildRejectDomainSet = task(require.main === module, __filename)(async (span) => {
|
export const buildRejectDomainSet = task(require.main === module, __filename)(async (span) => {
|
||||||
const rejectBaseDescription = [
|
const rejectBaseDescription = [
|
||||||
...SHARED_DESCRIPTION,
|
...SHARED_DESCRIPTION,
|
||||||
@ -98,7 +100,7 @@ export const buildRejectDomainSet = task(require.main === module, __filename)(as
|
|||||||
addArrayElementsToSet(filterRuleWhitelistDomainSets, black);
|
addArrayElementsToSet(filterRuleWhitelistDomainSets, black);
|
||||||
})),
|
})),
|
||||||
getPhishingDomains(childSpan).then(appendArrayToRejectExtraOutput),
|
getPhishingDomains(childSpan).then(appendArrayToRejectExtraOutput),
|
||||||
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/reject_sukka.conf')).then(appendArrayToRejectOutput),
|
readLocalNonIpRejectRulesetPromise.then(appendArrayToRejectOutput),
|
||||||
// Dedupe domainSets
|
// Dedupe domainSets
|
||||||
// span.traceChildAsync('collect black keywords/suffixes', async () =>
|
// span.traceChildAsync('collect black keywords/suffixes', async () =>
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -23,6 +23,8 @@ const POLICY_GROUPS: Array<[name: string, insertProxy: boolean, insertDirect: bo
|
|||||||
['Final Match', true, true]
|
['Final Match', true, true]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const steamDomainsPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/game-download.conf'));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This only generates a simplified version, for under-used users only.
|
* This only generates a simplified version, for under-used users only.
|
||||||
*/
|
*/
|
||||||
@ -56,7 +58,7 @@ export const buildSSPanelUIMAppProfile = task(require.main === module, __filenam
|
|||||||
// stream - domains
|
// stream - domains
|
||||||
AllStreamServices.flatMap((i) => i.rules),
|
AllStreamServices.flatMap((i) => i.rules),
|
||||||
// steam - domains
|
// steam - domains
|
||||||
readFileIntoProcessedArray(path.join(SOURCE_DIR, 'domainset/game-download.conf')),
|
steamDomainsPromise,
|
||||||
// global - domains
|
// global - domains
|
||||||
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/global.conf')),
|
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/global.conf')),
|
||||||
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/telegram.conf')),
|
readFileIntoProcessedArray(path.join(OUTPUT_SURGE_DIR, 'non_ip/telegram.conf')),
|
||||||
|
|||||||
@ -14,15 +14,30 @@ const ASSETS_LIST = {
|
|||||||
'amazon-adsystem-com_amazon-apstag.js': 'https://unpkg.com/@adguard/scriptlets@latest/dist/redirect-files/amazon-apstag.js'
|
'amazon-adsystem-com_amazon-apstag.js': 'https://unpkg.com/@adguard/scriptlets@latest/dist/redirect-files/amazon-apstag.js'
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export const downloadMockAssets = task(require.main === module, __filename)((span) => Promise.all(Object.entries(ASSETS_LIST).map(
|
export const downloadMockAssets = task(require.main === module, __filename)(async (span) => {
|
||||||
|
const p = mkdirp(OUTPUT_MOCK_DIR);
|
||||||
|
if (p) {
|
||||||
|
await p;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.all(Object.entries(ASSETS_LIST).map(
|
||||||
([filename, url]) => span
|
([filename, url]) => span
|
||||||
.traceChildAsync(url, async () => {
|
.traceChildAsync(url, async () => {
|
||||||
const res = await $fetch(url);
|
const res = await $fetch(url);
|
||||||
if (!res.body) {
|
if (!res.ok) {
|
||||||
throw new Error(`Empty body from ${url}`);
|
console.error(`Failed to download ${url}`);
|
||||||
|
|
||||||
|
// we can safely skip this since we can always use previous version
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!res.body) {
|
||||||
|
console.error(`Empty body from ${url}`);
|
||||||
|
|
||||||
|
// we can safely skip this since we can always use previous version
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await mkdirp(OUTPUT_MOCK_DIR);
|
|
||||||
const src = path.join(OUTPUT_MOCK_DIR, filename);
|
const src = path.join(OUTPUT_MOCK_DIR, filename);
|
||||||
|
|
||||||
return pipeline(
|
return pipeline(
|
||||||
@ -30,4 +45,5 @@ export const downloadMockAssets = task(require.main === module, __filename)((spa
|
|||||||
fs.createWriteStream(src, 'utf-8')
|
fs.createWriteStream(src, 'utf-8')
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
)));
|
));
|
||||||
|
});
|
||||||
|
|||||||
@ -7,14 +7,13 @@ import type { Headers as TarEntryHeaders } from 'tar-fs';
|
|||||||
import zlib from 'node:zlib';
|
import zlib from 'node:zlib';
|
||||||
import undici from 'undici';
|
import undici from 'undici';
|
||||||
import picocolors from 'picocolors';
|
import picocolors from 'picocolors';
|
||||||
|
import { PUBLIC_DIR } from './constants/dir';
|
||||||
|
|
||||||
const GITHUB_CODELOAD_URL = 'https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master';
|
const GITHUB_CODELOAD_URL = 'https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master';
|
||||||
const GITLAB_CODELOAD_URL = 'https://gitlab.com/SukkaW/ruleset.skk.moe/-/archive/master/ruleset.skk.moe-master.tar.gz';
|
const GITLAB_CODELOAD_URL = 'https://gitlab.com/SukkaW/ruleset.skk.moe/-/archive/master/ruleset.skk.moe-master.tar.gz';
|
||||||
|
|
||||||
export const downloadPreviousBuild = task(require.main === module, __filename)(async (span) => {
|
export const downloadPreviousBuild = task(require.main === module, __filename)(async (span) => {
|
||||||
const publicDir = path.resolve(__dirname, '..', 'public');
|
if (fs.existsSync(PUBLIC_DIR)) {
|
||||||
|
|
||||||
if (fs.existsSync(publicDir)) {
|
|
||||||
console.log(picocolors.blue('Public directory exists, skip downloading previous build'));
|
console.log(picocolors.blue('Public directory exists, skip downloading previous build'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -61,7 +60,7 @@ export const downloadPreviousBuild = task(require.main === module, __filename)(a
|
|||||||
|
|
||||||
const gunzip = zlib.createGunzip();
|
const gunzip = zlib.createGunzip();
|
||||||
const extract = tarExtract(
|
const extract = tarExtract(
|
||||||
publicDir,
|
PUBLIC_DIR,
|
||||||
{
|
{
|
||||||
ignore(_: string, header?: TarEntryHeaders) {
|
ignore(_: string, header?: TarEntryHeaders) {
|
||||||
if (header) {
|
if (header) {
|
||||||
|
|||||||
@ -62,55 +62,30 @@ process.on('unhandledRejection', (reason) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const downloadPreviousBuildPromise = downloadPreviousBuild(rootSpan);
|
const downloadPreviousBuildPromise = downloadPreviousBuild(rootSpan);
|
||||||
|
|
||||||
const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon(rootSpan));
|
const buildCommonPromise = downloadPreviousBuildPromise.then(() => buildCommon(rootSpan));
|
||||||
const buildRejectIPListPromise = downloadPreviousBuildPromise.then(() => buildRejectIPList(rootSpan));
|
|
||||||
const buildAppleCdnPromise = downloadPreviousBuildPromise.then(() => buildAppleCdn(rootSpan));
|
|
||||||
const buildCdnConfPromise = downloadPreviousBuildPromise.then(() => buildCdnDownloadConf(rootSpan));
|
|
||||||
const buildRejectDomainSetPromise = downloadPreviousBuildPromise.then(() => buildRejectDomainSet(rootSpan));
|
|
||||||
const buildTelegramCIDRPromise = downloadPreviousBuildPromise.then(() => buildTelegramCIDR(rootSpan));
|
|
||||||
const buildChnCidrPromise = downloadPreviousBuildPromise.then(() => buildChnCidr(rootSpan));
|
|
||||||
const buildSpeedtestDomainSetPromise = downloadPreviousBuildPromise.then(() => buildSpeedtestDomainSet(rootSpan));
|
|
||||||
|
|
||||||
const buildInternalReverseChnCIDRPromise = buildInternalReverseChnCIDR(rootSpan);
|
|
||||||
|
|
||||||
// const buildInternalChnDomainsPromise = buildInternalChnDomains();
|
|
||||||
const buildDomesticRulesetPromise = downloadPreviousBuildPromise.then(() => buildDomesticRuleset(rootSpan));
|
|
||||||
|
|
||||||
const buildRedirectModulePromise = downloadPreviousBuildPromise.then(() => buildRedirectModule(rootSpan));
|
|
||||||
const buildAlwaysRealIPModulePromise = downloadPreviousBuildPromise.then(() => buildAlwaysRealIPModule(rootSpan));
|
|
||||||
|
|
||||||
const buildStreamServicePromise = downloadPreviousBuildPromise.then(() => buildStreamService(rootSpan));
|
|
||||||
|
|
||||||
const buildMicrosoftCdnPromise = downloadPreviousBuildPromise.then(() => buildMicrosoftCdn(rootSpan));
|
|
||||||
|
|
||||||
const buildSSPanelUIMAppProfilePromise = downloadPreviousBuildPromise.then(() => buildSSPanelUIMAppProfile(rootSpan));
|
|
||||||
|
|
||||||
const downloadMockAssetsPromise = downloadMockAssets(rootSpan);
|
|
||||||
|
|
||||||
const buildCloudMounterRulesPromise = downloadPreviousBuildPromise.then(() => buildCloudMounterRules(rootSpan));
|
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
downloadPreviousBuildPromise,
|
downloadPreviousBuildPromise,
|
||||||
buildCommonPromise,
|
buildCommonPromise,
|
||||||
buildRejectIPListPromise,
|
downloadPreviousBuildPromise.then(() => buildRejectIPList(rootSpan)),
|
||||||
buildAppleCdnPromise,
|
downloadPreviousBuildPromise.then(() => buildAppleCdn(rootSpan)),
|
||||||
buildCdnConfPromise,
|
downloadPreviousBuildPromise.then(() => buildCdnDownloadConf(rootSpan)),
|
||||||
buildRejectDomainSetPromise,
|
downloadPreviousBuildPromise.then(() => buildRejectDomainSet(rootSpan)),
|
||||||
buildTelegramCIDRPromise,
|
downloadPreviousBuildPromise.then(() => buildTelegramCIDR(rootSpan)),
|
||||||
buildChnCidrPromise,
|
downloadPreviousBuildPromise.then(() => buildChnCidr(rootSpan)),
|
||||||
buildSpeedtestDomainSetPromise,
|
downloadPreviousBuildPromise.then(() => buildSpeedtestDomainSet(rootSpan)),
|
||||||
buildInternalReverseChnCIDRPromise,
|
buildInternalReverseChnCIDR(rootSpan),
|
||||||
buildInternalReverseChnCIDRPromise,
|
downloadPreviousBuildPromise.then(() => buildDomesticRuleset(rootSpan)),
|
||||||
// buildInternalChnDomainsPromise,
|
downloadPreviousBuildPromise.then(() => buildRedirectModule(rootSpan)),
|
||||||
buildDomesticRulesetPromise,
|
downloadPreviousBuildPromise.then(() => buildAlwaysRealIPModule(rootSpan)),
|
||||||
buildRedirectModulePromise,
|
downloadPreviousBuildPromise.then(() => buildStreamService(rootSpan)),
|
||||||
buildAlwaysRealIPModulePromise,
|
downloadPreviousBuildPromise.then(() => buildMicrosoftCdn(rootSpan)),
|
||||||
buildStreamServicePromise,
|
Promise.all([
|
||||||
buildMicrosoftCdnPromise,
|
downloadPreviousBuildPromise,
|
||||||
buildSSPanelUIMAppProfilePromise,
|
buildCommonPromise
|
||||||
buildCloudMounterRulesPromise,
|
]).then(() => buildSSPanelUIMAppProfile(rootSpan)),
|
||||||
downloadMockAssetsPromise
|
downloadPreviousBuildPromise.then(() => buildCloudMounterRules(rootSpan)),
|
||||||
|
downloadMockAssets(rootSpan)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
|
|||||||
@ -219,8 +219,6 @@ export function getPhishingDomains(parentSpan: Span) {
|
|||||||
return domainArr;
|
return domainArr;
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log({ len: domainArr.length });
|
|
||||||
|
|
||||||
return span.traceChildAsync(
|
return span.traceChildAsync(
|
||||||
'process phishing domain set',
|
'process phishing domain set',
|
||||||
() => processPhihsingDomains(domainArr)
|
() => processPhihsingDomains(domainArr)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user