in pkg/runtime/install.go [161:213]
func InstallTarballIfNotCached(ctx *gcp.Context, runtime InstallableRuntime, versionConstraint string, layer *libcnb.Layer) (bool, error) {
runtimeName := runtimeNames[runtime]
runtimeID := string(runtime)
osName := OSForStack(ctx)
version, err := ResolveVersion(ctx, runtime, versionConstraint, osName)
if err != nil {
return false, err
}
if err = ValidateFlexMinVersion(ctx, runtime, version); err != nil {
return false, err
}
if layer.Cache {
if IsCached(ctx, layer, version) {
ctx.CacheHit(runtimeID)
ctx.Logf("%s v%s cache hit, skipping installation.", runtimeName, version)
return true, nil
}
ctx.CacheMiss(runtimeID)
}
if err := ctx.ClearLayer(layer); err != nil {
return false, gcp.InternalErrorf("clearing layer %q: %w", layer.Name, err)
}
ctx.Logf("Installing %s v%s.", runtimeName, version)
runtimeURL := tarballDownloadURL(runtime, osName, version)
stripComponents := 0
if runtime == OpenJDK || runtime == Go {
stripComponents = 1
}
region, present := os.LookupEnv(env.RuntimeImageRegion)
if present && runtime != Go {
url := runtimeImageURL(runtime, osName, version, region)
fallbackURL := runtimeImageURL(runtime, osName, version, fallbackRegion)
if err := fetch.ARImage(url, fallbackURL, layer.Path, stripComponents, ctx); err != nil {
ctx.Warnf("Failed to download %s version %s osName %s from artifact registry. You can specify the version by setting the GOOGLE_RUNTIME_VERSION environment variable", runtimeName, version, osName)
return false, err
}
} else {
if err := fetch.Tarball(runtimeURL, layer.Path, stripComponents); err != nil {
ctx.Warnf("Failed to download %s version %s osName %s from lorry. You can specify the version by setting the GOOGLE_RUNTIME_VERSION environment variable", runtimeName, version, osName)
return false, err
}
}
ctx.SetMetadata(layer, stackKey, ctx.StackID())
ctx.SetMetadata(layer, versionKey, version)
return false, nil
}