mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-12 01:00:34 +08:00
Chore: do not write tar.gz to disk
This commit is contained in:
parent
8e4ec2eb05
commit
07b8350048
@ -8,7 +8,6 @@ import { createRuleset } from './lib/create-file';
|
|||||||
import { task } from './lib/trace-runner';
|
import { task } from './lib/trace-runner';
|
||||||
|
|
||||||
export const buildTelegramCIDR = task(__filename, async () => {
|
export const buildTelegramCIDR = task(__filename, async () => {
|
||||||
/** @type {Response} */
|
|
||||||
const resp = await fetchWithRetry('https://core.telegram.org/resources/cidr.txt', defaultRequestInit);
|
const resp = await fetchWithRetry('https://core.telegram.org/resources/cidr.txt', defaultRequestInit);
|
||||||
const lastModified = resp.headers.get('last-modified');
|
const lastModified = resp.headers.get('last-modified');
|
||||||
const date = lastModified ? new Date(lastModified) : new Date();
|
const date = lastModified ? new Date(lastModified) : new Date();
|
||||||
|
|||||||
@ -51,31 +51,49 @@ export const downloadPreviousBuild = task(__filename, async () => {
|
|||||||
|
|
||||||
await traceAsync(
|
await traceAsync(
|
||||||
'Download and extract previous build',
|
'Download and extract previous build',
|
||||||
() => Promise.all([
|
async () => {
|
||||||
fetchWithRetry('https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master', defaultRequestInit),
|
const [resp] = await Promise.all([
|
||||||
fsp.mkdir(extractedPath, { recursive: true })
|
fetchWithRetry('https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master', defaultRequestInit),
|
||||||
]).then(([resp]) => pipeline(
|
fsp.mkdir(extractedPath, { recursive: true })
|
||||||
Readable.fromWeb(resp.body!),
|
]);
|
||||||
tar.x({
|
await pipeline(
|
||||||
cwd: extractedPath,
|
Readable.fromWeb(resp.body!),
|
||||||
filter(p) {
|
tar.t({
|
||||||
return filesList.some(f => p.startsWith(f));
|
filter(p) {
|
||||||
}
|
return filesList.some(f => p.startsWith(f));
|
||||||
})
|
},
|
||||||
))
|
// onentry is async, so we close entry manually after consumed
|
||||||
);
|
noResume: true,
|
||||||
|
async onentry(entry) {
|
||||||
|
if (entry.type !== 'File') {
|
||||||
|
// not a file, throw away
|
||||||
|
console.log(entry.type, entry.path)
|
||||||
|
entry.resume();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
await Promise.all(buildOutputList.map(async p => {
|
const relativeEntryPath = entry.path.replace('ruleset.skk.moe-master' + path.sep, '');
|
||||||
const src = path.join(extractedPath, 'ruleset.skk.moe-master', p);
|
|
||||||
|
|
||||||
if (fs.existsSync(src)) { // Bun.file().exists() doesn't check directory
|
const targetPath = path.join(__dirname, '..', relativeEntryPath);
|
||||||
return fsp.cp(
|
await fsp.mkdir(path.dirname(targetPath), { recursive: true });
|
||||||
src,
|
|
||||||
path.join(__dirname, '..', p),
|
const targetFile = Bun.file(targetPath);
|
||||||
{ force: true, recursive: true }
|
const targetFileSink = targetFile.writer();
|
||||||
|
|
||||||
|
await new Promise<void>((resolve, reject) => {
|
||||||
|
entry.on('data', (chunk) => {
|
||||||
|
targetFileSink.write(chunk);
|
||||||
|
});
|
||||||
|
entry.on('end', resolve);
|
||||||
|
entry.on('error', reject);
|
||||||
|
});
|
||||||
|
|
||||||
|
await targetFileSink.end();
|
||||||
|
}
|
||||||
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}));
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
export const downloadPublicSuffixList = task(__filename, async () => {
|
export const downloadPublicSuffixList = task(__filename, async () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user