- Move pipelies to eng/pipelines

This commit is contained in:
Vincent Baaij 2024-03-28 12:46:03 +01:00
Родитель 694edf6563
Коммит c06b32b808
5 изменённых файлов: 339 добавлений и 323 удалений

Просмотреть файл

@ -1,19 +0,0 @@
# Build Demo project.
pr: none # Disable pull request triggers.
trigger:
- main
- dev
# Build.BuildNumber (see versioning.yml)
name: $(FileVersion).$(Year:yy)$(DayOfYear).$(Rev:r)
pool:
name: Fluent-Blazor-1ESPT
extends:
template: common/template-to-build-projects.yml
parameters:
Projects: |
**/FluentUI.Demo.Client.csproj
IsDemo: true

Просмотреть файл

@ -1,293 +0,0 @@
parameters:
- name: Projects # List of projects to build
type: string
default: ''
- name: Tests # List of Unit-Test projects to run
type: string
default: ''
- name: IsDemo # Projects to publish
type: boolean
default: false
variables:
- template: versioning.yml # Versions
steps:
# Compute AssemblyVersion and PackageVersion
# -> Update Versioning.yml
- powershell: |
# Example with FileVersion: "1.2.4" and PackageSuffix: "RC.1"
# Build.BuildNumber = 1.2.4.23296.1
# = $(FileVersion).$(Year:yy)$(DayOfYear).$(Rev:r)
# Defaut values
$branch = "PR"
$package = ""
$demo = "${{ parameters.IsDemo }}".toLower()
# To Sign and To Test
$sign = "false"
$toTest = "true"
# BranchName = dev, main, archive or PR
if ("$(Build.SourceBranch)" -eq "refs/heads/main")
{
$branch = "main"
}
elseif ("$(Build.SourceBranch)" -eq "refs/heads/dev")
{
$branch = "dev"
}
elseif ("$(Build.SourceBranch)" -like "refs/heads/archives/*")
{
$branch = "archive"
}
else
{
$branch = "PR"
}
# Debug Only - To remove
# if ("$(PublicVersion)" -ne "")
# {
# $branch = "$(PublicVersion)"
# }
# [1, 2, 4, 23296, 1]
$builds = "$(Build.BuildNumber)".Split('.')
# 1.2.4.23296
$assembly = "$($builds[0]).$($builds[1]).$($builds[2]).$($builds[3])"
# Main or Archive without PackageSuffix: 1.2.4
# Main or Archive with PackageSuffix: 1.2.4-rc.1
if ("$branch" -eq "main" -or "$branch" -eq "archive")
{
# Main without PackageSuffix
if ("$(PackageSuffix)" -eq "")
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])"
}
# Main with PackageSuffix
else
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])-$(PackageSuffix)"
}
$sign = "true"
$toTest = "true"
}
# Dev: 1.2.4-preview-23296-1
elseif ("$branch" -eq "dev")
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])-preview.$($builds[3]).$($builds[4])"
$sign = "true"
$toTest = "true"
}
# Other branches: 1.2.4-preview-23296-1
else
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])-preview.$($builds[3]).$($builds[4])"
$sign = "false"
$toTest = "true"
}
if ("${{ parameters.Tests }}" -eq "")
{
$toTest = "false"
}
if ("$demo" -eq "true")
{
$sign = "false"
}
# Set the output variable for use in other tasks.
Write-Host "##vso[task.setvariable variable=BranchName]${branch}"
Write-Host "##vso[task.setvariable variable=AssemblyVersion]${assembly}"
Write-Host "##vso[task.setvariable variable=PackageVersion]${package}"
Write-Host "##vso[task.setvariable variable=ShouldSign]${sign}"
Write-Host "##vso[task.setvariable variable=ShouldTest]${toTest}"
Write-Host "##vso[task.setvariable variable=ShouldPublish]${demo}"
displayName: Compute AssemblyVersion and PackageVersion
# Display computed variables
- script: |
echo 🔸 FileVersion = $(FileVersion)
echo 🔸 PackageSuffix = $(PackageSuffix)
echo 🔸 Build.BuildNumber = $(Build.BuildNumber)
echo 🔸 Build.SourceBranch = $(Build.SourceBranch)
echo -----------------------------------------------
echo 🔸 BranchName = $(BranchName)
echo 🔸 AssemblyVersion = $(AssemblyVersion)
echo 🔸 PackageVersion = $(PackageVersion)
echo -----------------------------------------------
echo 🔸 ShouldSign = $(ShouldSign)
echo 🔸 ShouldTest = $(ShouldTest)
echo 🔸 ShouldPublish = $(ShouldPublish)
displayName: Display computed variables
# Install NuGet tools
- task: NuGetToolInstaller@1
displayName: Install NuGet tools
# Install .NET 6.0
- task: UseDotNet@2
displayName: Install .NET 6.0
inputs:
version: 6.0.x
includePreviewVersions: true
# Install .NET 7.0
- task: UseDotNet@2
displayName: 'Install .NET 7.0'
inputs:
version: 7.0.x
includePreviewVersions: true
# Install .NET 8.0
- task: UseDotNet@2
displayName: 'Install .NET 8.0'
inputs:
version: 8.0.x
includePreviewVersions: true
# Install nodejs
- task: NodeTool@0
displayName: 'Install nodejs'
inputs:
versionSpec: '20.x'
# Set version number (exclude some folders)
- task: PowerShell@2
displayName: 'Versioning $(Build.BuildNumber)'
inputs:
targetType: 'filePath'
filePath: $(System.DefaultWorkingDirectory)/.azure-devops/common/update-assembly-version.ps1
arguments: > # Use this to avoid newline characters in multiline string
-sourcePath "$(System.DefaultWorkingDirectory)/"
-excludePatterns "**/src/Templates/content/**/*.csproj", "**/tests/TemplateValidation/**/*.csproj"
-assemblyVersion "$(AssemblyVersion)"
-packageVersion "$(PackageVersion)"
# Install dependencies
- task: DotNetCoreCLI@2
displayName: Install dependencies
inputs:
command: 'restore'
projects: ${{ parameters.Projects }}
# Build the projects
- task: DotNetCoreCLI@2
displayName: 'Build $(Build.BuildNumber)'
condition: eq(variables['ShouldPublish'], 'false')
inputs:
command: 'build'
projects: ${{ parameters.Projects }}
arguments: '--configuration Release'
# Test and generate Code Coverage
- task: DotNetCoreCLI@2
condition: eq(variables['ShouldTest'], 'true')
displayName: 'Test and Code Coverage'
inputs:
command: test
projects: ${{ parameters.Tests }}
arguments: '--configuration Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:DebugType=Full'
publishTestResults: true
# Coverage Generation
- task: reportgenerator@5
condition: eq(variables['ShouldTest'], 'true')
displayName: Generate reports
inputs:
reports: '**/*.cobertura.xml'
targetdir: 'CoverageFolder'
reporttypes: 'HtmlInline_AzurePipelines'
# Publish code coverage
- task: PublishCodeCoverageResults@2
condition: eq(variables['ShouldTest'], 'true')
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '**/*.cobertura.xml'
reportDirectory: CoverageFolder
# Not currently used (kept for archives)
# - task: DotNetCoreCLI@2
# displayName: Pack $(Build.BuildNumber)
# inputs:
# command: 'pack'
# packagesToPack: ${{ parameters.Projects }}
# versioningScheme: 'off'
# nobuild: true
# verbosityPack: 'Normal'
# feedsToUse: 'config'
# nugetConfigPath:
# Since NuGet packages are generated during the build, we need to copy them to the artifacts folder.
- task: CopyFiles@2
displayName: 'Pack $(Build.BuildNumber)'
condition: eq(variables['ShouldPublish'], 'false')
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: '**/*$(PackageVersion).nupkg'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
CleanTargetFolder: true
OverWrite: true
flattenFolders: true
# ESRP Code Signing SC
- task: EsrpCodeSigning@3
condition: eq(variables['ShouldSign'], 'true')
inputs:
ConnectedServiceName: 'ESRP Code Signing SC'
FolderPath: '$(Build.ArtifactStagingDirectory)'
Pattern: '**/*.nupkg'
UseMinimatch: true
signConfigType: 'inlineSignParams'
inlineOperation: |
[
{
"KeyCode" : "CP-401405",
"OperationCode" : "NuGetSign",
"Parameters" : {},
"ToolName" : "sign",
"ToolVersion" : "1.0"
},
{
"KeyCode" : "CP-401405",
"OperationCode" : "NuGetVerify",
"Parameters" : {},
"ToolName" : "sign",
"ToolVersion" : "1.0"
}
]
SessionTimeout: '60'
MaxConcurrency: '200'
MaxRetryAttempts: '5'
# Publish the projects
- task: DotNetCoreCLI@2
displayName: 'Publish $(Build.BuildNumber)'
condition: eq(variables['ShouldPublish'], 'true')
inputs:
command: 'publish'
publishWebProjects: false # True to build all Web Projects
projects: ${{ parameters.Projects }}
arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: false
workingDirectory: '$(Build.SourcesDirectory)'
# Publish the Artifacts
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'

