@@ -24,6 +24,10 @@ import (
2424
2525const magicDir = "/.envbuilder"
2626
27+ func stubLookupEnv (string ) (string , bool ) {
28+ return "" , false
29+ }
30+
2731func TestParse (t * testing.T ) {
2832 t .Parallel ()
2933 raw := `{
@@ -87,16 +91,17 @@ func TestCompileWithFeatures(t *testing.T) {
8791 dc , err := devcontainer .Parse ([]byte (raw ))
8892 require .NoError (t , err )
8993 fs := memfs .New ()
90- params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , os .LookupEnv )
91- require .NoError (t , err )
9294
93- // We have to SHA because we get a different MD5 every time!
9495 featureOneMD5 := md5 .Sum ([]byte (featureOne ))
9596 featureOneDir := fmt .Sprintf ("/.envbuilder/features/one-%x" , featureOneMD5 [:4 ])
9697 featureTwoMD5 := md5 .Sum ([]byte (featureTwo ))
9798 featureTwoDir := fmt .Sprintf ("/.envbuilder/features/two-%x" , featureTwoMD5 [:4 ])
9899
99- require .Equal (t , `FROM localhost:5000/envbuilder-test-codercom-code-server:latest
100+ t .Run ("WithoutBuildContexts" , func (t * testing.T ) {
101+ params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , stubLookupEnv )
102+ require .NoError (t , err )
103+
104+ require .Equal (t , `FROM localhost:5000/envbuilder-test-codercom-code-server:latest
100105
101106USER root
102107# Rust tomato - Example description!
@@ -108,6 +113,38 @@ WORKDIR `+featureTwoDir+`
108113ENV POTATO=example
109114RUN VERSION="potato" _CONTAINER_USER="1000" _REMOTE_USER="1000" ./install.sh
110115USER 1000` , params .DockerfileContent )
116+ })
117+
118+ t .Run ("WithBuildContexts" , func (t * testing.T ) {
119+ params , err := dc .Compile (fs , "" , magicDir , "" , "" , true , stubLookupEnv )
120+ require .NoError (t , err )
121+
122+ registryHost := strings .TrimPrefix (registry , "http://" )
123+
124+ require .Equal (t , `FROM scratch AS envbuilder_feature_one
125+ COPY --from=` + registryHost + `/coder/one / /
126+
127+ FROM scratch AS envbuilder_feature_two
128+ COPY --from=` + registryHost + `/coder/two / /
129+
130+ FROM localhost:5000/envbuilder-test-codercom-code-server:latest
131+
132+ USER root
133+ # Rust tomato - Example description!
134+ WORKDIR ` + featureOneDir + `
135+ ENV TOMATO=example
136+ RUN --mount=type=bind,from=envbuilder_feature_one,target=` + featureOneDir + `,rw _CONTAINER_USER="1000" _REMOTE_USER="1000" ./install.sh
137+ # Go potato - Example description!
138+ WORKDIR ` + featureTwoDir + `
139+ ENV POTATO=example
140+ RUN --mount=type=bind,from=envbuilder_feature_two,target=` + featureTwoDir + `,rw VERSION="potato" _CONTAINER_USER="1000" _REMOTE_USER="1000" ./install.sh
141+ USER 1000` , params .DockerfileContent )
142+
143+ require .Equal (t , map [string ]string {
144+ registryHost + "/coder/one" : featureOneDir ,
145+ registryHost + "/coder/two" : featureTwoDir ,
146+ }, params .FeatureContexts )
147+ })
111148}
112149
113150func TestCompileDevContainer (t * testing.T ) {
@@ -118,7 +155,7 @@ func TestCompileDevContainer(t *testing.T) {
118155 dc := & devcontainer.Spec {
119156 Image : "localhost:5000/envbuilder-test-ubuntu:latest" ,
120157 }
121- params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , os . LookupEnv )
158+ params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , stubLookupEnv )
122159 require .NoError (t , err )
123160 require .Equal (t , filepath .Join (magicDir , "Dockerfile" ), params .DockerfilePath )
124161 require .Equal (t , magicDir , params .BuildContext )
@@ -144,7 +181,7 @@ func TestCompileDevContainer(t *testing.T) {
144181 _ , err = io .WriteString (file , "FROM localhost:5000/envbuilder-test-ubuntu:latest" )
145182 require .NoError (t , err )
146183 _ = file .Close ()
147- params , err := dc .Compile (fs , dcDir , magicDir , "" , "/var/workspace" , false , os . LookupEnv )
184+ params , err := dc .Compile (fs , dcDir , magicDir , "" , "/var/workspace" , false , stubLookupEnv )
148185 require .NoError (t , err )
149186 require .Equal (t , "ARG1=value1" , params .BuildArgs [0 ])
150187 require .Equal (t , "ARG2=workspace" , params .BuildArgs [1 ])
0 commit comments