# Don't run Azure when a branch is updated, only when a PR is updated.
# Prevents double builds when a PR is made from the main repo and not a fork.
trigger: none
pr:
  autoCancel: true
  branches:
    include:
    - '*'

pool:
  # self-hosted agent on Windows 10 1903 environment
  # includes newer Docker engine with LCOW enabled, new build of LCOW image
  # includes Ruby 2.5, Go 1.10, Node.js 10.10
  name: Default

variables:
  NAMESPACE: puppet
  CONTAINER_NAME: r10k
  CONTAINER_BUILD_PATH: .
  LINT_IGNORES: DL3008 DL3018 DL4000 DL4001 DL3028

workspace:
  clean: resources

steps:
- checkout: self  # self represents the repo where the initial Pipelines YAML file was found
  clean: true  # whether to fetch clean each time

- powershell: |
    $gemfile = Join-Path -Path (Get-Location) -ChildPath 'docker/Gemfile'
    $gempath = Join-Path -Path (Get-Location) -ChildPath 'docker/.bundle/gems'
    bundle config --local gemfile $gemfile
    bundle config --local path $gempath
    bundle install
  displayName: Fetch Dependencies
  name: fetch_deps

- powershell: |
    . "$(bundle show pupperware)/ci/build.ps1"
    Write-HostDiagnostics
  displayName: Diagnostic Host Information
  name: hostinfo

- powershell: |
    . "$(bundle show pupperware)/ci/build.ps1"
    Lint-Dockerfile -Name $ENV:CONTAINER_NAME -Ignore ($ENV:LINT_IGNORES -split ' ')
  displayName: Lint $(CONTAINER_NAME) Dockerfile
  name: lint_dockerfile

- powershell: |
    . "$(bundle show pupperware)/ci/build.ps1"
    Build-Container -Name $ENV:CONTAINER_NAME -Namespace $ENV:NAMESPACE -PathOrUri $ENV:CONTAINER_BUILD_PATH
  displayName: Build $(CONTAINER_NAME) Container
  name: build_container

- powershell: |
    . "$(bundle show pupperware)/ci/build.ps1"
    Initialize-TestEnv
  displayName: Prepare Test Environment
  name: test_prepare

- powershell: |
    . "$(bundle show pupperware)/ci/build.ps1"
    Invoke-ContainerTest -Name $ENV:CONTAINER_NAME -Namespace $ENV:NAMESPACE
  displayName: Test $(CONTAINER_NAME)
  name: test_container

- task: PublishTestResults@2
  displayName: Publish $(CONTAINER_NAME) test results
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: 'docker/TEST-*.xml'
    testRunTitle: $(CONTAINER_NAME) Test Results

- powershell: |
    . "$(bundle show pupperware)/ci/build.ps1"
    Clear-BuildState -Name $ENV:CONTAINER_NAME -Namespace $ENV:NAMESPACE
  displayName: Container Cleanup
  timeoutInMinutes: 3
  condition: always()