@@ -24,6 +24,10 @@ import (
24
24
25
25
const magicDir = "/.envbuilder"
26
26
27
+ func stubLookupEnv (string ) (string , bool ) {
28
+ return "" , false
29
+ }
30
+
27
31
func TestParse (t * testing.T ) {
28
32
t .Parallel ()
29
33
raw := `{
@@ -87,16 +91,17 @@ func TestCompileWithFeatures(t *testing.T) {
87
91
dc , err := devcontainer .Parse ([]byte (raw ))
88
92
require .NoError (t , err )
89
93
fs := memfs .New ()
90
- params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , os .LookupEnv )
91
- require .NoError (t , err )
92
94
93
- // We have to SHA because we get a different MD5 every time!
94
95
featureOneMD5 := md5 .Sum ([]byte (featureOne ))
95
96
featureOneDir := fmt .Sprintf ("/.envbuilder/features/one-%x" , featureOneMD5 [:4 ])
96
97
featureTwoMD5 := md5 .Sum ([]byte (featureTwo ))
97
98
featureTwoDir := fmt .Sprintf ("/.envbuilder/features/two-%x" , featureTwoMD5 [:4 ])
98
99
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
100
105
101
106
USER root
102
107
# Rust tomato - Example description!
@@ -108,6 +113,38 @@ WORKDIR `+featureTwoDir+`
108
113
ENV POTATO=example
109
114
RUN VERSION="potato" _CONTAINER_USER="1000" _REMOTE_USER="1000" ./install.sh
110
115
USER 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
+ })
111
148
}
112
149
113
150
func TestCompileDevContainer (t * testing.T ) {
@@ -118,7 +155,7 @@ func TestCompileDevContainer(t *testing.T) {
118
155
dc := & devcontainer.Spec {
119
156
Image : "localhost:5000/envbuilder-test-ubuntu:latest" ,
120
157
}
121
- params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , os . LookupEnv )
158
+ params , err := dc .Compile (fs , "" , magicDir , "" , "" , false , stubLookupEnv )
122
159
require .NoError (t , err )
123
160
require .Equal (t , filepath .Join (magicDir , "Dockerfile" ), params .DockerfilePath )
124
161
require .Equal (t , magicDir , params .BuildContext )
@@ -144,7 +181,7 @@ func TestCompileDevContainer(t *testing.T) {
144
181
_ , err = io .WriteString (file , "FROM localhost:5000/envbuilder-test-ubuntu:latest" )
145
182
require .NoError (t , err )
146
183
_ = 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 )
148
185
require .NoError (t , err )
149
186
require .Equal (t , "ARG1=value1" , params .BuildArgs [0 ])
150
187
require .Equal (t , "ARG2=workspace" , params .BuildArgs [1 ])
0 commit comments