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);
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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
        }
示例#6
0
 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;
 }
示例#7
0
		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;
		}
示例#8
0
 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);
         }
     }
 }
示例#9
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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);
        }
示例#12
0
        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)));
                }
            }
        }
示例#13
0
        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);
            }
        }
示例#14
0
        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");
        }
示例#15
0
		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);
				}
			}
		}
示例#16
0
        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);
            }
        }
示例#18
0
        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");
 }
示例#20
0
        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");
        }
示例#21
0
		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;
				}
			}
		}
示例#22
0
        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;
                    }
                }
            }
        }