* Set MACOSX_DEPLOYMENT_TARGET for macOS releases This is an effort to ideally produce "more portable" binaries for the releases we publish to GitHub. Currently the way macOS works is that you're generally only guaranteed to work on the same platform you built on and later (although it may sometimes work on older platforms). By configuring this environment variable it should be possible to lower the binary compatibility requirement, allowing running binaries on older OS releases than the build machine is running. I've chosen 10.9 here since it seems to be the lowest that "just works", but there's no particular reason other than that for choosing this. Rust itself chooses 10.8 (I think) for the compiler and 10.7 for the standard library. This decision is largely driven by the C++ code from wabt-sys which has more requirements about binary compatibility than Rust code does. Note that I don't actually have older macOS machines to test on as well, but I can at least confirm that this does affect the build process! * Comment the env var added
252 lines
8.6 KiB
YAML
252 lines
8.6 KiB
YAML
name: $(Build.SourceBranch)-$(date:yyyyMMdd)$(rev:.r)
|
|
trigger:
|
|
branches:
|
|
include:
|
|
- 'master'
|
|
tags:
|
|
include:
|
|
- '*'
|
|
|
|
jobs:
|
|
- job: rustfmt
|
|
pool:
|
|
vmImage: 'macos-10.14'
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
- script: rustup component add rustfmt
|
|
displayName: Add rustfmt
|
|
- script: cargo fmt --all -- --check
|
|
displayName: Check formatting
|
|
variables:
|
|
toolchain: stable
|
|
|
|
# Smoke test to build docs on one builder, using OSX for now since it's the
|
|
# fastest
|
|
- job: docs
|
|
pool:
|
|
vmImage: 'macos-10.14'
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
- script: cargo doc
|
|
displayName: Build documentation
|
|
variables:
|
|
toolchain: stable
|
|
|
|
- job: Test
|
|
strategy:
|
|
matrix:
|
|
windows-stable:
|
|
imageName: 'vs2017-win2016'
|
|
toolchain: stable
|
|
linux-stable:
|
|
imageName: 'ubuntu-16.04'
|
|
toolchain: stable
|
|
mac-stable:
|
|
imageName: 'macos-10.14'
|
|
toolchain: stable
|
|
mac-beta:
|
|
imageName: 'macos-10.14'
|
|
toolchain: beta
|
|
mac-nightly:
|
|
imageName: 'macos-10.14'
|
|
toolchain: nightly
|
|
|
|
pool:
|
|
vmImage: $(imageName)
|
|
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
|
|
- 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)
|
|
|
|
- script: cargo fetch
|
|
displayName: Fetch cargo dependencies
|
|
|
|
# Build and test all features except for lightbeam
|
|
- bash: cargo test --all --exclude lightbeam --exclude wasmtime-wasi-c
|
|
displayName: Cargo test
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
# Build and test lightbeam if we're using the nightly toolchain
|
|
- bash: cargo build --package lightbeam
|
|
displayName: Cargo build lightbeam
|
|
condition: and(succeeded(), eq(variables['toolchain'], 'nightly'))
|
|
- bash: cargo test --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['toolchain'], 'nightly'))
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
- job: Build
|
|
strategy:
|
|
matrix:
|
|
windows:
|
|
imageName: 'vs2017-win2016'
|
|
linux:
|
|
imageName: 'ubuntu-16.04'
|
|
mac:
|
|
imageName: 'macos-10.14'
|
|
# Lower the deployment target from our build image in an attempt to
|
|
# build more portable binaries that run on older releases. Note that
|
|
# 10.9 here is arbitrarily chosen and just happens to be the lowest that
|
|
# works at this time. Raising this is probably fine.
|
|
MACOSX_DEPLOYMENT_TARGET: 10.9
|
|
|
|
variables:
|
|
toolchain: stable
|
|
|
|
pool:
|
|
vmImage: $(imageName)
|
|
|
|
# variables:
|
|
# SCCACHE_DIR: $(Pipeline.Workspace)/.sccache
|
|
# RUSTC_WRAPPER: sccache
|
|
|
|
steps:
|
|
- checkout: self
|
|
submodules: true
|
|
- template: ci/azure-install-rust.yml
|
|
|
|
- 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'))
|
|
|
|
- bash: cargo build --release
|
|
displayName: Cargo build
|
|
|
|
# Test what we're about to release in release mode itself. This tests
|
|
# everything except lightbeam which requires nightly which happens above.
|
|
- bash: cargo test --release --all --exclude lightbeam --exclude wasmtime-wasi-c
|
|
displayName: Cargo test
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
|
|
# - script: sccache --show-stats
|
|
# displayName: post-compile sccache stats
|
|
|
|
- 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;]dev"
|
|
displayName: Set tag name to "dev"
|
|
condition: not(startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
|
|
|
- bash: echo "##vso[task.setvariable variable=basename;]wasmtime-$(tagName)-x86_64-windows"
|
|
displayName: Configure basename var
|
|
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
|
- bash: echo "##vso[task.setvariable variable=basename;]wasmtime-$(tagName)-x86_64-apple"
|
|
displayName: Configure basename var
|
|
condition: and(succeeded(), eq(variables['Agent.OS'], 'Darwin'))
|
|
- bash: echo "##vso[task.setvariable variable=basename;]wasmtime-$(tagName)-x86_64-linux"
|
|
displayName: Configure basename var
|
|
condition: and(succeeded(), eq( variables['Agent.OS'], 'Linux' ))
|
|
|
|
- bash: |
|
|
set -e
|
|
mkdir -p $BUILD_BINARIESDIRECTORY/$BASENAME
|
|
if [ "$AGENT_OS" = "Windows_NT" ]; then
|
|
ext=.exe
|
|
fi
|
|
cp LICENSE README.md target/release/{wasmtime,wasm2obj}$ext $BUILD_BINARIESDIRECTORY/$BASENAME
|
|
displayName: Copy binaries
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/$(basename)
|
|
archiveType: 'zip'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/$(basename).zip'
|
|
displayName: Archive files (Win)
|
|
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
|
|
- task: ArchiveFiles@2
|
|
inputs:
|
|
rootFolderOrFile: $(Build.BinariesDirectory)/$(basename)
|
|
archiveType: 'tar'
|
|
tarCompression: 'xz'
|
|
archiveFile: '$(Build.ArtifactStagingDirectory)/$(basename).tar.xz'
|
|
displayName: Archive files (Unix)
|
|
condition: and(succeeded(), ne(variables['Agent.OS'], 'Windows_NT'))
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
path: $(Build.ArtifactStagingDirectory)/
|
|
artifactName: 'bundle-$(Agent.OS)'
|
|
|
|
- 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: 'dev'
|
|
title: 'Latest CI build'
|
|
assets: '$(Build.ArtifactStagingDirectory)/**'
|
|
isDraft: false
|
|
isPreRelease: true
|
|
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
|