1
0
Fork 0
mirror of https://code.forgejo.org/forgejo/runner.git synced 2025-09-15 18:57:01 +00:00

reuse containers to fix #86

This commit is contained in:
Casey Lee 2020-02-20 22:43:20 -05:00
parent 4009035011
commit 10296e05c7
5 changed files with 88 additions and 19 deletions

View file

@ -9,7 +9,6 @@ import (
"io"
"io/ioutil"
"os"
"path/filepath"
"regexp"
"runtime"
"strings"
@ -107,7 +106,19 @@ func (rc *RunContext) Executor() common.Executor {
return nil
}
return common.NewPipelineExecutor(steps...)(ctx)
nullLogger := logrus.New()
nullLogger.Out = ioutil.Discard
if !rc.Config.ReuseContainers {
rc.newContainerCleaner()(common.WithLogger(ctx, nullLogger))
}
err := common.NewPipelineExecutor(steps...)(ctx)
if !rc.Config.ReuseContainers {
rc.newContainerCleaner()(common.WithLogger(ctx, nullLogger))
}
return err
}
}
@ -202,7 +213,7 @@ func (rc *RunContext) runContainer(containerSpec *model.ContainerSpec) common.Ex
fmt.Sprintf("%s:%s", "/var/run/docker.sock", "/var/run/docker.sock"),
},
Content: map[string]io.Reader{"/github": ghReader},
ReuseContainers: rc.Config.ReuseContainers,
ReuseContainers: containerSpec.Reuse,
Stdout: logWriter,
Stderr: logWriter,
})(ctx)
@ -241,17 +252,29 @@ func (rc *RunContext) createGithubTarball() (io.Reader, error) {
}
func (rc *RunContext) createContainerName(stepID string) string {
containerName := fmt.Sprintf("%s-%s", stepID, rc.Tempdir)
func (rc *RunContext) createContainerName() string {
containerName := rc.Run.String()
containerName = regexp.MustCompile("[^a-zA-Z0-9]").ReplaceAllString(containerName, "-")
prefix := fmt.Sprintf("%s-", trimToLen(filepath.Base(rc.Config.Workdir), 10))
prefix := ""
suffix := ""
containerName = trimToLen(containerName, 30-(len(prefix)+len(suffix)))
return fmt.Sprintf("%s%s%s", prefix, containerName, suffix)
}
func (rc *RunContext) createStepContainerName(stepID string) string {
prefix := regexp.MustCompile("[^a-zA-Z0-9]").ReplaceAllString(rc.createContainerName(), "-")
suffix := regexp.MustCompile("[^a-zA-Z0-9]").ReplaceAllString(stepID, "-")
containerName := trimToLen(prefix, 30-len(suffix))
return fmt.Sprintf("%s%s%s", prefix, containerName, suffix)
}
func trimToLen(s string, l int) string {
if l < 0 {
l = 0
}
if len(s) > l {
return s[:l]
}