|
8 | 8 | slsa "github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/common" |
9 | 9 | slsa02 "github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/v0.2" |
10 | 10 | provenancetypes "github.com/moby/buildkit/solver/llbsolver/provenance/types" |
| 11 | + "github.com/moby/buildkit/util/gitutil" |
11 | 12 | "github.com/moby/buildkit/util/purl" |
12 | 13 | "github.com/moby/buildkit/util/urlutil" |
13 | 14 | "github.com/package-url/packageurl-go" |
@@ -69,6 +70,35 @@ func digestSetForCommit(commit string) slsa.DigestSet { |
69 | 70 | } |
70 | 71 |
|
71 | 72 | func findMaterial(srcs provenancetypes.Sources, uri string) (*slsa.ProvenanceMaterial, bool) { |
| 73 | + // Git URLs in querystring format or subdir need to be converted to fragment format with only ref |
| 74 | + gitRef, err := gitutil.ParseURL(uri) |
| 75 | + if err == nil && gitRef != nil { |
| 76 | + u := gitRef.Remote |
| 77 | + var ref string |
| 78 | + if gitRef.Opts != nil { |
| 79 | + ref = gitRef.Opts.Ref |
| 80 | + } |
| 81 | + if len(gitRef.Query) > 0 { |
| 82 | + for k, v := range gitRef.Query { |
| 83 | + if len(v) == 0 { |
| 84 | + continue |
| 85 | + } |
| 86 | + switch k { |
| 87 | + case "ref": |
| 88 | + ref = v[0] |
| 89 | + case "branch": |
| 90 | + ref = "refs/heads/" + v[0] |
| 91 | + case "tag": |
| 92 | + ref = "refs/tags/" + v[0] |
| 93 | + } |
| 94 | + } |
| 95 | + } |
| 96 | + if ref != "" { |
| 97 | + u += "#" + ref |
| 98 | + } |
| 99 | + uri = u |
| 100 | + } |
| 101 | + |
72 | 102 | for _, s := range srcs.Git { |
73 | 103 | if s.URL == uri { |
74 | 104 | return &slsa.ProvenanceMaterial{ |
@@ -102,6 +132,8 @@ func NewPredicate(c *Capture) (*provenancetypes.ProvenancePredicateSLSA02, error |
102 | 132 | contextKey := "context" |
103 | 133 | if v, ok := args["contextkey"]; ok && v != "" { |
104 | 134 | contextKey = v |
| 135 | + } else if v, ok := c.Args["input:context"]; ok && v != "" { |
| 136 | + contextKey = "input:context" |
105 | 137 | } |
106 | 138 |
|
107 | 139 | if v, ok := args[contextKey]; ok && v != "" { |
|
0 commit comments