# SPDX-FileCopyrightText: 2024-2025 Sarah Vaupel # # 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]}}