[build] Split build logic into separate files (#2457)

This allows us to share build logic between Azure hosted and WPI hosted hardware.
This commit is contained in:
Austin Shalit
2020-04-01 21:33:04 -07:00
committed by GitHub
parent a308dd4471
commit 306720e63e
7 changed files with 289 additions and 387 deletions

View File

@@ -1,7 +1,4 @@
# Gradle
# Build your Java projects and run tests with Gradle using a Gradle wrapper script.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/vsts/pipelines/languages/java
# Build and testing pipeline on Azure.
resources:
containers:
@@ -14,9 +11,6 @@ resources:
- container: ubuntu
image: wpilib/ubuntu-base:18.04
variables:
- group: Artifactory-Package-Publish
trigger:
batch: true
branches:
@@ -26,392 +20,51 @@ trigger:
stages:
- stage: Build
jobs:
- job: Linux_Arm
pool:
vmImage: 'Ubuntu 16.04'
- template: azure-templates/job-build.yml
parameters:
jobName: Linux_Arm
buildOptions: '-Ponlylinuxathena'
artifactName: 'Athena'
container: wpilib2020
- template: azure-templates/job-build.yml
parameters:
jobName: Linux_Raspbian
container: raspbian
buildOptions: '-Ponlylinuxraspbian'
artifactName: 'Raspbian'
timeoutInMinutes: 0
- template: azure-templates/job-build.yml
parameters:
jobName: Linux_Aarch64
container: aarch64
buildOptions: '-Ponlylinuxaarch64bionic'
artifactName: 'Aarch64'
steps:
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-Ponlylinuxathena -PbuildServer'
- template: azure-templates/job-build.yml
parameters:
jobName: Linux
container: ubuntu
artifactName: 'Linux'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-Ponlylinuxathena -PreleaseMode -PbuildServer'
- template: azure-templates/job-build.yml
parameters:
jobName: Windows_64_Bit
pool:
vmImage: 'windows-2019'
container: ''
jdkVersionOption: '1.11'
buildOptions: '-PskipPMD'
artifactName: 'Win64'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Athena'
targetPath: 'build/allOutputs'
- template: azure-templates/job-build-win32.yml
- job: Linux_Raspbian
pool:
vmImage: 'Ubuntu 16.04'
- template: azure-templates/job-build-mac.yml
container: raspbian
- template: azure-templates/job-build-cmake.yml
timeoutInMinutes: 0
- template: azure-templates/job-styleguide.yml
steps:
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-Ponlylinuxraspbian -PbuildServer'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-Ponlylinuxraspbian -PreleaseMode -PbuildServer'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Raspbian'
targetPath: 'build/allOutputs'
- job: Linux_Aarch64
pool:
vmImage: 'Ubuntu 16.04'
container: aarch64
timeoutInMinutes: 0
steps:
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-Ponlylinuxaarch64bionic -PbuildServer'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-Ponlylinuxaarch64bionic -PreleaseMode -PbuildServer'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Aarch64'
targetPath: 'build/allOutputs'
- job: Linux
pool:
vmImage: 'Ubuntu 16.04'
container: ubuntu
timeoutInMinutes: 0
steps:
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PbuildServer'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PreleaseMode -PbuildServer'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Linux'
targetPath: 'build/allOutputs'
- job: Styleguide
pool:
vmImage: 'Ubuntu 16.04'
container: ubuntu
timeoutInMinutes: 0
steps:
- script: |
sudo pip3 install wpiformat
displayName: 'Install wpiformat'
- script: |
git checkout -b master
wpiformat -clang 6.0
displayName: 'Run wpiformat'
- script: |
# Ensure formatter made no changes
git --no-pager diff --exit-code HEAD
displayName: 'Check wpiformat Output'
- job: CMakeBuild
pool:
vmImage: 'Ubuntu 16.04'
container: wpilib2020
timeoutInMinutes: 0
steps:
- task: CMake@1
inputs:
cmakeArgs: '-DWITHOUT_ALLWPILIB=OFF ..'
- script: |
make -j3
workingDirectory: 'build'
displayName: 'Build'
- job: Windows_64_Bit
pool:
vmImage: 'windows-2019'
timeoutInMinutes: 0
steps:
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
jdkVersionOption: '1.11'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PskipPMD -PbuildServer'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
jdkVersionOption: '1.11'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PskipPMD -PreleaseMode -PbuildServer'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Win64'
targetPath: 'build/allOutputs'
- job: Windows_32_Bit
pool:
vmImage: 'windows-2019'
timeoutInMinutes: 0
steps:
- powershell: |
mkdir build
$ProgressPreference = 'SilentlyContinue'
wget "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.4_11.zip" -O "build\jdk.zip"
displayName: 'Download JDK'
- task: JavaToolInstaller@0
inputs:
jdkSourceOption: localDirectory
jdkFile: 'build/jdk.zip'
jdkDestinationDirectory: 'build/jdkinst'
jdkArchitectureOption: x86
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx1024m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PskipPMD -PbuildServer'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx1024m'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PskipPMD -PreleaseMode -PbuildServer'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Win32'
targetPath: 'build/allOutputs'
- job: Mac
pool:
vmImage: 'macOS-10.14'
timeoutInMinutes: 0
steps:
- script: |
mkdir build
export JAVA_HOME=`/usr/libexec/java_home -v 11`
displayName: 'Setup JDK'
- task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
jdkVersionOption: '1.11'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PbuildServer'
- task: Gradle@2
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
jdkVersionOption: '1.11'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PreleaseMode -PbuildServer'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Mac'
targetPath: 'build/allOutputs'
- stage: Combine
jobs:
- job: CombineJob
pool:
vmImage: 'macOS-10.14'
timeoutInMinutes: 0
steps:
- checkout: none
- script: |
git clone https://github.com/wpilibsuite/build-tools
displayName: 'Clone Combiner'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Mac'
targetPath: 'build-tools/combiner/products/build/allOutputs'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Win32'
targetPath: 'build-tools/combiner/products/build/allOutputs'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Win64'
targetPath: 'build-tools/combiner/products/build/allOutputs'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Linux'
targetPath: 'build-tools/combiner/products/build/allOutputs'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Raspbian'
targetPath: 'build-tools/combiner/products/build/allOutputs'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Athena'
targetPath: 'build-tools/combiner/products/build/allOutputs'
- task: DownloadPipelineArtifact@0
inputs:
artifactName: 'Aarch64'
targetPath: 'build-tools/combiner/products/build/allOutputs'
# PR Builds
- task: Gradle@2
inputs:
workingDirectory: 'build-tools/combiner'
gradleWrapperFile: 'build-tools/combiner/gradlew'
gradleOptions: '-Xmx3072m'
tasks: 'publish '
options: '-Pallwpilib'
condition: and(succeeded(), and(ne(variables['Build.SourceBranch'], 'refs/heads/master'), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))))
# Master Builds
- task: Gradle@2
inputs:
workingDirectory: 'build-tools/combiner'
gradleWrapperFile: 'build-tools/combiner/gradlew'
gradleOptions: '-Xmx3072m'
tasks: 'publish '
options: '-Pallwpilib'
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
env:
RUN_AZURE_ARTIFACTORY_RELEASE: 'TRUE'
ARTIFACTORY_PUBLISH_USERNAME: $(PublishUserName)
ARTIFACTORY_PUBLISH_PASSWORD: $(PublishPassword)
# Tagged Builds
- task: Gradle@2
inputs:
workingDirectory: 'build-tools/combiner'
gradleWrapperFile: 'build-tools/combiner/gradlew'
gradleOptions: '-Xmx3072m'
tasks: 'publish '
options: '-Pallwpilib -PreleaseRepoPublish'
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))
env:
RUN_AZURE_ARTIFACTORY_RELEASE: 'TRUE'
ARTIFACTORY_PUBLISH_USERNAME: $(PublishUserName)
ARTIFACTORY_PUBLISH_PASSWORD: $(PublishPassword)
- script: |
echo "##vso[task.setvariable variable=UserHome]$HOME"
displayName: 'Set Home Variable'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Maven'
targetPath: $(UserHome)/releases
- template: azure-templates/stage-combine.yml
parameters:
publish: True
artifacts: [Mac, Win32, Win64, Linux, Raspbian, Athena, Aarch64]

