turborepo-remote-cache 2.8.9 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/remote-cache/index.js +3 -2
- package/dist/plugins/remote-cache/routes/clean-schema.js +11 -0
- package/dist/plugins/remote-cache/routes/clean.js +24 -0
- package/dist/plugins/remote-cache/routes/index.js +2 -1
- package/dist/plugins/remote-cache/storage/clean-local.js +50 -0
- package/dist/plugins/remote-cache/storage/index.js +12 -2
- package/dist/plugins/remote-cache/storage/local.js +6 -4
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { STORAGE_PROVIDERS } from '../../env.js';
|
|
2
2
|
import auth from './auth/index.js';
|
|
3
|
-
import { artifactsEvents, getArtifact, getStatus, headArtifact, putArtifact, } from './routes/index.js';
|
|
3
|
+
import { artifactsEvents, cleanCache, getArtifact, getStatus, headArtifact, putArtifact, } from './routes/index.js';
|
|
4
4
|
import { createLocation } from './storage/index.js';
|
|
5
5
|
async function turboRemoteCache(instance, options) {
|
|
6
6
|
const bodyLimit = instance.config.BODY_LIMIT;
|
|
@@ -27,10 +27,11 @@ async function turboRemoteCache(instance, options) {
|
|
|
27
27
|
i.route(headArtifact);
|
|
28
28
|
i.route(putArtifact);
|
|
29
29
|
i.route(artifactsEvents);
|
|
30
|
+
i.route(cleanCache);
|
|
30
31
|
}, { prefix: `/${apiVersion}` });
|
|
31
32
|
await instance.register(async (i) => {
|
|
32
33
|
i.route(getStatus);
|
|
33
34
|
}, { prefix: `/${apiVersion}` });
|
|
34
35
|
}
|
|
35
36
|
export default turboRemoteCache;
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ2hELE9BQU8sSUFBSSxNQUFNLGlCQUFpQixDQUFBO0FBQ2xDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsR0FDWixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxLQUFLLFVBQVUsZ0JBQWdCLENBQzdCLFFBQXlCLEVBQ3pCLE9BR0M7SUFFRCxNQUFNLFNBQVMsR0FBVyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQTtJQUNwRCxNQUFNLEVBQUUsVUFBVSxHQUFHLElBQUksRUFBRSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRXpFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FDM0IsMEJBQTBCLEVBQzFCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFDaEMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUNwQyxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDLENBQ0YsQ0FBQTtJQUVELFFBQVEsQ0FBQyxRQUFRLENBQ2YsVUFBVSxFQUNWLGNBQWMsQ0FBQyxRQUFRLEVBQUU7UUFDdkIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYTtRQUN4QyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhO1FBQ3hDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVk7UUFDbEMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUztRQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1FBQ3JDLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtRQUM3QyxVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDbEUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYztRQUN6QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsMkJBQTJCO1FBQ3JELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCO1FBQ3ZELFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWM7S0FDM0MsQ0FBQyxDQUNILENBQUE7SUFFRCxRQUFRLENBQUMsUUFBUSxDQUNmLEtBQUssV0FBVyxDQUFDO1FBQ2YsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDcEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNyQixDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNyQixDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUM3QixDQUFBO0lBRUQsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUNyQixLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDVixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BCLENBQUMsRUFDRCxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQzdCLENBQUE7QUFDSCxDQUFDO0FBRUQsZUFBZSxnQkFBZ0IsQ0FBQSJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
const DEFAULT_OLDER_THAN_DAYS = 10;
|
|
3
|
+
const querystring = Type.Object({
|
|
4
|
+
slug: Type.String({ minLength: 1 }),
|
|
5
|
+
olderThan: Type.Optional(Type.Integer({ minimum: 1, maximum: 3650 })),
|
|
6
|
+
}, { additionalProperties: false });
|
|
7
|
+
export const cleanRouteSchema = {
|
|
8
|
+
querystring,
|
|
9
|
+
};
|
|
10
|
+
export { DEFAULT_OLDER_THAN_DAYS };
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW4tc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVtb3RlLWNhY2hlL3JvdXRlcy9jbGVhbi1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWhELE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFBO0FBRWxDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQzdCO0lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDdEUsRUFDRCxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUNoQyxDQUFBO0FBR0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsV0FBVztDQUNaLENBQUE7QUFFRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQSJ9
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { badRequest } from '@hapi/boom';
|
|
2
|
+
import { DEFAULT_OLDER_THAN_DAYS, cleanRouteSchema, } from './clean-schema.js';
|
|
3
|
+
function assertSafeTeamSlug(slug) {
|
|
4
|
+
if (slug === '.' ||
|
|
5
|
+
slug.includes('..') ||
|
|
6
|
+
slug.includes('/') ||
|
|
7
|
+
slug.includes('\\')) {
|
|
8
|
+
throw badRequest('Invalid slug');
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export const cleanCache = {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
url: '/clean',
|
|
14
|
+
schema: cleanRouteSchema,
|
|
15
|
+
authorization: 'write',
|
|
16
|
+
async handler(req, reply) {
|
|
17
|
+
const slug = req.query.slug;
|
|
18
|
+
assertSafeTeamSlug(slug);
|
|
19
|
+
const olderThanDays = req.query.olderThan ?? DEFAULT_OLDER_THAN_DAYS;
|
|
20
|
+
const result = await this.location.cleanStaleArtifacts(slug, olderThanDays);
|
|
21
|
+
return reply.send(result);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvcm91dGVzL2NsZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFNdkMsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixnQkFBZ0IsR0FDakIsTUFBTSxtQkFBbUIsQ0FBQTtBQUUxQixTQUFTLGtCQUFrQixDQUFDLElBQVk7SUFDdEMsSUFDRSxJQUFJLEtBQUssR0FBRztRQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ25CLENBQUM7UUFDRCxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FPbkI7SUFDRixNQUFNLEVBQUUsTUFBTTtJQUNkLEdBQUcsRUFBRSxRQUFRO0lBQ2IsTUFBTSxFQUFFLGdCQUFnQjtJQUN4QixhQUFhLEVBQUUsT0FBTztJQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQzNCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLHVCQUF1QixDQUFBO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFFM0UsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLENBQUM7Q0FDRixDQUFBIn0=
|
|
@@ -3,4 +3,5 @@ export { headArtifact } from './head-artifact.js';
|
|
|
3
3
|
export { putArtifact } from './put-artifact.js';
|
|
4
4
|
export { artifactsEvents } from './artifacts-events.js';
|
|
5
5
|
export { getStatus } from './get-status.js';
|
|
6
|
-
|
|
6
|
+
export { cleanCache } from './clean.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQSJ9
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readdir, stat, unlink } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
4
|
+
export async function cleanStaleLocalArtifacts(rootPath, team, olderThanDays) {
|
|
5
|
+
const teamPath = join(rootPath, team);
|
|
6
|
+
const cutoff = Date.now() - olderThanDays * MILLISECONDS_PER_DAY;
|
|
7
|
+
let deleted = 0;
|
|
8
|
+
let scanned = 0;
|
|
9
|
+
let entries;
|
|
10
|
+
try {
|
|
11
|
+
entries = await readdir(teamPath);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
if (err.code === 'ENOENT') {
|
|
15
|
+
return { deleted, scanned };
|
|
16
|
+
}
|
|
17
|
+
throw err;
|
|
18
|
+
}
|
|
19
|
+
for (const entry of entries) {
|
|
20
|
+
const filePath = join(teamPath, entry);
|
|
21
|
+
let fileStats;
|
|
22
|
+
try {
|
|
23
|
+
fileStats = await stat(filePath);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
if (err.code === 'ENOENT') {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
if (!fileStats.isFile()) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
scanned++;
|
|
35
|
+
if (fileStats.atimeMs <= cutoff) {
|
|
36
|
+
try {
|
|
37
|
+
await unlink(filePath);
|
|
38
|
+
deleted++;
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err.code === 'ENOENT') {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return { deleted, scanned };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW4tbG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9jbGVhbi1sb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRWhDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFBO0FBT2hELE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLFFBQWdCLEVBQ2hCLElBQVksRUFDWixhQUFxQjtJQUVyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxhQUFhLEdBQUcsb0JBQW9CLENBQUE7SUFDaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0lBRWYsSUFBSSxPQUFpQixDQUFBO0lBQ3JCLElBQUksQ0FBQztRQUNILE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUssR0FBNkIsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUM3QixDQUFDO1FBQ0QsTUFBTSxHQUFHLENBQUE7SUFDWCxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLElBQUksU0FBUyxDQUFBO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSyxHQUE2QixDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckQsU0FBUTtZQUNWLENBQUM7WUFDRCxNQUFNLEdBQUcsQ0FBQTtRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDeEIsU0FBUTtRQUNWLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQTtRQUNULElBQUksU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3RCLE9BQU8sRUFBRSxDQUFBO1lBQ1gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSyxHQUE2QixDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDckQsU0FBUTtnQkFDVixDQUFDO2dCQUNELE1BQU0sR0FBRyxDQUFBO1lBQ1gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUM3QixDQUFDIn0=
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { Readable, pipeline as pipelineCallback } from 'stream';
|
|
3
3
|
import { promisify } from 'util';
|
|
4
|
+
import { notImplemented } from '@hapi/boom';
|
|
4
5
|
import { STORAGE_PROVIDERS } from '../../../env.js';
|
|
5
6
|
import { createAzureBlobStorage, } from './azure-blob-storage.js';
|
|
7
|
+
import { cleanStaleLocalArtifacts } from './clean-local.js';
|
|
6
8
|
import { createGoogleCloudStorage, } from './google-cloud-storage.js';
|
|
7
|
-
import { createLocal } from './local.js';
|
|
9
|
+
import { createLocal, getLocalRootPath, } from './local.js';
|
|
8
10
|
import { createS3 } from './s3.js';
|
|
9
11
|
const pipeline = promisify(pipelineCallback);
|
|
10
12
|
const TURBO_CACHE_FOLDER_NAME = 'turborepocache';
|
|
@@ -132,6 +134,13 @@ export function createLocation(provider, providerOptions) {
|
|
|
132
134
|
async function createCachedArtifactTag(artifactId, team, tag) {
|
|
133
135
|
return pipeline(Readable.from(tag), location.createWriteStream(getArtifactTagPath(artifactId, team)));
|
|
134
136
|
}
|
|
137
|
+
async function cleanStaleArtifacts(team, olderThanDays) {
|
|
138
|
+
if (provider !== STORAGE_PROVIDERS.LOCAL) {
|
|
139
|
+
throw notImplemented('Clean is only supported for the local storage provider');
|
|
140
|
+
}
|
|
141
|
+
const { path = TURBO_CACHE_FOLDER_NAME, useTmp = TURBO_CACHE_USE_TMP_FOLDER, } = providerOptions;
|
|
142
|
+
return cleanStaleLocalArtifacts(getLocalRootPath({ path, useTmp }), team, olderThanDays);
|
|
143
|
+
}
|
|
135
144
|
return {
|
|
136
145
|
getCachedArtifact,
|
|
137
146
|
createCachedArtifact,
|
|
@@ -139,6 +148,7 @@ export function createLocation(provider, providerOptions) {
|
|
|
139
148
|
getCachedArtifactTag,
|
|
140
149
|
existsCachedArtifactTag,
|
|
141
150
|
createCachedArtifactTag,
|
|
151
|
+
cleanStaleArtifacts,
|
|
142
152
|
};
|
|
143
153
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNuRCxPQUFPLEVBRUwsc0JBQXNCLEdBQ3ZCLE1BQU0seUJBQXlCLENBQUE7QUFDaEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDM0QsT0FBTyxFQUVMLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sWUFBWSxDQUFBO0FBQ25CLE9BQU8sRUFBNEIsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRTVELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQXlCLENBQUE7QUFDekQsTUFBTSwwQkFBMEIsR0FBRyxJQUFhLENBQUE7QUE2QmhELFNBQVMscUJBQXFCLENBQzVCLFFBQWtCLEVBQ2xCLGVBQTBDO0lBRTFDLE1BQU0sRUFDSixJQUFJLEdBQUcsdUJBQXVCLEVBQzlCLE1BQU0sR0FBRywwQkFBMEIsR0FDcEMsR0FBRyxlQUFlLENBQUE7SUFFbkIsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFD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
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { tmpdir } from 'os';
|
|
2
2
|
import { join, normalize } from 'path';
|
|
3
3
|
import fs from 'fs-blob-store';
|
|
4
|
-
export function
|
|
5
|
-
|
|
6
|
-
return fs(fullPath);
|
|
4
|
+
export function getLocalRootPath({ path, useTmp }) {
|
|
5
|
+
return useTmp ? join(tmpdir(), path) : normalize(path);
|
|
7
6
|
}
|
|
8
|
-
|
|
7
|
+
export function createLocal(options) {
|
|
8
|
+
return fs(getLocalRootPath(options));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9sb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQU85QixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFnQjtJQUM3RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBcUI7SUFDL0MsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxDQUFDIn0=
|