-1

I wrote a pipeline in Azure DevOps which would change the buildNumber of my project automatically. The problem is that I get the error can not read a block mapping entry; a multiline key may not be an implicit key.

I know this question has been asked a million times already but so far I did not manage to get it to work.

Here is the azure-pipeline.yml:

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- main
- major/*
- feat/*
- patch/*

pool:
  vmImage: window-latest

steps:
- task: PowerShell@2
  displayName: 'increment Version'
  inputs:
    targetType: 'inline'
    script: |
    function Increment-MajorVersion(){
      [int[]]$build  = $(Build.BuildNumber) -split "."
      [int]$major = $build[0]
      [int]$minor = $build[1]
      [int]$patch = $build[2]
      $major += 1
      [string]$buildVersion = "$($major).$($minor).$($patch)"
      return $buildVersion
    }

    function Increment-MinorVersion(){
      [int[]]$build  = $(Build.BuildNumber) -split "."
      [int]$major = $build[0]
      [int]$minor = $build[1]
      [int]$patch = $build[2]
      $minor += 1
      [string]$buildVersion = "$($major).$($minor).$($patch)"
      return $buildVersion
    }

    function Increment-PatchVersion(){
      [int[]]$build  = $(Build.BuildNumber) -split "."
      [int]$major = $build[0]
      [int]$minor = $build[1]
      [int]$patch = $build[2]
      $patch += 1
      [string]$buildVersion = "$($major).$($minor).$($patch)"
      return $buildVersion
    }

    if($(Build.SourceBranchName) -match "major"){
      [string]$buildVersion = Increment-MajorVersion
      Write-Host "##vso[task.setvariable variable=buildNumber]$buildVersion"
    }

    if($(Build.SourceBranchName) -match "feat"){
      [string]$buildVersion = Increment-MajorVersion
      Write-Host "##vso[task.setvariable variable=buildNumber]$buildVersion"
    }

    if($(Build.SourceBranchName) -match "patch"){
      [string]$buildVersion = Increment-MajorVersion
      Write-Host "##vso[task.setvariable variable=buildNumber]$buildVersion"
  }

- task: UseDotNet@2
  displayName: 'Use .NET 6'
  inputs:
    packageType: 'sdk'
    version: '6.x.x'
    includePreviewVersions: false

- task: NuGetCommand@2
  displayName: 'Restore NuGet Packages'
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'config'
    
- task: VSBuild@1
  displayName: Build Projekt
  inputs:
    solution: '**\*.sln'
Shayki Abramczyk
  • 36,824
  • 16
  • 89
  • 114
hiddenUser
  • 35
  • 7

1 Answers1

1

You have an issue in the indentation of the Powershell script, this should works:

- task: PowerShell@2
  displayName: 'increment Version'
  inputs:
    targetType: 'inline'
    script: |
      function Increment-MajorVersion(){
        [int[]]$build  = $(Build.BuildNumber) -split "."
        [int]$major = $build[0]
        [int]$minor = $build[1]
        [int]$patch = $build[2]
        $major += 1
        [string]$buildVersion = "$($major).$($minor).$($patch)"
        return $buildVersion
      }

      function Increment-MinorVersion(){
        [int[]]$build  = $(Build.BuildNumber) -split "."
        [int]$major = $build[0]
        [int]$minor = $build[1]
        [int]$patch = $build[2]
        $minor += 1
        [string]$buildVersion = "$($major).$($minor).$($patch)"
        return $buildVersion
      }

      function Increment-PatchVersion(){
        [int[]]$build  = $(Build.BuildNumber) -split "."
        [int]$major = $build[0]
        [int]$minor = $build[1]
        [int]$patch = $build[2]
        $patch += 1
        [string]$buildVersion = "$($major).$($minor).$($patch)"
        return $buildVersion
      }

      if($(Build.SourceBranchName) -match "major"){
        [string]$buildVersion = Increment-MajorVersion
        Write-Host "##vso[task.setvariable variable=buildNumber]$buildVersion"
      }

      if($(Build.SourceBranchName) -match "feat"){
        [string]$buildVersion = Increment-MajorVersion
        Write-Host "##vso[task.setvariable variable=buildNumber]$buildVersion"
      }

      if($(Build.SourceBranchName) -match "patch"){
        [string]$buildVersion = Increment-MajorVersion
        Write-Host "##vso[task.setvariable variable=buildNumber]$buildVersion"
      }
Shayki Abramczyk
  • 36,824
  • 16
  • 89
  • 114
  • Do you mind telling me how you figured this out? Because I visited like a million online formatter and none helped me. – hiddenUser Aug 03 '23 at 11:30
  • 1
    A multi-line block must always be indented another level from its parent. Once you know, you spot it immediately. – jessehouwing Aug 03 '23 at 12:18
  • @hiddenUser when the script is "inline" is must indented under the `|`, in your case the script content was under the `s` in the `script`, and it's need to be indented under the `r`. – Shayki Abramczyk Aug 03 '23 at 12:43