diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index a910225dd3..286c62718b 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -94,8 +94,6 @@ jobs: # 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 @@ -103,121 +101,50 @@ jobs: # 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 - - # - 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 + - template: ci/azure-build-release.yml - # 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 - - - bash: | - set -e - export WT_VERSION=`cat Cargo.toml | sed -n 's/^version = "\([^"]*\)".*/\1/p'` - "$WIX/bin/candle" -arch x64 -out target/wasmtime.wixobj installer/msi/wasmtime.wxs - "$WIX/bin/light" -out $BUILD_ARTIFACTSTAGINGDIRECTORY/$(basename).msi target/wasmtime.wixobj -ext WixUtilExtension - rm $BUILD_ARTIFACTSTAGINGDIRECTORY/$(basename).wixpdb - displayName: Create installer (Windows) - condition: eq(variables['Agent.OS'], 'Windows_NT') - - - 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)' +# Build the Linux release binary in an older Linux container (in this case +# Centos 6) +- job: Build_linux + variables: + toolchain: stable + container: + image: centos:6 + options: "--name ci-container -v /usr/bin/docker:/tmp/docker:ro" + steps: + # We're executing in the container as non-root but `yum` requires root. We + # need to install `sudo` but to do that we need `sudo`. Do a bit of a weird + # hack where we use the host `docker` executable to re-execute in our own + # container with the root user to install `sudo` + - bash: /tmp/docker exec -t -u 0 ci-container sh -c "yum install -y sudo" + displayName: Configure sudo + + # See https://edwards.sdsu.edu/research/c11-on-centos-6/ for where these + # various commands came from. + - bash: | + set -e + sudo yum install -y centos-release-scl cmake xz + sudo yum install -y devtoolset-8-gcc devtoolset-8-binutils devtoolset-8-gcc-c++ + echo "##vso[task.prependpath]/opt/rh/devtoolset-8/root/usr/bin" + displayName: Install system dependencies + + # Delete `libstdc++.so` to force gcc to link against `libstdc++.a` instead. + # This is a hack and not the right way to do this, but it ends up doing the + # right thing for now. + - bash: sudo rm -f /opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.so + displayName: Force a static libstdc++ + + - template: ci/azure-build-release.yml - job: Publish - dependsOn: Build + dependsOn: + - Build + - Build_linux 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. diff --git a/ci/azure-build-release.yml b/ci/azure-build-release.yml new file mode 100644 index 0000000000..79353cf270 --- /dev/null +++ b/ci/azure-build-release.yml @@ -0,0 +1,103 @@ +steps: +- checkout: self + submodules: true + +- template: azure-install-rust.yml + +- bash: echo "##vso[task.setvariable variable=RUSTC_VERSION;]`rustc --version`" + displayName: Set rustc version string for caching + +# - 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 + +- bash: | + set -e + export WT_VERSION=`cat Cargo.toml | sed -n 's/^version = "\([^"]*\)".*/\1/p'` + "$WIX/bin/candle" -arch x64 -out target/wasmtime.wixobj installer/msi/wasmtime.wxs + "$WIX/bin/light" -out $BUILD_ARTIFACTSTAGINGDIRECTORY/$(basename).msi target/wasmtime.wixobj -ext WixUtilExtension + rm $BUILD_ARTIFACTSTAGINGDIRECTORY/$(basename).wixpdb + displayName: Create installer (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- 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)' +