github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/zoci/utils.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // SPDX-FileCopyrightText: 2021-Present The Jackal Authors
     3  
     4  // Package zoci contains functions for interacting with Jackal packages stored in OCI registries.
     5  package zoci
     6  
     7  import (
     8  	"errors"
     9  	"fmt"
    10  	"strings"
    11  
    12  	"github.com/Racer159/jackal/src/types"
    13  	"github.com/defenseunicorns/pkg/helpers"
    14  	"oras.land/oras-go/v2/registry"
    15  )
    16  
    17  // ReferenceFromMetadata returns a reference for the given metadata.
    18  func ReferenceFromMetadata(registryLocation string, metadata *types.JackalMetadata, build *types.JackalBuildData) (string, error) {
    19  	ver := metadata.Version
    20  	if len(ver) == 0 {
    21  		return "", errors.New("version is required for publishing")
    22  	}
    23  
    24  	if !strings.HasSuffix(registryLocation, "/") {
    25  		registryLocation = registryLocation + "/"
    26  	}
    27  	registryLocation = strings.TrimPrefix(registryLocation, helpers.OCIURLPrefix)
    28  
    29  	format := "%s%s:%s"
    30  	raw := fmt.Sprintf(format, registryLocation, metadata.Name, ver)
    31  
    32  	if build != nil && build.Flavor != "" {
    33  		raw = fmt.Sprintf("%s-%s", raw, build.Flavor)
    34  	}
    35  
    36  	ref, err := registry.ParseReference(raw)
    37  	if err != nil {
    38  		return "", fmt.Errorf("failed to parse %s: %w", raw, err)
    39  	}
    40  
    41  	return ref.String(), nil
    42  }
    43  
    44  // GetInitPackageURL returns the URL for the init package for the given version.
    45  func GetInitPackageURL(version string) string {
    46  	return fmt.Sprintf("ghcr.io/defenseunicorns/packages/init:%s", version)
    47  }