From cf6f7a5417247251d0c6d9430bf6b5cd86deae61 Mon Sep 17 00:00:00 2001 From: Bence Major Date: Fri, 30 Aug 2024 08:40:10 +0200 Subject: [PATCH] feat: add containerimage support, solve ##1734 --- cmd/executor/cmd/root.go | 7 ++++++- integration/.containerignore | 3 +++ ...file_dockerignore_relative.containerignore | 3 +++ pkg/util/fs_util.go | 20 +++++++++++++------ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 integration/.containerignore create mode 100644 integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 7f0339c5d..ea2634d1e 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -395,7 +395,12 @@ func copyDockerfile() error { return errors.Wrap(err, "copying dockerfile") } dockerignorePath := opts.DockerfilePath + ".dockerignore" - if util.FilepathExists(dockerignorePath) { + containerignorePath := opts.DockerfilePath + ".containerignore" + if util.FilepathExists(containerignorePath) { + if _, err := util.CopyFile(containerignorePath, config.DockerfilePath+".containerignore", util.FileContext{}, util.DoNotChangeUID, util.DoNotChangeGID, fs.FileMode(0o600), true); err != nil { + return errors.Wrap(err, "copying Dockerfile.containerignore") + } + } else if util.FilepathExists(dockerignorePath) { if _, err := util.CopyFile(dockerignorePath, config.DockerfilePath+".dockerignore", util.FileContext{}, util.DoNotChangeUID, util.DoNotChangeGID, fs.FileMode(0o600), true); err != nil { return errors.Wrap(err, "copying Dockerfile.dockerignore") } diff --git a/integration/.containerignore b/integration/.containerignore new file mode 100644 index 000000000..ec574e06f --- /dev/null +++ b/integration/.containerignore @@ -0,0 +1,3 @@ +# A .dockerignore file to make sure dockerignore support works +ignore/** +!ignore/foo diff --git a/integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore b/integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore new file mode 100644 index 000000000..c825fe6c8 --- /dev/null +++ b/integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore @@ -0,0 +1,3 @@ +# A .containerignore file to make sure containerignore support works +ignore_relative/** +!ignore_relative/foo diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index c8d5a613a..864c443a6 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -775,17 +775,25 @@ func NewFileContextFromDockerfile(dockerfilePath, buildcontext string) (FileCont // getExcludedFiles returns a list of files to exclude from the .dockerignore func getExcludedFiles(dockerfilePath, buildcontext string) ([]string, error) { - path := dockerfilePath + ".dockerignore" - if !FilepathExists(path) { + var path string + + dockerignorePath := dockerfilePath + ".dockerignore" + containerignorePath := dockerfilePath + ".containerignore" + if FilepathExists(containerignorePath) { + path = containerignorePath + } else if FilepathExists(filepath.Join(buildcontext, ".containerignore")) { + path = filepath.Join(buildcontext, ".containerignore") + } else if FilepathExists(dockerignorePath) { + path = dockerignorePath + } else if FilepathExists(filepath.Join(buildcontext, ".dockerignore")) { path = filepath.Join(buildcontext, ".dockerignore") - } - if !FilepathExists(path) { + } else { return nil, nil } - logrus.Infof("Using dockerignore file: %v", path) + logrus.Infof("Using ignorefile: %v", path) contents, err := os.ReadFile(path) if err != nil { - return nil, errors.Wrap(err, "parsing .dockerignore") + return nil, errors.Wrap(err, "parsing ignorefile") } reader := bytes.NewBuffer(contents) return dockerignore.ReadAll(reader)