From 55747ed47dd179a3da36aa283cd32da25d00018d Mon Sep 17 00:00:00 2001 From: celeron533 Date: Fri, 25 Oct 2019 23:09:12 +0800 Subject: [PATCH] Rewrite the Appveyor build pipeline - Backup the original appveyor.yml as appveyor.yml.obsolete - Fetch an official appveyor sample file as reference - Create a test scope appveyor pipeline --- appveyor.yml | 208 ++++++++++++++++-- appveyor.yml.obsolete | 24 +++ appveyor.yml.sample | 483 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 693 insertions(+), 22 deletions(-) create mode 100644 appveyor.yml.obsolete create mode 100644 appveyor.yml.sample diff --git a/appveyor.yml b/appveyor.yml index 91340e8a..c22c2085 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,22 +1,186 @@ -version: 1.0.{build} -image: Visual Studio 2017 -environment: - matrix: - - platform: x86 - configuration: Debug - - platform: x86 - configuration: Release -matrix: - fast_finish: false -nuget: - project_feed: true -before_build: -- cmd: nuget restore -build: - parallel: true - verbosity: normal -artifacts: -- path: shadowsocks-csharp\bin\x86\Release\Shadowsocks.exe - name: Shadowsocks-release.exe -- path: shadowsocks-csharp\bin\x86\Debug\Shadowsocks.exe - name: Shadowsocks-debug.exe + +# 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 \ No newline at end of file diff --git a/appveyor.yml.obsolete b/appveyor.yml.obsolete new file mode 100644 index 00000000..d23aa997 --- /dev/null +++ b/appveyor.yml.obsolete @@ -0,0 +1,24 @@ +# Created by wongsyrone + +version: 1.0.{build} +image: Visual Studio 2017 +environment: + matrix: + - platform: x86 + configuration: Debug + - platform: x86 + configuration: Release +matrix: + fast_finish: false +nuget: + project_feed: true +before_build: +- cmd: nuget restore +build: + parallel: true + verbosity: normal +artifacts: +- path: shadowsocks-csharp\bin\x86\Release\Shadowsocks.exe + name: Shadowsocks-release.exe +- path: shadowsocks-csharp\bin\x86\Debug\Shadowsocks.exe + name: Shadowsocks-debug.exe diff --git a/appveyor.yml.sample b/appveyor.yml.sample new file mode 100644 index 00000000..e3bd655a --- /dev/null +++ b/appveyor.yml.sample @@ -0,0 +1,483 @@ + +# 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