Skip to content

Commit

Permalink
Azure-Pipeline: run builds and tests as jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
cHuberCoffee authored and cspiel1 committed Mar 7, 2024
1 parent 78de645 commit a2c3b18
Showing 1 changed file with 117 additions and 89 deletions.
206 changes: 117 additions & 89 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# Azure Pipelines file for building and testing re

# Improvements:
# Run Tests for different OpenSSL version in parallel
# Publish Test report

# Available OpenSSL builds
# Parameters:
# openssl_version: Available OpenSSL Versions
# min_coverage: Minimal Code Coverage
parameters:
- name: 'openssl_version'
type: object
Expand All @@ -21,115 +19,145 @@ variables:
- name: CMAKE_GENERATOR
value: Ninja

# Use a machine from the Azure Pipelines pool. Use Linux 'ubuntu-latest' image
pool:
vmImage: 'ubuntu-latest'

# Trigger the pipeline for branch commend & sprint
trigger:
- commend
- sprint

# Actual running pipeline
steps:
# Checkout the source into $(System.DefaultWorkingDirectory)
- checkout: 'self'
displayName : 'Checkout RE Source'
clean : 'true'
fetchTags : 'false'
continueOnError: 'false'

# Install/Prepare Build Environment for tests
- task: Bash@3
displayName: Prepare Build Environment
inputs:
targetType: 'inline'
script: |
sudo apt install valgrind ninja-build gcovr
# BEGIN Run the following pipeline part for each OpenSSL version ---------------
# Define Jobs for each OpenSSL version
jobs:
- ${{ each version in parameters.openssl_version }}:
# Fetch Prebuild OpenSSL stored in Azure Artifects Universal Package
# Create new job
- job:
displayName: 'Build with OpenSSL ${{ version }}'
pool:
vmImage: 'ubuntu-latest'

steps:
# Checkout RE Source into ${System.DefaultWorkingDirectory}
- checkout: 'self'
displayName : 'Checkout RE Source'
clean : 'true'
fetchTags : 'false'
continueOnError: 'false'

# Install/Prepare Build Environment for tests
- task: Bash@3
displayName: 'Prepare Build Environment'
inputs:
targetType: 'inline'
script: |
sudo apt install valgrind ninja-build
# Download OpenSSL package from Azure Artifects Universal Package
- task: UniversalPackages@0
displayName: 'Download Prebuild OpenSSL ${{version}}'
inputs:
command: 'download'
feedsToUse: 'internal'
vstsFeed: 'core-components/commend-core-libs'
vstsFeedPackage: 'openssl'
vstsPackageVersion: '${{version}}'
downloadDirectory: '$(System.DefaultWorkingDirectory)/openssl'

# Generate CMake Build Environment
- task: CMake@1
displayName: 'Generate CMake Build Environment'
inputs:
cmakeArgs: >-
-B build
-DCMAKE_BUILD_TYPE=Debug
-DOPENSSL_ROOT_DIR=$(System.DefaultWorkingDirectory)/openssl
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Build project
- task: CMake@1
displayName: 'Build RE'
inputs:
cmakeArgs: '--build build -j'
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Build tests
- task: CMake@1
displayName: 'Build RE Tests'
inputs:
cmakeArgs: '--build build -t retest -j'
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Run Tests
- task: Bash@3
displayName: 'Run Tests'
inputs:
targetType: 'inline'
script: |
$(System.DefaultWorkingDirectory)/build/test/retest
valgrind $(System.DefaultWorkingDirectory)/build/test/retest -r -v
- job:
displayName: 'Build for Code Coverage'
pool:
vmImage: 'ubuntu-latest'

steps:
# Checkout RE Source into ${System.DefaultWorkingDirectory}
- checkout: 'self'
displayName : 'Checkout RE Source'
clean : 'true'
fetchTags : 'false'
continueOnError: 'false'

