Skip to content

Commit

Permalink
feat: allow dependencies to be pinned to a git ref
Browse files Browse the repository at this point in the history
Signed-off-by: Bram Vogelaar <[email protected]>
  • Loading branch information
attachmentgenie committed Oct 24, 2023
1 parent b4804d4 commit 09e3ccf
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
2 changes: 1 addition & 1 deletion internal/creator/templates/pack_metadata.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ pack {

// dependency "demo_dep" {
// alias = "demo_dep"
// source = "git://source.git/packs/demo_dependency_pack"
// source = "git://source.git//packs/demo_dependency_pack"
// }
10 changes: 9 additions & 1 deletion internal/pkg/deps/vendor.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,18 @@ func Vendor(ctx context.Context, ui terminal.UI, targetPath string) error {

for _, d := range metadata.Dependencies {
targetDir := path.Join(targetPath, "deps", d.Name)
url := d.Source

if !d.IsLatest() {
url = fmt.Sprintf("%s?ref=%s", url, d.Ref)
} else {
// Attempt to shallow clone the constructed url
url = fmt.Sprintf("%s?depth=1", url)
}

// download each dependency
ui.Info(fmt.Sprintf("downloading %v pack to %v...", d.Name, targetDir))
if err := gg.Get(targetDir, fmt.Sprintf(d.Source), gg.WithContext(ctx)); err != nil {
if err := gg.Get(targetDir, url, gg.WithContext(ctx)); err != nil {
return fmt.Errorf("error downloading dependency: %v", err)
}
ui.Success("...success!")
Expand Down
9 changes: 9 additions & 0 deletions sdk/pack/dependency.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ type Dependency struct {
// variable values.
Alias string `hcl:"alias,optional"`

// Ref is the git reference of the pack at which to add. Ignored if not
// specifying a git source. Defaults to latest.
Ref string `hcl:"ref,optional"`

// Source is the remote source where the pack can be fetched. This string
// can follow any format as supported by go-getter or be a local path
// indicating the pack has already been downloaded.
Expand All @@ -45,6 +49,11 @@ func (d *Dependency) ID() ID {
return ID(d.AliasOrName())
}

// IsLatest works out if the user requested the HEAD of the dependency
func (d *Dependency) IsLatest() bool {
return d.Ref == "" || d.Ref == "latest"
}

// validate the Dependency object to ensure it meets requirements and doesn't
// contain invalid or incorrect data.
func (d *Dependency) validate() error {
Expand Down

0 comments on commit 09e3ccf

Please sign in to comment.