From f9f2525c723609068331d6095f0eb33d55aa6e9e Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett (MSFT)" Date: Tue, 7 May 2019 07:35:43 -0700 Subject: [PATCH] build: port our Azure CI pipeline to YAML (#510) --- build/pipelines/ci.yml | 28 +++++++ build/pipelines/release.yml | 31 +++++++ .../pipelines/templates/build-console-ci.yml | 17 ++++ .../pipelines/templates/build-console-int.yml | 30 +++++++ .../templates/build-console-steps.yml | 84 +++++++++++++++++++ .../templates/release-sign-and-bundle.yml | 70 ++++++++++++++++ consolegit2gitfilters.json | 3 +- 7 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 build/pipelines/ci.yml create mode 100644 build/pipelines/release.yml create mode 100644 build/pipelines/templates/build-console-ci.yml create mode 100644 build/pipelines/templates/build-console-int.yml create mode 100644 build/pipelines/templates/build-console-steps.yml create mode 100644 build/pipelines/templates/release-sign-and-bundle.yml diff --git a/build/pipelines/ci.yml b/build/pipelines/ci.yml new file mode 100644 index 000000000..325fb06d8 --- /dev/null +++ b/build/pipelines/ci.yml @@ -0,0 +1,28 @@ +trigger: + batch: true + branches: + include: + - master + paths: + exclude: + - doc/* + - samples/* + - tools/* + +pr: + branches: + include: + - master + +# 0.0.yyMM.dd## +# 0.0.1904.0900 +name: 0.0.$(Date:yyMM).$(Date:dd)$(Rev:rr) + +jobs: + - template: ./templates/build-console-ci.yml + parameters: + platform: x64 + + - template: ./templates/build-console-ci.yml + parameters: + platform: x86 diff --git a/build/pipelines/release.yml b/build/pipelines/release.yml new file mode 100644 index 000000000..1b9c194a5 --- /dev/null +++ b/build/pipelines/release.yml @@ -0,0 +1,31 @@ +trigger: none +pr: none + +variables: + baseYearForVersioning: 2019 # Used by build-console-int + versionMajor: 0 + versionMinor: 1 + +# When we move off PackageES for Versioning, we'll need to switch +# name to this format. For now, though, we need to use DayOfYear.Rev +# to unique our builds, as mandated by PackageES's Setup task. +# name: '$(versionMajor).$(versionMinor).$(DayOfYear)$(Rev:r).0' +# +# Build name/version number above must end with .0 to make the +# store publication machinery happy. +name: 'Terminal_$(date:yyMM).$(date:dd)$(rev:rrr)' + +jobs: + - template: ./templates/build-console-int.yml + parameters: + platform: x64 + + - template: ./templates/build-console-int.yml + parameters: + platform: x86 + + - template: ./templates/build-console-int.yml + parameters: + platform: arm64 + + - template: ./templates/release-sign-and-bundle.yml diff --git a/build/pipelines/templates/build-console-ci.yml b/build/pipelines/templates/build-console-ci.yml new file mode 100644 index 000000000..f8de3d181 --- /dev/null +++ b/build/pipelines/templates/build-console-ci.yml @@ -0,0 +1,17 @@ +parameters: + configuration: 'Release' + platform: '' + additionalBuildArguments: '' + +jobs: +- job: Build${{ parameters.platform }} + displayName: Build ${{ parameters.platform }} + variables: + BuildConfiguration: ${{ parameters.configuration }} + BuildPlatform: ${{ parameters.platform }} + pool: { vmImage: vs2017-win2016 } + + steps: + - template: build-console-steps.yml + parameters: + additionalBuildArguments: ${{ parameters.additionalBuildArguments }} diff --git a/build/pipelines/templates/build-console-int.yml b/build/pipelines/templates/build-console-int.yml new file mode 100644 index 000000000..de52c83ea --- /dev/null +++ b/build/pipelines/templates/build-console-int.yml @@ -0,0 +1,30 @@ +parameters: + configuration: 'Release' + platform: '' + additionalBuildArguments: '' + +jobs: +- job: Build${{ parameters.platform }} + displayName: Build ${{ parameters.platform }} + variables: + BuildConfiguration: ${{ parameters.configuration }} + BuildPlatform: ${{ parameters.platform }} + + pool: + name: Package ES Lab E + demands: + - msbuild + - visualstudio + - vstest + + steps: + - task: PkgESSetupBuild@10 + displayName: 'Package ES - Setup Build' + inputs: + useDfs: false + productName: WindowsTerminal + disableOutputRedirect: true + + - template: build-console-steps.yml + parameters: + additionalBuildArguments: '/p:XesUseOneStoreVersioning=true;XesBaseYearForStoreVersion=$(baseYearForVersioning)' diff --git a/build/pipelines/templates/build-console-steps.yml b/build/pipelines/templates/build-console-steps.yml new file mode 100644 index 000000000..5987a50cf --- /dev/null +++ b/build/pipelines/templates/build-console-steps.yml @@ -0,0 +1,84 @@ +parameters: + additionalBuildArguments: '' + +steps: +- checkout: self + clean: true + +- task: NuGetToolInstaller@0 + displayName: Ensure NuGet 4.8.1 + inputs: + versionSpec: 4.8.1 + +- task: VisualStudioTestPlatformInstaller@1 + displayName: Ensure VSTest Platform + +# In the Microsoft Azure DevOps tenant, NuGetCommand is ambiguous. +# This should be `task: NuGetCommand@2` +- task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 + displayName: Restore NuGet packages + inputs: + command: restore + feedsToUse: config + configPath: NuGet.config + restoreSolution: OpenConsole.sln + restoreDirectory: '$(Build.SourcesDirectory)\packages' + +- task: VSBuild@1 + displayName: 'Build solution **\OpenConsole.sln' + inputs: + solution: '**\OpenConsole.sln' + vsVersion: 15.0 + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + msbuildArgs: ${{ parameters.additionalBuildArguments }} + clean: true + maximumCpuCount: true + +- task: VSTest@2 + displayName: 'Run Unit Tests' + inputs: + testAssemblyVer2: | + $(BUILD.SOURCESDIRECTORY)\**\*unit.test*.dll + !**\obj\** + runSettingsFile: '$(BUILD.SOURCESDIRECTORY)\src\unit.tests.$(BuildPlatform).runsettings' + codeCoverageEnabled: true + runInParallel: False + testRunTitle: 'Console Unit Tests' + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + condition: and(succeeded(), or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86'))) + +- task: VSTest@2 + displayName: 'Run Feature Tests (x64 only)' + inputs: + testAssemblyVer2: | + $(BUILD.SOURCESDIRECTORY)\**\*feature.test*.dll + !**\obj\** + runSettingsFile: '$(BUILD.SOURCESDIRECTORY)\src\unit.tests.$(BuildPlatform).runsettings' + codeCoverageEnabled: true + runInParallel: False + testRunTitle: 'Console Feature Tests' + platform: '$(BuildPlatform)' + configuration: '$(BuildConfiguration)' + condition: and(succeeded(), eq(variables['BuildPlatform'], 'x64')) + +- task: CopyFiles@2 + displayName: 'Copy *.appx/*.msix to Artifacts (Non-PR builds only)' + inputs: + Contents: | + **/*.appx + **/*.msix + **/*.appxsym + !**/Microsoft.VCLibs*.appx + TargetFolder: '$(Build.ArtifactStagingDirectory)/appx' + OverWrite: true + flattenFolders: true + condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) + +- task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact (appx) (Non-PR builds only)' + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/appx' + ArtifactName: 'appx-$(BuildConfiguration)' + condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) diff --git a/build/pipelines/templates/release-sign-and-bundle.yml b/build/pipelines/templates/release-sign-and-bundle.yml new file mode 100644 index 000000000..07e578a25 --- /dev/null +++ b/build/pipelines/templates/release-sign-and-bundle.yml @@ -0,0 +1,70 @@ +parameters: + configuration: 'Release' + +jobs: +- job: SignDeploy${{ parameters.configuration }} + displayName: Sign and Deploy for ${{ parameters.configuration }} + + dependsOn: + - Buildx64 + - Buildx86 + - Buildarm64 + condition: | + and + ( + in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), + in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), + in(dependencies.Buildarm64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped') + ) + + variables: + BuildConfiguration: ${{ parameters.configuration }} + AppxProjectName: CascadiaPackage + AppxBundleName: Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle + + pool: + name: Package ES Lab E + + steps: + - checkout: self + clean: true + + - task: PkgESSetupBuild@10 + displayName: 'Package ES - Setup Build' + inputs: + useDfs: false + productName: WindowsTerminal + disableOutputRedirect: true + + - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 + displayName: 'Component Detection' + + - task: DownloadBuildArtifacts@0 + displayName: Download AppX artifacts + inputs: + artifactName: 'appx-$(BuildConfiguration)' + itemPattern: | + **/*.appx + **/*.msix + downloadPath: '$(Build.ArtifactStagingDirectory)\appx' + + - task: PowerShell@2 + displayName: 'Create $(AppxBundleName)' + inputs: + targetType: filePath + filePath: '.\build\scripts\Create-AppxBundle.ps1' + arguments: | + -InputPath "$(Build.ArtifactStagingDirectory)\appx" -ProjectName $(AppxProjectName) -BundleVersion 0.0.0.0 -OutputPath "$(Build.ArtifactStagingDirectory)\$(AppxBundleName)" + + - task: PkgESCodeSign@10 + displayName: 'Package ES - SignConfig.WindowsTerminal.xml' + inputs: + signConfigXml: 'build\config\SignConfig.WindowsTerminal.xml' + inPathRoot: '$(Build.ArtifactStagingDirectory)' + outPathRoot: '$(Build.ArtifactStagingDirectory)\signed' + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Signed AppX' + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)\signed' + ArtifactName: 'appxbundle-signed-$(BuildConfiguration)' diff --git a/consolegit2gitfilters.json b/consolegit2gitfilters.json index 24d2a503d..358885e6e 100644 --- a/consolegit2gitfilters.json +++ b/consolegit2gitfilters.json @@ -11,7 +11,8 @@ "/packages/", "/ipch/", "/dep/", - "/.vs/" + "/.vs/", + "/build/" ], "SuffixFilters": [ ".dbb",