diff --git a/pkg/compiler/artifact.go b/pkg/compiler/artifact.go index 417758ce..d15a5339 100644 --- a/pkg/compiler/artifact.go +++ b/pkg/compiler/artifact.go @@ -21,6 +21,7 @@ import ( "path" "path/filepath" "regexp" + //"strconv" "strings" "sync" diff --git a/pkg/compiler/artifact_test.go b/pkg/compiler/artifact_test.go index 7277adc0..c7f068a0 100644 --- a/pkg/compiler/artifact_test.go +++ b/pkg/compiler/artifact_test.go @@ -75,6 +75,9 @@ var _ = Describe("Artifact", func() { FROM alpine COPY . /luetbuild WORKDIR /luetbuild +ENV PACKAGE_NAME=enman +ENV PACKAGE_VERSION=1.4.0 +ENV PACKAGE_CATEGORY=app-admin `)) b := NewSimpleDockerBackend() opts := CompilerBackendOptions{ @@ -93,6 +96,9 @@ WORKDIR /luetbuild Expect(err).ToNot(HaveOccurred()) Expect(dockerfile).To(Equal(` FROM luet/base +ENV PACKAGE_NAME=enman +ENV PACKAGE_VERSION=1.4.0 +ENV PACKAGE_CATEGORY=app-admin RUN echo foo > /test RUN echo bar > /test2`)) opts = CompilerBackendOptions{ diff --git a/pkg/compiler/spec.go b/pkg/compiler/spec.go index a88e8856..81cd36bc 100644 --- a/pkg/compiler/spec.go +++ b/pkg/compiler/spec.go @@ -87,7 +87,8 @@ func (specs *LuetCompilationspecs) Unique() CompilationSpecs { } type LuetCompilationSpec struct { - Steps []string `json:"steps"` // Are run inside a container and the result layer diff is saved + Steps []string `json:"steps"` // Are run inside a container and the result layer diff is saved + Env []string `json:"env"` Prelude []string `json:"prelude"` // Are run inside the image which will be our builder Image string `json:"image"` Seed string `json:"seed"` @@ -169,7 +170,16 @@ func (cs *LuetCompilationSpec) RenderBuildImage() (string, error) { FROM ` + cs.GetSeedImage() + ` COPY . /luetbuild WORKDIR /luetbuild +ENV PACKAGE_NAME=` + cs.Package.GetName() + ` +ENV PACKAGE_VERSION=` + cs.Package.GetVersion() + ` +ENV PACKAGE_CATEGORY=` + cs.Package.GetCategory() + ` ` + + for _, s := range cs.Env { + spec = spec + ` +ENV ` + s + } + for _, s := range cs.GetPreBuildSteps() { spec = spec + ` RUN ` + s @@ -180,7 +190,15 @@ RUN ` + s // TODO: docker build image first. Then a backend can be used to actually spin up a container with it and run the steps within func (cs *LuetCompilationSpec) RenderStepImage(image string) (string, error) { spec := ` -FROM ` + image +FROM ` + image + ` +ENV PACKAGE_NAME=` + cs.Package.GetName() + ` +ENV PACKAGE_VERSION=` + cs.Package.GetVersion() + ` +ENV PACKAGE_CATEGORY=` + cs.Package.GetCategory() + + for _, s := range cs.Env { + spec = spec + ` +ENV ` + s + } for _, s := range cs.BuildSteps() { spec = spec + ` RUN ` + s diff --git a/pkg/compiler/spec_test.go b/pkg/compiler/spec_test.go index 8dcf7e46..6a50d82a 100644 --- a/pkg/compiler/spec_test.go +++ b/pkg/compiler/spec_test.go @@ -75,6 +75,7 @@ var _ = Describe("Spec", func() { Expect(err).ToNot(HaveOccurred()) defer os.RemoveAll(tmpdir) // clean up + lspec.Env = []string{"test=1"} err = lspec.WriteBuildImageDefinition(filepath.Join(tmpdir, "Dockerfile")) Expect(err).ToNot(HaveOccurred()) dockerfile, err := helpers.Read(filepath.Join(tmpdir, "Dockerfile")) @@ -83,6 +84,10 @@ var _ = Describe("Spec", func() { FROM alpine COPY . /luetbuild WORKDIR /luetbuild +ENV PACKAGE_NAME=enman +ENV PACKAGE_VERSION=1.4.0 +ENV PACKAGE_CATEGORY=app-admin +ENV test=1 `)) err = lspec.WriteStepImageDefinition(lspec.Image, filepath.Join(tmpdir, "Dockerfile")) @@ -91,6 +96,10 @@ WORKDIR /luetbuild Expect(err).ToNot(HaveOccurred()) Expect(dockerfile).To(Equal(` FROM luet/base +ENV PACKAGE_NAME=enman +ENV PACKAGE_VERSION=1.4.0 +ENV PACKAGE_CATEGORY=app-admin +ENV test=1 RUN echo foo > /test RUN echo bar > /test2`))