mirror of
https://github.com/uutils/coreutils
synced 2024-11-16 17:58:06 +00:00
ce632900e5
- 13 minutes to CI success/failure response from AppVeyor (approx median time); down from 45 minutes .# [why] Most of the testing done on AppVeyor is redundant with that done in the GHA:CICD. With prior settings, AppVeyor was taking about 40 minutes to an hour (median ~ 45 minutes) to report success/failure. In contrast, the GHA:CICD workflow usually completes in about 13 minutes (median). AppVeyor job times are approximately 5 to 8 minutes per build and are done sequentially with no report until all build jobs are complete (whether "allow failure" or not).
165 lines
7.7 KiB
YAML
165 lines
7.7 KiB
YAML
# spell-checker:words POSIX SDK SDKs repo toolchain toolchains
|
|
# spell-checker:ignore ABI ARCH BACKTRACE BINDIR COMNTOOLS MINGW MINGWDIR MSVC MSYS USERPROFILE cl dllcrt findstr maint mkdir rustc rustlib rustup targetting uutils vcvarsall
|
|
|
|
version: "{build} ~ {branch}"
|
|
|
|
branches:
|
|
except:
|
|
- gh-pages
|
|
|
|
os: Visual Studio 2015
|
|
|
|
artifacts:
|
|
- path: target\%TARGET%\debug\uutils.exe
|
|
name: uutils.exe
|
|
|
|
matrix:
|
|
allow_failures:
|
|
- CHANNEL: nightly
|
|
# - ABI: gnu
|
|
|
|
environment:
|
|
global:
|
|
FEATURES: "windows"
|
|
BUILD_OPTIONS: ""
|
|
TEST_OPTIONS: "--no-fail-fast"
|
|
|
|
matrix:
|
|
# minimum version
|
|
- CHANNEL: 1.31.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
|
|
# FEATURES: "windows nightly"
|
|
# - CHANNEL: nightly
|
|
# ARCH: x86_64
|
|
# ABI: msvc
|
|
# FEATURES: "windows nightly"
|
|
# "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
|
|
# FEATURES: "windows nightly"
|
|
# * 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) ; note: `git branch -a` may be helpful for debugging edge cases
|
|
- if DEFINED APPVEYOR_REPO_BRANCH if /I "%APPVEYOR_REPO_SCM%"=="git" ( git checkout "%APPVEYOR_REPO_BRANCH%" 2>NUL & git reset --hard FETCH_HEAD 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%
|