@@ -2300,6 +2300,104 @@ func TestGroupTargetsWithDefault(t *testing.T) {
23002300 })
23012301}
23022302
2303+ func TestMatchNames (t * testing.T ) {
2304+ ctx := context .TODO ()
2305+
2306+ f := File {
2307+ Name : "docker-bake.hcl" ,
2308+ Data : []byte (`
2309+ group "default" {
2310+ targets = ["foo", "foo-bar"]
2311+ }
2312+ group "baz" {
2313+ targets = ["baz-foo", "baz-bar", "baz-fuu"]
2314+ }
2315+ target "foo" {}
2316+ target "foo-bar" {}
2317+ target "foo-baz" {}
2318+ target "foo-fuu" {}
2319+ target "bar-foo" {}
2320+ target "bar-baz" {}
2321+ target "bar-fuu" {}
2322+ target "baz-foo" {}
2323+ target "baz-bar" {}
2324+ target "baz-fuu" {}
2325+ target "mtx" {
2326+ name = "mtx-${foo}-${bar}-${baz}"
2327+ matrix = {
2328+ foo = ["a"]
2329+ bar = ["b", "c"]
2330+ baz = ["d", "e", "f"]
2331+ }
2332+ }
2333+ ` ),
2334+ }
2335+
2336+ cases := []struct {
2337+ name string
2338+ pattern []string
2339+ expected []string
2340+ wantErr bool
2341+ }{
2342+ {
2343+ name : "single" ,
2344+ pattern : []string {"foo" },
2345+ expected : []string {"foo" },
2346+ },
2347+ {
2348+ name : "starts with" ,
2349+ pattern : []string {"foo-*" },
2350+ expected : []string {"foo-bar" , "foo-baz" , "foo-fuu" },
2351+ },
2352+ {
2353+ name : "starts with group" ,
2354+ pattern : []string {"baz*" },
2355+ expected : []string {"baz-bar" , "baz-foo" , "baz-fuu" },
2356+ },
2357+ {
2358+ name : "matrix" ,
2359+ pattern : []string {"mtx" },
2360+ expected : []string {"mtx-a-b-d" , "mtx-a-b-e" , "mtx-a-b-f" , "mtx-a-c-d" , "mtx-a-c-e" , "mtx-a-c-f" },
2361+ },
2362+ {
2363+ name : "matrix starts with" ,
2364+ pattern : []string {"mtx-a-b-*" },
2365+ expected : []string {"mtx-a-b-d" , "mtx-a-b-e" , "mtx-a-b-f" },
2366+ },
2367+ {
2368+ name : "any" ,
2369+ pattern : []string {"*" },
2370+ expected : []string {"bar-baz" , "bar-foo" , "bar-fuu" , "baz-bar" , "baz-foo" , "baz-fuu" , "foo" , "foo-bar" , "foo-baz" , "foo-fuu" , "mtx-a-b-d" , "mtx-a-b-e" , "mtx-a-b-f" , "mtx-a-c-d" , "mtx-a-c-e" , "mtx-a-c-f" },
2371+ },
2372+ {
2373+ name : "any with group" ,
2374+ pattern : []string {"*" , "default" },
2375+ expected : []string {"bar-baz" , "bar-foo" , "bar-fuu" , "baz-bar" , "baz-foo" , "baz-fuu" , "foo" , "foo-bar" , "foo-baz" , "foo-fuu" , "mtx-a-b-d" , "mtx-a-b-e" , "mtx-a-b-f" , "mtx-a-c-d" , "mtx-a-c-e" , "mtx-a-c-f" },
2376+ },
2377+ {
2378+ name : "not found" ,
2379+ pattern : []string {"aaa-*" },
2380+ wantErr : true ,
2381+ },
2382+ }
2383+ for _ , tt := range cases {
2384+ t .Run (tt .name , func (t * testing.T ) {
2385+ m , _ , err := ReadTargets (ctx , []File {f }, tt .pattern , nil , nil , & EntitlementConf {})
2386+ if tt .wantErr {
2387+ require .Error (t , err )
2388+ } else {
2389+ require .NoError (t , err )
2390+ keys := make ([]string , 0 , len (m ))
2391+ for k := range m {
2392+ keys = append (keys , k )
2393+ }
2394+ sort .Strings (keys )
2395+ require .Equal (t , tt .expected , keys )
2396+ }
2397+ })
2398+ }
2399+ }
2400+
23032401func stringify [V fmt.Stringer ](values []V ) []string {
23042402 s := make ([]string , len (values ))
23052403 for i , v := range values {
0 commit comments