#!/bin/sh set -x set -e # This parameters we wait at most 2mins, it should be enough to sort out any # transient error. CMD_MAX_RETRY=12 CMD_WAIT_TIME=10s # Execute the given command and, in case of failure, try to execute it again # after sleeping for CMD_WAIT_TIME. # We give up after retrying CMD_MAX_RETRY times. retry() { for i in $(seq 1 "$CMD_MAX_RETRY"); do eval "$@" && return echo "command \"$@\" failed, retrying..." sleep ${CMD_WAIT_TIME} done echo "command \"$@\" failed, giving up..." exit 1 } BUILDDIR="$(pwd)" sudo sh -c 'echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main" >> /etc/apt/sources.list' retry 'wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -' retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt-get remove -y llvm-* sudo rm -rf /usr/local/* retry sudo apt-get update -q retry sudo apt-get install -y \ libxml2-dev libclang-11-dev llvm-11 llvm-11-dev liblld-11-dev cmake s3cmd \ gcc-7 g++-7 ninja-build tidy \ QEMUBASE="qemu-linux-x86_64-5.2.0" wget -nv https://ziglang.org/deps/$QEMUBASE.tar.xz tar xf $QEMUBASE.tar.xz PATH=$PWD/$QEMUBASE/bin:$PATH WASMTIME="wasmtime-v0.20.0-x86_64-linux" wget -nv https://github.com/bytecodealliance/wasmtime/releases/download/v0.20.0/$WASMTIME.tar.xz tar xf $WASMTIME.tar.xz PATH=$PWD/$WASMTIME:$PATH # Make the `zig version` number consistent. # This will affect the cmake command below. git config core.abbrev 9 git fetch --unshallow || true git fetch --tags export CC=gcc-7 export CXX=g++-7 mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -GNinja ninja install ./zig build test -Denable-qemu -Denable-wasmtime # look for HTML errors tidy -qe ../zig-cache/langref.html VERSION="$(./zig version)" if [ "${BUILD_REASON}" != "PullRequest" ]; then ARTIFACTSDIR="$BUILDDIR/artifacts" mkdir "$ARTIFACTSDIR" docker run -i --mount type=bind,source="$ARTIFACTSDIR",target=/z ziglang/static-base:llvm11-x86_64-1 -j2 $BUILD_SOURCEVERSION TARBALL="$(ls $ARTIFACTSDIR)" mv "$DOWNLOADSECUREFILE_SECUREFILEPATH" "$HOME/.s3cfg" s3cmd put -P --add-header="cache-control: public, max-age=31536000, immutable" "$ARTIFACTSDIR/$TARBALL" s3://ziglang.org/builds/ SHASUM=$(sha256sum $ARTIFACTSDIR/$TARBALL | cut '-d ' -f1) BYTESIZE=$(wc -c < $ARTIFACTSDIR/$TARBALL) JSONFILE="linux-$GITBRANCH.json" touch $JSONFILE echo "{\"tarball\": \"$TARBALL\"," >>$JSONFILE echo "\"shasum\": \"$SHASUM\"," >>$JSONFILE echo "\"size\": \"$BYTESIZE\"}" >>$JSONFILE s3cmd put -P --add-header="Cache-Control: max-age=0, must-revalidate" "$JSONFILE" "s3://ziglang.org/builds/$JSONFILE" s3cmd put -P "$JSONFILE" "s3://ziglang.org/builds/x86_64-linux-$VERSION.json" # `set -x` causes these variables to be mangled. # See https://developercommunity.visualstudio.com/content/problem/375679/pipeline-variable-incorrectly-inserts-single-quote.html set +x echo "##vso[task.setvariable variable=tarball;isOutput=true]$TARBALL" echo "##vso[task.setvariable variable=shasum;isOutput=true]$SHASUM" echo "##vso[task.setvariable variable=bytesize;isOutput=true]$BYTESIZE" echo "##vso[task.setvariable variable=version;isOutput=true]$VERSION" fi