File tree Expand file tree Collapse file tree 3 files changed +52
-1
lines changed
Sources/ContainerCommands
Tests/CLITests/Subcommands/Build Expand file tree Collapse file tree 3 files changed +52
-1
lines changed Original file line number Diff line number Diff line change @@ -208,7 +208,7 @@ extension Application {
208208 }
209209
210210 let buildFileData : Data
211- let tempFile = FileManager . default. temporaryDirectory. appendingPathComponent ( " TempDockerfile " )
211+ let tempFile = FileManager . default. temporaryDirectory. appendingPathComponent ( " Dockerfile- \( UUID ( ) . uuidString ) " )
212212 defer {
213213 try ? FileManager . default. removeItem ( at: tempFile)
214214 }
Original file line number Diff line number Diff line change @@ -144,6 +144,42 @@ class TestCLIBuildBase: CLITest {
144144 return response. output
145145 }
146146
147+ @discardableResult
148+ func buildWithStdin(
149+ tags: [ String ] ,
150+ tempContext: URL ,
151+ dockerfileContents: String ,
152+ buildArgs: [ String ] = [ ] ,
153+ otherArgs: [ String ] = [ ]
154+ ) throws -> String {
155+ let contextDir : URL = tempContext. appendingPathComponent ( " context " )
156+ let contextDirPath = contextDir. absoluteURL. path
157+ var args = [
158+ " build " ,
159+ " -f " ,
160+ " - " ,
161+ ]
162+ for tag in tags {
163+ args. append ( " -t " )
164+ args. append ( tag)
165+ }
166+ for arg in buildArgs {
167+ args. append ( " --build-arg " )
168+ args. append ( arg)
169+ }
170+ args. append ( contextDirPath)
171+
172+ args. append ( contentsOf: otherArgs)
173+
174+ let stdinData = Data ( dockerfileContents. utf8)
175+ let response = try run ( arguments: args, stdin: stdinData)
176+ if response. status != 0 {
177+ throw CLIError . executionFailed ( " build failed: stdout= \( response. output) stderr= \( response. error) " )
178+ }
179+
180+ return response. output
181+ }
182+
147183 enum FileSystemEntry {
148184 case file(
149185 _ path: String ,
Original file line number Diff line number Diff line change @@ -456,5 +456,20 @@ extension TestCLIBuildBase {
456456 #expect( try self . inspectImage ( tag2) == tag2, " expected to have successfully built \( tag2) " )
457457 #expect( try self . inspectImage ( tag3) == tag3, " expected to have successfully built \( tag3) " )
458458 }
459+
460+ @Test func testBuildWithDockerfileFromStdin( ) throws {
461+ let tempDir : URL = try createTempDir ( )
462+ let dockerfile =
463+ """
464+ FROM scratch
465+
466+ ADD emptyFile /
467+ """
468+ let context : [ FileSystemEntry ] = [ . file( " emptyFile " , content: . zeroFilled( size: 1 ) ) ]
469+ try createContext ( tempDir: tempDir, dockerfile: " " , context: context)
470+ let imageName = " registry.local/stdin-file: \( UUID ( ) . uuidString) "
471+ try buildWithStdin ( tags: [ imageName] , tempContext: tempDir, dockerfileContents: dockerfile)
472+ #expect( try self . inspectImage ( imageName) == imageName, " expected to have successfully built \( imageName) " )
473+ }
459474 }
460475}
You can’t perform that action at this time.
0 commit comments