# 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 # Build version format is taken from UI if it is not set # version: 1.0.{build} # # branches to build # branches: # # whitelist # only: # - master # - production # # blacklist # except: # - gh-pages #---------------------------------# # environment configuration # #---------------------------------# # Build worker image (VM template) image: Visual Studio 2017 # scripts that are called at very beginning, before repo cloning # init: # - git config --global core.autocrlf false # set clone depth clone_depth: 5 # clone entire repository history if not defined # environment variables environment: # my_var1: value1 # # 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== matrix: - platform: x86 configuration: Debug - platform: x86 configuration: Release # this is how to allow failing jobs in the matrix matrix: fast_finish: false # set this flag to immediately finish build once one of the jobs fails. # 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 # - '%LocalAppData%\NuGet\Cache' # NuGet < v3 - '%LocalAppData%\NuGet\v3-cache' # NuGet v3 # 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 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 # 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: normal # quiet|minimal|normal|detailed # scripts to run before build before_build: - cmd: nuget restore # 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: ps: | function CalculateHash($file) { $newLine = "`r`n" $text = (Split-Path $file -Leaf) + $newLine $text += 'MD5' + $newLine $text += (Get-FileHash $file -Algorithm MD5).Hash + $newLine $text += 'SHA-1' + $newLine $text += (Get-FileHash $file -Algorithm SHA1).Hash + $newLine $text += 'SHA-256' + $newLine $text += (Get-FileHash $file -Algorithm SHA256).Hash + $newLine $text += 'SHA-512' + $newLine $text += (Get-FileHash $file -Algorithm SHA512).Hash return $text } $WorkingFolder = "$env:APPVEYOR_BUILD_FOLDER\working" $ExeFileName = "Shadowsocks-$env:APPVEYOR_BUILD_VERSION-$env:CONFIGURATION.exe" $ExeFile = "$WorkingFolder\$ExeFileName" $ExeHashFile = "$Exefile.hash" New-Item $WorkingFolder -ItemType Directory -Force Copy-Item $env:APPVEYOR_BUILD_FOLDER\shadowsocks-csharp\bin\$env:PLATFORM\$env:CONFIGURATION\Shadowsocks.exe $WorkingFolder\Shadowsocks.exe Copy-Item $WorkingFolder\Shadowsocks.exe $ExeFile CalculateHash -file $Exefile | Out-File -FilePath $ExeHashFile Push-AppveyorArtifact $ExeFile Push-AppveyorArtifact $ExeHashFile # Create and deploy the release zip if ($env:configuration -eq 'Release') { $ReleaseFile = "$WorkingFolder\Shadowsocks.exe" $HashFile = "$ReleaseFile.hash" $ZipFile = "$WorkingFolder\Shadowsocks-$env:APPVEYOR_BUILD_VERSION.zip" $ZipHashFile = "$ZipFile.hash" # Calculate exe Hash and archieve both exe and hash to zip CalculateHash -file $ReleaseFile | Out-File -FilePath $hashFile 7z a $ZipFile $ReleaseFile 7z a $ZipFile $HashFile Push-AppveyorArtifact $ZipFile # Calculate zip Hash CalculateHash -file $ZipFile | Out-File -FilePath $ZipHashFile Push-AppveyorArtifact $ZipHashFile } # 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 #---------------------------------# # deployment configuration # #---------------------------------# # providers: Local, FTP, WebDeploy, AzureCS, AzureBlob, S3, NuGet, Environment # provider names are case-sensitive! deploy: # Deploy to GitHub Releases - provider: GitHub auth_token: secure: ZrRlVe3eWp1ccIVZcmFrI7vaCxwz5ewIMSmaPUTjMGyC1rVRlYm7nWWi6Pzkpe0A description: '%APPVEYOR_BUILD_VERSION%' artifact: Shadowsocks-%APPVEYOR_BUILD_VERSION%.zip, Shadowsocks-%APPVEYOR_BUILD_VERSION%.zip.hash draft: true prerelease: true on: branch: master # release from master branch only configuration: Release APPVEYOR_REPO_TAG: true # deploy on tag push only # # 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