public async Task TestSimpleHierar() { var data = (@"# Xcode # Build, test, and archive an Xcode workspace on macOS. # Add steps that install certificates, test, sign, and distribute the app, save build artifacts, and more: # https://docs.microsoft.com/azure/devops/pipelines/languages/xcode pool: vmImage: 'macOS 10.13' steps: - task: Xcode@5 inputs: scheme: '' sdk: 'iphoneos' configuration: 'Release' xcodeVersion: 'default' # Options: 8, 9, default, specifyPath"); string nameFile = $"{nameof(TestSimpleHierar)}.txt"; File.WriteAllText(nameFile, data); var visit = new YamlReader(nameFile, Encoding.UTF8); var dt = await visit.TransformData(null); var transform = new TransformerToOneTableHierarchical("jobs", "name", "steps", "jobName", "all"); dt = await transform.TransformData(dt); dt.Should().NotBeNull(); dt.DataToBeSentFurther.Should().NotBeNull(); var jobs = dt.FindAfterName("all").Value; jobs.Should().NotBeNull(); jobs.Rows.Count.Should().Be(1); }
public void GetSingleUserTestWithRestReqLibDeserialized() { UserData expectedUserData = new UserData(2, "Janet", "Weaver", new Uri("https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg")); UserData actualUserData = new RestReq().Get(YamlReader.GetValue("Single_user")).Param("id", "2").Execute <UserData>(); Assert.IsTrue(expectedUserData.Equals(actualUserData)); }
public virtual bool ReadYaml(YamlReader reader) { var version = reader.PeekMap(); if (!version.HasValue || !version.Value.Key.Equals("Version", StringComparison.Ordinal)) { return(false); } VersionNumber = int.Parse(reader.ReadExpectedMap("Version")); var fields = reader.PeekMap(); if (fields.HasValue && fields.Value.Key.Equals("Fields", StringComparison.Ordinal)) { reader.ReadMap(); while (true) { var field = new YamlFieldValue(); if (field.ReadYaml(reader)) { Fields.Add(field); } else { break; } } } return(true); }
public void TestBasic() { var yaml = @"Id: Google.Chrome Name: Chrome Publisher: Google Version: 78.0.3904.87 Homepage: https://www.google.com/chrome/ InstallerType: MSI AppMoniker: chrome License: Google Chrome and Chrome OS Additional Terms of Service LicenseUrl: https://www.google.com/chrome/terms/ # ======================= Installers ================== Installers: - Arch: x64 Url: https://dl.google.com/edgedl/chrome/install/GoogleChromeStandaloneEnterprise64.msi Sha256: F17FDA159EC69C0F9E96656642E5F2A5DE547BED784978A354C51D70E88C93DC Language: en-US"; var reader = new YamlReader(); using TextReader textReader = new StringReader(yaml); var deserialized = reader.Read(textReader); var writer = new YamlWriter(); using TextWriter textWriter = new StringWriter(); writer.Write(deserialized, textWriter); }
public async Task TestYamlGrphvizSimple() { var data = (@"# Xcode # Build, test, and archive an Xcode workspace on macOS. # Add steps that install certificates, test, sign, and distribute the app, save build artifacts, and more: # https://docs.microsoft.com/azure/devops/pipelines/languages/xcode pool: vmImage: 'macOS 10.13' steps: - task: Xcode@5 inputs: scheme: '' sdk: 'iphoneos' configuration: 'Release' xcodeVersion: 'default' # Options: 8, 9, default, specifyPath"); string nameFile = $"{nameof(TestYamlGrphvizSimple)}.txt"; File.WriteAllText(nameFile, data); var visit = new YamlReader(nameFile, Encoding.UTF8); var dt = await visit.TransformData(null); var graph = new SenderYamlAzurePipelineToDot(); dt = await graph.TransformData(dt); //await File.WriteAllTextAsync("a.txt",graph.Result()); //Process.Start("notepad.exe","a.txt"); var res = graph.OutputString.Rows[0]["Contents"].ToString().Replace(Environment.NewLine, ""); res.Should().ContainAll("Xcode@5", "->"); //res.Should().NotContain("2");// not 2 jobs, not 2 tasks }
public virtual void ReadYaml(YamlReader reader, string serializedItemId) { Id = reader.ReadExpectedGuidMap("ID"); ParentId = reader.ReadExpectedGuidMap("Parent"); TemplateId = reader.ReadExpectedGuidMap("Template"); Path = reader.ReadExpectedMap("Path"); SerializedItemId = serializedItemId; }
private void ExecuteYamlReader(string yaml, Action <YamlReader> readAssertions) { using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(yaml))) { using (var writer = new YamlReader(ms, 4096, false)) { readAssertions(writer); } } }
public void GetSingleUserTestWithRestReqLib() { UserData expectedUserData = new UserData(2, "Janet", "Weaver", new Uri("https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg")); IRestResponse response = new RestReq() .Get(YamlReader.GetValue("Single_user")) .Param("id", "2") .Execute(); UserData actualUserData = JsonConvert.DeserializeObject <UserData>(response.Content); Assert.IsTrue(expectedUserData.Equals(actualUserData)); Assert.AreEqual(200, (int)response.StatusCode); }
public bool ReadYaml(YamlReader reader) { var id = reader.PeekMap(); if (!id.HasValue) { return(false); } var key = id.Value.Key; if (!key.Equals("ID", StringComparison.Ordinal)) { if (key.Equals("Languages", StringComparison.Ordinal) || key.Equals("Language", StringComparison.Ordinal) || key.Equals("Version", StringComparison.Ordinal) || key.Equals("Versions", StringComparison.Ordinal)) { return(false); } throw new FormatException(reader.CreateErrorMessage("Cannot read field value. Expected 'ID' map, found '" + id.Value.Key + "' instead.")); } Id = reader.ReadExpectedGuidMap("ID"); var hint = reader.PeekMap(); if (hint.HasValue && hint.Value.Key.Equals("Hint")) { NameHint = reader.ReadExpectedMap("Hint"); } var blob = reader.PeekMap(); if (blob.HasValue && blob.Value.Key.Equals("BlobID")) { BlobId = reader.ReadExpectedGuidMap("BlobID"); } var type = reader.PeekMap(); if (type.HasValue && type.Value.Key.Equals("Type")) { reader.ReadMap(); Type = type.Value.Value; } Value = reader.ReadExpectedMap("Value"); return(true); }
public bool ReadYaml(YamlReader reader) { var language = reader.PeekMap(); if (!language.HasValue || !language.Value.Key.Equals("Language", StringComparison.Ordinal)) { return(false); } Language = reader.ReadExpectedMap("Language"); var fields = reader.PeekMap(); if (fields.HasValue && fields.Value.Key.Equals("Fields", StringComparison.OrdinalIgnoreCase)) { reader.ReadExpectedMap("Fields"); while (true) { var field = new YamlFieldValue(); if (field.ReadYaml(reader)) { UnversionedFields.Add(field); } else { break; } } } reader.ReadExpectedMap("Versions"); while (true) { var version = new YamlVersion(); if (version.ReadYaml(reader)) { Versions.Add(version); } else { break; } } return(true); }
public ConfigFileReader(string filePath) { var yamlReader = new YamlReader(filePath); Settings = new Settings.Settings { AvailableMethods = new List<KeyValuePair<string, int>>(), AvailableProtocols = new List<KeyValuePair<string, int>>(), AvailableFileExtension = new List<KeyValuePair<string, int>>(), AvailableStatusСodes = new List<KeyValuePair<string, int>>() }; for (var i = 0; i < yamlReader.Records.Count(); i++) { if (yamlReader.Records.ElementAt(i).Key1 == "Method") { Settings.AvailableMethods.Add(new KeyValuePair<string, int>(yamlReader.Records.ElementAt(i).Value1, Convert.ToInt32(yamlReader.Records.ElementAt(i).Value2))); } if (yamlReader.Records.ElementAt(i).Key1 == "Protocol") { Settings.AvailableProtocols.Add(new KeyValuePair<string, int>(yamlReader.Records.ElementAt(i).Value1, Convert.ToInt32(yamlReader.Records.ElementAt(i).Value2))); } if (yamlReader.Records.ElementAt(i).Key1 == "StatusCode") { Settings.AvailableStatusСodes.Add(new KeyValuePair<string, int>(yamlReader.Records.ElementAt(i).Value1, Convert.ToInt32(yamlReader.Records.ElementAt(i).Value2))); } if (yamlReader.Records.ElementAt(i).Key1 == "FileExtension") { Settings.AvailableFileExtension.Add(new KeyValuePair<string, int>(yamlReader.Records.ElementAt(i).Value1, Convert.ToInt32(yamlReader.Records.ElementAt(i).Value2))); } } }
public virtual IRoleData ReadSerializedRole(Stream dataStream, string serializedItemId) { Assert.ArgumentNotNull(dataStream, nameof(dataStream)); try { using (var reader = new YamlReader(dataStream, 4096, true)) { string roleName = reader.ReadExpectedMap("Role"); var memberOfRoles = new List <string>(); var roleMembershipNode = reader.PeekMap(); if (roleMembershipNode.HasValue && roleMembershipNode.Value.Key.Equals("MemberOf")) { reader.ReadMap(); while (true) { var memberOfRole = reader.PeekMap(); if (!memberOfRole.HasValue || !memberOfRole.Value.Key.Equals("Role", StringComparison.Ordinal)) { break; } reader.ReadMap(); memberOfRoles.Add(memberOfRole.Value.Value); } } return(new SerializedRoleData(roleName, memberOfRoles.ToArray(), serializedItemId)); } } catch (Exception exception) { throw new YamlFormatException("Error parsing YAML " + serializedItemId, exception); } }
public async Task TestXamarin3() { var data = (@"# Xamarin.Android and Xamarin.iOS # Build a Xamarin.Android and Xamarin.iOS app. # Add steps that test, sign, and distribute the app, save build artifacts, and more: # https://docs.microsoft.com/azure/devops/pipelines/languages/xamarin jobs: - job: Android pool: vmImage: 'VS2017-Win2016' variables: buildConfiguration: 'Release' outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)' steps: - task: NuGetToolInstaller@0 - task: NuGetCommand@2 inputs: restoreSolution: '**/*.sln' - task: XamarinAndroid@1 inputs: projectFile: '**/*droid*.csproj' outputDirectory: '$(outputDirectory)' configuration: '$(buildConfiguration)' - task: AndroidSigning@3 inputs: apksign: false zipalign: false apkFiles: '$(outputDirectory)/*.apk' - task: PublishBuildArtifacts@1 inputs: pathtoPublish: '$(outputDirectory)' - job: iOS pool: vmImage: 'macOS 10.13' steps: # To manually select a Xamarin SDK version on the Hosted macOS agent, enable this script with the SDK version you want to target # https://go.microsoft.com/fwlink/?linkid=871629 - script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_4_1 displayName: 'Select Xamarin SDK version' enabled: false - task: NuGetToolInstaller@0 - task: NuGetCommand@2 inputs: restoreSolution: '**/*.sln' - task: XamariniOS@2 inputs: solutionFile: '**/*.sln' configuration: 'Release' buildForSimulator: true packageApp: false"); string nameFile = $"{nameof(TestXamarin3)}.txt"; File.WriteAllText(nameFile, data); var visit = new YamlReader(nameFile, Encoding.UTF8); var dt = await visit.TransformData(null); dt.Should().NotBeNull(); dt.DataToBeSentFurther.Should().NotBeNull(); var jobs = dt.FindAfterName("jobs").Value; jobs.Should().NotBeNull(); jobs.Rows.Count.Should().Be(2); jobs.Rows[0]["name"].Should().Be("Android"); jobs.Rows[1]["name"].Should().Be("iOS"); var steps = dt.FindAfterName("steps"); steps.Value.Rows.Count.Should().Be(9); var dv = new DataView(steps.Value); dv.RowFilter = "jobName='Android'"; dv.Count.Should().Be(5); dv.RowFilter = "jobName='iOS'"; dv.Count.Should().Be(4); //var steps = dt.FindAfterName("steps").Value; //steps.Should().NotBeNull(); //steps.Rows.Count.Should().Be(1); //steps.Rows[0]["name"].Should().Be("task"); //steps.Rows[0]["displayName"].Should().Be("Xcode@5"); }
private void ExecuteYamlReader(string yaml, Action<YamlReader> readAssertions) { using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(yaml))) { using (var writer = new YamlReader(ms, 4096, false)) { readAssertions(writer); } } }
public void TestEverNote() { var evernote = @"Id: evernote.evernote Name: Evernote AppMoniker: evernote Version: 6.24.2.8919 Publisher: Evernote Author: Evernote License: Copyright (c) 2020 Evernote Corporation. All rights reserved. LicenseUrl: https://evernote.com/legal/terms-of-service MinOSVersion: 10.0.0.0 Homepage: https://www.evernote.com Description: Evernote helps you focus on what matters most and have access to your information when you need it. Input typed notes or scan handwritten notes. Add to-do’s, photos, images, web pages, or audio ... and it's all instantly searchable. Organize notes any way you want and share with anyone. And Evernote syncs across your devices so your information is always with you, everywhere you go. Tags: ""evernote,notes,cloud,online"" InstallerType: exe Installers: - Arch: x64 Url: https://cdn1.evernote.com/win6/public/Evernote_6.24.2.8919.exe Sha256: 4851DBDB36ECEF1D5F2DE092673B4D70223703F6211FD8A1909B2E3E44AED5F9 Language: en-US Scope: user Switches: Silent: /qn SilentWithProgress: /qn"; var reader = new YamlReader(); using TextReader textReader = new StringReader(evernote); var yaml = reader.Read(textReader); Assert.AreEqual("evernote.evernote", yaml.Id); Assert.AreEqual("Evernote", yaml.Name); Assert.AreEqual("Evernote", yaml.Publisher); Assert.AreEqual("evernote", yaml.AppMoniker); Assert.AreEqual("Copyright (c) 2020 Evernote Corporation. All rights reserved.", yaml.License); Assert.AreEqual("https://evernote.com/legal/terms-of-service", yaml.LicenseUrl); Assert.AreEqual("6.24.2.8919", yaml.Version); Assert.AreEqual("10.0.0.0", yaml.MinOperatingSystemVersion.ToString()); Assert.AreEqual("Evernote helps you focus on what matters most and have access to your information when you need it. Input typed notes or scan handwritten notes. Add to-do’s, photos, images, web pages, or audio ... and it's all instantly searchable. Organize notes any way you want and share with anyone. And Evernote syncs across your devices so your information is always with you, everywhere you go.", yaml.Description); Assert.AreEqual("https://www.evernote.com", yaml.Homepage); Assert.AreEqual("evernote,notes,cloud,online", yaml.Tags); #pragma warning disable 618 Assert.AreEqual("Evernote", yaml.Author); Assert.AreEqual(YamlInstallerType.exe, yaml.InstallerType); #pragma warning restore 618 Assert.NotNull(yaml.Installers); Assert.AreEqual(1, yaml.Installers.Count); var ins = yaml.Installers[0]; Assert.AreEqual(YamlArchitecture.x64, ins.Arch); Assert.AreEqual("https://cdn1.evernote.com/win6/public/Evernote_6.24.2.8919.exe", ins.Url); #pragma warning disable 618 Assert.AreEqual("en-US", ins.Language); #pragma warning restore 618 Assert.AreEqual(YamlScope.user, ins.Scope); Assert.NotNull(ins.Switches); Assert.AreEqual("/qn", ins.Switches.Silent); Assert.AreEqual("/qn", ins.Switches.SilentWithProgress); }
public virtual SyncUser ReadSerializedUser(Stream dataStream, string serializedItemId) { Assert.ArgumentNotNull(dataStream, nameof(dataStream)); try { using (var reader = new YamlReader(dataStream, 4096, true)) { var user = new SyncUser(); user.UserName = reader.ReadExpectedMap("Username"); user.Email = reader.ReadExpectedMap("Email"); user.Comment = reader.ReadExpectedMap("Comment"); user.CreationDate = DateTime.ParseExact(reader.ReadExpectedMap("Created"), "o", CultureInfo.InvariantCulture, DateTimeStyles.None); user.IsApproved = bool.Parse(reader.ReadExpectedMap("IsApproved")); var propertiesNode = reader.PeekMap(); if (propertiesNode.HasValue && propertiesNode.Value.Key.Equals("Properties")) { reader.ReadMap(); while (true) { var propertyName = reader.PeekMap(); if (propertyName == null || !propertyName.Value.Key.Equals("Key")) { break; } reader.ReadMap(); var rawValue = reader.ReadExpectedMap("Value"); var valueTypeString = reader.ReadExpectedMap("ValueType"); var value = ReadPropertyValueObject(propertyName.Value.Value, valueTypeString, rawValue); bool propertyIsCustom = bool.Parse(reader.ReadExpectedMap("IsCustom")); user.ProfileProperties.Add(new SyncProfileProperty(propertyName.Value.Value, value, propertyIsCustom)); } } var rolesNode = reader.PeekMap(); if (rolesNode.HasValue && rolesNode.Value.Key.Equals("Roles")) { reader.ReadMap(); while (true) { var roleName = reader.ReadMap(); if (string.IsNullOrWhiteSpace(roleName?.Value)) { break; } user.Roles.Add(roleName.Value.Value); } } return(user); } } catch (Exception exception) { throw new YamlFormatException("Error parsing YAML " + serializedItemId, exception); } }
public async Task TestYamlGrphviz2Jobs() { var data = (@"# Xamarin.Android and Xamarin.iOS # Build a Xamarin.Android and Xamarin.iOS app. # Add steps that test, sign, and distribute the app, save build artifacts, and more: # https://docs.microsoft.com/azure/devops/pipelines/languages/xamarin jobs: - job: Android pool: vmImage: 'VS2017-Win2016' variables: buildConfiguration: 'Release' outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)' steps: - task: NuGetToolInstaller@0 - task: NuGetCommand@2 inputs: restoreSolution: '**/*.sln' - task: XamarinAndroid@1 inputs: projectFile: '**/*droid*.csproj' outputDirectory: '$(outputDirectory)' configuration: '$(buildConfiguration)' - task: AndroidSigning@3 inputs: apksign: false zipalign: false apkFiles: '$(outputDirectory)/*.apk' - task: PublishBuildArtifacts@1 inputs: pathtoPublish: '$(outputDirectory)' - job: iOS pool: vmImage: 'macOS 10.13' steps: # To manually select a Xamarin SDK version on the Hosted macOS agent, enable this script with the SDK version you want to target # https://go.microsoft.com/fwlink/?linkid=871629 - script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_4_1 displayName: 'Select Xamarin SDK version' enabled: false - task: NuGetToolInstaller@0 - task: NuGetCommand@2 inputs: restoreSolution: '**/*.sln' - task: XamariniOS@2 inputs: solutionFile: '**/*.sln' configuration: 'Release' buildForSimulator: true packageApp: false"); string nameFile = $"{nameof(TestYamlGrphviz2Jobs)}.txt"; File.WriteAllText(nameFile, data); var visit = new YamlReader(nameFile, Encoding.UTF8); var dt = await visit.TransformData(null); var graph = new SenderYamlAzurePipelineToDot(); dt = await graph.TransformData(dt); //await File.WriteAllTextAsync("a.txt", graph.Result()); //Process.Start("notepad.exe", "a.txt"); var res = graph.OutputString.Rows[0]["Contents"].ToString().Replace(Environment.NewLine, ""); res.Should().ContainAll("Android", "iOS", "XamarinAndroid@1", "XamariniOS@2"); }
public void OneTimeSetUpForServiceTests() { YamlReader.Load("QA"); }
public async Task FullBlownTest() { var data = @"# .NET Desktop # Build and run tests for .NET Desktop or Windows classic desktop solutions. # Add steps that publish symbols, save build artifacts, and more: # https://docs.microsoft.com/vsts/pipelines/apps/windows/dot-net #https://docs.microsoft.com/en-us/azure/devops/pipelines/build/options?view=vsts&tabs=yaml variables: solution: '**/StankinsV2.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' year: $(Date:yyyy) month: $(Date:MM) day: $(Date:dd) uk: $(Date:yyyyMMdd) deployWindows: 1 deployLinux: 1 stop : 0 name: $(TeamProject)_$(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r) jobs: - job: Test pool: vmImage: 'vs2017-win2016' condition: eq(variables['stop'],1) steps: - checkout: none #skip checking out the default repository resource - script: | echo test dir C:\msbuild.exe /s /b - job: SetProps pool: vmImage: 'vs2017-win2016' condition: eq(variables['stop'],0) steps: - checkout: none #skip checking out the default repository resource - powershell: | $yearPW= Get-Date -Format yyyy $monthPW=Get-Date -Format MM $dayPW=Get-Date -Format dd Write-Host ""##vso[task.setvariable variable=PWyear;isOutput=true]$yearPW"" Write-Host ""##vso[task.setvariable variable=PWmonth;isOutput=true]$monthPW"" Write-Host ""##vso[task.setvariable variable=PWday;isOutput=true]$dayPW"" Write-Host ""##vso[task.setvariable variable=PWversion;isOutput=true]$yearPW.$monthPW.$dayPW.$env:BUILD_BUILDID"" name: setvarStep - script: | echo hello from SettingVariousPropertiesMissing rem echo $(Build.ArtifactStagingDirectory) $(TeamProject) $(BuildDefinitionName) $(SourceBranchName) $(Date:yyyyMMdd) $(Rev:.r) rem echo %BUILDDEFINITIONNAME% %SOURCEBRANCHNAME% %(DATE:yyyyMMdd)% %(REV:.r)% rem echo Hello World from %AGENT_NAME%. rem echo My ID is %AGENT_ID%. rem echo AGENT_WORKFOLDER contents: rem @dir %AGENT_WORKFOLDER% rem echo AGENT_BUILDDIRECTORY contents: rem @dir %AGENT_BUILDDIRECTORY% rem echo BUILD_SOURCESDIRECTORY contents: rem @dir %BUILD_SOURCESDIRECTORY% echo $(Date:yyyyMMdd) cmd /K set - job: TestMyProps dependsOn: SetProps condition: eq(variables['stop'],0) pool: vmImage: 'vs2017-win2016' variables: MyVersion: $[ dependencies.SetProps.outputs['setvarStep.PWversion'] ] # map in the variable steps: - checkout: none #skip checking out the default repository resource - script: echo this is version $(MyVersion) name: echovar - job: DownloadFilesAndModifyBackend dependsOn: SetProps condition: eq(variables['stop'],0) pool: vmImage: 'vs2017-win2016' variables: MyVersion: $[ dependencies.SetProps.outputs['setvarStep.PWversion'] ] # map in the variable steps: - script: echo this is version $(MyVersion) name: echovar - script: | dotnet tool install --tool-path . dotnet-property dotnet-property ""Stankinsv2/**/Stankins*.csproj"" Version:""%MyVersion%"" displayName: versioning - task: ArchiveFiles@2 displayName: 'arhive files' inputs: rootFolderOrFile: '$(Build.SourcesDirectory)' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/files-$(Build.BuildId).zip' replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: artifactName: dotNetModifs displayName: Publish files as Artifact - job: BuildFrontEnd dependsOn: - SetProps - DownloadFilesAndModifyBackend pool: vmImage: 'vs2017-win2016' variables: MyVersion: $[ dependencies.SetProps.outputs['setvarStep.PWversion'] ] # map in the variable steps: - checkout: none #skip checking out the default repository resource - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifacts' inputs: artifactName: dotNetModifs downloadPath: $(Build.SourcesDirectory) #downloadPath: $(Agent.BuildDirectory) - script: | dir dir dotNetModifs dir dotNetModifs\files-$(Build.BuildId).zip move dotNetModifs\files-$(Build.BuildId).zip files-$(Build.BuildId).zip displayName: 'moving file artifact' - task: ExtractFiles@1 displayName: 'Extract zip files' inputs: archiveFilePatterns: '*.zip' destinationFolder: $(Build.SourcesDirectory) cleanDestinationFolder: false - script: | rem delete old artifact files del files-$(Build.BuildId).zip dir cd stankinsv2\solution\StankinsV2\StankinsAliveAngular echo before install angular rem https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/package/npm?view=vsts call npm install -g @angular/cli echo install json call npm install -g json echo before json call with %MyVersion% call json -I -f npm-shrinkwrap.json -e ""this.version='%MyVersion%'"" call json -I -f package.json -e ""this.version='%MyVersion%'"" rem type npm-shrinkwrap.json echo before npm call npm i echo before build rem see robocopy in build.bat build.bat echo finish displayName: 'npm and angular publish' - script: | dir call npm install -g q call npm install -g cordova cd stankinsv2\solution\StankinsV2\StankinsCordova call cordova platform rm android call cordova platform rm windows call cordova platform add android call cordova platform add windows echo requirements call cordova requirements echo Build android call cordova build android echo dir1 dir ""C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64\*.exe"" echo dir2 dir ""C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\*.exe"" echo set the MSBUILDDIR="" set MSBUILDDIR=""C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64\"" rem set MSBUILDDIR=""C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\"" call cordova build windows -- --appx=uap displayName: 'cordova' #- task: AndroidSigning@2 # inputs: # apkFiles: 'stankinsv2/solution/StankinsV2/StankinsCordova/**/app*.apk' #how to change name of apk file? mystery... # jarsign: true # jarsignerKeystoreFile: 'keystore.jks' #from library... # jarsignerKeystorePassword: '******' # jarsignerKeystoreAlias: '$(keystoreAlias)' # jarsignerKeyPassword: '******' # zipalign: true - task: AndroidSigning@3 inputs: apkFiles: '**/debug/*.apk' #how to change name of apk file? mystery... #apkFiles: 'stankinsv2/solution/StankinsV2/StankinsCordova/platforms/android/app/build/outputs/apk/debug/app-debug.apk' apksign: true apksignerKeystoreFile: 'keystore.jks' #from library... apksignerKeystorePassword: '******' apksignerKeystoreAlias: '$(keystoreAlias)' apksignerKeyPassword: '******' zipalign: false - task: CopyFiles@2 inputs: contents: 'stankinsv2/solution/StankinsV2/StankinsCordova/**/app*.apk' targetFolder: '$(Build.ArtifactStagingDirectory)' flattenFolders: true - script: | cd $(Build.ArtifactStagingDirectory) dir *.apk /s /b echo renaming ren app*.apk StankinsCordova_%MyVersion%.apk displayName: 'renaming apk' - script: | dir call npm install -g electron call npm install -g electron-builder cd stankinsv2\solution\StankinsV2\StankinsElectron call npm install -g json echo before json call with %MyVersion% call json -I -f package.json -e ""this.version='%MyVersion%'"" call npm install echo Build electron electron-builder --win --x64 --publish never dir dist\*.* /b displayName: 'electron' - task: CopyFiles@2 inputs: contents: 'stankinsv2/solution/StankinsV2/StankinsElectron/dist/*.*' targetFolder: '$(Build.ArtifactStagingDirectory)/electronwin64' flattenFolders: true - task: ArchiveFiles@2 displayName: 'arhive files' inputs: rootFolderOrFile: '$(Build.SourcesDirectory)' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/files-$(Build.BuildId).zip' replaceExistingArchive: true - task: PublishBuildArtifacts@1 displayName: Publish files as Artifact - job: Windows dependsOn: - SetProps - BuildFrontEnd condition: and( eq(variables['deployWindows'],1), succeeded('BuildFrontEnd')) pool: vmImage: 'vs2017-win2016' variables: MyVersion: $[ dependencies.SetProps.outputs['setvarStep.PWversion'] ] # map in the variable steps: - checkout: none #skip checking out the default repository resource - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifacts' inputs: artifactName: drop downloadPath: $(Build.SourcesDirectory) #downloadPath: $(Agent.BuildDirectory) - script: | dir move drop\files-$(Build.BuildId).zip files-$(Build.BuildId).zip displayName: 'moving file artifact' - task: ExtractFiles@1 displayName: 'Extract zip files' inputs: archiveFilePatterns: '*.zip' destinationFolder: $(Build.SourcesDirectory) cleanDestinationFolder: false - script: | dir cd stankinsv2/solution/ displayName: 'cd to folder' - task: DotNetCoreInstaller@0 displayName: 'Use .NET Core sdk 2.1.300' inputs: version: 2.1.300 - task: NuGetToolInstaller@0 - task: NuGetCommand@2 inputs: restoreSolution: '$(solution)' - task: VSBuild@1 inputs: solution: '$(solution)' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' - script: | dotnet tool install --tool-path . coverlet.console dotnet tool install --tool-path . dotnet-reportgenerator-globaltool dotnet tool install --tool-path . DotnetThx displayName: install global tools #- task: DotNetCoreCLI@2 # inputs: # command: test # projects: '**/*Test*/*Test*.csproj' # arguments: '--configuration $(buildConfiguration) --logger trx --collect ""Code coverage""' - script: | dotnet test stankinsv2\solution\StankinsV2\StankinsTestXUnit\StankinsTestXUnit.csproj --logger trx --collect ""Code coverage"" displayName: irun test coverage Automated - task: PublishTestResults@2 inputs: testRunner: VSTest testResultsFiles: '**/*.trx' - script: | dir StankinsTestXUnit.dll /s /b rem cd stankinsv2/solution/StankinsV2/StankinsStatusWeb rem dotnet-thx.exe rem cd ../StankinsTestXUnit rem dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover stankinsv2/solution/StankinsV2/StankinsTestXUnit/StankinsTestXUnit.csproj coverlet stankinsv2\solution\StankinsV2\StankinsTestXUnit\bin\$(buildConfiguration)\netcoreapp2.1\StankinsTestXUnit.dll --target ""dotnet"" --targetargs ""test stankinsv2\solution\StankinsV2\StankinsTestXUnit\StankinsTestXUnit.csproj --configuration $(buildConfiguration) --no-build"" --format opencover --exclude ""[xunit*]*"" reportgenerator ""-reports:coverage.opencover.xml"" ""-targetdir:coveragereport"" -reporttypes:HTMLInline;HTMLSummary;Badges xcopy coveragereport $(Build.ArtifactStagingDirectory)\cc\ /S rem restoring current dir rem cd ../../../../ dir displayName: test dot net - bash: | curl -s https://codecov.io/bash > codecov chmod +x codecov ./codecov -f ""coverage.opencover.xml"" -t $CODECOV_TOKEN displayName: upload code coverage - script: | echo start publish windows dotnet publish -o $(Build.ArtifactStagingDirectory)\win10-x64 -f netcoreapp2.1 -c Release -r win10-x64 stankinsv2/solution/StankinsV2/StankinsStatusWeb/StankinsAliveMonitor.csproj cd stankinsv2/solution/ xcopy $(Build.ArtifactStagingDirectory)\win10-x64 win10-x64\ /I /E docker build . -t stankins_windows -f Dockerfile_win docker tag stankins_windows ignatandrei/stankins_windows docker image ls echo %MY_PASSWORD_DOCKER%| docker login --username ignatandrei --password-stdin docker push ignatandrei/stankins_windows displayName: 'docker' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' - job: Linux dependsOn: - SetProps - BuildFrontEnd condition: and(eq(variables['deployLinux'],1), succeeded('BuildFrontEnd')) pool: vmImage: 'ubuntu-16.04' variables: MyVersion: $[ dependencies.SetProps.outputs['setvarStep.PWversion'] ] # map in the variable steps: - checkout: none #skip checking out the default repository resource - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifacts' inputs: artifactName: drop downloadPath: $(Build.SourcesDirectory) #downloadPath: $(Agent.BuildDirectory) - script: | ls -l mv drop/files-$(Build.BuildId).zip . displayName: 'moving file artifact' - task: ExtractFiles@1 displayName: 'Extract zip files' inputs: archiveFilePatterns: '*.zip' destinationFolder: $(Build.SourcesDirectory) cleanDestinationFolder: false - script: | cd stankinsv2/solution/ echo $MY_PASSWORD_DOCKER| docker login --username ignatandrei --password-stdin rem echo version1 : $MyVersion rem echo version2 : $(MyVersion) #docker build . --build-arg version=$(MyVersion) -t stankins_linux -f Dockerfile_linux docker build . -t stankins_linux -f Dockerfile_linux docker image ls docker tag stankins_linux ignatandrei/stankins_linux docker push ignatandrei/stankins_linux docker create --name st stankins_linux docker container ls docker cp st:/app/ $(Build.ArtifactStagingDirectory)/linux-x64 docker container kill st docker container prune -f displayName: 'docker' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' - job: macOS pool: vmImage: 'macOS-10.13' variables: solution: '**/StankinsV2.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' steps: - script: echo hello from macOS condition: false - job: Deploy pool: vmImage: 'win1803' steps: - checkout: none #skip checking out the default repository resource - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifacts' inputs: artifactName: drop downloadPath: $(System.ArtifactStagingDirectory) - script: | echo hello from deploy dir $(Build.ArtifactStagingDirectory) rem echo test >>$(Build.ArtifactStagingDirectory)\a.txt displayName: just testing - task: ArchiveFiles@2 displayName: 'arhive linux' condition: and(always(),eq(variables['deployLinux'],1)) #succeeded('Linux') inputs: rootFolderOrFile: '$(System.ArtifactStagingDirectory)/drop/linux-x64' includeRootFolder: true archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/linux-x64-$(Build.BuildId).zip' replaceExistingArchive: true - task: ArchiveFiles@2 displayName: 'arhive windows ' condition: and(always(),eq(variables['deployWindows'],1)) #succeeded('Windows') inputs: rootFolderOrFile: '$(System.ArtifactStagingDirectory)/drop/win10-x64' includeRootFolder: true archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/win10-x64-$(Build.BuildId).zip' replaceExistingArchive: true - task: ArchiveFiles@2 displayName: 'arhive code coverage' inputs: rootFolderOrFile: '$(System.ArtifactStagingDirectory)/drop/cc' includeRootFolder: true archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/CodeCoverage-$(Build.BuildId).zip' replaceExistingArchive: true - task: ArchiveFiles@2 displayName: 'arhive android' inputs: rootFolderOrFile: '$(System.ArtifactStagingDirectory)/drop/*.apk' includeRootFolder: true archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Android-$(Build.BuildId).zip' replaceExistingArchive: true - task: ArchiveFiles@2 displayName: 'arhive electronwin64' inputs: rootFolderOrFile: '$(System.ArtifactStagingDirectory)/drop/electronwin64' includeRootFolder: true archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/StankinsWin64-$(Build.BuildId).zip' replaceExistingArchive: true - task: GithubRelease@0 inputs: gitHubConnection: ignatandrei repositoryName: ignatandrei/stankins action: 'create' target: 'master' title: 'Automated $(Build.BuildNumber) $(Build.BuildId) BuildWindows = $(deployWindows) BuildLinux= $(deployLinux)' tag: '$(Build.BuildNumber)' addChangeLog: true isDraft: false isPreRelease: false tagSource: 'manual' dependsOn: - Windows - Linux condition: or(succeeded('Windows') , succeeded('Linux')) - job: DeployOnAzure dependsOn: Windows condition: succeeded('Windows') pool: vmImage: 'vs2017-win2016' steps: - checkout: none #skip checking out the default repository resource - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifacts' inputs: artifactName: drop downloadPath: $(Build.SourcesDirectory) - script: | dir move drop\files-$(Build.BuildId).zip files-$(Build.BuildId).zip - task: ExtractFiles@1 displayName: 'Extract zip files' inputs: archiveFilePatterns: '*.zip' destinationFolder: $(Build.SourcesDirectory) cleanDestinationFolder: false - script: | dir rmdir stankinsV1 /s /q dir displayName: removing stankinsV1 - task: DotNetCoreCLI@2 displayName: 'build again' inputs: command: publish publishWebProjects: True workingDirectory: 'stankinsv2/solution/StankinsV2/' arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: True - script: | dir $(System.ArtifactsDirectory)\*.zip /s /b displayName: finding zip after Publish - task: AzureAppServiceManage@0 inputs: azureSubscription: 'azurestankins' action: 'Stop Azure App Service' WebAppName: 'azurestankins' ResourceGroupName: 'stankins' - task: AzureRmWebAppDeployment@3 inputs: azureSubscription: 'azurestankins' WebAppName: 'azurestankins' Package: $(System.ArtifactsDirectory)/*StankinsStatusWeb*.zip ResourceGroupName: 'stankins' - task: AzureAppServiceManage@0 inputs: azureSubscription: 'azurestankins' action: 'Start Azure App Service' WebAppName: 'azurestankins' ResourceGroupName: 'stankins' "; string nameFile = $"{nameof(TestYamlGrphviz2Jobs)}.txt"; File.WriteAllText(nameFile, data); var visit = new YamlReader(nameFile, Encoding.UTF8); var dt = await visit.TransformData(null); var graph = new SenderYamlAzurePipelineToDot(); dt = await graph.TransformData(dt); //await File.WriteAllTextAsync("a.txt", graph.Result()); //Process.Start("notepad.exe", "a.txt"); var res = graph.OutputString.Rows[0]["Contents"].ToString().Replace(Environment.NewLine, ""); res.Should().ContainAll("Publish", "macOS", "Windows", "Azure", "docker"); }
public virtual void ReadYaml(YamlReader reader) { Id = reader.ReadExpectedGuidMap("ID"); ParentId = reader.ReadExpectedGuidMap("Parent"); TemplateId = reader.ReadExpectedGuidMap("Template"); Path = reader.ReadExpectedMap("Path"); var dbName = reader.PeekMap(); if (dbName.HasValue && dbName.Value.Key.Equals("DB")) //could be missing if serialized with 1.0.x { reader.ReadMap(); DatabaseName = dbName.Value.Value; } var branch = reader.PeekMap(); if (branch.HasValue && branch.Value.Key.Equals("BranchID")) { reader.ReadMap(); BranchId = Guid.Parse(branch.Value.Value); } var sharedFields = reader.PeekMap(); if (sharedFields.HasValue && sharedFields.Value.Key.Equals("SharedFields")) { reader.ReadMap(); while (true) { var field = new YamlFieldValue(); if (field.ReadYaml(reader)) SharedFields.Add(field); else break; } } var languages = reader.PeekMap(); if (languages.HasValue && languages.Value.Key.Equals("Languages")) { reader.ReadMap(); while (true) { var language = new YamlLanguage(); if (language.ReadYaml(reader)) Languages.Add(language); else break; } } }
public virtual void ReadYaml(YamlReader reader) { Id = reader.ReadExpectedGuidMap("ID"); ParentId = reader.ReadExpectedGuidMap("Parent"); TemplateId = reader.ReadExpectedGuidMap("Template"); Path = reader.ReadExpectedMap("Path"); var dbName = reader.PeekMap(); if (dbName.HasValue && dbName.Value.Key.Equals("DB")) //could be missing if serialized with 1.0.x { reader.ReadMap(); DatabaseName = dbName.Value.Value; } var branch = reader.PeekMap(); if (branch.HasValue && branch.Value.Key.Equals("BranchID")) { reader.ReadMap(); BranchId = Guid.Parse(branch.Value.Value); } var sharedFields = reader.PeekMap(); if (sharedFields.HasValue && sharedFields.Value.Key.Equals("SharedFields")) { reader.ReadMap(); while (true) { var field = new YamlFieldValue(); if (field.ReadYaml(reader)) { SharedFields.Add(field); } else { break; } } } var languages = reader.PeekMap(); if (languages.HasValue && languages.Value.Key.Equals("Languages")) { reader.ReadMap(); while (true) { var language = new YamlLanguage(); if (language.ReadYaml(reader)) { Languages.Add(language); } else { break; } } } }