Browse Source

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
tags/4.1.8.0
celeron533 4 years ago
parent
commit
55747ed47d
3 changed files with 693 additions and 22 deletions
  1. +186
    -22
      appveyor.yml
  2. +24
    -0
      appveyor.yml.obsolete
  3. +483
    -0
      appveyor.yml.sample

+ 186
- 22
appveyor.yml View File

@@ -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

+ 24
- 0
appveyor.yml.obsolete View File

@@ -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

+ 483
- 0
appveyor.yml.sample View File

@@ -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

Loading…
Cancel
Save