### This job synchronizes code from product repositories into the VMR (https://github.com/dotnet/dotnet)
### It synchronizes the content of the VMR to this new commit and pushes the changes

parameters:
- name: targetRef
  displayName: Target revision of dotnet/installer to synchronize
  type: string
  default: $(Build.SourceVersion)

- name: vmrBranch
  displayName: dotnet/dotnet branch to use
  type: string
  default: $(Build.SourceBranch)

- name: noPush
  displayName: Don't push changes to dotnet/dotnet
  type: boolean
  default: false

jobs:
- job: Synchronize_VMR
  displayName: Synchronize dotnet/dotnet
  timeoutInMinutes: 120
  variables:
  - template: /eng/common/templates/variables/pool-providers.yml
  - name: vmrPath
    value: $(Agent.BuildDirectory)/vmr
  - ${{ if not(parameters.noPush) }}:
    - ${{ if and( eq(variables['System.TeamProject'], 'internal'), or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), eq(variables['Build.SourceBranch'], 'refs/heads/main'))) }}:
      - group: DotNetBot-GitHub
      - group: DotNetBot-GitHub-No-Scopes
      - name: vmrPublicUrl
        value: https://github.com/dotnet/dotnet
    - ${{ if and( eq(variables['System.TeamProject'], 'internal'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/')) }}:
      - group: DotNetBot-AzDO-PAT
      - name: vmrInternalUrl
        value: https://dnceng@dev.azure.com/dnceng/internal/_git/dotnet-dotnet
  
  pool:
    ${{ if eq(variables['System.TeamProject'], 'public') }}:
      name: $(DncEngPublicBuildPool)
      demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open
    ${{ if eq(variables['System.TeamProject'], 'internal') }}:
      name: $(DncEngInternalBuildPool)
      demands: ImageOverride -equals Build.Ubuntu.2004.Amd64

  steps:
  - template: ../steps/vmr-prepare.yml
    parameters:
      vmrBranch: ${{ parameters.vmrBranch }}
      isBuiltFromVmr: false

  - template: ../steps/vmr-pull-updates.yml
    parameters:
      vmrPath: $(vmrPath)
      vmrBranch: ${{ parameters.vmrBranch }}
      targetRef: ${{ parameters.targetRef }}

  - script: |
      git config --global user.name "dotnet-maestro[bot]"
      git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com"
    displayName: Set git author to dotnet-maestro[bot]

  
  - ${{ if and(not(parameters.noPush), not(in(variables['Build.Reason'], 'PullRequest')), eq(variables['System.TeamProject'], 'internal')) }}:
    # Push main and release branches to the public VMR
    - ${{ if or(eq(parameters.vmrBranch, 'main'), startsWith(parameters.vmrBranch, 'release/')) }}:
      - script: >
          ./.dotnet/dotnet darc vmr push
          --vmr '$(vmrPath)'
          --commit-verification-pat '$(BotAccount-dotnet-maestro-bot-no-scopes-PAT)'
          --branch '${{ parameters.vmrBranch }}'
          --remote-url '$(vmrPublicUrl)'
          --github-pat '$(BotAccount-dotnet-bot-repo-PAT)'
          --verbose
        displayName: Push changes to dotnet/dotnet (public)
        workingDirectory: $(Agent.BuildDirectory)/installer
  
    # Push internal/release branches to the internal VMR
    - ${{ if startsWith(parameters.vmrBranch, 'internal/release/') }}:
      - script: >
          ./.dotnet/dotnet darc vmr push
          --vmr '$(vmrPath)'
          --skip-commit-verification
          --branch '${{ parameters.vmrBranch }}'
          --remote-url '$(vmrInternalUrl)'
          --azdev-pat '$(dn-bot-dnceng-build-rw-code-rw)'
          --verbose
        displayName: Push changes to dotnet-dotnet (internal)
        workingDirectory: $(Agent.BuildDirectory)/installer