# .NET Desktop

# Build and run tests for .NET Desktop or Windows classic desktop solutions.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net

trigger:
- master

pool:
  name: Default
  vmImage: 'windows-latest'

variables:
- group: main-pipeline-keys
- name: solution
  value: 'Wabbajack.sln'
- name: buildPlatform
  value: 'x64'
- name: buildConfiguration
  value: 'Debug'

steps:
- checkout: self
  clean: true
  submodules: true
  
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: DotNetCoreCLI@2
  displayName: "Build Release"
  inputs:
    command: 'build'
    projects: 'Wabbajack\Wabbajack.csproj'
    arguments: '--runtime win10-x64 --configuration Release /p:Platform=x64'
- task: DotNetCoreCLI@2
  displayName: "Test Release"
  inputs:
    command: 'test'
    projects: '**/*.Test.csproj'
    arguments: '/p:Platform=x64'

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: 'Wabbajack\Wabbajack.csproj'
    zipAfterPublish: false
    modifyOutputPath: false
    arguments: '--runtime win10-x64 --configuration Release /p:Platform=x64 -o $(System.DefaultWorkingDirectory)/PublishApp --self-contained'

- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: 'Wabbajack.Launcher\Wabbajack.Launcher.csproj'
    zipAfterPublish: false
    modifyOutputPath: false
    arguments: '--runtime win10-x64 --configuration Release /p:Platform=x64 -o $(System.DefaultWorkingDirectory)/PublishLauncher --self-contained'  

- task: DownloadSecureFile@1
  inputs:
    secureFile: 'CertFile.p12'
- task: codesigning@2
  displayName: "Sign main app"
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
  inputs:
    secureFileId: 'CertFile.p12'
    signCertPassword: '$(CertPassword)'
    files: '$(System.DefaultWorkingDirectory)/PublishApp/*abbajack*.exe'
    hashingAlgorithm: 'SHA256'
    description: 'Wabbajack Modlist Installer'

- task: codesigning@2
  displayName: "Sign launcher"
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
  inputs:
    secureFileId: 'CertFile.p12'
    signCertPassword: '$(CertPassword)'
    files: '$(System.DefaultWorkingDirectory)/PublishLauncher/*abbajack*.exe'
    hashingAlgorithm: 'SHA256'
    description: 'Wabbajack Modlist Installer Launcher'    



#- task: CmdLine@2
#  inputs:
#    script: 'pip install requests'
#- task: PythonScript@0
#  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
#  inputs:
#    scriptSource: 'inline'
#    script: |
#      import requests, sys
#      
#      url = 'https://www.virustotal.com/vtapi/v2/file/scan'
#      
#      params = {'apikey': sys.argv[1]}
#      
#      files = {'file': ('Wabbajack.exe', open(sys.argv[2], 'rb'))}
#      
#      response = requests.post(url, files=files, params=params)
#      
#      print(response.json())
#    arguments: '$(VirusTotalAPIKey) $(System.DefaultWorkingDirectory)/Wabbajack/bin/x64/Debug/Wabbajack.exe'
#



- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)/PublishApp'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/Wabbajack.zip'
    replaceExistingArchive: true
    verbose: true

- task: PublishBuildArtifacts@1
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)/Wabbajack.zip'
    ArtifactName: 'Wabbajack.zip'
    publishLocation: 'Container'

- task: PublishBuildArtifacts@1
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/PublishLauncher/Wabbajack.exe'
    ArtifactName: 'Wabbajack.exe'
    publishLocation: 'Container'