142 lines
5.0 KiB
YAML
Executable File
142 lines
5.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: []
|
|
dependenciesCaches:
|
|
- key: package.json | package-lock.json
|
|
path: node_modules/
|
|
- key: package.json | package-lock.json
|
|
path: .npm/
|
|
- key: package.json | esbuild.config.mjs | utils/renamer.pl | utils/faviconize.pl | frontend/src/icons.scss
|
|
path: assets/icons/
|
|
- key: package.json | esbuild.config.mjs | utils/renamer.pl | utils/faviconize.pl | frontend/src/icons.scss
|
|
path: assets/favicons/
|
|
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:
|
|
- Build_frontend
|
|
dependenciesCaches:
|
|
- key: stack.yaml | stack.yaml.lock
|
|
path: .stack/
|
|
buildPool: 'Prod Private Agent Pool DS3'
|
|
buildTimeout: 1440
|
|
buildArtifacts: |
|
|
bin/*
|
|
|
|
variables:
|
|
buildImageUpstream: devfra.azurecr.io/de.fraport.fradrive.build
|
|
setupImages: $[ or( eq(variables.forcePushLatest, true), eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/update'), startsWith(variables['Build.SourceBranch'], 'refs/tags/') ) ]
|
|
|
|
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}}
|
|
dependenciesCaches: ${{service.dependenciesCaches}}
|
|
dependenciesBuildPool: ${{service.buildPool}}
|
|
dependenciesBuildTimeout: ${{service.buildTimeout}}
|
|
|
|
- stage: Build
|
|
dependsOn: Setup
|
|
jobs:
|
|
- ${{ each service in parameters.services }}:
|
|
- job: Build_${{service.name}}
|
|
displayName: Compile ${{service.name}}
|
|
dependsOn: ${{service.dependsOn}}
|
|
container:
|
|
# TODO: do not use latest on update branches
|
|
image: $(buildImageUpstream)/${{service.name}}:latest
|
|
endpoint: devfra
|
|
env:
|
|
PROJECT_DIR: $(Build.Repository.LocalPath)
|
|
IN_CONTAINER: true
|
|
IN_CI: true
|
|
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
|
|
# dependsOn: Setup
|
|
# 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
|
|
dependsOn: Build # TODO include Test iff not skipped
|
|
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]}} |