deno/.appveyor.yml

194 lines
6.8 KiB
YAML

# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
version: '{build}.{branch}'
skip_branch_with_pr: true
clone_folder: C:\deno
clone_depth: 1
environment:
RUSTC_WRAPPER: sccache
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
DENO_BUILD_MODE: release
DENO_BUILD_PATH: $(APPVEYOR_BUILD_FOLDER)\target\release
DENO_THIRD_PARTY_PATH: $(APPVEYOR_BUILD_FOLDER)\third_party
RELEASE_ARTIFACT: deno_win_x64.zip
RUST_VERSION: 1.37.0
RUST_DIR: $(USERPROFILE)\rust-$(RUST_VERSION)
CARGO_HOME: $(RUST_DIR)\cargo
RUSTUP_HOME: $(RUST_DIR)\rustup
RUST_BACKTRACE: full
SCCACHE_IDLE_TIMEOUT: 0
SCCACHE_BUCKET: deno-sccache
AWS_ACCESS_KEY_ID: AKIAIVRN52PLDBP55LBQ
AWS_SECRET_ACCESS_KEY:
secure: 8ybpi/y5qE2baChsCBhNHmykng3FitELAtTYOiqZd0mw38i88dzdAX8ETNtBogMV
# Appveyor uses 7zip to pack cache directories. We use these options:
# -t7z : Use '7z' format.
# -snl : Store symlinks; doesn't work, but it prevents following symlinks.
# -mtc : Use UTC timestamps. This is required for incremental builds.
# -mx=1 : Fast compression.
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z -snl -mtc -mx=1
# Define some PowerShell helper functions which are used in the scripts below.
# They're defined in an environment variable to reduce noise in the build log.
PS_UTILS: |-
# `Exec` runs a regular executable. It looks at the process' exit code,
# rather than its stderr output, to tell if a command has failed.
function Exec([ScriptBlock] $Command, [switch] $NoNewLines) {
"$Command".TrimStart(" &") | Write-Host # Echo command.
& $Command 2>&1 | Write-Host -NoNewLine:$NoNewLines # Execute command.
if ($NoNewLines) { Write-Host } # Write newline.
if ($LastExitCode -ne 0) { throw "Failure. Exit code: $LastExitCode" }
}
# `Delete-Tree` is a simple wrapper around Remove-Item. It doesn't set
# an error status if one of the paths to be deleted doesn't exist.
function Delete-Tree([string[]] $Path) {
$Path | foreach {
"Deleting '$_'" | Write-Host -NoNewLine
if (Test-Path $_) {
Remove-Item $_ -Recurse -Force -ErrorAction Ignore
$(if ($?) { " - ok" } else { " - failed" }) | Write-Host
} else {
" - not found" | Write-Host
}
}
}
for:
# Do no save the build cache for feature branches. TODO: Once we have multiple
# permanent branches, use a build matrix so each branch has it's own cache.
- branches:
except:
- master
environment:
APPVEYOR_CACHE_SKIP_SAVE: true
cache:
- $(RUST_DIR)
- $(APPVEYOR_BUILD_FOLDER)\target\release\
- $(APPVEYOR_BUILD_FOLDER)\prebuilt\win\
init:
# Load utility functions
- ps: Invoke-Expression $env:PS_UTILS
# Upgrade git.
# TODO: remove when Appveyor upgrades to version 2.19.2.windows.1 or higher.
- ps: |-
$git_setup_uri = "https://github.com/git-for-windows/git/releases/" +
"download/v2.23.0.windows.1/Git-2.23.0-64-bit.exe"
Invoke-WebRequest -Uri $git_setup_uri -OutFile "$env:TEMP\git-setup.exe"
Start-Process -FilePath "$env:TEMP\git-setup.exe" `
-ArgumentList "/verysilent" `
-Wait
# Make git check out symlinks (not placeholder text files).
- git config --global core.symlinks true
install:
# Make sure the PATH includes the prebuilt files (downloaded during setup.py)
- set PATH=%PATH%;%CD%\prebuilt\win\
# Clone the third_party submodule.
- ps: |-
try {
Exec { & git submodule update --init --force --depth 1 --jobs 4 }
} catch {
# Git will fail if the `third_party` directory was restored from cache,
# but the `.git/modules` directory wasn't. Rebuild it from scratch.
Delete-Tree $env:DENO_THIRD_PARTY_PATH
Exec -NoNewLines { & git submodule update --init --force --depth 1 }
}
# Install a recent Node.js version.
- ps: Install-Product -Product node -Version 12 -Platform x64
# Make sure the right Python version is in PATH, and others are not.
- ps: |-
# Remove the wrong Python version(s) from PATH.
$p = $env:PATH -split ";" | where { -not (Test-Path "$_\python.exe") }
# Add python27-x64.
$p += "C:\Python27-x64"
$env:PATH = $p -join ";"
# Add Rust/Cargo to PATH.
- ps: $env:PATH += ";$env:CARGO_HOME\bin"
# Install Rust via rustup-init.
# * After install, the rustup directory is very big, with many files,
# slowing down cache save/restore a lot, so we remove unnecessary stuff.
# * TODO: Use `rustup component remove docs` instead, when this issue
# is resolved: https://github.com/rust-lang-nursery/rustup.rs/issues/998.
# * TODO: Ship Rust in the third_party repo. See issue #386.
- ps: |-
if (-not (Test-Path $env:CARGO_HOME)) {
Invoke-WebRequest -Uri "https://win.rustup.rs" `
-OutFile "$env:TEMP\rustup-init.exe"
Exec -NoNewLines {
& "$env:TEMP\rustup-init.exe" -y --default-toolchain $env:RUST_VERSION
}
Delete-Tree @(
"$env:RUSTUP_HOME\downloads",
"$env:RUSTUP_HOME\tmp",
"$env:RUSTUP_HOME\toolchains\stable-x86_64-pc-windows-msvc\share\doc"
)
}
Exec { rustup component add clippy }
Exec { rustup component add rustfmt }
# Log installed Node.js version + processor architecture.
- node -p "`Node ${process.version} ${process.arch}`"
# Log installed Python version + processor architecture.
- ps: |-
@("from sys import version",
"print 'Python', version") -join "`n" | & python -
# Log some more versions.
- rustc --version
- cargo --version
before_build:
# setup.py downloads sccache if necessary.
- python tools\setup.py
# Start sccache, then throw away the S3 access key.
- ps: |-
prebuilt\win\sccache --start-server
$env:AWS_SECRET_ACCESS_KEY = $null
build_script:
- cargo clippy --all-targets --release --locked -- -D clippy::all
- cargo build -vv --release --all-targets --locked
test_script:
- python tools\lint.py
- python tools\test_format.py
- cargo test -vv --release --all-targets --locked
after_test:
# Stop sccache and show stats.
- prebuilt\win\sccache --stop-server
# If this build is going to be deployed, build a zip file.
- ps: |-
if ($env:APPVEYOR_REPO_TAG -eq "true") {
Compress-Archive -CompressionLevel Optimal -Force `
-Path "$env:DENO_BUILD_PATH\deno.exe" `
-DestinationPath "$env:APPVEYOR_BUILD_FOLDER\$env:RELEASE_ARTIFACT"
}
artifacts:
path: $(RELEASE_ARTIFACT)
deploy:
provider: GitHub
auth_token:
secure: HQIIUEOtep3yRiBacZCtX8hVmgtdNvt6Hx7u9fP4Wj2ZYp+eBFP2OLf67RKVa5VZ
on:
APPVEYOR_REPO_NAME: denoland/deno
APPVEYOR_REPO_TAG: true