Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add AppVeyor configuration #100

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Appveyor configuration template for Rust
# https://github.com/starkat99/appveyor-rust

os: Visual Studio 2015

environment:
matrix:
### MSVC Toolchains ###
# Stable 64-bit MSVC
- channel: stable
target: x86_64-pc-windows-msvc
# Stable 32-bit MSVC
- channel: stable
target: i686-pc-windows-msvc
# Beta 64-bit MSVC
- channel: beta
target: x86_64-pc-windows-msvc
# Beta 32-bit MSVC
- channel: beta
target: i686-pc-windows-msvc
# Nightly 64-bit MSVC
- channel: nightly
target: x86_64-pc-windows-msvc
# Nightly 32-bit MSVC
- channel: nightly
target: i686-pc-windows-msvc

### GNU Toolchains ###
# Stable 64-bit GNU
- channel: stable
target: x86_64-pc-windows-gnu
# Stable 32-bit GNU
- channel: stable
target: i686-pc-windows-gnu
# Beta 64-bit GNU
- channel: beta
target: x86_64-pc-windows-gnu
# Beta 32-bit GNU
- channel: beta
target: i686-pc-windows-gnu
# Nightly 64-bit GNU
- channel: nightly
target: x86_64-pc-windows-gnu
# Nightly 32-bit GNU
- channel: nightly
target: i686-pc-windows-gnu

### Allowed failures ###

# See Appveyor documentation for specific details. In short, place any channel or targets you wish
# to allow build failures on (usually nightly at least is a wise choice). This will prevent a build
# or test failure in the matching channels/targets from failing the entire build.
matrix:
allow_failures:
- channel: nightly
- target: i686-pc-windows-msvc

## Install Script ##
install:
- ps: .\tools\install.ps1

## Build Script ##
# 'cargo test' takes care of building for us, so disable Appveyor's build stage. This prevents
# the "directory does not contain a project or solution file" error.
build: false

# Uses 'cargo test' to run tests. Alternatively, the project may call compiled programs directly or
# perform other testing commands. Rust will automatically be placed in the PATH environment
# variable.
test_script:
- cmd: make all
72 changes: 72 additions & 0 deletions tools/install.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
##### Appveyor Rust Install Script #####

# https://github.com/starkat99/appveyor-rust

# This is the most important part of the Appveyor configuration. This installs the version of Rust
# specified by the "channel" and "target" environment variables from the build matrix. By default,
# Rust will be installed to C:\Rust for easy usage, but this path can be overridden by setting the
# RUST_INSTALL_DIR environment variable. The URL to download rust distributions defaults to
# https://static.rust-lang.org/dist/ but can overridden by setting the RUST_DOWNLOAD_URL environment
# variable.
#
# For simple configurations, instead of using the build matrix, you can override the channel and
# target environment variables with the --channel and --target script arguments.
#
# If no channel or target arguments or environment variables are specified, will default to stable
# channel and x86_64-pc-windows-msvc target.

param([string]$channel=${env:channel}, [string]$target=${env:target})

# Initialize our parameters from arguments and environment variables, falling back to defaults
if (!$channel) {
$channel = "stable"
}
if (!$target) {
$target = "x86_64-pc-windows-msvc"
}

$downloadUrl = "https://static.rust-lang.org/dist/"
if ($env:RUST_DOWNLOAD_URL) {
$downloadUrl = $env:RUST_DOWNLOAD_URL
}

$installDir = "C:\Rust"
if ($env:RUST_INSTALL_DIR) {
$installUrl = $env:RUST_INSTALL_DIR
}

if ($channel -eq "stable") {
# Download manifest so we can find actual filename of installer to download. Needed for stable.
echo "Downloading $channel channel manifest"
$manifest = "${env:Temp}\channel-rust-${channel}"
Start-FileDownload "${downloadUrl}channel-rust-${channel}" -FileName "$manifest"

# Search the manifest lines for the correct filename based on target
$match = Get-Content "$manifest" | Select-String -pattern "${target}.exe" -simplematch

if (!$match -or !$match.line) {
throw "Could not find $target in $channel channel manifest"
}

$installer = $match.line
} else {
# Otherwise download the file specified by channel directly.
$installer = "rust-${channel}-${target}.exe"
}

# Download installer
echo "Downloading ${downloadUrl}$installer"
Start-FileDownload "${downloadUrl}$installer" -FileName "${env:Temp}\$installer"

# Execute installer and wait for it to finish
echo "Installing $installer to $installDir"
&"${env:Temp}\$installer" /VERYSILENT /NORESTART /DIR="$installDir" | Write-Output

# Add Rust to the path.
$env:Path += ";${installDir}\bin;C:\MinGW\bin"

echo "Installation of $channel Rust $target completed"

# Test and display installed version information for rustc and cargo
rustc -V
cargo -V