trigger: none

parameters:
- name: UpdateMain
  displayName: |
    Update main branch.
  type: boolean
  default: true

- name: StartMainSDKCIRun
  displayName: |
    Kick off the main SDK CI docs run when manually running the pipeline
  type: boolean
  default: false

- name: ForceDailyUpdate
  displayName: |
    Force the daily branch update (includes starting daily branch run).
  type: boolean
  default: false

variables:
  - template: /eng/pipelines/templates/variables/globals.yml
  - template: /eng/pipelines/templates/variables/image.yml
jobs:
  - template: /eng/common/pipelines/templates/jobs/docindex.yml

  - job: UpdateDocsMsBuildConfig
    pool:
      name: $(LINUXPOOL)
      demands: ImageOverride -equals $(LINUXVMIMAGE)
    variables:
      DocRepoLocation: $(Pipeline.Workspace)/docs
      DocRepoOwner: MicrosoftDocs
      DocRepoName: azure-docs-sdk-python
    steps:
      # py2docfx requires Python >= 3.11
      - task: UsePythonVersion@0
        displayName: 'Use Python 3.11'
        inputs:
          versionSpec: '3.11'

      # Docs CI upgrades pip, wheel, and setuptools
      - pwsh: python -m pip install --upgrade pip wheel setuptools
        displayName: Update python tools for package verification

      # Sync docs repo onboarding files/folders
      - template: /eng/common/pipelines/templates/steps/sparse-checkout.yml
        parameters:
          SkipCheckoutNone: true
          Paths:
            - ci-configs/
            - metadata/
            - docs-ref-mapping/
            - docs-ref-services/
          Repositories:
            - Name: $(DocRepoOwner)/$(DocRepoName)
              WorkingDirectory: $(DocRepoLocation)

      - template: /eng/pipelines/templates/steps/install-rex-validation-tool.yml

      - template: /eng/common/pipelines/templates/steps/set-default-branch.yml
        parameters:
          WorkingDirectory: $(DocRepoLocation)

      # Updating main is the default reason to kick off manual builds of the docIndex run.
      # Manual builds of docIndex are typically done to update Main when certain updates are
      # made. These updates include new libraries and CSV updates in azure-sdk which, depending
      # on the column(s) updated can cause anything from package deprecation to service level
      # readme or ToC updates.
      - ${{ if or(eq(variables['Build.Reason'], 'Schedule'), parameters.UpdateMain) }}:
        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Verify-RequiredDocsJsonMembers.ps1
            arguments: >-
              -DocRepoLocation $(DocRepoLocation)
          displayName: Verify Required Docs Json Members

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Update-DocsMsPackageMonikers.ps1
            arguments: -DocRepoLocation $(DocRepoLocation)
          displayName: Move deprecated packages to legacy moniker

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Update-DocsMsPackages.ps1
            arguments: -DocRepoLocation $(DocRepoLocation)
          displayName: Update Docs Onboarding for main branch

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Service-Level-Readme-Automation.ps1
            arguments: -DocRepoLocation $(DocRepoLocation)
          displayName: Generate Service Level Readme for main branch

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Update-DocsMsToc.ps1
            arguments: >-
              -DocRepoLocation $(DocRepoLocation)
              -OutputLocation $(DocRepoLocation)/docs-ref-mapping/reference-unified.yml
          displayName: Generate ToC for main branch

        # Push changes to docs repo
        - template: /eng/common/pipelines/templates/steps/git-push-changes.yml
          parameters:
            BaseRepoBranch: $(DefaultBranch)
            BaseRepoOwner: $(DocRepoOwner)
            CommitMsg: "Update docs CI configuration Build: $(System.CollectionUri)$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)"
            TargetRepoName: $(DocRepoName)
            TargetRepoOwner: $(DocRepoOwner)
            WorkingDirectory: $(DocRepoLocation)

        - task: AzureCLI@2
          displayName: Queue Docs CI build for main
          condition: and(succeeded(), or(eq(variables['Build.Reason'], 'Schedule'), eq(${{ parameters.StartMainSDKCIRun }}, true)))
          inputs:
            azureSubscription: msdocs-apidrop-connection
            scriptType: pscore
            scriptLocation: inlineScript
            inlineScript: |
              # Resource here is the Devops API scope
              $accessToken = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv
              $buildParamJson = (@{ params = (Get-Content ./eng/docsSDKCIConfig.json -Raw) -replace '%%DocsBranchName%%', "main" } | ConvertTo-Json)
              eng/common/scripts/Queue-Pipeline.ps1 `
                -Organization "apidrop" `
                -Project "Content%20CI" `
                -DefinitionId 5533 `
                -BuildParametersJson $buildParamJson `
                -BearerToken $accessToken

      # The scenario for running a Manual build is normally only for the main updates. The daily build
      # should really only get kicked off for scheduled runs.
      - ${{ if or(eq(variables['Build.Reason'], 'Schedule'), parameters.ForceDailyUpdate) }}:
        # Prepare daily docs CI
        - template: /eng/common/pipelines/templates/steps/set-daily-docs-branch-name.yml
          parameters:
            DailyBranchVariableName: DailyDocsBranchName
        - pwsh: |
            $ErrorActionPreference = "Continue"
            git checkout "origin/$(DailyDocsBranchName)" 2>&1 | Out-Null
            $LASTEXITCODE = 0 # This ignores any error from git checkout
            git status
          displayName: Checkout daily branch if it exists
          workingDirectory: $(DocRepoLocation)

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Verify-RequiredDocsJsonMembers.ps1
            arguments: >-
              -DocRepoLocation $(DocRepoLocation)
          displayName: Verify Required Docs Json Members

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Update-DocsMsPackageMonikers.ps1
            arguments: -DocRepoLocation $(DocRepoLocation)
          displayName: Move deprecated packages to legacy moniker

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Update-DocsMsPackages.ps1
            arguments: >-
              -DocRepoLocation $(DocRepoLocation)
              -PackageSourceOverride "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
          displayName: Update Docs Onboarding for Daily docs

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Service-Level-Readme-Automation.ps1
            arguments: -DocRepoLocation $(DocRepoLocation)
          displayName: Generate Service Level Readme for Daily docs

        - task: Powershell@2
          inputs:
            pwsh: true
            filePath: eng/common/scripts/Update-DocsMsToc.ps1
            arguments: >-
              -DocRepoLocation $(DocRepoLocation)
              -OutputLocation $(DocRepoLocation)/docs-ref-mapping/reference-unified.yml
          displayName: Generate ToC for Daily Docs

        - template: /eng/common/pipelines/templates/steps/git-push-changes.yml
          parameters:
            BaseRepoBranch: $(DailyDocsBranchName)
            BaseRepoOwner: $(DocRepoOwner)
            CommitMsg: "Update targeting packages based on release metadata. (Daily docs)"
            TargetRepoName: $(DocRepoName)
            TargetRepoOwner: $(DocRepoOwner)
            WorkingDirectory: $(DocRepoLocation)
            ScriptDirectory: $(Build.SourcesDirectory)/eng/common/scripts
            PushArgs: -f

        - task: AzureCLI@2
          displayName: Queue Docs CI build for daily branch
          inputs:
            azureSubscription: msdocs-apidrop-connection
            scriptType: pscore
            scriptLocation: inlineScript
            inlineScript: |
              # Resource here is the Devops API scope
              $accessToken = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv
              $buildParamJson = (@{ params = (Get-Content ./eng/docsSDKCIConfig.json -Raw) -replace '%%DocsBranchName%%', "$(DailyDocsBranchName)" } | ConvertTo-Json)
              eng/common/scripts/Queue-Pipeline.ps1 `
                -Organization "apidrop" `
                -Project "Content%20CI" `
                -DefinitionId 5533 `
                -BuildParametersJson $buildParamJson `
                -BearerToken $accessToken
