1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tool_cacheでCacheがHitしない

Posted at

Github ActionsでtoolがキャッシュHitしない

カスタムアクションを開発中

以下のコードSwiftのパッケージを持ってきてtoolCacheしているが、次回以降の実行でtoolCachefind でPathがHitしない

  const { platformName, pkgName } = await getPakage("5.10");
  let toolPath = toolCache.find("swift", "5.10");
  if (!toolPath) {
    const { pkgURL, signatureURL } = await getDownloadURL(
      swiftVersion,
      platformName,
      pkgName,
    );
    const { downloadPath, signaturePath } = await downloadSwift(
      pkgURL,
      signatureURL,
    );
    await verifySwift(downloadPath, signaturePath);
    const extractPath = await unpack(downloadPath, pkgName);
    toolPath = await toolCache.cacheDir(
      path.join(extractPath, pkgName),
      "swift",
      swiftVersion,
    );
  }
  const binPath = path.join(toolPath, "/usr/bin");
  core.addPath(binPath);

想定動作としては、

  1. toolCache.cacheDirでtoolCacheのパスにSwiftのディレクトリがコピーされる
  2. 次のActions実行時にtoolCache.find("swift", "5.10");でtoolPathが参照できる

しかし、SwiftはインストールされているがtoolCache.find("swift", "5.10");でパスが取得できない事象が発生した

原因

セマンティック バージョニングではなかったため発生した

tool_cache.find()のコードを見てみるとisExplicitVersion でバージョンをバリデーションしている。
5.10はセマンティック バージョニングではないため、versionがnullになりうまくCacheHitしない。

function find(toolName, versionSpec, arch) {
    if (!toolName) {
        throw new Error('toolName parameter is required');
    }
    if (!versionSpec) {
        throw new Error('versionSpec parameter is required');
    }
    arch = arch || os.arch();
    // attempt to resolve an explicit version
    if (!isExplicitVersion(versionSpec)) {
        const localVersions = findAllVersions(toolName, arch);
        const match = evaluateVersions(localVersions, versionSpec);
        versionSpec = match;
    }
...

対応策

semver.coerce()でセマンティック バージョニング形式に変換してCache及びfindする

semver.coerce('5.10');
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?