github.1485827954.workers.dev/nektos/act@v0.2.63/pkg/container/docker_network.go (about) 1 //go:build !(WITHOUT_DOCKER || !(linux || darwin || windows || netbsd)) 2 3 package container 4 5 import ( 6 "context" 7 8 "github.com/docker/docker/api/types" 9 "github.com/nektos/act/pkg/common" 10 ) 11 12 func NewDockerNetworkCreateExecutor(name string) common.Executor { 13 return func(ctx context.Context) error { 14 cli, err := GetDockerClient(ctx) 15 if err != nil { 16 return err 17 } 18 defer cli.Close() 19 20 // Only create the network if it doesn't exist 21 networks, err := cli.NetworkList(ctx, types.NetworkListOptions{}) 22 if err != nil { 23 return err 24 } 25 common.Logger(ctx).Debugf("%v", networks) 26 for _, network := range networks { 27 if network.Name == name { 28 common.Logger(ctx).Debugf("Network %v exists", name) 29 return nil 30 } 31 } 32 33 _, err = cli.NetworkCreate(ctx, name, types.NetworkCreate{ 34 Driver: "bridge", 35 Scope: "local", 36 }) 37 if err != nil { 38 return err 39 } 40 41 return nil 42 } 43 } 44 45 func NewDockerNetworkRemoveExecutor(name string) common.Executor { 46 return func(ctx context.Context) error { 47 cli, err := GetDockerClient(ctx) 48 if err != nil { 49 return err 50 } 51 defer cli.Close() 52 53 // Make sure that all network of the specified name are removed 54 // cli.NetworkRemove refuses to remove a network if there are duplicates 55 networks, err := cli.NetworkList(ctx, types.NetworkListOptions{}) 56 if err != nil { 57 return err 58 } 59 common.Logger(ctx).Debugf("%v", networks) 60 for _, network := range networks { 61 if network.Name == name { 62 result, err := cli.NetworkInspect(ctx, network.ID, types.NetworkInspectOptions{}) 63 if err != nil { 64 return err 65 } 66 67 if len(result.Containers) == 0 { 68 if err = cli.NetworkRemove(ctx, network.ID); err != nil { 69 common.Logger(ctx).Debugf("%v", err) 70 } 71 } else { 72 common.Logger(ctx).Debugf("Refusing to remove network %v because it still has active endpoints", name) 73 } 74 } 75 } 76 77 return err 78 } 79 }