From 447f39ae850876aa3eaf467509d4d549ee6ab90d Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Fri, 15 Nov 2019 13:03:45 -0600 Subject: [PATCH] added Azure DevOps build system --- build-system/README.md | 8 ++++ build-system/azure-pipeline.template.yaml | 45 +++++++++++++++++++++++ build-system/nightly-builds.yaml | 26 +++++++++++++ build-system/pr-validation.yaml | 30 +++++++++++++++ build-system/windows-release.yaml | 39 ++++++++++++++++++++ 5 files changed, 148 insertions(+) create mode 100644 build-system/README.md create mode 100644 build-system/azure-pipeline.template.yaml create mode 100644 build-system/nightly-builds.yaml create mode 100644 build-system/pr-validation.yaml create mode 100644 build-system/windows-release.yaml diff --git a/build-system/README.md b/build-system/README.md new file mode 100644 index 0000000..699c2d4 --- /dev/null +++ b/build-system/README.md @@ -0,0 +1,8 @@ +# Azure Pipelines Build Files +These `.yaml` files are used by Windows Azure DevOps Pipelines to help execute the following types of builds: + +- Pull request validation on Linux (Mono / .NET Core) +- Pull request validation on Windows (.NET Framework / .NET Core) +- NuGet releases with automatic release notes posted to a Github Release repository. + +**NOTE**: you will need to change some of the pipeline variables inside the `windows-release.yaml` for your specific project and you will also want to create variable groups with your signing and NuGet push information. \ No newline at end of file diff --git a/build-system/azure-pipeline.template.yaml b/build-system/azure-pipeline.template.yaml new file mode 100644 index 0000000..a5c1bf8 --- /dev/null +++ b/build-system/azure-pipeline.template.yaml @@ -0,0 +1,45 @@ +parameters: + name: '' + displayName: '' + vmImage: '' + scriptFileName: '' + scriptArgs: 'all' + timeoutInMinutes: 120 + +jobs: + - job: ${{ parameters.name }} + displayName: ${{ parameters.displayName }} + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + pool: + vmImage: ${{ parameters.vmImage }} + steps: + - checkout: self # self represents the repo where the initial Pipelines YAML file was found + clean: false # whether to fetch clean each time + submodules: recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules + persistCredentials: true + # Linux or macOS + - task: Bash@3 + displayName: Linux / OSX Build + inputs: + filePath: ${{ parameters.scriptFileName }} + arguments: ${{ parameters.scriptArgs }} + continueOnError: true + condition: in( variables['Agent.OS'], 'Linux', 'Darwin' ) + # Windows + - task: BatchScript@1 + displayName: Windows Build + inputs: + filename: ${{ parameters.scriptFileName }} + arguments: ${{ parameters.scriptArgs }} + continueOnError: true + condition: eq( variables['Agent.OS'], 'Windows_NT' ) + - task: PublishTestResults@2 + inputs: + testRunner: VSTest + testResultsFiles: '**/*.trx' #TestResults folder usually + testRunTitle: ${{ parameters.name }} + mergeTestResults: true + - script: 'echo 1>&2' + failOnStderr: true + displayName: 'If above is partially succeeded, then fail' + condition: eq(variables['Agent.JobStatus'], 'SucceededWithIssues') \ No newline at end of file diff --git a/build-system/nightly-builds.yaml b/build-system/nightly-builds.yaml new file mode 100644 index 0000000..c8e91b2 --- /dev/null +++ b/build-system/nightly-builds.yaml @@ -0,0 +1,26 @@ +# Release task for PbLib projects +# See https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema for reference + +pool: + vmImage: vs2017-win2016 + demands: Cmd + +trigger: none +pr: none + +schedules: +- cron: "0 0 * * *" + displayName: Daily midnight build + branches: + include: + - dev + +variables: + - group: nugetKeys #create this group with SECRET variables `nugetKey` + +steps: +- task: BatchScript@1 + displayName: 'FAKE Build' + inputs: + filename: build.cmd + arguments: 'Nuget nugetprerelease=dev nugetpublishurl=$(nightlyUrl) nugetkey=$(nightlyKey)' \ No newline at end of file diff --git a/build-system/pr-validation.yaml b/build-system/pr-validation.yaml new file mode 100644 index 0000000..99a80df --- /dev/null +++ b/build-system/pr-validation.yaml @@ -0,0 +1,30 @@ +# Pull request validation for Windows against the `dev` and `master` branches +# See https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema for reference +trigger: + branches: + include: + - dev + - master + +pr: + autoCancel: true # indicates whether additional pushes to a PR should cancel in-progress runs for the same PR. Defaults to true + branches: + include: [ dev, master ] # branch names which will trigger a build + +name: $(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r) + +jobs: + - template: azure-pipeline.template.yaml + parameters: + name: 'windows_pr' + displayName: 'Windows PR Validation' + vmImage: 'vs2017-win2016' + scriptFileName: build.cmd + scriptArgs: all + - template: azure-pipeline.template.yaml + parameters: + name: 'linux_pr' + displayName: 'Linux PR Validation' + vmImage: 'ubuntu-16.04' + scriptFileName: ./build.sh + scriptArgs: all \ No newline at end of file diff --git a/build-system/windows-release.yaml b/build-system/windows-release.yaml new file mode 100644 index 0000000..97028f4 --- /dev/null +++ b/build-system/windows-release.yaml @@ -0,0 +1,39 @@ +# Release task for PbLib projects +# See https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema for reference + +pool: + vmImage: vs2017-win2016 + demands: Cmd + +trigger: + branches: + include: + - refs/tags/* +pr: none + +variables: + - group: signingSecrets + - group: nugetKeys + - name: githubConnectionName + value: Petabridge + - name: projectName + value: Petabridge.Tracing.Zipkin + - name: githubRepositoryName + value: petabridge/Petabridge.Tracing.Zipkin + +steps: +- task: BatchScript@1 + displayName: 'FAKE Build' + inputs: + filename: build.cmd + arguments: 'All SignClientUser=$(signingUsername) SignClientSecret=$(signingPassword) nugetpublishurl=https://www.nuget.org/api/v2/package nugetkey=$(nugetKey)' + +- task: GitHubRelease@0 + displayName: 'GitHub release (create)' + inputs: + gitHubConnection: $(githubConnectionName) + repositoryName: $(githubRepositoryName) + title: '$(projectName) v$(Build.SourceBranchName)' + releaseNotesFile: 'RELEASE_NOTES.md' + assets: | + bin\nuget\*.nupkg \ No newline at end of file