/** * {@inheritdoc} * * @param resource|StreamInterface|string $inputStream The input stream (encoded with tar) containing the Dockerfile * and other files for the image. * * @return \Psr\Http\Message\ResponseInterface|BuildInfo[]|BuildStream */ public function build($inputStream, $parameters = [], $fetch = self::FETCH_OBJECT) { if (is_resource($inputStream)) { $inputStream = new TarStream($inputStream); } $queryParam = new QueryParam(); $queryParam->setDefault('dockerfile', null); $queryParam->setDefault('t', null); $queryParam->setDefault('remote', null); $queryParam->setDefault('q', false); $queryParam->setDefault('nocache', false); $queryParam->setDefault('pull', null); $queryParam->setDefault('rm', true); $queryParam->setDefault('forcerm', false); $queryParam->setDefault('memory', null); $queryParam->setDefault('memswap', null); $queryParam->setDefault('cpushares', null); $queryParam->setDefault('cpusetcpus', null); $queryParam->setDefault('cpuperiod', null); $queryParam->setDefault('cpuquota', null); $queryParam->setDefault('buildargs', null); $queryParam->setDefault('Content-type', 'application/tar'); $queryParam->setHeaderParameters(['Content-type']); $queryParam->setDefault('X-Registry-Config', null); $queryParam->setHeaderParameters(['X-Registry-Config']); $url = '/build'; $url = $url . ('?' . $queryParam->buildQueryString($parameters)); $headers = array_merge(['Host' => 'localhost'], $queryParam->buildHeaders($parameters)); $body = $inputStream; $request = $this->messageFactory->createRequest('POST', $url, $headers, $body); if ($inputStream instanceof StreamInterface) { $request = $request->withHeader('Transfer-Encoding', 'chunked'); } $response = $this->httpClient->sendRequest($request); if (200 === $response->getStatusCode()) { if (self::FETCH_STREAM === $fetch) { return new BuildStream($response->getBody(), $this->serializer); } if (self::FETCH_OBJECT === $fetch) { $buildInfoList = []; $stream = new BuildStream($response->getBody(), $this->serializer); $stream->onFrame(function (BuildInfo $buildInfo) use(&$buildInfoList) { $buildInfoList[] = $buildInfo; }); $stream->wait(); return $buildInfoList; } } return $response; }
/** * {@inheritdoc} * * @return \Psr\Http\Message\ResponseInterface|BuildInfo[]|BuildStream */ public function build($inputStream, $parameters = [], $fetch = self::FETCH_OBJECT) { $response = parent::build($inputStream, $parameters, self::FETCH_RESPONSE); if (200 === $response->getStatusCode()) { if (self::FETCH_STREAM === $fetch) { return new BuildStream($response->getBody(), $this->serializer); } if (self::FETCH_OBJECT === $fetch) { $buildInfoList = []; $stream = new BuildStream($response->getBody(), $this->serializer); $stream->onFrame(function (BuildInfo $buildInfo) use(&$buildInfoList) { $buildInfoList[] = $buildInfo; }); $stream->wait(); return $buildInfoList; } } return $response; }