name: $(Build.SourceBranch)-$(date:yyyyMMdd)$(rev:.r) trigger: branches: include: - 'master' tags: include: - '*' exclude: - 'dev' 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' # Statically link against msvcrt to produce slightly more portable # binaries on Windows by reducing our binary compatibility requirements. RUSTFLAGS: -Ctarget-feature=+crt-static 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: # Checking out the sources is needed to be able to delete the "dev" tag, see below. - checkout: self persistCredentials: true submodules: false - 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' target: '$(Build.SourceVersion)' tagSource: 'manual' tag: '$(tagName)' title: 'Wasmtime $(tagName)' assets: '$(Build.ArtifactStagingDirectory)/**' isDraft: false isPreRelease: true condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags/'), ne(variables['Build.SourceBranch'], 'refs/tags/dev')) # GitHub doesn't support doing rolling releases for branch. # To simulate that for dev builds, always do a release for the "dev" tag. # While the `edit` action for the GitHubRelease task would replace any assets # associated with the tag, it wouldn't update the tag itself. Hence, delete the # tag if it exists, and re-create it every time. # Also explicitly delete the GitHub release, which would otherwise turn into a draft # and linger forever. - task: GitHubRelease@0 inputs: gitHubConnection: 'tschneidereit-releases' action: 'delete' tag: 'dev' # This might fail in case the target repo doesn't yet have this tag, which is fine. continueOnError: true condition: in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/tags/dev') - script: | git -c http.extraheader="AUTHORIZATION: basic ***" push origin :dev # This might fail in case the target repo doesn't yet have this tag, which is fine. continueOnError: true condition: in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/tags/dev') - task: GitHubRelease@0 inputs: gitHubConnection: 'tschneidereit-releases' action: 'create' target: '$(Build.SourceVersion)' tag: 'dev' tagSource: 'manual' title: 'Latest CI build' assets: '$(Build.ArtifactStagingDirectory)/**' isDraft: false isPreRelease: true condition: in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/tags/dev')