trigger:
  - master

stages:
- stage: Build
  displayName: 'Build Stage'
  jobs:
  - job: BuildJob
    displayName: 'Build Job'
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - task: Npm@1
      displayName: 'npm install'
      inputs:
        workingDir: WebhookNotification
        command: 'install'

    - task: Gulp@1
      displayName: 'gulp ts'
      inputs:
        gulpFile: 'WebhookNotification/gulpfile.js'
        targets: 'ts'

    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(Build.SourcesDirectory)'
        includeRootFolder: false
        archiveType: 'zip'
        archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 
        replaceExistingArchive: true

    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact: drop'
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'

- stage: Deploy
  displayName: 'Deploy Stage'
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: DeployJob
    displayName: 'Deploy package to npm'
    pool:
      vmImage: 'ubuntu-latest'
    environment: 'production'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: ExtractFiles@1
            displayName: 'Extract files'
            inputs:
              archiveFilePatterns: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
              destinationFolder: '$(System.DefaultWorkingDirectory)/package'

          - task: Npm@1
            displayName: 'npm publish'
            inputs:
              command: custom
              workingDir:  package/WebhookNotification
              verbose: false
              customCommand: 'publish -access public'
              customEndpoint: 'npm registry'
              publishEndpoint: 'npm registry'