nanoFramework.TestFramework/azure-pipelines.yml

383 строки
11 KiB
YAML

# Copyright (c) .NET Foundation and Contributors
# See LICENSE file in the project root for full license information.
trigger:
branches:
include:
- main
- develop
- release-*
paths:
exclude:
- .github_changelog_generator
- .gitignore
- CHANGELOG.md
- CODE_OF_CONDUCT.md
- LICENSE.md
- README.md
- NuGet.Config
- assets/*
- config/*
- .github/*
# PR always trigger build
pr:
autoCancel: true
# add nf-tools repo to resources (for Azure Pipelines templates)
resources:
repositories:
- repository: templates
type: github
name: nanoframework/nf-tools
endpoint: nanoframework
jobs:
##############################
- job: Get_Build_Flags
pool:
vmImage: 'windows-latest'
steps:
- checkout: self
fetchDepth: 1
# get commit message
- powershell: |
# default to false
$update = $false
if($env:Build_Reason -eq 'PullRequest')
{
# PR build, nothing interesting in commit message
}
else
{
# build is not from a PR
# get commit ID
$commitId = git rev-parse HEAD
# get PR associate with commit
$prUrl = "https://api.github.com/repos/nanoframework/nanoFramework.TestFramework/commits/$commitId/pulls"
$commit = Invoke-RestMethod -Uri $prUrl -ContentType "application/json" -Headers @{"Accept"="application/vnd.github.groot-preview+json"} -Method GET
if($commit -ne $null)
{
# there is a PR, check labels
$updateDependents = $commit.labels | where {$_.Name -eq 'CI: Update Dependents'}
if($updateDependents -ne $null)
{
$update = $true
}
}
}
# set variable to foward to jobs
echo "##vso[task.setvariable variable=RUN_UPDATE_DEPENDENTS;isOutput=true]$update"
name: GetPRLabels
displayName: Check build labels
#########################################################
# build
- job: Build_Test_Framework
condition: eq(variables['UPDATE_DEPENDENTS'], 'false')
dependsOn:
- Get_Build_Flags
pool:
vmImage: 'windows-latest'
variables:
- group: sign-client-credentials
- name: DOTNET_NOLOGO
value: true
- name: buildPlatform
value: 'Any CPU'
- name: buildConfiguration
value: 'Release'
steps:
- checkout: self
- script: |
git config --global user.email "nanoframework@outlook.com"
git config --global user.name "nfbot"
displayName: Setup git identity
- template: azure-pipelines-templates/install-nuget.yml@templates
- task: InstallNanoMSBuildComponents@1
condition: ne( variables['StartReleaseCandidate'], true )
displayName: Install nanoFramework MSBuild components
- task: Cache@2
displayName: Cache NuGet packages
condition: >-
and(
succeeded(),
eq(variables['StartReleaseCandidate'], false)
)
continueOnError: true
inputs:
key: 'nuget | **/packages.lock.json'
path: $(UserProfile)/.nuget/packages
- task: NuGetCommand@2
displayName: NuGet restore Test Adapter
condition: succeeded()
retryCountOnTaskFailure: 2
inputs:
restoreSolution: 'nanoFramework.TestAdapter.sln'
feedsToUse: config
nugetConfigPath: 'NuGet.config'
- task: NuGetCommand@2
displayName: NuGet restore Test Framework
condition: succeeded()
retryCountOnTaskFailure: 2
inputs:
restoreSolution: 'nanoFramework.TestFramework.sln'
feedsToUse: config
nugetConfigPath: 'NuGet.config'
- task: VSBuild@1
displayName: Build Test Adapter
condition: succeeded()
inputs:
solution: 'nanoFramework.TestAdapter.sln'
platform: '$(buildPlatform)'
msbuildArgs: '/p:PublicRelease=true'
configuration: '$(buildConfiguration)'
- task: VSBuild@1
displayName: Build Test Framework
condition: succeeded()
inputs:
solution: 'nanoFramework.TestFramework.sln'
platform: '$(buildPlatform)'
msbuildArgs: '/p:PublicRelease=true'
configuration: '$(buildConfiguration)'
msbuildArchitecture: 'x64'
# - task: VisualStudioTestPlatformInstaller@1
# condition: succeeded()
# displayName: 'Visual Studio Test Platform Installer'
# inputs:
# versionSelector: latestStable
# - task: VSTest@2
# condition: succeeded()
# displayName: 'Running tests'
# inputs:
# testSelector: 'testAssemblies'
# testAssemblyVer2: |
# **\*Tests*.dll
# !**\*TestAdapter*.dll
# !**\*TestFramework*.dll
# !**\obj\**
# searchFolder: '$(System.DefaultWorkingDirectory)'
# platform: '$(BuildPlatform)'
# configuration: '$(BuildConfiguration)'
# diagnosticsEnabled: true
# vsTestVersion: toolsInstaller
# codeCoverageEnabled: true
# update could build number (only possible if this is not a PR from a fork)
- task: PowerShell@2
condition: succeeded()
displayName: Update cloud build number
inputs:
targetType: 'inline'
script: Write-Host "$("##vso[build.updatebuildnumber]")$env:NBGV_NuGetPackageVersion"
- task: NuGetCommand@2
condition: succeeded()
displayName: Pack NuGet with Test Framework
inputs:
command: 'custom'
arguments: 'pack source\package.nuspec -Version $(NBGV_NuGetPackageVersion) -properties commit="$(Build.SourceVersion)"'
- task: CopyFiles@1
condition: succeeded()
displayName: Collecting NuGet package artifact
inputs:
sourceFolder: $(Build.SourcesDirectory)
Contents: |
**\nanoFramework.TestFramework*.nupkg
TargetFolder: '$(Build.ArtifactStagingDirectory)'
flattenFolders: true
- task: DotNetCoreCLI@2
displayName: Install SignTool tool
condition: >-
and(
succeeded(),
eq(variables['System.PullRequest.PullRequestId'], '')
)
inputs:
command: custom
custom: tool
arguments: install --tool-path . sign --version 0.9.1-beta.23530.1
- pwsh: |
.\sign code azure-key-vault `
"**/*.nupkg" `
--base-directory "$(Build.ArtifactStagingDirectory)" `
--file-list "$(Build.Repository.LocalPath)\config\filelist.txt" `
--description "Test Framework" `
--description-url "https://github.com/$env:Build_Repository_Name" `
--azure-key-vault-tenant-id "$(SignTenantId)" `
--azure-key-vault-client-id "$(SignClientId)" `
--azure-key-vault-client-secret "$(SignClientSecret)" `
--azure-key-vault-certificate "$(SignKeyVaultCertificate)" `
--azure-key-vault-url "$(SignKeyVaultUrl)" `
--timestamp-url http://timestamp.digicert.com
displayName: Sign packages
continueOnError: true
condition: >-
and(
succeeded(),
eq(variables['System.PullRequest.PullRequestId'], '')
)
# publish artifacts (only possible if this is not a PR originated on a fork)
- task: PublishBuildArtifacts@1
condition: >-
and(
succeeded(),
ne(variables['system.pullrequest.isfork'], true)
)
displayName: Publish deployables artifacts
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: deployables
ArtifactType: Container
# push NuGet packages to Azure Artifacts feed (always happens except on PR builds)
- task: NuGetCommand@2
displayName: Push NuGet packages to Azure Artifacts
condition: >-
and(
succeeded(),
eq(variables['System.PullRequest.PullRequestId'], '')
)
continueOnError: true
inputs:
command: push
nuGetFeedType: external
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
publishFeedCredentials: 'AzureArtifacts-$(System.TeamProject)'
allowPackageConflicts: true
# push NuGet class lib package to NuGet (always happens except on PR builds)
- task: NuGetCommand@2
condition: >-
and(
succeeded(),
eq(variables['System.PullRequest.PullRequestId'], '')
)
continueOnError: true
displayName: Push NuGet packages to NuGet
inputs:
command: push
nuGetFeedType: external
allowPackageConflicts: true
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
publishFeedCredentials: 'NuGet-$(System.TeamProject)'
# create or update GitHub release
- task: GithubRelease@1
condition: >-
and(
succeeded(),
eq(variables['System.PullRequest.PullRequestId'], ''),
startsWith(variables['Build.SourceBranch'], 'refs/heads/main'),
eq(variables['UPDATE_DEPENDENTS'], 'false')
)
displayName: Create/Update GitHub release
inputs:
action: edit
gitHubConnection: 'github.com_nano-$(System.TeamProject)'
tagSource: userSpecifiedTag
tag: v$(NBGV_NuGetPackageVersion)
title: '.NET nanoFramework Unit Test Framework v$(NBGV_NuGetPackageVersion)'
releaseNotesSource: inline
releaseNotesInline: ''
assets: '$(Build.ArtifactStagingDirectory)/*.nupkg'
assetUploadMode: replace
isPreRelease: false
addChangeLog: true
##############################
- job: Update_Dependents
condition: >-
and(
succeeded('Get_Build_Flags'),
or(
eq(dependencies.Get_Build_Flags.outputs['GetPRLabels.RUN_UPDATE_DEPENDENTS'], 'true'),
eq(variables['UPDATE_DEPENDENTS'], 'true')
),
eq(variables['System.PullRequest.PullRequestId'], '')
)
dependsOn:
- Get_Build_Flags
- Build_Test_Framework
pool:
vmImage: 'windows-latest'
steps:
- checkout: self
- template: azure-pipelines-templates/install-nuget.yml@templates
- script: nbgv cloud -a -c
condition: succeeded()
displayName: Set build number
# wait for 15min to allow the 1st batch to get updated
# only if this wasn't triggered by the pipeline
- powershell: Start-Sleep -Seconds (15*60)
displayName: Wait for 15min
condition: eq(variables['UPDATE_DEPENDENTS'], 'false')
# update dependents
- task: PowerShell@2
displayName: Update dependents
inputs:
targetType: filePath
filePath: azure-pipelines/update-dependents.ps1
env:
MY_GITHUB_TOKEN: $(GitHubToken)
##################################
# report build failure to Discord
- job: Report_Build_Failure
dependsOn:
- Build_Test_Framework
- Update_Dependents
condition: >-
or(
failed('Update_Dependents'),
failed('Build_Test_Framework')
)
pool:
vmImage: 'windows-latest'
steps:
- checkout: self
fetchDepth: 1
# step from template @ nf-tools repo
- template: azure-pipelines-templates/discord-webhook.yml@templates
parameters:
status: 'failure'
webhookUrl: '$(DiscordWebhook)'
message: ''