Esempio n. 1
0
        private static List <ContainerImagePayload> ImagePayloadWhenNotBuildingImages(string acrRepoBase, string testRepoBase, string prodRepoBase, List <DirectoryInfo> directoryInfos)
        {
            List <ContainerImagePayload> payloads = new List <ContainerImagePayload>();

            foreach (var di in directoryInfos)
            {
                //we aren't building the images, so read the version file for both parent and child
                var childVersionTag = TryReadVersionFileForDirectory(di);
                if (childVersionTag == null)
                {
                    PublishContainerImages.WriteError($"No version found in target directory {di.FullName}");
                    throw new FileNotFoundException($"No version file found in target directory {di.FullName}");
                }
                if (di.Parent != null)
                {
                    var parentVersion = TryReadVersionFileForDirectory(di.Parent);
                    //we aren't building the parent, so use the parent tag from the version file in the directory above
                    var payload = PayloadForDirectory(acrRepoBase, testRepoBase, prodRepoBase, di, ExtractBuildVersionFromFullTag(childVersionTag), parentVersion);

                    payloads.Add(payload);
                }
            }

            return(payloads);
        }
Esempio n. 2
0
        private static FileInfo _fileInfoForContainerImageDefinition(DirectoryInfo root)
        {
            FileInfo fileInfo = null;

            try
            {
                fileInfo = root.GetFiles(PublishContainerImages.ContainerImagesDefinitionFilename).Single();
            }
            catch (UnauthorizedAccessException e)
            {
                PublishContainerImages.WriteError(e.Message);
            }
            catch (DirectoryNotFoundException e)
            {
                PublishContainerImages.WriteError(e.Message);
            }
            catch (ArgumentNullException e)
            {
                PublishContainerImages.WriteError(e.Message);
            }
            catch (InvalidOperationException e)
            {
                PublishContainerImages.WriteError(e.Message);
            }

            return(fileInfo);
        }
Esempio n. 3
0
        private static ContainerImageDefinition ReadContainerImageDefinition(DirectoryInfo directory)
        {
            var containerDefinitionFileInfo = _fileInfoForContainerImageDefinition(directory);

            if (containerDefinitionFileInfo != null)
            {
                ContainerImageDefinition containerImageDefinition;
                dynamic json = Json.ReadJsonFileToDynamic(containerDefinitionFileInfo.FullName);
                try
                {
                    containerImageDefinition = json.ToObject <ContainerImageDefinition>();
                    containerImageDefinition.PathToDockerFile = System.IO.Path.GetRelativePath(
                        PublishContainerImages.DockerInstallScriptsRootDir, directory.FullName);
                }
                catch (JsonSerializationException ex)
                {
                    PublishContainerImages.WriteError(
                        $"Invalid Json read in file {containerDefinitionFileInfo}, Json was: {json}. Exception: {ex}");
                    throw;
                }
                return(containerImageDefinition);
            }

            return(null);
        }
