func (v *shellOp) VisitContainer(node *parse.ContainerNode) error { if node.NodeType != parse.NodeShell { return nil } node.Container.Entrypoint = []string{ "/bin/sh", "-c", } node.Container.Command = []string{ "echo $DRONE_SCRIPT | base64 -d | /bin/sh -e", } if node.Container.Environment == nil { node.Container.Environment = map[string]string{} } node.Container.Environment["HOME"] = "/root" node.Container.Environment["SHELL"] = "/bin/sh" node.Container.Environment["DRONE_SCRIPT"] = toScript( node.Root().Path, node.Commands, ) return nil }
func (v *cacheOp) VisitContainer(node *parse.ContainerNode) error { if node.Type() != parse.NodeCache { return nil } if len(node.Vargs) == 0 || v.enable == false { node.Disabled = true return nil } if node.Container.Name == "" { node.Container.Name = "cache" } if node.Container.Image == "" { node.Container.Image = v.plugin } // discard any other cache properties except the image name. // everything else is discard for security reasons. node.Container = runner.Container{ Name: node.Container.Name, Alias: node.Container.Alias, Image: node.Container.Image, Volumes: []string{ v.mount + ":/cache", }, } // this is a hack until I can come up with a better solution. // this copies the clone name, and appends at the end of the // build. When it is executed a second time the build should // have a completed status, so it knows to cache instead // of restore. cache := node.Root().NewCacheNode() cache.Vargs = node.Vargs cache.Container = node.Container node.Root().Script = append(node.Root().Script, cache) return nil }