trigger:
  - master
  - feat/*

variables:
  azureSubscriptionEndpoint: azure-newton
  azureContainerRegistry: newton.azurecr.io
  registryName: $(azureContainerRegistry)/$(Build.Repository.Name)
  imageTag: $(registryName):$(Build.BuildId)
  devTag: $(Build.Repository.Name):dev
  appName: newton-demo

pool:
  vmImage: 'ubuntu-latest'

steps:

# -------------
# Node.js Steps
# -------------

- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: npm install
  displayName: npm install

- script: npm run lint
  displayName: lint code

- script: npm run test
  displayName: run unit tests

- script: npm run build
  displayName: build library

- script: npm run demo:build
  displayName: build demo


# ----------------------------
# Docker Image: Build and Push
# ----------------------------

- script: |
    echo '##vso[task.setvariable variable=buildSha]'$(git rev-parse --short HEAD)''
    echo 'buildSha set to $(buildSha)'
  displayName: Get build git sha

- script: |
    docker build --tag $(imageTag)-$(buildSha) .
    docker tag $(imageTag)-$(buildSha) $(devTag)
  displayName: 'Docker: Build and tag image'

# Use the task to avoid embedding credentials in pipeline
- task: Docker@1
  displayName: 'Docker: login ACR'
  inputs:
    command: login
    azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
    azureContainerRegistry: $(azureContainerRegistry)

- script: docker push $(imageTag)-$(buildSha)
  displayName: 'Docker: Push image'

- script: docker logout $(azureContainerRegistry)
  displayName: 'Docker: logout ACR'

# ----------------------------
# Deploy to Azure App Services
# ----------------------------

- task: AzureWebAppContainer@1
  displayName: Deploy container as Azure Web App
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) # (master branch and succesful builds only)
  inputs:
    appName: $(appName)
    azureSubscription: $(azureSubscriptionEndpoint)
    imageName: $(imageTag)-$(buildSha)