forked from ogham/rust-ansi-term
-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #46 from rivy/add.appveyor
Add AppVeyor CI configuration
- Loading branch information
Showing
1 changed file
with
162 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
# spell-checker:words POSIX repo SDK SDKs toolchain toolchains | ||
# spell-checker:ignore ARCH ABI BACKTRACE BINDIR cl COMNTOOLS dllcrt findstr maint MINGW MINGWDIR mkdir MSVC MSYS rustc rustlib rustup targetting USERPROFILE vcvarsall | ||
|
||
version: "{build} ~ {branch}" | ||
|
||
branches: | ||
except: | ||
- gh-pages | ||
|
||
os: Visual Studio 2015 | ||
|
||
artifacts: | ||
# - path: target\%TARGET%\debug\....exe | ||
# name: ....exe | ||
|
||
matrix: | ||
allow_failures: | ||
- CHANNEL: nightly | ||
# - ABI: gnu | ||
|
||
environment: | ||
global: | ||
FEATURES: | ||
BUILD_OPTIONS: | ||
TEST_OPTIONS: "--no-fail-fast" | ||
|
||
matrix: | ||
# minimum version | ||
- CHANNEL: 1.17.0 | ||
ARCH: i686 | ||
ABI: msvc | ||
# "msvc" ABI | ||
- CHANNEL: stable | ||
ARCH: i686 | ||
ABI: msvc | ||
- CHANNEL: stable | ||
ARCH: x86_64 | ||
ABI: msvc | ||
# - CHANNEL: beta | ||
# ARCH: i686 | ||
# ABI: msvc | ||
# - CHANNEL: beta | ||
# ARCH: x86_64 | ||
# ABI: msvc | ||
- CHANNEL: nightly | ||
ARCH: i686 | ||
ABI: msvc | ||
- CHANNEL: nightly | ||
ARCH: x86_64 | ||
ABI: msvc | ||
# "gnu" ABI | ||
- CHANNEL: stable | ||
ARCH: i686 | ||
ABI: gnu | ||
- CHANNEL: stable | ||
ARCH: x86_64 | ||
ABI: gnu | ||
# - CHANNEL: beta | ||
# ARCH: i686 | ||
# ABI: gnu | ||
# - CHANNEL: beta | ||
# ARCH: x86_64 | ||
# ABI: gnu | ||
# - CHANNEL: nightly | ||
# ARCH: i686 | ||
# ABI: gnu | ||
# - CHANNEL: nightly | ||
# ARCH: x86_64 | ||
# ABI: gnu | ||
# # * specific gnu compilers | ||
# - CHANNEL: stable | ||
# ARCH: i686 | ||
# ABI: gnu | ||
# MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.2/threads-win32/dwarf/i686-4.9.2-release-win32-dwarf-rt_v4-rev4.7z/download | ||
# MINGW_ARCHIVE: i686-4.9.2-release-win32-dwarf-rt_v4-rev4.7z | ||
# - CHANNEL: stable | ||
# ARCH: x86_64 | ||
# ABI: gnu | ||
# MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.3.0/threads-posix/seh/x86_64-7.3.0-release-posix-seh-rt_v5-rev0.7z/download#mingw-w64-x86_64-7.3.0-posix-seh.7z | ||
|
||
install: | ||
# force branch checkout (if knowable), then reset to the specific commit ## (can be needed for accurate code coverage info) | ||
# * this allows later apps to see the branch name using standard `git branch` operations, yet always builds the correct specific commit | ||
# * ref: <https://github.com/appveyor/ci/issues/1606>[`@`](https://archive.is/RVpnF) | ||
- if DEFINED APPVEYOR_REPO_BRANCH if /I "%APPVEYOR_REPO_SCM%"=="git" ( git checkout "%APPVEYOR_REPO_BRANCH%" 2>NUL & git reset --hard "%APPVEYOR_REPO_COMMIT%" ) | ||
# ensure CWD is project main directory | ||
- cd "%APPVEYOR_BUILD_FOLDER%" | ||
# create a working area | ||
- ps: if ( ! $env:CI_TEMP_DIR ) { $env:CI_TEMP_DIR = "${env:TEMP}\${env:APPVEYOR_JOB_ID}" ; mkdir -force $env:CI_TEMP_DIR | out-null } | ||
|
||
# define the TARGET host | ||
- set "TARGET=%ARCH%-pc-windows-%ABI%" | ||
|
||
# show relevant environment settings | ||
- ps: ('CHANNEL', 'ARCH', 'ABI', 'FEATURES', 'BUILD_OPTIONS', 'TEST_OPTIONS', 'TARGET') |% { write-host -f yellow "$_=$(get-content -ea silent env:/$_)" } | ||
|
||
# rust installation | ||
# * install `rust` via `rustup` | ||
- appveyor DownloadFile "https://win.rustup.rs/" -FileName "%CI_TEMP_DIR%\rustup-init.exe" | ||
- call "%CI_TEMP_DIR%\rustup-init.exe" -y --default-toolchain %CHANNEL% --default-host %TARGET% --no-modify-path >NUL | ||
- set "PATH=%PATH%;%USERPROFILE%\.cargo\bin" | ||
- ps: $env:TOOLCHAIN = $("$(rustup show active-toolchain)" -split '\s+')[0] | ||
# * set RUST_BACKTRACE for enhanced error messages | ||
- set RUST_BACKTRACE=1 | ||
# * show rust versions | ||
- rustc -vV | ||
- cargo -vV | ||
|
||
# "gnu" ABI setup | ||
# * use the system MinGW/MSYS if we can | ||
- if /i "%ABI%"=="gnu" set MSYS_BINDIR=C:\msys64\usr\bin | ||
- if /i "%ABI%"=="gnu" if /i "%ARCH%"=="i686" set "MSYS_BITS=32" | ||
- if /i "%ABI%"=="gnu" if /i "%ARCH%"=="x86_64" set "MSYS_BITS=64" | ||
- if defined MSYS_BITS set "MSYS_MINGWDIR=C:\msys64\mingw%MSYS_BITS%" | ||
- if defined MSYS_MINGWDIR set "MSYS_BINDIR=C:\msys64\usr\bin" | ||
## * workaround for rust-lang/rust#47048 / rust-lang/rust#53454 ## !maint: remove when resolved | ||
- if /i "%ABI%"=="gnu" if /i "%ARCH%"=="i686" if not DEFINED MINGW_URL set "MINGW_URL=https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/8.1.0/threads-posix/dwarf/i686-8.1.0-release-posix-dwarf-rt_v6-rev0.7z" | ||
- if /i "%ABI%"=="gnu" if /i "%ARCH%"=="x86_64" if not DEFINED MINGW_URL set "MINGW_URL=https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/Personal Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z" | ||
## (end workaround) | ||
# * specific MinGW, if specified | ||
- ps: if ( ! $env:MINGW_ARCHIVE -and $env:MINGW_URL ) { $env:MINGW_ARCHIVE = $($([URI]$env:MINGW_URL).fragment).TrimStart('#') } | ||
- ps: if ( ! $env:MINGW_ARCHIVE -and $env:MINGW_URL ) { $env:MINGW_ARCHIVE = $([URI]$env:MINGW_URL).segments[-1] } | ||
- if defined MINGW_ARCHIVE curl --insecure -fsSL "%MINGW_URL%" -o "%CI_TEMP_DIR%\%MINGW_ARCHIVE%" | ||
- if defined MINGW_ARCHIVE mkdir "%CI_TEMP_DIR%\MinGW" >NUL | ||
- if defined MINGW_ARCHIVE 7z x -y "%CI_TEMP_DIR%\%MINGW_ARCHIVE%" -o"%CI_TEMP_DIR%\MinGW" >NUL | ||
- if defined MINGW_ARCHIVE set "MSYS_MINGWDIR=%CI_TEMP_DIR%\MinGW\mingw%MSYS_BITS%" | ||
- if defined MINGW_ARCHIVE set "MSYS_BINDIR=%MSYS_MINGWDIR%\bin" | ||
# * MinGW/MSYS PATH setup | ||
- if defined MSYS_MINGWDIR set PATH=%MSYS_MINGWDIR%\%ARCH%-w64-mingw32\bin;%MSYS_BINDIR%;%PATH% | ||
## * workaround for rust-lang/rust#47048 / rust-lang/rust#53454 ## !maint: remove when resolved | ||
# ** ref: <https://github.com/rust-lang/rust/issues/47048>, <https://github.com/rust-lang/rust/issues/53454> | ||
# ** egs: <https://github.com/pkgw/tectonic/commit/29686db533d8732d7d97fc94270ed33b77f29295>, <https://github.com/rukai/PF_Sandbox/blob/e842613cf9ff102dfb3fbd87381319e6e6dfe3ae/appveyor.yml> | ||
- if /i "%ABI%"=="gnu" rustup install %CHANNEL%-%ARCH%-pc-windows-msvc | ||
- if /i "%ABI%"=="gnu" rustup default %CHANNEL%-%ARCH%-pc-windows-msvc | ||
- if /i "%ABI%"=="gnu" rustup target add %TARGET% | ||
- ps: $env:TOOLCHAIN = $("$(rustup show active-toolchain)" -split '\s+')[0] | ||
- if /i "%ABI%"=="gnu" rustup show | ||
- if /i "%ABI%"=="gnu" rustc -vV | ||
# ** copy libs from gcc toolchain to rust toolchain (more specifically, "crt2.o" and "dllcrt2.o" are needed) | ||
- if defined MSYS_MINGWDIR copy /y "%MSYS_MINGWDIR%\%ARCH%-w64-mingw32\lib\*.o" "%USERPROFILE%\.rustup\toolchains\%TOOLCHAIN%\lib\rustlib\%TARGET%\lib" >NUL | ||
## (end workaround) | ||
# * show `gcc` info | ||
- if /i "%ABI%"=="gnu" ( where gcc && gcc --version ) | ||
|
||
# "msvc" ABI setup | ||
- if /i "%ABI%" == "msvc" if /i "%ARCH%" == "i686" call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" | ||
- if /i "%ABI%" == "msvc" if /i "%ARCH%" == "x86_64" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 | ||
- if /i "%ABI%" == "msvc" if /i "%ARCH%" == "x86_64" call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" x86_amd64 | ||
# * show `cl` info | ||
- if /i "%ABI%"=="msvc" ( where cl && cl 2>&1 | findstr /i /c:"version" ) | ||
|
||
# finalize options | ||
- ps: if ("$env:FEATURES".length) { $env:BUILD_OPTIONS = $(($env:BUILD_OPTIONS, "--features `"${env:FEATURES}`"")|?{$_}) -join ' ' } | ||
- ps: if ("$env:FEATURES".length) { $env:TEST_OPTIONS = $(($env:TEST_OPTIONS, "--features `"${env:FEATURES}`"")|?{$_}) -join ' ' } | ||
|
||
build_script: | ||
- ps: $env:BUILD_CMD = $(("cargo +${env:TOOLCHAIN} build --target=${env:TARGET}", $env:BUILD_OPTIONS)|?{$_}) -join ' ' | ||
- echo [ `%BUILD_CMD%` ] & %BUILD_CMD% | ||
|
||
test_script: | ||
- ps: $env:TEST_CMD = $(("cargo +${env:TOOLCHAIN} test --target=${env:TARGET}", $env:TEST_OPTIONS)|?{$_}) -join ' ' | ||
- echo [ `%TEST_CMD%` ] & %TEST_CMD% |