View File

@@ -0,0 +1,31 @@
# Job for building
parameters:
pool:
vmImage: 'Ubuntu 16.04'
container: wpilib2020
preBuild: []
jobs:
- job: CMake
pool: ${{ parameters.pool }}
${{ if ne(parameters.container, '') }}:
container: ${{ parameters.container }}
workspace:
clean: all
timeoutInMinutes: 0
steps:
- ${{ parameters.preBuild }}
- task: CMake@1
inputs:
cmakeArgs: '-DWITHOUT_ALLWPILIB=OFF ..'
- script: |
make -j3
workingDirectory: 'build'
displayName: 'Build'

View File

@@ -0,0 +1,21 @@
# Job for mac
parameters:
pool:
vmImage: 'macOS-10.14'
preBuild: []
jobs:
- template: job-build.yml
parameters:
jobName: 'Mac'
pool: ${{ parameters.pool }}
container: ''
jdkVersionOption: '1.11'
artifactName: 'Mac'
preBuild:
- ${{ parameters.preBuild }}
- script: |
mkdir build
export JAVA_HOME=`/usr/libexec/java_home -v 11`
displayName: 'Setup JDK'

View File

@@ -0,0 +1,31 @@
# Job for win 32.
parameters:
pool:
vmImage: 'windows-2019'
preBuild: []
jobs:
- template: job-build.yml
parameters:
jobName: 'Windows_32_Bit'
pool: ${{ parameters.pool }}
container: ''
gradleOptions: '-Xmx1024m'
jdkVersionOption: '1.11'
buildOptions: '-PskipPMD'
artifactName: 'Win32'
preBuild:
- ${{ parameters.preBuild }}
- powershell: |
mkdir build
$ProgressPreference = 'SilentlyContinue'
wget "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.4%2B11/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.4_11.zip" -O "build\jdk.zip"
displayName: 'Download JDK'
- task: JavaToolInstaller@0
inputs:
versionSpec: '11'
jdkSourceOption: localDirectory
jdkFile: 'build/jdk.zip'
jdkDestinationDirectory: 'build/jdkinst'
jdkArchitectureOption: x86

