
# Notes:
#   - Minimal appveyor.yml file is an empty file. All sections are optional.
#   - Indent each level of configuration with 2 spaces. Do not use tabs!
#   - All section names are case-sensitive.
#   - Section names should be unique on each level.

#---------------------------------#
#      general configuration      #
#---------------------------------#

# version format
version: 1.0.{build}

# you can use {branch} name in version format too
# version: 1.0.{build}-{branch}

# branches to build
branches:
  # whitelist
  only:
    - master
    - production

  # blacklist
  except:
    - gh-pages

# Do not build on tags (GitHub and BitBucket)
skip_tags: true

# Start builds on tags only (GitHub and BitBucket)
skip_non_tags: true

# Skipping commits with particular message or from specific user
skip_commits:
  message: /Created.*\.(png|jpg|jpeg|bmp|gif)/      # Regex for matching commit message
  author: John                                      # Commit author's username, name, email or regexp maching one of these.

# Including commits with particular message or from specific user
only_commits:
  message: /build/                # Start a new build if message contains 'build'
  author: jack@company.com        # Start a new build for commit of user with email jack@company.com

# Skipping commits affecting specific files (GitHub only). More details here: /docs/appveyor-yml
#skip_commits:
#  files:
#    - docs/*
#    - '**/*.html'

# Including commits affecting specific files (GitHub only). More details here: /docs/appveyor-yml
#only_commits:
#  files:
#    - Project-A/
#    - Project-B/

# Do not build feature branch with open Pull Requests
skip_branch_with_pr: true

# Maximum number of concurrent jobs for the project
max_jobs: 1

#---------------------------------#
#    environment configuration    #
#---------------------------------#

# Build worker image (VM template)
image: Visual Studio 2015

# scripts that are called at very beginning, before repo cloning
init:
  - git config --global core.autocrlf input

# clone directory
clone_folder: c:\projects\myproject

# fetch repository as zip archive
shallow_clone: true                 # default is "false"

# set clone depth
clone_depth: 5                      # clone entire repository history if not defined

# setting up etc\hosts file
hosts:
  queue-server: 127.0.0.1
  db.server.com: 127.0.0.2

# environment variables
environment:
  my_var1: value1
  my_var2: value2
  # this is how to set encrypted variable. Go to "Settings" -> "Encrypt YAML" page in account menu to encrypt data.
  my_secure_var1:
    secure: FW3tJ3fMncxvs58/ifSP7w==

# environment:
#  global:
#    connection_string: server=12;password=13;
#    service_url: https://127.0.0.1:8090
#
#  matrix:
#  - db: mysql
#    provider: mysql
#
#  - db: mssql
#    provider: mssql
#    password:
#      secure: $#(JFDA)jQ@#$

# this is how to allow failing jobs in the matrix
matrix:
  fast_finish: true     # set this flag to immediately finish build once one of the jobs fails.
  allow_failures:
    - platform: x86
      configuration: Debug
    - platform: x64
      configuration: Release

# exclude configuration from the matrix. Works similarly to 'allow_failures' but build not even being started for excluded combination.
  exclude:
    - platform: x86
      configuration: Debug

# build cache to preserve files/folders between builds
cache:
  - packages -> **\packages.config  # preserve "packages" directory in the root of build folder but will reset it if packages.config is modified
  - projectA\libs
  - node_modules                    # local npm modules
  - '%LocalAppData%\NuGet\Cache'    # NuGet < v3
  - '%LocalAppData%\NuGet\v3-cache' # NuGet v3

# enable service required for build/tests
services:
  - mssql2014           # start SQL Server 2014 Express
  - mssql2014rs         # start SQL Server 2014 Express and Reporting Services
  - mssql2012sp1        # start SQL Server 2012 SP1 Express
  - mssql2012sp1rs      # start SQL Server 2012 SP1 Express and Reporting Services
  - mssql2008r2sp2      # start SQL Server 2008 R2 SP2 Express
  - mssql2008r2sp2rs    # start SQL Server 2008 R2 SP2 Express and Reporting Services
  - mysql               # start MySQL 5.6 service
  - postgresql          # start PostgreSQL 9.5 service
  - iis                 # start IIS
  - msmq                # start Queuing services
  - mongodb             # start MongoDB

