241 lines
9.4 KiB
YAML
241 lines
9.4 KiB
YAML
name: $(Build.SourceBranch)-$(date:yyyyMMdd)$(rev:.r)
|
|
trigger:
|
|
branches:
|
|
include:
|
|
- 'master'
|
|
tags:
|
|
include:
|
|
- '*'
|
|
|
|
jobs:
|
|
- job: Build
|
|
strategy:
|
|
matrix:
|
|
windows-stable:
|
|
imageName: 'vs2017-win2016'
|
|
rustup_toolchain: stable
|
|
windows-stable-release:
|
|
imageName: 'vs2017-win2016'
|
|
rustup_toolchain: stable
|
|
build_type: release
|
|
linux-stable-release:
|
|
imageName: 'ubuntu-16.04'
|
|
rustup_toolchain: stable
|
|
build_type: release
|
|
mac-stable-release:
|
|
imageName: 'macos-10.14'
|
|
rustup_toolchain: stable
|
|
build_type: release
|
|
linux-stable:
|
|
imageName: 'ubuntu-16.04'
|
|
rustup_toolchain: stable
|
|
mac-stable:
|
|
imageName: 'macos-10.14'
|
|
rustup_toolchain: stable
|
|
mac-beta:
|
|
imageName: 'macos-10.14'
|
|
rustup_toolchain: beta
|
|
mac-nightly:
|
|
imageName: 'macos-10.14'
|
|
rustup_toolchain: nightly
|
|
|
|
pool:
|
|
vmImage: $(imageName)
|
|
|
|
# variables:
|
|
# SCCACHE_DIR: $(Pipeline.Workspace)/.sccache
|
|
# RUSTC_WRAPPER: sccache
|
|
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
|
|
- script: |
|
|
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUSTUP_TOOLCHAIN
|
|
echo "##vso[task.prependpath]$HOME/.cargo/bin"
|
|
export PATH=$PATH:$HOME/.cargo/bin
|
|
rustup update $RUSTUP_TOOLCHAIN
|
|
rustup default $RUSTUP_TOOLCHAIN
|
|
rustc --version
|
|
displayName: Install rust (*nix)
|
|
condition: ne( variables['Agent.OS'], 'Windows_NT' )
|
|
- script: |
|
|
rustup update %RUSTUP_TOOLCHAIN%
|
|
rustup default %RUSTUP_TOOLCHAIN%
|
|
rustc --version
|
|
displayName: Install rust (Win)
|
|
condition: eq( variables['Agent.OS'], 'Windows_NT' )
|
|
- script: rustup component add rustfmt
|
|
displayName: Add rustfmt
|
|
condition: and(succeeded(), eq(variables['rustup_toolchain'], 'stable'))
|
|
|
|
- bash: echo "##vso[task.setvariable variable=BUILD_TYPE_FLAG;]--release"
|
|
displayName: Set build type flag to --release
|
|
condition: eq( variables['build_type'], 'release' )
|
|
- bash: echo "##vso[task.setvariable variable=RUSTC_VERSION;]`rustc --version`"
|
|
displayName: Set rustc version string for caching
|
|
|
|
- script: |
|
|
powershell -Command "$ProgressPreference = 'SilentlyContinue'; iwr -outf %TEMP%\LLVM-8.0.0-win64.exe https://rust-lang-ci2.s3.amazonaws.com/rust-ci-mirror/LLVM-8.0.0-win64.exe"
|
|
%TEMP%\LLVM-8.0.0-win64.exe /S /NCRC
|
|
condition: eq(variables['Agent.OS'], 'Windows_NT')
|
|
displayName: Install clang (Windows)
|
|
|
|
# - bash: |
|
|
# set -e
|
|
# curl -Lfo sccache.tar.gz https://github.com/mozilla/sccache/releases/download/0.2.9/sccache-0.2.9-x86_64-apple-darwin.tar.gz
|
|
# tar -xzf sccache.tar.gz
|
|
# cp sccache-*/sccache /usr/local/bin/
|
|
# displayName: Install sccache (OSX)
|
|
# condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin'))
|
|
|
|
# - bash: |
|
|
# set -e
|
|
# curl -Lfo sccache.tar.gz https://github.com/mozilla/sccache/releases/download/0.2.9/sccache-0.2.9-x86_64-unknown-linux-musl.tar.gz
|
|
# tar -xzf sccache.tar.gz
|
|
# sudo cp sccache-*/sccache /usr/local/bin/
|
|
# displayName: Install sccache (Linux)
|
|
# condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
|
|
|
|
# - script: |
|
|
# curl -Lfo sccache.tar.gz https://github.com/mozilla/sccache/releases/download/0.2.9/sccache-0.2.9-x86_64-pc-windows-msvc.tar.gz
|
|
# tar -xzf sccache.tar.gz
|
|
# move sccache-* sccache
|
|
# echo "##vso[task.prependpath]%CD%\sccache"
|
|
# displayName: Install sccache (Windows)
|
|
# condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
|
|
|
- script: cargo fetch
|
|
displayName: Fetch cargo dependencies
|
|
- script: cargo fmt --all -- --check
|
|
displayName: Check formatting
|
|
condition: and(succeeded(), eq(variables['rustup_toolchain'], 'stable'),
|
|
ne( variables['build_type'], 'release' ), eq(variables['Agent.OS'], 'Darwin'))
|
|
|
|
# - task: CacheBeta@0
|
|
# inputs:
|
|
# key: sccache | $(Agent.OS) | "$(RUSTC_VERSION)" | "$(build_type)" | Cargo.lock
|
|
# restoreKeys: |
|
|
# sccache | $(Agent.OS) | "$(RUSTC_VERSION)" | "$(build_type)"
|
|
# path: $(SCCACHE_DIR)
|
|
# continueOnError: true
|
|
# displayName: sccache
|
|
|
|
# - bash: |
|
|
# sccache --show-stats
|
|
# ls $SCCACHE_DIR
|
|
# displayName: pre-compile sccache stats
|
|
|
|
# Build and test all features except for lightbeam
|
|
- bash: cargo build $BUILD_TYPE_FLAG --all --exclude lightbeam --exclude wasmtime-wasi-c
|
|
displayName: Cargo build
|
|
- bash: RUST_BACKTRACE=1 cargo test $BUILD_TYPE_FLAG --all --exclude lightbeam --exclude wasmtime-wasi-c
|
|
displayName: Cargo test
|
|
|
|
# Build and test lightbeam if we're using the nightly toolchain
|
|
- bash: cargo build $BUILD_TYPE_FLAG --package lightbeam
|
|
displayName: Cargo build lightbeam
|
|
condition: and(succeeded(), eq(variables['rustup_toolchain'], 'nightly'))
|
|
- bash: RUST_BACKTRACE=1 cargo test $BUILD_TYPE_FLAG --package lightbeam
|
|
displayName: Cargo test lightbeam
|
|
# Lightbeam tests fail right now, but we don't want to block on that.
|
|
continueOnError: true
|
|
condition: and(succeeded(), eq(variables['rustup_toolchain'], 'nightly'))
|
|
|
|
# - script: sccache --show-stats
|
|
# displayName: post-compile sccache stats
|
|
|
|
# Only run on macOS debug builders, as those are fastest
|
|
- bash: |
|
|
cargo doc
|
|
displayName: Test docs generation
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Darwin' ), ne( variables['build_type'], 'release' ))
|
|
|
|
- bash: |
|
|
echo "##vso[task.setvariable variable=tagName;]`echo $BUILD_SOURCEBRANCH | sed -e 's|refs/tags/||'`"
|
|
displayName: Set tag name
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
|
- bash: |
|
|
echo "##vso[task.setvariable variable=tagName;]master"
|
|
displayName: Set tag name to "master"
|
|
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|
|
|
|
- bash: |
|
|
mkdir $BUILD_BINARIESDIRECTORY/bundle
|
|
cp target/release/{wasmtime,wasm2obj}.exe $BUILD_BINARIESDIRECTORY/bundle
|
|
displayName: Copy binaries (Win)
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Windows_NT' ), eq( variables['build_type'], 'release' ))
|
|
- bash: |
|
|
mkdir $BUILD_BINARIESDIRECTORY/bundle
|
|
cp target/release/{wasmtime,wasm2obj} $BUILD_BINARIESDIRECTORY/bundle
|
|
displayName: Copy binaries (*nix)
|
|
condition: and(succeeded(), ne( variables['Agent.OS'], 'Windows_NT' ), eq( variables['build_type'], 'release' ))
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/bundle
|
|
includeRootFolder: false
|
|
archiveType: 'zip'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/wasmtime-$(tagName)-x86_64-windows.zip'
|
|
displayName: Archive files (Win)
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Windows_NT' ), eq( variables['build_type'], 'release' ))
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/bundle
|
|
includeRootFolder: false
|
|
archiveType: 'tar'
|
|
tarCompression: 'xz'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/wasmtime-$(tagName)-x86_64-macos.tar.xz'
|
|
displayName: Archive files (macOS)
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Darwin' ), eq( variables['build_type'], 'release' ))
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/bundle
|
|
includeRootFolder: false
|
|
archiveType: 'tar'
|
|
tarCompression: 'xz'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/wasmtime-$(tagName)-x86_64-linux.tar.xz'
|
|
displayName: Archive files (Linux)
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Linux' ), eq( variables['build_type'], 'release' ))
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
path: $(Build.ArtifactStagingDirectory)/
|
|
artifactName: 'bundle-$(Agent.OS)'
|
|
condition: and(succeeded(), eq( variables['build_type'], 'release' ))
|
|
|
|
- job: Publish
|
|
dependsOn: Build
|
|
condition: and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))
|
|
steps:
|
|
- checkout: none
|
|
- task: DownloadPipelineArtifact@1
|
|
inputs:
|
|
targetPath: $(Build.ArtifactStagingDirectory)
|
|
- script: |
|
|
echo "##vso[task.setvariable variable=tagName;]`echo $BUILD_SOURCEBRANCH | sed -e 's|refs/tags/||'`"
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
|
- task: GitHubRelease@0
|
|
inputs:
|
|
gitHubConnection: 'tschneidereit-releases'
|
|
repositoryName: 'cranestation/wasmtime'
|
|
action: 'edit'
|
|
target: '$(Build.SourceVersion)'
|
|
tagSource: 'manual'
|
|
tag: '$(tagName)'
|
|
title: 'Wasmtime $(tagName)'
|
|
assets: '$(Build.ArtifactStagingDirectory)/**'
|
|
isDraft: false
|
|
isPreRelease: true
|
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
|
- task: GitHubRelease@0
|
|
inputs:
|
|
gitHubConnection: 'tschneidereit-releases'
|
|
repositoryName: 'cranestation/wasmtime'
|
|
action: 'edit'
|
|
target: '$(Build.SourceVersion)'
|
|
tag: 'master'
|
|
title: 'Latest CI build'
|
|
assets: '$(Build.ArtifactStagingDirectory)/**'
|
|
isDraft: false
|
|
isPreRelease: true
|
|
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|