View File

@@ -0,0 +1,60 @@
# Job for building
parameters:
jobName: ''
pool:
vmImage: 'Ubuntu 16.04'
container: wpilib2020
preBuild: []
gradleOptions: ''
jdkVersionOption: ''
buildOptions: ''
artifactName: ''
jobs:
- job: ${{ parameters.jobName }}
pool: ${{ parameters.pool }}
${{ if ne(parameters.container, '') }}:
container: ${{ parameters.container }}
workspace:
clean: all
timeoutInMinutes: 0
steps:
- ${{ parameters.preBuild }}
# PR Builds
- ${{ if not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')) }}:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m ${{ parameters.gradleOptions }}'
${{ if ne(parameters.jdkVersionOption, '') }}:
jdkVersionOption: ${{ parameters.jdkVersionOption }}
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PbuildServer ${{ parameters.buildOptions }}'
# Tagged Builds
- ${{ if startsWith(variables['Build.SourceBranch'], 'refs/tags/v') }}:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m ${{ parameters.gradleOptions }}'
${{ if ne(parameters.jdkVersionOption, '') }}:
jdkVersionOption: ${{ parameters.jdkVersionOption }}
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
tasks: 'build'
options: '-PreleaseMode -PbuildServer ${{ parameters.buildOptions }}'
- task: PublishPipelineArtifact@0
inputs:
artifactName: ${{ parameters.artifactName }}
targetPath: 'build/allOutputs'

View File

@@ -0,0 +1,32 @@
# Job for checking wpiformat violations
parameters:
jobName: ''
pool:
vmImage: 'Ubuntu 16.04'
jobs:
- job: Styleguide
pool: ${{ parameters.pool }}
container: ubuntu
workspace:
clean: all
timeoutInMinutes: 0
steps:
- script: |
sudo pip3 install wpiformat
displayName: 'Install wpiformat'
- script: |
git checkout -b master
wpiformat -clang 6.0
displayName: 'Run wpiformat'
- script: |
# Ensure formatter made no changes
git --no-pager diff --exit-code HEAD
displayName: 'Check wpiformat Output'

View File

@@ -0,0 +1,74 @@
# Stage to combine artifacts into a single output
parameters:
publish: False
artifacts: []
stages:
- stage: Combine
jobs:
- job: CombineJob
pool:
vmImage: 'macOS-10.14'
timeoutInMinutes: 0
steps:
- checkout: none
- script: |
git clone https://github.com/wpilibsuite/build-tools
displayName: 'Clone Combiner'
- ${{ each artifact in parameters.artifacts }}:
- task: DownloadPipelineArtifact@0
displayName: 'DownloadPipelineArtifact ${{ artifact }}'
inputs:
artifactName: ${{ artifact }}
targetPath: 'build-tools/combiner/products/build/allOutputs'
# PR Builds
- ${{ if and(ne(variables['Build.SourceBranch'], 'refs/heads/master'), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))) }}:
- task: Gradle@2
inputs:
workingDirectory: 'build-tools/combiner'
gradleWrapperFile: 'build-tools/combiner/gradlew'
gradleOptions: '-Xmx3072m'
tasks: 'publish '
options: '-Pallwpilib'
# Master Builds
- ${{ if and(parameters.publish, eq(variables['Build.SourceBranch'], 'refs/heads/master')) }}:
- task: Gradle@2
inputs:
workingDirectory: 'build-tools/combiner'
gradleWrapperFile: 'build-tools/combiner/gradlew'
gradleOptions: '-Xmx3072m'
tasks: 'publish '
options: '-Pallwpilib'
env:
RUN_AZURE_ARTIFACTORY_RELEASE: 'TRUE'
ARTIFACTORY_PUBLISH_USERNAME: $(PublishUserName)
ARTIFACTORY_PUBLISH_PASSWORD: $(PublishPassword)
# Tagged Builds
- ${{ if and(parameters.publish, startsWith(variables['Build.SourceBranch'], 'refs/tags/v')) }}:
- task: Gradle@2
inputs:
workingDirectory: 'build-tools/combiner'
gradleWrapperFile: 'build-tools/combiner/gradlew'
gradleOptions: '-Xmx3072m'
tasks: 'publish '
options: '-Pallwpilib -PreleaseRepoPublish'
env:
RUN_AZURE_ARTIFACTORY_RELEASE: 'TRUE'
ARTIFACTORY_PUBLISH_USERNAME: $(PublishUserName)
ARTIFACTORY_PUBLISH_PASSWORD: $(PublishPassword)
- script: |
echo "##vso[task.setvariable variable=UserHome]$HOME"
displayName: 'Set Home Variable'
- task: PublishPipelineArtifact@0
inputs:
artifactName: 'Maven'
targetPath: $(UserHome)/releases