.appveyor.yml
# http://www.appveyor.com/docs/appveyor-yml
# mostly copied from nan appveyor.yml
## AppVeyor is used to build:
## - Electron (Win64, Win32)
## - Node.js (Win64, Win32)
os: Visual Studio 2019
# Set build version format here instead of in the admin panel.
version: '{build}'
environment:
DEBUG: 'node-libcurl'
NODE_LIBCURL_POSTINSTALL_SKIP_CLEANUP: 'true'
matrix:
# node.js
- nodejs_version: '18'
- nodejs_version: '20'
- nodejs_version: '21'
- nodejs_version: '20'
ELECTRON_VERSION: '28.0.0'
- nodejs_version: '20'
ELECTRON_VERSION: '27.1.3'
- nodejs_version: '20'
ELECTRON_VERSION: '26.6.2'
# disabled until nwjs supports newer node-gyp versions + python 3
# - nodejs_version: '12'
# NWJS_VERSION: '0.44.5'
# - nodejs_version: '12'
# NWJS_VERSION: '0.43.6'
# - nodejs_version: '12'
# NWJS_VERSION: '0.42.6'
matrix:
allow_failures:
- nodejs_version: '21'
skip_branch_with_pr: true
platform:
- x86
- x64
# git clone depth
clone_depth: 5
cache:
- build -> binding.gyp, LIBCURL_VERSION_WIN_DEPS
- '%USERPROFILE%\.node-gyp'
- '%USERPROFILE%\.nw-gyp'
- '%USERPROFILE%\.nw'
- '%LOCALAPPDATA%\Yarn\cache'
- '%LOCALAPPDATA%\electron\Cache'
# Install scripts. (runs after repo cloning)
install:
# We need this because we are building libcurl with c-ares
# instead of the system DNS resolver, and on Windows, this
# means that localhost is not handled by default
- echo 127.0.0.1 localhost >> C:\Windows\System32\drivers\etc\hosts
- echo ::1 localhost >> C:\Windows\System32\drivers\etc\hosts
# Get nasm
- cinst nasm -y
- set PATH=%PROGRAMFILES%\NASM;%PATH%
# in case above does not work
# - curl -L -o nasminst.exe http://libgd.blob.core.windows.net/nasm/nasm-2.07-installer.exe
# - start /wait nasminst.exe /S
# - ps: $env:path="C:\Program Files (x86)\nasm;$($env:path)"
- ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:Platform
- SET PATH=%cd%\node_modules\.bin\;%PATH%
# Output useful info for debugging.
- node --version
- npm --version
- yarn --version
# Check if we need to publish the package
- SET PUBLISH_BINARY=false
# we are creating a empty file named publish
- ps: if ( $env:APPVEYOR_REPO_COMMIT_MESSAGE.ToLower().Contains('[publish binary]') -OR $(git describe --tags --always HEAD) -eq $env:APPVEYOR_REPO_BRANCH ) { echo $null >> publish }
- IF EXIST "publish" SET PUBLISH_BINARY=true
# Install the curl-for-windows dependencies.
- git submodule update --init --recursive
- ps: |
python -m pip install --upgrade pip
if (-not (python -c "import distutils")) {
pip install setuptools
}
- python deps\curl-for-windows\configure.py
- ps: |
# $ErrorActionPreference = "Stop"
$runtime = ""
$dist_url = ""
$target = ""
if ($null -ne $env:ELECTRON_VERSION) {
$runtime = "electron"
$dist_url = "https://electronjs.org/headers"
$target = $env:ELECTRON_VERSION
yarn global add electron@${env:ELECTRON_VERSION}
} elseif ($null -ne $env:NWJS_VERSION) {
$runtime = "node-webkit"
$target = $env:NWJS_VERSION
yarn global add nw-gyp@3.6.5
yarn global add nw@$target
# We had this issue on nw-gyp 3.6.4
# https://github.com/nwjs/nw-gyp/issues/116
# patch tool for Windows
# https://stackoverflow.com/a/9485089/710693
pip install patch
# apply patch to nw-gyp fixing issue
python -m patch -d "$(yarn global dir)/node_modules/nw-gyp/src" ./scripts/ci/patches/win_delay_load_hook.cc.patch
$arch = if ($env:PLATFORM -eq "x86") { "ia32" } else { "x64" }
$rootFolder = "$env:USERPROFILE/.nw"
mkdir -Force $rootFolder
$nwName = "nwjs-v$target-win-$arch"
$outputFolder = "$env:USERPROFILE/.nw/$nwName"
if (![System.IO.File]::Exists("$outputFolder/nw.exe")) {
Write-Host "nw.exe not found on $outputFolder - Downloading it"
$url = "https://dl.nwjs.io/v$target/$nwName.zip"
$output = "$rootFolder/$nwName.zip"
# https://blog.jourdant.me/post/3-ways-to-download-files-with-powershell
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
Expand-Archive $output -DestinationPath $rootFolder
Remove-Item –path $output
}
$env:PATH = "$outputFolder;$env:PATH"
}
$env:npm_config_msvs_version = "2019"
$env:npm_config_build_from_source = "true"
$env:npm_config_runtime = $runtime
$env:npm_config_dist_url = $dist_url
$env:npm_config_target = $target
Write-Host $env:npm_config_msvs_version
Write-Host $env:npm_config_build_from_source
Write-Host $env:npm_config_runtime
Write-Host $env:npm_config_dist_url
Write-Host $env:npm_config_target
build_script:
- yarn install --frozen-lockfile
- dir .
# Post-install test scripts.
test_script:
# run tests
- ps: |
if ($null -ne $env:ELECTRON_VERSION) {
yarn test:electron
} else {
if ($null -ne $env:NWJS_VERSION) {
Write-Host "No tests available for nw.js, skipping tests..."
} else {
yarn ts-node -e "console.log(require('./lib').Curl.getVersionInfoString())"
yarn test
}
}
# This is needed because powershell treats
# output to stderr as errors
# See:
# https://stackoverflow.com/q/2095088/710693
# https://stackoverflow.com/a/12866669/710693
# https://stackoverflow.com/a/31451481/710693
if ($LASTEXITCODE -eq 0) {
$host.SetShouldExit(0)
}
after_test:
- IF "%PUBLISH_BINARY%" == "true" (node-pre-gyp package testpackage --verbose)
- IF "%PUBLISH_BINARY%" == "true" (for /f "usebackq delims=" %%x in (`node-pre-gyp reveal staged_tarball --silent`) do node scripts\module-packaging.js --publish %%x)
on_success:
- SET INSTALL_RESULT=0
- set npm_config_fallback_to_build=false
- IF "%PUBLISH_BINARY%" == "true" (yarn install --frozen-lockfile)
- IF "%PUBLISH_BINARY%" == "true" (SET INSTALL_RESULT=%ERRORLEVEL%)
- IF NOT %INSTALL_RESULT% == 0 (for /f "usebackq delims=" %%x in (`node-pre-gyp reveal hosted_tarball --silent`) do node scripts\module-packaging.js --unpublish %%x)
- IF NOT %INSTALL_RESULT% == 0 (echo "Package unpublished since we got an error while installing it.")
- dir .
# - node-pre-gyp clean
# Don't actually deploy.
deploy: off