# scripts that run after cloning repository
install:
  # by default, all script lines are interpreted as batch
  - echo This is batch
  # to run script as a PowerShell command prepend it with ps:
  - ps: Write-Host 'This is PowerShell'
  # batch commands start from cmd:
  - cmd: echo This is batch again
  - cmd: set MY_VAR=12345

# enable patching of AssemblyInfo.* files
assembly_info:
  patch: true
  file: AssemblyInfo.*
  assembly_version: "2.2.{build}"
  assembly_file_version: "{version}"
  assembly_informational_version: "{version}"


# Automatically register private account and/or project AppVeyor NuGet feeds.
nuget:
  account_feed: true
  project_feed: true
  disable_publish_on_pr: true     # disable publishing of .nupkg artifacts to account/project feeds for pull request builds
  publish_wap_octopus: true       # disable publishing of Octopus Deploy .nupkg artifacts to account/project feeds

#---------------------------------#
#       build configuration       #
#---------------------------------#

# build platform, i.e. x86, x64, Any CPU. This setting is optional.
platform: Any CPU

# to add several platforms to build matrix:
#platform:
#  - x86
#  - Any CPU

# build Configuration, i.e. Debug, Release, etc.
configuration: Release

# to add several configurations to build matrix:
#configuration:
#  - Debug
#  - Release

# Build settings, not to be confused with "before_build" and "after_build".
# "project" is relative to the original build directory and not influenced by directory changes in "before_build".
build:
  parallel: true                  # enable MSBuild parallel builds
  project: MyTestAzureCS.sln      # path to Visual Studio solution or project
  publish_wap: true               # package Web Application Projects (WAP) for Web Deploy
  publish_wap_xcopy: true         # package Web Application Projects (WAP) for XCopy deployment
  publish_wap_beanstalk: true     # Package Web Applications for AWS Elastic Beanstalk deployment
  publish_wap_octopus: true       # Package Web Applications for Octopus deployment
  publish_azure_webjob: true      # Package Azure WebJobs for Zip Push deployment
  publish_azure: true             # package Azure Cloud Service projects and push to artifacts
  publish_aspnet_core: true       # Package ASP.NET Core projects
  publish_core_console: true      # Package .NET Core console projects
  publish_nuget: true             # package projects with .nuspec files and push to artifacts
  publish_nuget_symbols: true     # generate and publish NuGet symbol packages
  include_nuget_references: true  # add -IncludeReferencedProjects option while packaging NuGet artifacts

  # MSBuild verbosity level
  verbosity: quiet|minimal|normal|detailed


# scripts to run before build
before_build:

# to run your custom scripts instead of automatic MSBuild
build_script:

# scripts to run after build (working directory and environment changes are persisted from the previous steps)
after_build:

# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services)
before_package:

# to disable automatic builds
#build: off

#---------------------------------#
#       tests configuration       #
#---------------------------------#

# to run tests against only selected assemblies and/or categories
test:
  assemblies:
    only:
      - asm1.dll
      - asm2.dll

  categories:
    only:
      - UI
      - E2E

# to run tests against all except selected assemblies and/or categories
#test:
#  assemblies:
#    except:
#      - asm1.dll
#      - asm2.dll
#
#  categories:
#    except:
#      - UI
#      - E2E

# to run tests from different categories as separate jobs in parallel
#test:
#  categories:
#    - A            # A category common for all jobs
#    - [UI]         # 1st job
#    - [DAL, BL]    # 2nd job

# scripts to run before tests (working directory and environment changes are persisted from the previous steps such as "before_build")
before_test:
  - echo script1
  - ps: Write-Host "script1"

# to run your custom scripts instead of automatic tests
test_script:
  - echo This is my custom test script

# scripts to run after tests
after_test:

# to disable automatic tests
#test: off


#---------------------------------#
#      artifacts configuration    #
#---------------------------------#

artifacts:

  # pushing a single file
  - path: test.zip

  # pushing a single file with environment variable in path and "Deployment name" specified
  - path: MyProject\bin\$(configuration)
    name: myapp

  # pushing entire folder as a zip archive
  - path: logs

  # pushing all *.nupkg files in build directory recursively
  - path: '**\*.nupkg'


#---------------------------------#
#     deployment configuration    #
#---------------------------------#

