bump compose-go to v2.0.0-rc.2

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2024-01-22 12:27:38 +01:00
parent 1e8241f67c
commit eb4249ece4
No known key found for this signature in database
GPG key ID: 9858809D6F8F6E7E
4 changed files with 73 additions and 53 deletions

View file

@ -48,11 +48,13 @@ func gitRemoteLoaderEnabled() (bool, error) {
func NewGitRemoteLoader(offline bool) loader.ResourceLoader {
return gitRemoteLoader{
offline: offline,
known: map[string]string{},
}
}
type gitRemoteLoader struct {
offline bool
known map[string]string
}
func (g gitRemoteLoader) Accept(path string) bool {
@ -76,31 +78,34 @@ func (g gitRemoteLoader) Load(ctx context.Context, path string) (string, error)
return "", err
}
if ref.Commit == "" {
ref.Commit = "HEAD" // default branch
}
err = g.resolveGitRef(ctx, path, ref)
if err != nil {
return "", err
}
cache, err := cacheDir()
if err != nil {
return "", fmt.Errorf("initializing remote resource cache: %w", err)
}
local := filepath.Join(cache, ref.Commit)
if _, err := os.Stat(local); os.IsNotExist(err) {
if g.offline {
return "", nil
local, ok := g.known[path]
if !ok {
if ref.Commit == "" {
ref.Commit = "HEAD" // default branch
}
err = g.checkout(ctx, local, ref)
err = g.resolveGitRef(ctx, path, ref)
if err != nil {
return "", err
}
}
cache, err := cacheDir()
if err != nil {
return "", fmt.Errorf("initializing remote resource cache: %w", err)
}
local = filepath.Join(cache, ref.Commit)
if _, err := os.Stat(local); os.IsNotExist(err) {
if g.offline {
return "", nil
}
err = g.checkout(ctx, local, ref)
if err != nil {
return "", err
}
}
g.known[path] = local
}
if ref.SubDir != "" {
local = filepath.Join(local, ref.SubDir)
}
@ -114,6 +119,10 @@ func (g gitRemoteLoader) Load(ctx context.Context, path string) (string, error)
return local, err
}
func (g gitRemoteLoader) Dir(path string) string {
return g.known[path]
}
func (g gitRemoteLoader) resolveGitRef(ctx context.Context, path string, ref *gitutil.GitRef) error {
if !commitSHA.MatchString(ref.Commit) {
cmd := exec.CommandContext(ctx, "git", "ls-remote", "--exit-code", ref.Remote, ref.Commit)

View file

@ -50,12 +50,14 @@ func NewOCIRemoteLoader(dockerCli command.Cli, offline bool) loader.ResourceLoad
return ociRemoteLoader{
dockerCli: dockerCli,
offline: offline,
known: map[string]string{},
}
}
type ociRemoteLoader struct {
dockerCli command.Cli
offline bool
known map[string]string
}
const prefix = "oci://"
@ -77,42 +79,51 @@ func (g ociRemoteLoader) Load(ctx context.Context, path string) (string, error)
return "", nil
}
ref, err := reference.ParseDockerRef(path[len(prefix):])
if err != nil {
return "", err
}
opt, err := storeutil.GetImageConfig(g.dockerCli, nil)
if err != nil {
return "", err
}
resolver := imagetools.New(opt)
content, descriptor, err := resolver.Get(ctx, ref.String())
if err != nil {
return "", err
}
cache, err := cacheDir()
if err != nil {
return "", fmt.Errorf("initializing remote resource cache: %w", err)
}
local := filepath.Join(cache, descriptor.Digest.Hex())
composeFile := filepath.Join(local, "compose.yaml")
if _, err = os.Stat(local); os.IsNotExist(err) {
var manifest v1.Manifest
err = json.Unmarshal(content, &manifest)
local, ok := g.known[path]
if !ok {
ref, err := reference.ParseDockerRef(path[len(prefix):])
if err != nil {
return "", err
}
err2 := g.pullComposeFiles(ctx, local, composeFile, manifest, ref, resolver)
if err2 != nil {
return "", err2
opt, err := storeutil.GetImageConfig(g.dockerCli, nil)
if err != nil {
return "", err
}
resolver := imagetools.New(opt)
content, descriptor, err := resolver.Get(ctx, ref.String())
if err != nil {
return "", err
}
cache, err := cacheDir()
if err != nil {
return "", fmt.Errorf("initializing remote resource cache: %w", err)
}
local = filepath.Join(cache, descriptor.Digest.Hex())
composeFile := filepath.Join(local, "compose.yaml")
if _, err = os.Stat(local); os.IsNotExist(err) {
var manifest v1.Manifest
err = json.Unmarshal(content, &manifest)
if err != nil {
return "", err
}
err2 := g.pullComposeFiles(ctx, local, composeFile, manifest, ref, resolver)
if err2 != nil {
return "", err2
}
}
g.known[path] = local
}
return composeFile, nil
return filepath.Join(local, "compose.yaml"), nil
}
func (g ociRemoteLoader) Dir(path string) string {
return g.known[path]
}
func (g ociRemoteLoader) pullComposeFiles(ctx context.Context, local string, composeFile string, manifest v1.Manifest, ref reference.Named, resolver *imagetools.Resolver) error {