Просмотреть файл

@ -41,17 +41,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AssetExplorer", "AssetExplo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FluentUI.Demo.AssetExplorer", "examples\Demo\AssetExplorer\FluentUI.Demo.AssetExplorer.csproj", "{E4E62EAA-38FC-48FE-B63E-EB4ABAD660D2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B89F06FD-2497-4041-B9EE-EDD889A2C14C}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
Directory.Packages.props = Directory.Packages.props
global.json = global.json
LICENSE = LICENSE
NuGet.config = NuGet.config
spelling.dic = spelling.dic
EndProjectSection
EndProject
Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "Microsoft.FluentUI.AspNetCore.Components.Assets", "src\Core.Assets\Microsoft.FluentUI.AspNetCore.Components.Assets.esproj", "{292081C2-5076-467C-AEFF-12DC0617531A}"
EndProject
Global

Просмотреть файл

@ -0,0 +1,23 @@
# Build all projects.
# Build only manually
pr: none # Disable pull request triggers.
trigger: none # Disable dev and main branches.
# Build.BuildNumber (see versioning.yml)
name: $(FileVersion).$(Year:yy)$(DayOfYear).$(Rev:r)
pool:
name: Fluent-Blazor-1ESPT
extends:
template: common/template-to-build-projects.yml
parameters:
Projects: |
**/Microsoft.FluentUI.AspNetCore.Components.csproj
**/Microsoft.FluentUI.AspNetCore.Components.Icons.csproj
**/Microsoft.FluentUI.AspNetCore.Components.Emoji.csproj
**/Microsoft.FluentUI.AspNetCore.Templates.csproj
**/Microsoft.FluentUI.AspNetCore.Components.DataGrid.EntityFrameworkAdapter.csproj
Tests: |
**/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj

