fradrive/azure-pipelines.yaml

126 lines
4.0 KiB
YAML
Executable File

# SPDX-FileCopyrightText: 2024-2025 Sarah Vaupel <sarah.vaupel@uniworx.de>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
trigger:
branches:
include:
- '*'
paths:
exclude:
- CHANGELOG.md
tags:
include:
- '*'
parameters:
- name: services
type: object
default:
- name: frontend
imageBase:
image: devfra.azurecr.io/de.fraport.build/npm
tag: node-20
# extraBuildOptions: |
# --build-arg NPM_CUSTOM_REGISTRY=https://pkgs.dev.azure.com/fraport/_packaging/packages/npm/registry/
dependsOn: []
dependencyArtifacts: |
node_modules/
.npm/
buildPool: 'Prod Private Agent Pool'
buildTimeout: 60
buildArtifacts: |
assets/icons/fradrive/*.svg
assets/favicons/*.png
assets/favicons/include.html
frontend/src/env.sass
config/manifest.json
static/**/*
well-known/**/*
- name: backend
imageBase:
image: devfra.azurecr.io/de.fraport.build/haskell
tag: 8.10.4
dependsOn:
- frontend
dependencyArtifacts: |
.stack/**/*
buildPool: 'Prod Private Agent Pool DS3'
buildTimeout: 1440
buildArtifacts: |
bin/*
.stack-work/**/*
variables:
buildImageUpstream: devfra.azurecr.io/de.fraport.fradrive.build
onMasterBranch: $[eq(variables['Build.SourceBranch'], 'refs/heads/master')]
onUpdateBranch: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/update')]
pool: 'Prod Private Agent Pool'
stages:
- stage: Setup
jobs:
- ${{ each service in parameters.services }}:
- template: .azure-pipelines/templates/jobs/setup_image.yaml
parameters:
imageName: ${{service.name}}
imageBase: ${{service.imageBase}}
- template: .azure-pipelines/templates/jobs/setup_dependencies.yaml
parameters:
serviceName: ${{service.name}}
dependenciesBuildPool: ${{service.buildPool}}
dependenciesBuildTimeout: ${{service.buildTimeout}}
dependenciesArtifacts: ${{service.dependenciesArtifacts}}
- stage: Build
jobs:
- ${{ each service in parameters.services }}:
- job: Build_${{service.name}}
displayName: Compile ${{service.name}}
dependsOn: ${{service.dependsOn}}
steps:
- template: .azure-pipelines/templates/steps/make.yaml
parameters:
makeJob: compile
makeService: ${{service.name}}
- task: CopyFiles@2
displayName: Prepare ${{service.name}} build artifacts for upload
inputs:
Contents: ${{service.artifacts}}
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
displayName: Publish ${{service.name}} build artifacts
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '${{service.name}}'
publishLocation: 'Container'
- stage: Test
condition: eq(variables.skipTests, false)
jobs:
- ${{ each service in parameters.services }}:
- job: Test_${{service.name}}
displayName: Compile ${{service.name}}
dependsOn: ${{service.dependsOn}}
steps:
- template: .azure-pipelines/templates/steps/make.yaml
parameters:
makeJob: lint
makeService: ${{service.name}}
- template: .azure-pipelines/templates/steps/make.yaml
parameters:
makeJob: test
makeService: ${{service.name}}
- job: TestReport_${{service.name}}
displayName: Upload test reports for ${{service.name}}
steps:
- script: echo "Work in progress" # TODO
- stage: Release
condition: or(eq(variables.forceRelease, true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
jobs:
- template: .azure-pipelines/templates/jobs/release.yaml
parameters:
releaseTag: ${{split(variables['Build.SourceBranch'], '/')[2]}}