# providers: Local, FTP, WebDeploy, AzureCS, AzureBlob, S3, NuGet, Environment
# provider names are case-sensitive!
deploy:

    # FTP deployment provider settings
  - provider: FTP
    protocol: ftp|ftps|sftp
    host: ftp.myserver.com
    username: admin
    password:
      secure: eYKZKFkkEvFYWX6NfjZIVw==
    folder:
    application:
    active_mode: false
    beta: true      # enable alternative FTP library for 'ftp' and 'ftps' modes
    debug: true     # show complete FTP log

    # Amazon S3 deployment provider settings
  - provider: S3
    access_key_id:
      secure: ABcd==
    secret_access_key:
      secure: ABcd==
    bucket: my_bucket
    folder:
    artifact:
    set_public: false

    # Azure Blob storage deployment provider settings
  - provider: AzureBlob
    storage_account_name:
      secure: ABcd==
    storage_access_key:
      secure: ABcd==
    container: my_container
    folder:
    artifact:

    # Web Deploy deployment provider settings
  - provider: WebDeploy
    server: http://www.deploy.com/myendpoint
    website: mywebsite
    username: user
    password:
      secure: eYKZKFkkEvFYWX6NfjZIVw==
    ntlm: false
    remove_files: false
    app_offline: false
    do_not_use_checksum: true           # do not use check sum for comparing source and destination files. By default checksums are used.
    sync_retry_attempts: 2              # sync attempts, max
    sync_retry_interval: 2000           # timeout between sync attempts, milliseconds
    aspnet_core: true                   # artifact zip contains ASP.NET Core application
    aspnet_core_force_restart: true     # poke app's web.config before deploy to force application restart
    skip_dirs: \\App_Data
    skip_files: web.config
    on:
      branch: release
      platform: x86
      configuration: debug

    # Deploying to Azure Cloud Service
  - provider: AzureCS
    subscription_id:
      secure: fjZIVw==
    subscription_certificate:
      secure: eYKZKFkkEv...FYWX6NfjZIVw==
    storage_account_name: my_storage
    storage_access_key:
      secure: ABcd==
    service: my_service
    slot: Production
    target_profile: Cloud
    artifact: MyPackage.cspkg

    # Deploying to NuGet feed
  - provider: NuGet
    server: https://my.nuget.server/feed
    api_key:
      secure: FYWX6NfjZIVw==
    skip_symbols: false
    symbol_server: https://your.symbol.server/feed
    artifact: MyPackage.nupkg

    # Deploy to GitHub Releases
  - provider: GitHub
    artifact: /.*\.nupkg/           # upload all NuGet packages to release assets
    draft: false
    prerelease: false
    on:
      branch: master                # release from master branch only
      APPVEYOR_REPO_TAG: true       # deploy on tag push only

    # Deploying to a named environment
  - provider: Environment
    name: staging
    on:
      branch: staging
      env_var1: value1
      env_var2: value2

# scripts to run before deployment
before_deploy:

# scripts to run after deployment
after_deploy:

# to run your custom scripts instead of provider deployments
deploy_script:

# to disable deployment
#deploy: off

#---------------------------------#
#        global handlers          #
#---------------------------------#

# on successful build
on_success:
  - do something

# on build failure
on_failure:
  - do something

# after build failure or success
on_finish:
  - do something


#---------------------------------#
#         notifications           #
#---------------------------------#

notifications:

  # Email
  - provider: Email
    to:
      - user1@email.com
      - user2@email.com
    subject: 'Build {{status}}'                  # optional
    message: "{{message}}, {{commitId}}, ..."    # optional
    on_build_status_changed: true

  # HipChat
  - provider: HipChat
    auth_token:
      secure: RbOnSMSFKYzxzFRrxM1+XA==
    room: ProjectA
    template: "{message}, {commitId}, ..."

  # Slack
  - provider: Slack
    incoming_webhook: http://incoming-webhook-url

  # ...or using auth token

  - provider: Slack
    auth_token:
      secure: kBl9BlxvRMr9liHmnBs14A==
    channel: development
    template: "{message}, {commitId}, ..."

  # Campfire
  - provider: Campfire
    account: appveyor
    auth_token:
      secure: RifLRG8Vfyol+sNhj9u2JA==
    room: ProjectA
    template: "{message}, {commitId}, ..."

  # Webhook
  - provider: Webhook
    url: http://www.myhook2.com
    headers:
      User-Agent: myapp 1.0
      Authorization:
        secure: GhD+5xhLz/tkYY6AO3fcfQ==
    on_build_success: false
    on_build_failure: true
    on_build_status_changed: true
