@kitsi/action 0.0.31 → 0.0.32

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.
@@ -7,11 +7,13 @@ interface PendingCache {
7
7
  export declare class GitHubCacheCapability {
8
8
  private pendingCaches;
9
9
  mount(ref: CacheRef): Promise<boolean>;
10
+ private trackPendingCache;
10
11
  private computeKey;
11
12
  private hashFiles;
12
13
  private hashEnv;
13
14
  private hashValue;
14
15
  private computeRestoreKeys;
16
+ private formatError;
15
17
  getPendingCaches(): PendingCache[];
16
18
  }
17
19
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/capabilities/cache.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAOD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAsB;IAErC,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAyB9B,UAAU;YAsBV,SAAS;IAavB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAI1B,gBAAgB,IAAI,YAAY,EAAE;CAGnC"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/capabilities/cache.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAiCD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAsB;IAErC,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC5C,OAAO,CAAC,iBAAiB;YASX,UAAU;YAsBV,SAAS;IAavB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,WAAW;IAOnB,gBAAgB,IAAI,YAAY,EAAE;CAGnC"}
@@ -1,18 +1,49 @@
1
1
  import * as cache from '@actions/cache';
2
2
  import * as core from '@actions/core';
3
3
  import * as glob from '@actions/glob';
4
- import { readFile } from 'node:fs/promises';
5
4
  import { createHash } from 'node:crypto';
5
+ import { mkdir, readFile } from 'node:fs/promises';
6
+ const SAFE_CACHE_NAME = /^[A-Za-z0-9._-]+$/;
7
+ const MAX_CACHE_KEY_LENGTH = 512;
8
+ const CACHE_KEY_HASH_LENGTH = 16;
9
+ function keyHashFragment(value) {
10
+ return createHash('sha256').update(value).digest('hex').slice(0, CACHE_KEY_HASH_LENGTH);
11
+ }
12
+ function trimKeyWithHash(key, maxLength = MAX_CACHE_KEY_LENGTH) {
13
+ if (key.length <= maxLength)
14
+ return key;
15
+ const suffix = `-${keyHashFragment(key)}`;
16
+ const headLength = Math.max(1, maxLength - suffix.length);
17
+ return `${key.slice(0, headLength)}${suffix}`;
18
+ }
19
+ function normalizeCacheName(name) {
20
+ if (SAFE_CACHE_NAME.test(name))
21
+ return name;
22
+ const normalized = name
23
+ .replace(/[^A-Za-z0-9._-]+/g, '-')
24
+ .replace(/-+/g, '-')
25
+ .replace(/^-+|-+$/g, '');
26
+ return normalized || 'cache';
27
+ }
6
28
  export class GitHubCacheCapability {
7
29
  pendingCaches = [];
8
30
  async mount(ref) {
9
- const path = ref.mountPath;
31
+ const path = ref.mountPath?.trim();
10
32
  if (!path) {
11
33
  throw new Error(`Cache "${ref.name}" has no mount path`);
12
34
  }
13
- const key = await this.computeKey(ref);
14
- const restoreKeys = this.computeRestoreKeys(ref);
15
- const restoredKey = await cache.restoreCache([path], key, restoreKeys);
35
+ const normalizedName = normalizeCacheName(ref.name);
36
+ const key = await this.computeKey(ref, normalizedName);
37
+ const restoreKeys = this.computeRestoreKeys(normalizedName);
38
+ await mkdir(path, { recursive: true });
39
+ let restoredKey;
40
+ try {
41
+ restoredKey = await cache.restoreCache([path], key, restoreKeys);
42
+ }
43
+ catch (error) {
44
+ core.warning(`Cache restore skipped for "${normalizedName}" (${key}): ${this.formatError(error)}`);
45
+ return false;
46
+ }
16
47
  const hit = restoredKey !== undefined;
17
48
  if (hit) {
18
49
  core.info(`Cache hit: ${restoredKey}`);
@@ -20,13 +51,19 @@ export class GitHubCacheCapability {
20
51
  else {
21
52
  core.info(`Cache miss, will save as: ${key}`);
22
53
  }
23
- // Track for post-run save
54
+ this.trackPendingCache(path, key, restoredKey);
55
+ return hit;
56
+ }
57
+ trackPendingCache(path, key, restoredKey) {
58
+ if (!path || !key) {
59
+ core.warning('Skipping cache save registration because path or key is empty');
60
+ return;
61
+ }
24
62
  this.pendingCaches.push({ paths: [path], key, restoredKey });
25
63
  process.env.KITSI_PENDING_CACHES = JSON.stringify(this.pendingCaches);
26
- return hit;
27
64
  }
28
- async computeKey(ref) {
29
- const parts = [process.env.RUNNER_OS ?? 'unknown', ref.name];
65
+ async computeKey(ref, normalizedName) {
66
+ const parts = [process.env.RUNNER_OS ?? 'unknown', normalizedName];
30
67
  const key = ref.key;
31
68
  if (key?.files && key.files.length > 0) {
32
69
  const hash = await this.hashFiles(key.files);
@@ -40,7 +77,7 @@ export class GitHubCacheCapability {
40
77
  const hash = this.hashValue(key.value);
41
78
  parts.push(hash.slice(0, 16));
42
79
  }
43
- return parts.join('-');
80
+ return trimKeyWithHash(parts.join('-'));
44
81
  }
45
82
  async hashFiles(patterns) {
46
83
  const globber = await glob.create(patterns.join('\n'));
@@ -65,8 +102,16 @@ export class GitHubCacheCapability {
65
102
  hashValue(value) {
66
103
  return createHash('sha256').update(value).digest('hex');
67
104
  }
68
- computeRestoreKeys(ref) {
69
- return [`${process.env.RUNNER_OS ?? 'unknown'}-${ref.name}-`];
105
+ computeRestoreKeys(normalizedName) {
106
+ const prefixBase = `${process.env.RUNNER_OS ?? 'unknown'}-${normalizedName}`;
107
+ const prefix = `${trimKeyWithHash(prefixBase, MAX_CACHE_KEY_LENGTH - 1)}-`;
108
+ return [prefix];
109
+ }
110
+ formatError(error) {
111
+ if (error instanceof Error) {
112
+ return error.message;
113
+ }
114
+ return String(error);
70
115
  }
71
116
  getPendingCaches() {
72
117
  return this.pendingCaches;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/capabilities/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/capabilities/cache.ts"],"names":[],"mappings":"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"}