Esempio n. 4
0
        private static Tuple <TestConfigurationDefinition, TestParametersDefinition> TryReadTestConfigAndParams(DirectoryInfo directory)
        {
            var testConfigFiles = directory.GetFiles(PublishContainerImages.TestConfigurationFilename);
            var testParamsFiles = directory.GetFiles(PublishContainerImages.TestParametersFilename);

            if (!testConfigFiles.Any())
            {
                PublishContainerImages.WriteLog($"No Test will be run, testConfiguration.json not found in directory {directory}");
                return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(null, null));
            }

            if (!testParamsFiles.Any())
            {
                PublishContainerImages.WriteLog($"No Test will be run, testParameters.json not found in directory {directory}");
                return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(null, null));
            }

            if (testConfigFiles.Length > 1)
            {
                PublishContainerImages.WriteLog($"No test will be run, more than one TestConfiguration.json file found in {directory}");
                return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(null, null));
            }

            if (testParamsFiles.Length > 1)
            {
                PublishContainerImages.WriteLog($"No test will be run, more than one TestParameters.json file found in {directory}");
                return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(null, null));
            }

            var testConfigJson = _readJsonFileToDynamic(testConfigFiles.Single().FullName);
            TestConfigurationDefinition testConfig;
            TestParametersDefinition    testParams;

            try
            {
                testConfig = testConfigJson.ToObject <TestConfigurationDefinition>();
            }
            catch (JsonSerializationException ex)
            {
                PublishContainerImages.WriteError($"No test will be run, invalid Json read in file {testConfigFiles.Single().FullName}, Json was: {testConfigJson}. Exception: {ex}");
                return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(null, null));
            }

            var testParamsJson = _readJsonFileToDynamic(testParamsFiles.Single().FullName);

            try
            {
                testParams = testParamsJson.ToObject <TestParametersDefinition>();
            }
            catch (JsonSerializationException ex)
            {
                PublishContainerImages.WriteError($"No test will be run, invalid Json read in file {testParamsJson.Single().FullName}, Json was: {testParamsJson}. Exception: {ex}");
                return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(null, null));
            }

            return(new Tuple <TestConfigurationDefinition, TestParametersDefinition>(testConfig, testParams));
        }
        private static RenderingContainerImages ReadRenderingContainerImagesJsonFile(string masterFilePath)
        {
            RenderingContainerImages renderingContainerImages;
            dynamic json = Json.ReadJsonFileToDynamic(masterFilePath);

            try
            {
                renderingContainerImages = json.ToObject <RenderingContainerImages>();
            }
            catch (JsonSerializationException ex)
            {
                PublishContainerImages.WriteError(
                    $"Invalid Json read in file {masterFilePath}, Json was: {json}. Exception: {ex}");
                throw;
            }
            return(renderingContainerImages);
        }
Esempio n. 6
0
        private static ContainerImageDefinition ReadContainerImageDefinition(DirectoryInfo directory)
        {
            var containerDefinitionFileInfo = _fileInfoForContainerImageDefinition(directory);

            if (containerDefinitionFileInfo != null)
            {
                ContainerImageDefinition containerImageDefinition;
                dynamic json = _readJsonFileToDynamic(containerDefinitionFileInfo.FullName);
                try
                {
                    containerImageDefinition = json.ToObject <ContainerImageDefinition>();
                }
                catch (JsonSerializationException ex)
                {
                    PublishContainerImages.WriteError(
                        $"Invalid Json read in file {containerDefinitionFileInfo}, Json was: {json}. Exception: {ex}");
                    throw;
                }
                return(containerImageDefinition);
            }

            return(null);
        }
        private static string[] _runCmdProcess(string commandLine, int timeoutInMs)
        {
            ProcessStartInfo processStartInfo;

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                processStartInfo = new ProcessStartInfo
                {
                    FileName               = "docker",
                    Arguments              = commandLine,
                    UseShellExecute        = false,
                    CreateNoWindow         = true,
                    RedirectStandardOutput = true,
                    RedirectStandardError  = true,
                };
            }
            else
            {
                processStartInfo = new ProcessStartInfo
                {
                    FileName               = "cmd.exe",
                    Arguments              = $"/c docker " + commandLine,
                    UseShellExecute        = false,
                    CreateNoWindow         = true,
                    RedirectStandardOutput = true,
                    RedirectStandardError  = true,
                };
            }
            PublishContainerImages.WriteLog($"Running commandLine: {processStartInfo.FileName} {processStartInfo.Arguments}");
            using (var process = new Process
            {
                StartInfo = processStartInfo
            })
            {
                var output = new List <string>();

                process.OutputDataReceived += delegate(object sender, DataReceivedEventArgs e)
                {
                    if (!String.IsNullOrEmpty(e.Data))
                    {
                        PublishContainerImages.WriteLog(e.Data);
                        output.Add(e.Data);
                    }
                };
                process.ErrorDataReceived += delegate(object sender, DataReceivedEventArgs e)
                {
                    if (!String.IsNullOrEmpty(e.Data))
                    {
                        PublishContainerImages.WriteError(e.Data);
                        output.Add("ERROR: " + e.Data);
                        throw new Exception($"Error in external process: {commandLine}, {e.Data}");
                    }
                };
                process.Start();
                process.BeginErrorReadLine();
                process.BeginOutputReadLine();

                process.WaitForExit(timeoutInMs);
                process.WaitForExit();

                return(output.ToArray());
            }
        }