mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 23:34:47 -05:00
171 lines
5.8 KiB
YAML
171 lines
5.8 KiB
YAML
version: '{build}.{branch}'
|
|
|
|
skip_branch_with_pr: true
|
|
|
|
clone_folder: c:\deno
|
|
clone_depth: 1
|
|
|
|
environment:
|
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
|
DENO_BUILD_MODE: debug
|
|
DENO_BUILD_PATH: $(APPVEYOR_BUILD_FOLDER)\out\debug
|
|
DENO_THIRD_PARTY_PATH: $(APPVEYOR_BUILD_FOLDER)\third_party
|
|
CARGO_HOME: $(USERPROFILE)\.cargo
|
|
RUSTUP_HOME: $(USERPROFILE)\.rustup
|
|
|
|
# Appveyor uses 7zip to pack cache directories. We use these options:
|
|
# -t7z : Use '7z' format. The default is 'zip' which can't store symlinks.
|
|
# -snl : Store 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
|
|
|
|
cache:
|
|
# Python packages installed with `pip --user` and Pip cache.
|
|
- $(APPDATA)\Python
|
|
- $(LOCALAPPDATA)\pip
|
|
# Rust stuff.
|
|
- $(CARGO_HOME)
|
|
- $(RUSTUP_HOME)
|
|
# Cache the third_party submodule to preserve binaries downloaded by setup.py,
|
|
# and to make incremental builds work.
|
|
- $(APPVEYOR_BUILD_FOLDER)\.git\modules\third_party
|
|
- $(APPVEYOR_BUILD_FOLDER)\third_party
|
|
# Build incrementally.
|
|
- $(DENO_BUILD_PATH)
|
|
|
|
init:
|
|
# TODO: enable after this lands in master.
|
|
# Do no save the build cache for feature branches. Once we have multiple
|
|
# "official" branches, use a build matrix so each branch has it's own cache.
|
|
# - ps: |
|
|
# if ($env:APPVEYOR_REPO_BRANCH -ne "master") {
|
|
# $env:APPVEYOR_CACHE_SKIP_SAVE = "true"
|
|
# }
|
|
|
|
# Make git check out symlinks (not placeholder text files).
|
|
- git config --global core.symlinks true
|
|
|
|
install:
|
|
# `Exec` runs a regular executable. It looks at the process' exit code,
|
|
# rather than its stderr output, to tell if a command has failed
|
|
- ps: |
|
|
function Exec([ScriptBlock] $Command, [Switch] $NoNewLines) {
|
|
"$Command".TrimStart(" &") | Write-Host # Echo command.
|
|
& $Command 2>&1 | Write-Host -NoNewLine:$NoNewLines # Execute command.
|
|
if ($NoNewLine) { Write-Host } # Write newline.
|
|
if ($LastExitCode -ne 0) { throw "Failure. Exit code: $LastExitCode" }
|
|
}
|
|
|
|
# Clone the third_party submodule.
|
|
- ps: |
|
|
try {
|
|
Exec { & git submodule update --init --force --depth 1 }
|
|
|
|
} catch {
|
|
# Git will fail if the `third_party` directory was restored from cache,
|
|
# but the `.git/modules` directory wasn't. Rebuild it from scratch.
|
|
Remove-Item -Path $env:DENO_THIRD_PARTY_PATH `
|
|
-Recurse -Force -ErrorAction Ignore
|
|
Exec -NoNewLines { & git submodule update --init --force --depth 1 }
|
|
}
|
|
|
|
# Prune and pack git objects. Thus when we upload `.git/modules/` to
|
|
# the Appveyor cache, it'll include only objects that were actually needed.
|
|
- ps: |
|
|
if ($env:APPVEYOR_CACHE_SKIP_SAVE -ne "true") {
|
|
Push-Location $env:DENO_THIRD_PARTY_PATH
|
|
Exec { & git repack -d -l }
|
|
Pop-Location
|
|
}
|
|
|
|
# Install a recent Node.js version.
|
|
- ps: Install-Product node 10 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-Object {
|
|
-not (Test-Path -Path "$_\python.exe") -and
|
|
-not (Test-Path -Path "$_\pip.exe")
|
|
}
|
|
# Add binary dir for `pip --user` packages.
|
|
$p += "$env:APPDATA\Python\Scripts"
|
|
# Add python27-x64.
|
|
$p += "c:\Python27-x64"
|
|
$p += "c:\Python27-x64\Scripts"
|
|
$env:PATH = $p -join ";"
|
|
|
|
# Pip on Appveyor is too old. Install a recent version in our user dir.
|
|
- python -m pip install --upgrade --user pip
|
|
|
|
# Install Python packages.
|
|
- pip install --upgrade --user pywin32 yapf
|
|
|
|
# Add Rust/Cargo to PATH.
|
|
- ps: $env:PATH += ";$env:CARGO_HOME\bin"
|
|
|
|
# Install Rust via rustup-init, unless it was restored from cache.
|
|
# TODO: Ship Rust in the third_party repo. See issue #386.
|
|
- ps: |
|
|
if (-not (Test-Path -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 }
|
|
}
|
|
|
|
# Update Rust.
|
|
- rustup update
|
|
|
|
# The Rustup directory is very big with many files, which makes saving and
|
|
# restoring the Appveyor cache noticably slow. 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.
|
|
- ps: |
|
|
Remove-Item -Recurse -Force -ErrorAction Ignore -Path @(
|
|
"$env:RUSTUP_HOME\downloads",
|
|
"$env:RUSTUP_HOME\tmp",
|
|
"$env:RUSTUP_HOME\toolchains\stable-x86_64-pc-windows-msvc\share\doc"
|
|
)
|
|
# If Remove-Item didn't find one of these dirs, don't stop the build.
|
|
$null
|
|
|
|
# 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.
|
|
- pip --version
|
|
- rustc --version
|
|
- cargo --version
|
|
|
|
# Log environment variables.
|
|
- ps: |
|
|
Get-ChildItem env:* | Select-Object -Property Name, @{
|
|
Name = "Value"
|
|
Expression = {
|
|
if ($_.Name -like "*PATH") { $_.Value -replace ";", ";`n" }
|
|
else { $_.Value }
|
|
}
|
|
} | Format-Table -AutoSize -Wrap
|
|
|
|
before_build:
|
|
# Download clang and gn, generate ninja files.
|
|
- python tools\setup.py
|
|
|
|
build_script:
|
|
- python tools\build.py
|
|
|
|
after_build:
|
|
# The build completed successfully; make sure the cache gets saved even if
|
|
# some test fails.
|
|
- ps: $env:APPVEYOR_SAVE_CACHE_ON_ERROR = "true"
|
|
|
|
test_script:
|
|
- python tools\lint.py
|
|
- ps: Exec { & python tools\test.py $env:DENO_BUILD_PATH }
|
|
|