@@ -86,5 +86,129 @@ public async Task TyeBuild_SinglePhase_ExistingDockerfile()
86
86
await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
87
87
}
88
88
}
89
+
90
+ [ ConditionalFact ]
91
+ [ SkipIfDockerNotRunning ]
92
+ public async Task TyeBuild_SinglePhase_ExistingDockerfileWithBuildArgs ( )
93
+ {
94
+ var projectName = "single-phase-dockerfile-args" ;
95
+ var environment = "production" ;
96
+ var imageName = "test/web" ;
97
+
98
+ await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
99
+
100
+ using var projectDirectory = CopyTestProjectDirectory ( projectName ) ;
101
+ Assert . True ( File . Exists ( Path . Combine ( projectDirectory . DirectoryPath , "Dockerfile" ) ) , "Dockerfile should exist." ) ;
102
+
103
+ var projectFile = new FileInfo ( Path . Combine ( projectDirectory . DirectoryPath , "tye.yaml" ) ) ;
104
+
105
+ var outputContext = new OutputContext ( sink , Verbosity . Debug ) ;
106
+ var application = await ApplicationFactory . CreateAsync ( outputContext , projectFile ) ;
107
+
108
+ application . Registry = new ContainerRegistry ( "test" ) ;
109
+
110
+ try
111
+ {
112
+ await BuildHost . ExecuteBuildAsync ( outputContext , application , environment , interactive : false ) ;
113
+
114
+ Assert . Single ( application . Services . Single ( ) . Outputs . OfType < DockerImageOutput > ( ) ) ;
115
+ var builder = ( DockerFileServiceBuilder ) application . Services . First ( ) ;
116
+ var valuePair = builder . BuildArgs . First ( ) ;
117
+ Assert . Equal ( "pat" , valuePair . Key ) ;
118
+ Assert . Equal ( "thisisapat" , valuePair . Value ) ;
119
+
120
+ await DockerAssert . AssertImageExistsAsync ( output , imageName ) ;
121
+ }
122
+ finally
123
+ {
124
+ await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
125
+ }
126
+ }
127
+
128
+ [ ConditionalFact ]
129
+ [ SkipIfDockerNotRunning ]
130
+ public async Task TyeBuild_SinglePhase_ExistingDockerfileWithBuildArgsDuplicateArgs ( )
131
+ {
132
+ var projectName = "single-phase-dockerfile-args" ;
133
+ var environment = "production" ;
134
+ var imageName = "test/web" ;
135
+
136
+ await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
137
+
138
+ using var projectDirectory = CopyTestProjectDirectory ( projectName ) ;
139
+ Assert . True ( File . Exists ( Path . Combine ( projectDirectory . DirectoryPath , "Dockerfile" ) ) , "Dockerfile should exist." ) ;
140
+
141
+ var projectFile = new FileInfo ( Path . Combine ( projectDirectory . DirectoryPath , "tye.yaml" ) ) ;
142
+
143
+ var outputContext = new OutputContext ( sink , Verbosity . Debug ) ;
144
+ var application = await ApplicationFactory . CreateAsync ( outputContext , projectFile ) ;
145
+
146
+ application . Registry = new ContainerRegistry ( "test" ) ;
147
+
148
+ try
149
+ {
150
+ await BuildHost . ExecuteBuildAsync ( outputContext , application , environment , interactive : false ) ;
151
+
152
+ Assert . Single ( application . Services . Single ( ) . Outputs . OfType < DockerImageOutput > ( ) ) ;
153
+ var builder = ( DockerFileServiceBuilder ) application . Services . First ( ) ;
154
+ var valuePair = builder . BuildArgs . First ( ) ;
155
+ Assert . Equal ( "pat" , valuePair . Key ) ;
156
+ Assert . Equal ( "thisisapat" , valuePair . Value ) ;
157
+
158
+ await DockerAssert . AssertImageExistsAsync ( output , imageName ) ;
159
+ }
160
+ finally
161
+ {
162
+ await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
163
+ }
164
+ }
165
+
166
+ [ ConditionalFact ]
167
+ [ SkipIfDockerNotRunning ]
168
+ public async Task TyeBuild_SinglePhase_ExistingDockerfileWithBuildArgsMultiArgs ( )
169
+ {
170
+ var projectName = "single-phase-dockerfile-multi-args" ;
171
+ var environment = "production" ;
172
+ var imageName = "test/web" ;
173
+
174
+ await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
175
+
176
+ using var projectDirectory = CopyTestProjectDirectory ( projectName ) ;
177
+ Assert . True ( File . Exists ( Path . Combine ( projectDirectory . DirectoryPath , "Dockerfile" ) ) , "Dockerfile should exist." ) ;
178
+
179
+ var projectFile = new FileInfo ( Path . Combine ( projectDirectory . DirectoryPath , "tye.yaml" ) ) ;
180
+
181
+ var outputContext = new OutputContext ( sink , Verbosity . Debug ) ;
182
+ var application = await ApplicationFactory . CreateAsync ( outputContext , projectFile ) ;
183
+
184
+ application . Registry = new ContainerRegistry ( "test" ) ;
185
+
186
+ try
187
+ {
188
+ await BuildHost . ExecuteBuildAsync ( outputContext , application , environment , interactive : false ) ;
189
+
190
+ Assert . Single ( application . Services . Single ( ) . Outputs . OfType < DockerImageOutput > ( ) ) ;
191
+ var builder = ( DockerFileServiceBuilder ) application . Services . First ( ) ;
192
+ var valuePair = builder . BuildArgs . ElementAt ( 0 ) ;
193
+
194
+ Assert . Equal ( 3 , builder . BuildArgs . Count ) ;
195
+ Assert . Equal ( "pat" , valuePair . Key ) ;
196
+ Assert . Equal ( "thisisapat" , valuePair . Value ) ;
197
+
198
+ valuePair = builder . BuildArgs . ElementAt ( 1 ) ;
199
+ Assert . Equal ( "number_of_replicas" , valuePair . Key ) ;
200
+ Assert . Equal ( "2" , valuePair . Value ) ;
201
+
202
+ valuePair = builder . BuildArgs . ElementAt ( 2 ) ;
203
+ Assert . Equal ( "number_of_shards" , valuePair . Key ) ;
204
+ Assert . Equal ( "5" , valuePair . Value ) ;
205
+
206
+ await DockerAssert . AssertImageExistsAsync ( output , imageName ) ;
207
+ }
208
+ finally
209
+ {
210
+ await DockerAssert . DeleteDockerImagesAsync ( output , imageName ) ;
211
+ }
212
+ }
89
213
}
90
214
}
0 commit comments