Chore: do not write tar.gz to disk

This commit is contained in:
SukkaW 2023-11-23 12:04:04 +08:00
parent 8e4ec2eb05
commit 07b8350048
2 changed files with 39 additions and 22 deletions

View File

@ -8,7 +8,6 @@ import { createRuleset } from './lib/create-file';
import { task } from './lib/trace-runner';
export const buildTelegramCIDR = task(__filename, async () => {
/** @type {Response} */
const resp = await fetchWithRetry('https://core.telegram.org/resources/cidr.txt', defaultRequestInit);
const lastModified = resp.headers.get('last-modified');
const date = lastModified ? new Date(lastModified) : new Date();

View File

@ -51,31 +51,49 @@ export const downloadPreviousBuild = task(__filename, async () => {
await traceAsync(
'Download and extract previous build',
() => Promise.all([
async () => {
const [resp] = await Promise.all([
fetchWithRetry('https://codeload.github.com/sukkalab/ruleset.skk.moe/tar.gz/master', defaultRequestInit),
fsp.mkdir(extractedPath, { recursive: true })
]).then(([resp]) => pipeline(
]);
await pipeline(
Readable.fromWeb(resp.body!),
tar.x({
cwd: extractedPath,
tar.t({
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;
}
const relativeEntryPath = entry.path.replace('ruleset.skk.moe-master' + path.sep, '');
const targetPath = path.join(__dirname, '..', relativeEntryPath);
await fsp.mkdir(path.dirname(targetPath), { recursive: true });
const targetFile = Bun.file(targetPath);
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();
}
})
))
);
await Promise.all(buildOutputList.map(async p => {
const src = path.join(extractedPath, 'ruleset.skk.moe-master', p);
if (fs.existsSync(src)) { // Bun.file().exists() doesn't check directory
return fsp.cp(
src,
path.join(__dirname, '..', p),
{ force: true, recursive: true }
);
}
}));
);
});
export const downloadPublicSuffixList = task(__filename, async () => {