Set up CI and releases with Azure Pipelines (#237)
This Azure Pipelines setup compiles and tests Wasmtime for Linux, macOS, and Windows. If the CI run was triggered by a new tag being created, a new release for that tag is created with a changelog relative to the last tag release and archives of the builds for all platforms. If the CI run was triggered by new commits landing on `master`, the release `latest-master` is updated with a new changelog relative to the last tag release and archives of the new builds for all platforms. Note: This PR also contains changes to disable a bunch of tests on Windows, which are failing due to issues with signal handling.
This commit is contained in:
committed by
GitHub
parent
0bc9d1fe6f
commit
a988443422
240
.azure-pipelines.yml
Normal file
240
.azure-pipelines.yml
Normal file
@@ -0,0 +1,240 @@
|
||||
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: 'tschneidereit/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: 'tschneidereit/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')
|
||||
35
build.rs
35
build.rs
@@ -120,6 +120,39 @@ fn avoid_keywords(name: &str) -> &str {
|
||||
}
|
||||
|
||||
/// Ignore tests that aren't supported yet.
|
||||
fn ignore(_testsuite: &str, _name: &str) -> bool {
|
||||
fn ignore(testsuite: &str, name: &str) -> bool {
|
||||
if cfg!(windows) {
|
||||
return match (testsuite, name) {
|
||||
("spec_testsuite", "address") => true,
|
||||
("spec_testsuite", "align") => true,
|
||||
("spec_testsuite", "call") => true,
|
||||
("spec_testsuite", "call_indirect") => true,
|
||||
("spec_testsuite", "conversions") => true,
|
||||
("spec_testsuite", "elem") => true,
|
||||
("spec_testsuite", "fac") => true,
|
||||
("spec_testsuite", "func_ptrs") => true,
|
||||
("spec_testsuite", "globals") => true,
|
||||
("spec_testsuite", "i32") => true,
|
||||
("spec_testsuite", "i64") => true,
|
||||
("spec_testsuite", "f32") => true,
|
||||
("spec_testsuite", "f64") => true,
|
||||
("spec_testsuite", "if") => true,
|
||||
("spec_testsuite", "imports") => true,
|
||||
("spec_testsuite", "int_exprs") => true,
|
||||
("spec_testsuite", "linking") => true,
|
||||
("spec_testsuite", "memory_grow") => true,
|
||||
("spec_testsuite", "memory_trap") => true,
|
||||
("spec_testsuite", "resizing") => true,
|
||||
("spec_testsuite", "select") => true,
|
||||
("spec_testsuite", "skip-stack-guard-page") => true,
|
||||
("spec_testsuite", "start") => true,
|
||||
("spec_testsuite", "traps") => true,
|
||||
("spec_testsuite", "unreachable") => true,
|
||||
("spec_testsuite", "unwind") => true,
|
||||
("misc_testsuite", "misc_traps") => true,
|
||||
("misc_testsuite", "stack_overflow") => true,
|
||||
(_, _) => false,
|
||||
};
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user