Просмотреть файл

@ -0,0 +1,316 @@
# Build and test Core project.
name: $(FileVersion).$(Year:yy)$(DayOfYear).$(Rev:r)
trigger:
batch: true
branches:
include:
- main
- dev
- archives/v3
paths:
include:
- '*'
exclude:
- .github/*
- .devcontainer/*
- docs/*
- CODE_OF_CONDUCT.md
- README.md
- SECURITY.md
- LICENSE.TXT
- THIRD-PARTY-NOTICES.TXT
pr:
branches:
include:
- main
- dev
paths:
include:
- '*'
exclude:
- .github/*
- .devcontainer/*
- docs/*
- CODE_OF_CONDUCT.md
- README.md
- SECURITY.md
- LICENSE.TXT
- THIRD-PARTY-NOTICES.TXT
parameters:
- name: Projects # List of projects to build
type: string
default: '**/Microsoft.FluentUI.AspNetCore.Components.csproj'
- name: Tests # List of Unit-Test projects to run
type: string
default: '**/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj'
variables:
- template: /eng/pipelines/version.yml@self
- name: SignType
value: real
# The `resources` specify the location and version of the 1ES PT.
resources:
repositories:
#- repository: 1esPipelines
- repository: MicroBuildTemplate
type: git
#name: 1ESPipelineTemplates/1ESPipelineTemplates
name: 1ESPipelineTemplates/MicroBuildTemplate
ref: refs/tags/release
extends:
# The pipeline extends the 1ES PT which will inject different SDL and compliance tasks.
# For non-production pipelines, use "Unofficial" as defined below.
# For productions pipelines, use "Official".
#template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines
template: azure-pipelines/MicroBuild.1ES.Unofficial.yml@MicroBuildTemplate
parameters:
# Update the pool with your team's 1ES hosted pool.
pool:
name: NetCore1ESPool-Internal
image: windows.vs2022preview.amd64
os: windows
stages:
# ----------------------------------------------------------------
# This stage performs build, test, packaging
# ----------------------------------------------------------------
- stage: build
displayName: Build
jobs:
- job: BuildTestPackJob
templateContext:
mb:
signing:
enabled: true
signType: $(SignType)
zipSources: false
feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json
env:
TeamName: 'fluentui-blazor'
outputs:
- output: pipelineArtifact
targetPath: '$(Build.ArtifactStagingDirectory)\SignedPackages'
artifactName: build-core-artifacts
steps:
# Compute AssemblyVersion and PackageVersion
# -> Update version.yml
- powershell: |
# Example with FileVersion: "1.2.4" and PackageSuffix: "RC.1"
# Build.BuildNumber = 1.2.4.23296.1
# = $(FileVersion).$(Year:yy)$(DayOfYear).$(Rev:r)
# Default values
$branch = "PR"
$package = ""
# To Test?
$toTest = "true"
# BranchName = dev, main, archive or PR
if ("$(Build.SourceBranchName)" -eq "main")
{
$branch = "main"
}
elseif ("$(Build.SourceBranchName)" -eq "dev")
{
$branch = "dev"
}
elseif ("$(Build.SourceBranch)" -like "refs/heads/archives/*")
{
$branch = "archive"
}
else
{
$branch = "PR"
}
# [1, 2, 4, 23296, 1]
$builds = "$(Build.BuildNumber)".Split('.')
# 1.2.4.23296
$assembly = "$($builds[0]).$($builds[1]).$($builds[2]).$($builds[3])"
# Main or Archive without PackageSuffix: 1.2.4
# Main or Archive with PackageSuffix: 1.2.4-rc.1
if ("$branch" -eq "main" -or "$branch" -eq "archive")
{
# Main without PackageSuffix
if ("$(PackageSuffix)" -eq "")
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])"
}
# Main with PackageSuffix
else
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])-$(PackageSuffix)"
}
$toTest = "true"
}
# Dev: 1.2.4-preview-23296-1
elseif ("$branch" -eq "dev")
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])-preview.$($builds[3]).$($builds[4])"
$toTest = "true"
}
# Other branches: 1.2.4-preview-23296-1
else
{
$package = "$($builds[0]).$($builds[1]).$($builds[2])-preview.$($builds[3]).$($builds[4])"
$toTest = "true"
}
if ("${{ parameters.Tests }}" -eq "")
{
$toTest = "false"
}
# Set the output variable for use in other tasks.
Write-Host "##vso[task.setvariable variable=AssemblyVersion]${assembly}"
Write-Host "##vso[task.setvariable variable=PackageVersion]${package}"
Write-Host "##vso[task.setvariable variable=ShouldTest]${toTest}"
displayName: Compute AssemblyVersion and PackageVersion
# Display computed variables
- script: |
echo 🔸 FileVersion = $(FileVersion)
echo 🔸 PackageSuffix = $(PackageSuffix)
echo 🔸 Build.BuildNumber = $(Build.BuildNumber)
echo 🔸 Build.SourceBranch = $(Build.SourceBranch)
echo -----------------------------------------------
echo 🔸 AssemblyVersion = $(AssemblyVersion)
echo 🔸 PackageVersion = $(PackageVersion)
echo -----------------------------------------------
echo 🔸 ShouldTest = $(ShouldTest)
displayName: Display computed variables
# Install NuGet tools
- task: NuGetToolInstaller@1
displayName: Install NuGet tools
- ${{ if eq(variables['Build.SourceBranchName'], 'v3') }}:
# Install .NET 6.0
- task: UseDotNet@2
displayName: Install .NET 6.0
inputs:
version: 6.0.x
includePreviewVersions: true
# Install .NET 7.0
- task: UseDotNet@2
displayName: 'Install .NET 7.0'
inputs:
version: 7.0.x
includePreviewVersions: true
# Install .NET 8.0
- task: UseDotNet@2
displayName: 'Install .NET 8.0'
inputs:
version: 8.0.x
includePreviewVersions: true
# Install nodejs
- task: NodeTool@0
displayName: 'Install nodejs'
inputs:
versionSpec: '20.x'
# Set version number (exclude some folders)
- task: PowerShell@2
displayName: 'Versioning $(Build.BuildNumber)'
inputs:
targetType: 'filePath'
filePath: /eng/pipelines/update-assembly-version.ps1
arguments: > # Use this to avoid newline characters in multiline string
-sourcePath "$(System.DefaultWorkingDirectory)/"
-excludePatterns "**/src/Templates/content/**/*.csproj", "**/tests/TemplateValidation/**/*.csproj"
-assemblyVersion "$(AssemblyVersion)"
-packageVersion "$(PackageVersion)"
# Install dependencies
- task: DotNetCoreCLI@2
displayName: Install dependencies
inputs:
command: 'restore'
projects: ${{ parameters.Projects }}
# Build the projects
- task: DotNetCoreCLI@2
displayName: 'Build $(Build.BuildNumber)'
inputs:
command: 'build'
projects: ${{ parameters.Projects }}
arguments: '--configuration Release /p:ContinuousIntegrationBuild=true'
# Test and generate Code Coverage
- task: DotNetCoreCLI@2
condition: eq(variables['ShouldTest'], 'true')
displayName: 'Test and Code Coverage'
inputs:
command: test
projects: ${{ parameters.Tests }}
arguments: '--configuration Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:DebugType=Full'
publishTestResults: true
# Coverage Generation
- task: reportgenerator@5
condition: eq(variables['ShouldTest'], 'true')
displayName: Generate reports
inputs:
reports: '**/*.cobertura.xml'
targetdir: 'CoverageFolder'
reporttypes: 'HtmlInline_AzurePipelines'
# Publish code coverage
- task: PublishCodeCoverageResults@2
condition: eq(variables['ShouldTest'], 'true')
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '**/*.cobertura.xml'
reportDirectory: CoverageFolder
# Since NuGet packages are generated during the build, we need to copy them to the artifacts folder.
- task: CopyFiles@2
displayName: 'Pack $(Build.BuildNumber)'
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: '**/*$(PackageVersion).nupkg'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
CleanTargetFolder: false
OverWrite: true
flattenFolders: true
# Sign
- task: MSBuild@1
displayName: 'Sign NuGet Packages'
inputs:
solution: 'Microsoft.FluentUI.signproj'
msbuildArguments: '/p:OutDir=$(Build.ArtifactStagingDirectory)\ /p:IntermediateOutputPath=$(Build.ArtifactStagingDirectory)\sign\'
- task: CopyFiles@2
displayName: 'Copy signed packages to pickup folder'
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: '**/*$(PackageVersion).nupkg'
TargetFolder: '$(Build.ArtifactStagingDirectory)\SignedPackages'
CleanTargetFolder: false
OverWrite: true
flattenFolders: true