# Install/Prepare Build Environment for tests
- task: Bash@3
displayName: 'Prepare Build Environment'
inputs:
targetType: 'inline'
script: |
sudo apt install valgrind ninja-build gcovr
# Download OpenSSL package from Azure Artifects Universal Package
- task: UniversalPackages@0
displayName: 'Download Prebuild OpenSSL ${{version}}'
displayName: 'Download Prebuild OpenSSL 3.2.1'
inputs:
command: 'download'
feedsToUse: 'internal'
vstsFeed: 'core-components/commend-core-libs'
vstsFeedPackage: 'openssl'
vstsPackageVersion: '${{version}}'
downloadDirectory: '$(System.DefaultWorkingDirectory)/openssl_${{version}}'
vstsPackageVersion: '3.2.1'
downloadDirectory: '$(System.DefaultWorkingDirectory)/openssl'

# Generate CMake Build Environment
# Generage Cmake Build Environment
- task: CMake@1
displayName: 'Generate CMake Build Environment'
displayName: 'Generage CMake Build Environment'
inputs:
cmakeArgs: >-
-B build_${{version}}
-B build
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX=$(System.DefaultWorkingDirectory)/install
-DOPENSSL_ROOT_DIR=$(System.DefaultWorkingDirectory)/openssl_${{version}}
-DOPENSSL_ROOT_DIR=$(System.DefaultWorkingDirectory)/openssl
-DCMAKE_C_FLAGS="--coverage"
-DCMAKE_EXE_LINKER_FLAGS="--coverage"
-DUSE_TRACE=ON
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Build project
# Build Coverage Tests
- task: CMake@1
displayName: 'Build RE'
displayName: 'Build Code Coverage Test'
inputs:
cmakeArgs: '--build build_${{version}} -j'
cmakeArgs: '--build build -t retest -j'
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Build tests
- task: CMake@1
displayName: 'Build RE Tests'
inputs:
cmakeArgs: '--build build_${{version}} -t retest -j'
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Run Tests
# Run Coverage Calculation
- task: Bash@3
displayName: 'Run Tests'
displayName: 'Calculate Coverage'
inputs:
targetType: 'inline'
script: |
$(System.DefaultWorkingDirectory)/build_${{version}}/test/retest
valgrind $(System.DefaultWorkingDirectory)/build_${{version}}/test/retest -r -v
# END Run the following pipeline part for each OpenSSL version -----------------

# Generage Cmake Build Environment
- task: CMake@1
displayName: 'Generage CMake Build Environment'
inputs:
cmakeArgs: >-
-B build_coverage
-DCMAKE_BUILD_TYPE=Debug
-DOPENSSL_ROOT_DIR=$(System.DefaultWorkingDirectory)/openssl_3.2.1
-DCMAKE_C_FLAGS="--coverage"
-DCMAKE_EXE_LINKER_FLAGS="--coverage"
-DUSE_TRACE=ON
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Build Coverage Tests
- task: CMake@1
displayName: 'Build Code Coverage Test'
inputs:
cmakeArgs: '--build build_coverage -t retest -j'
workingDirectory: '$(System.DefaultWorkingDirectory)'

# Run Coverage Calculation
- task: Bash@3
displayName: 'Calculate Coverage'
inputs:
targetType: 'inline'
script: |
$(System.DefaultWorkingDirectory)/build_coverage/test/retest -a -v
$(System.DefaultWorkingDirectory)/build_coverage/test/retest -r -m select -v
gcov build_coverage/**/*.o
gcovr -r . -s --xml-pretty --xml code_coverage_report.xml --gcov-ignore-parse-errors
# Publish code coverage results (XML)
- task: PublishCodeCoverageResults@2
inputs:
summaryFileLocation: $(System.DefaultWorkingDirectory)/code_coverage_report.xml
failIfCoverageEmpty: 'true'

$(System.DefaultWorkingDirectory)/build/test/retest -a -v
$(System.DefaultWorkingDirectory)/build/test/retest -r -m select -v
gcov build/**/*.o
gcovr -r . -s --xml-pretty --xml code_coverage_report.xml --gcov-ignore-parse-errors
# Publish code coverage results (XML)
- task: PublishCodeCoverageResults@2
inputs:
summaryFileLocation: $(System.DefaultWorkingDirectory)/code_coverage_report.xml
failIfCoverageEmpty: 'true'

0 comments on commit a2c3b18

Please sign in to comment.