aboutsummaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-01-16 13:01:36 -0500
committerAndrew Kelley <andrew@ziglang.org>2020-01-16 13:01:36 -0500
commitfbe6af81fdb1b964bb0c28f51de2458800b8274c (patch)
tree6d65a49b911ba665a7e2c28c6619d1aa6517a744 /ci
parent230d27c1cd00e7adf0ccfca2c8bb73ae1779aa4c (diff)
parent7e5e767ba0fdde91dd66690168eff96b75c28e33 (diff)
downloadzig-fbe6af81fdb1b964bb0c28f51de2458800b8274c.tar.gz
zig-fbe6af81fdb1b964bb0c28f51de2458800b8274c.zip
Merge remote-tracking branch 'origin/master' into llvm10
Diffstat (limited to 'ci')
-rwxr-xr-xci/azure/linux_script12
-rwxr-xr-xci/azure/macos_script34
-rwxr-xr-xci/azure/on_master_success12
-rw-r--r--ci/azure/pipelines.yml22
-rwxr-xr-xci/azure/update_download_page41
-rwxr-xr-xci/azure/windows_install2
-rw-r--r--ci/azure/windows_script.bat11
-rwxr-xr-xci/azure/windows_upload2
-rw-r--r--ci/drone/drone.yml19
-rwxr-xr-xci/drone/linux_script70
-rwxr-xr-xci/srht/freebsd_script18
-rwxr-xr-xci/srht/on_master_success39
-rwxr-xr-xci/srht/update_download_page79
13 files changed, 285 insertions, 76 deletions
diff --git a/ci/azure/linux_script b/ci/azure/linux_script
index e12f16f15f..1116099cd7 100755
--- a/ci/azure/linux_script
+++ b/ci/azure/linux_script
@@ -5,7 +5,7 @@ set -e
BUILDDIR="$(pwd)"
-sudo sh -c 'echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main" >> /etc/apt/sources.list'
+sudo sh -c 'echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main" >> /etc/apt/sources.list'
wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update -q
@@ -14,6 +14,10 @@ sudo apt-get remove -y llvm-*
sudo rm -rf /usr/local/*
sudo apt-get install -y libxml2-dev libclang-9-dev llvm-9 llvm-9-dev cmake s3cmd gcc-7 g++-7 qemu
+# Make the `zig version` number consistent.
+# This will affect the cmake command below.
+git config core.abbrev 9
+
export CC=gcc-7
export CXX=g++-7
mkdir build
@@ -21,11 +25,12 @@ cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j2 install
./zig build test -Denable-qemu
+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:llvm9-1 -j2 $BUILD_SOURCEVERSION
+ docker run -i --mount type=bind,source="$ARTIFACTSDIR",target=/z ziglang/static-base:llvm9-x86_64 -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/
@@ -40,7 +45,7 @@ if [ "${BUILD_REASON}" != "PullRequest" ]; then
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/linux-$VERSION.json"
+ 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
@@ -48,4 +53,5 @@ if [ "${BUILD_REASON}" != "PullRequest" ]; then
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
diff --git a/ci/azure/macos_script b/ci/azure/macos_script
index 790b276f00..79eaa0703b 100755
--- a/ci/azure/macos_script
+++ b/ci/azure/macos_script
@@ -8,7 +8,9 @@ system_profiler SPHardwareDataType
brew install s3cmd gcc@8
ZIGDIR="$(pwd)"
-CACHE_BASENAME="llvm+clang-10.0.0-macos-x86_64-gcc8-release"
+LLVMVER="10.0.0"
+ARCH="x86_64"
+CACHE_BASENAME="llvm+clang+lld-$LLVMVER-$ARCH-macos-gcc8-release"
PREFIX="$HOME/$CACHE_BASENAME"
TMPDIR="$HOME/tmpz"
JOBS="-j2"
@@ -44,18 +46,27 @@ else
rm $PREFIX/lib/libz*dylib
cd $TMPDIR
- wget https://releases.llvm.org/10.0.0/llvm-10.0.0.src.tar.xz
- tar xf llvm-10.0.0.src.tar.xz
- cd llvm-10.0.0.src/
+ wget https://releases.llvm.org/$LLVMVER/llvm-$LLVMVER.src.tar.xz
+ tar xf llvm-$LLVMVER.src.tar.xz
+ cd llvm-$LLVMVER.src/
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_PREFIX_PATH=$PREFIX -DCMAKE_BUILD_TYPE=Release -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="AVR" -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_ENABLE_TERMINFO=OFF
make $JOBS install
cd $TMPDIR
- wget https://releases.llvm.org/10.0.0/cfe-10.0.0.src.tar.xz
- tar xf cfe-10.0.0.src.tar.xz
- cd cfe-10.0.0.src/
+ wget https://releases.llvm.org/$LLVMVER/cfe-$LLVMVER.src.tar.xz
+ tar xf cfe-$LLVMVER.src.tar.xz
+ cd cfe-$LLVMVER.src/
+ mkdir build
+ cd build
+ cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_PREFIX_PATH=$PREFIX -DCMAKE_BUILD_TYPE=Release
+ make $JOBS install
+
+ cd $TMPDIR
+ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVMVER/lld-$LLVMVER.src.tar.xz
+ tar xf lld-$LLVMVER.src.tar.xz
+ cd lld-$LLVMVER.src/
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_PREFIX_PATH=$PREFIX -DCMAKE_BUILD_TYPE=Release
@@ -68,6 +79,11 @@ else
fi
cd $ZIGDIR
+
+# Make the `zig version` number consistent.
+# This will affect the cmake command below.
+git config core.abbrev 9
+
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PREFIX -DCMAKE_INSTALL_PREFIX=$(pwd)/release -DZIG_STATIC=ON
@@ -81,7 +97,7 @@ if [ "${BUILD_REASON}" != "PullRequest" ]; then
rmdir release/bin
VERSION=$(release/zig version)
- DIRNAME="zig-macos-x86_64-$VERSION"
+ DIRNAME="zig-macos-$ARCH-$VERSION"
TARBALL="$DIRNAME.tar.xz"
mv release "$DIRNAME"
tar cfJ "$TARBALL" "$DIRNAME"
@@ -99,7 +115,7 @@ if [ "${BUILD_REASON}" != "PullRequest" ]; then
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/macos-$VERSION.json"
+ s3cmd put -P "$JSONFILE" "s3://ziglang.org/builds/$ARCH-macos-$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
diff --git a/ci/azure/on_master_success b/ci/azure/on_master_success
new file mode 100755
index 0000000000..cef618361b
--- /dev/null
+++ b/ci/azure/on_master_success
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# We do not set -x because this would leak the oauth access token.
+set +x
+
+set -e
+
+sudo apt-get update -y
+sudo apt-get install -y curl jq
+
+OAUTH_TOKEN="$(cat "$DOWNLOADSECUREFILE_SECUREFILEPATH")"
+./ci/srht/on_master_success "$VERSION" "$OAUTH_TOKEN"
diff --git a/ci/azure/pipelines.yml b/ci/azure/pipelines.yml
index bcc2f11945..5dbfe5a338 100644
--- a/ci/azure/pipelines.yml
+++ b/ci/azure/pipelines.yml
@@ -14,7 +14,7 @@ jobs:
displayName: 'Build and test'
- job: BuildLinux
pool:
- vmImage: 'ubuntu-16.04'
+ vmImage: 'ubuntu-18.04'
timeoutInMinutes: 360
@@ -44,7 +44,7 @@ jobs:
- script: ci/azure/windows_script.bat
name: main
displayName: 'Build and test'
-- job: UpdateDownloadPage
+- job: OnMasterSuccess
dependsOn:
- BuildMacOS
- BuildLinux
@@ -53,20 +53,12 @@ jobs:
strategy:
maxParallel: 1
pool:
- vmImage: 'ubuntu-16.04'
+ vmImage: 'ubuntu-18.04'
variables:
- macos_tarball: $[ dependencies.BuildMacOS.outputs['main.tarball'] ]
- macos_shasum: $[ dependencies.BuildMacOS.outputs['main.shasum'] ]
- macos_bytesize: $[ dependencies.BuildMacOS.outputs['main.bytesize'] ]
- linux_tarball: $[ dependencies.BuildLinux.outputs['main.tarball'] ]
- linux_shasum: $[ dependencies.BuildLinux.outputs['main.shasum'] ]
- linux_bytesize: $[ dependencies.BuildLinux.outputs['main.bytesize'] ]
- windows_tarball: $[ dependencies.BuildWindows.outputs['main.tarball'] ]
- windows_shasum: $[ dependencies.BuildWindows.outputs['main.shasum'] ]
- windows_bytesize: $[ dependencies.BuildWindows.outputs['main.bytesize'] ]
+ version: $[ dependencies.BuildLinux.outputs['main.version'] ]
steps:
- task: DownloadSecureFile@1
inputs:
- secureFile: s3cfg
- - script: ci/azure/update_download_page
- displayName: 'Update download page'
+ secureFile: oauth_token
+ - script: ci/azure/on_master_success
+ displayName: 'master branch success hook'
diff --git a/ci/azure/update_download_page b/ci/azure/update_download_page
deleted file mode 100755
index c6a690e8e6..0000000000
--- a/ci/azure/update_download_page
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-
-set -x
-set -e
-
-SRCDIR=$(pwd)
-rm -rf .git
-sudo apt-get update -y
-sudo apt-get install -y s3cmd curl jq
-
-cd "$HOME"
-wget "https://ziglang.org/builds/$LINUX_TARBALL"
-tar xf $LINUX_TARBALL
-ZIGDIR=$(basename -s .tar.xz $LINUX_TARBALL)
-ZIG="$ZIGDIR/zig"
-LANGREF="$ZIGDIR/langref.html"
-VERSION=$($ZIG version)
-SRCTARBALLDIR="zig-$VERSION"
-export SRC_TARBALL="$SRCTARBALLDIR.tar.xz"
-mv "$SRCDIR" "$SRCTARBALLDIR"
-tar cfJ "$SRC_TARBALL" "$SRCTARBALLDIR"
-export SRC_SHASUM=$(sha256sum $SRC_TARBALL | cut '-d ' -f1)
-export SRC_BYTESIZE=$(wc -c < $SRC_TARBALL)
-
-# the freebsd build has to be there too
-FREEBSD_JSON=$(curl --fail "https://ziglang.org/builds/freebsd-$VERSION.json" || exit 1)
-export FREEBSD_TARBALL="$(echo "$FREEBSD_JSON" | jq .tarball -r)"
-export FREEBSD_BYTESIZE="$(echo "$FREEBSD_JSON" | jq .size -r)"
-export FREEBSD_SHASUM="$(echo "$FREEBSD_JSON" | jq .shasum -r)"
-
-git clone https://github.com/ziglang/www.ziglang.org --depth 1
-cd www.ziglang.org
-export MASTER_DATE=$(date +%Y-%m-%d)
-env
-"../$ZIG" run update-download-page.zig
-
-mv "$DOWNLOADSECUREFILE_SECUREFILEPATH" "$HOME/.s3cfg"
-s3cmd put -P --add-header="cache-control: public, max-age=31536000, immutable" "../$SRC_TARBALL" s3://ziglang.org/builds/
-s3cmd put -P "../$LANGREF" s3://ziglang.org/documentation/master/index.html --add-header="Cache-Control: max-age=0, must-revalidate"
-s3cmd put -P www/download/index.html s3://ziglang.org/download/index.html --add-header="Cache-Control: max-age=0, must-revalidate"
-s3cmd put -P www/download/index.json s3://ziglang.org/download/index.json --add-header="Cache-Control: max-age=0, must-revalidate"
diff --git a/ci/azure/windows_install b/ci/azure/windows_install
index 6c2a5442da..6fc1d86c8d 100755
--- a/ci/azure/windows_install
+++ b/ci/azure/windows_install
@@ -6,5 +6,5 @@ set -e
pacman -Su --needed --noconfirm
pacman -S --needed --noconfirm wget p7zip python3-pip
pip install s3cmd
-wget -nv "https://ziglang.org/deps/llvm%2bclang-10.0.0-win64-msvc-release.tar.xz"
+wget -nv "https://ziglang.org/deps/llvm%2bclang%2blld-10.0.0-x86_64-windows-msvc-mt.tar.xz"
tar xf llvm+clang-10.0.0-win64-msvc-release.tar.xz
diff --git a/ci/azure/windows_script.bat b/ci/azure/windows_script.bat
index 4db80560c6..d83d2075a1 100644
--- a/ci/azure/windows_script.bat
+++ b/ci/azure/windows_script.bat
@@ -11,15 +11,18 @@ SET "MSYSTEM=%PREVMSYSTEM%"
SET "ZIGBUILDDIR=%SRCROOT%\build"
SET "ZIGINSTALLDIR=%ZIGBUILDDIR%\dist"
-SET "ZIGPREFIXPATH=%SRCROOT%\llvm+clang-10.0.0-win64-msvc-release"
+SET "ZIGPREFIXPATH=%SRCROOT%\llvm+clang+lld-10.0.0-x86_64-windows-msvc-mt"
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
+REM Make the `zig version` number consistent.
+REM This will affect the cmake command below.
+git.exe config core.abbrev 9
+
mkdir %ZIGBUILDDIR%
cd %ZIGBUILDDIR%
-REM Here we use MinSizeRel instead of Release to work around https://github.com/ziglang/zig/issues/3024
-cmake.exe .. -Thost=x64 -G"Visual Studio 16 2019" -A x64 "-DCMAKE_INSTALL_PREFIX=%ZIGINSTALLDIR%" "-DCMAKE_PREFIX_PATH=%ZIGPREFIXPATH%" -DCMAKE_BUILD_TYPE=MinSizeRel || exit /b
-msbuild /p:Configuration=MinSizeRel INSTALL.vcxproj || exit /b
+cmake.exe .. -Thost=x64 -G"Visual Studio 16 2019" -A x64 "-DCMAKE_INSTALL_PREFIX=%ZIGINSTALLDIR%" "-DCMAKE_PREFIX_PATH=%ZIGPREFIXPATH%" -DCMAKE_BUILD_TYPE=Release || exit /b
+msbuild /maxcpucount /p:Configuration=Release INSTALL.vcxproj || exit /b
"%ZIGINSTALLDIR%\bin\zig.exe" build test || exit /b
diff --git a/ci/azure/windows_upload b/ci/azure/windows_upload
index d5527fa13a..7ed1b7d1f7 100755
--- a/ci/azure/windows_upload
+++ b/ci/azure/windows_upload
@@ -30,7 +30,7 @@ if [ "${BUILD_REASON}" != "PullRequest" ]; then
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/windows-$VERSION.json"
+ s3cmd put -P "$JSONFILE" "s3://ziglang.org/builds/x86_64-windows-$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
diff --git a/ci/drone/drone.yml b/ci/drone/drone.yml
new file mode 100644
index 0000000000..8fff358a93
--- /dev/null
+++ b/ci/drone/drone.yml
@@ -0,0 +1,19 @@
+---
+kind: pipeline
+name: test-aarch64-linux-musl
+
+platform:
+ arch: arm64
+
+steps:
+- name: build-and-test
+ image: ziglang/static-base:llvm9-1
+ environment:
+ SRHT_OAUTH_TOKEN:
+ from_secret: SRHT_OAUTH_TOKEN
+ AWS_ACCESS_KEY_ID:
+ from_secret: AWS_ACCESS_KEY_ID
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: AWS_SECRET_ACCESS_KEY
+ commands:
+ - ./ci/drone/linux_script
diff --git a/ci/drone/linux_script b/ci/drone/linux_script
new file mode 100755
index 0000000000..61a5908dee
--- /dev/null
+++ b/ci/drone/linux_script
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+set -x
+set -e
+
+TRIPLEARCH="$(uname -m)"
+BUILDDIR="$(pwd)"
+DISTDIR="$(pwd)/dist"
+
+apk update
+apk add py3-pip xz perl-utils jq curl
+pip3 install s3cmd
+
+# Make the `zig version` number consistent.
+# This will affect the cmake command below.
+git config core.abbrev 9
+
+mkdir build
+cd build
+cmake .. -DCMAKE_BUILD_TYPE=Release "-DCMAKE_INSTALL_PREFIX=$DISTDIR" -DZIG_STATIC=ON -DCMAKE_PREFIX_PATH=/deps/local
+
+make -j$(nproc) install
+./zig build test-fmt test-behavior test-std test-compiler-rt -Dskip-release -Dskip-non-native
+# TODO test-compare-output is hitting https://github.com/ziglang/zig/issues/3526
+./zig build test-standalone test-stack-traces
+# TODO test-cli is hitting https://github.com/ziglang/zig/issues/3526
+./zig build test-asm-link test-runtime-safety
+# TODO test-translate-c is hitting https://github.com/ziglang/zig/issues/3526
+./zig build test-gen-h
+# TODO test-compile-errors is hitting https://github.com/ziglang/zig/issues/3526
+# TODO building docs is hitting https://github.com/ziglang/zig/issues/3526
+
+# TODO full test suite:
+#./zig build test
+
+if [ -z "$DRONE_PULL_REQUEST" ]; then
+ mv ../LICENSE "$DISTDIR/"
+ # TODO uncomment when the docs are generated
+ # mv ../zig-cache/langref.html "$DISTDIR/"
+ mv "$DISTDIR/bin/zig" "$DISTDIR/"
+ rmdir "$DISTDIR/bin"
+
+ GITBRANCH="$DRONE_BRANCH"
+ VERSION="$("$DISTDIR/zig" version)"
+ DIRNAME="zig-linux-$TRIPLEARCH-$VERSION"
+ TARBALL="$DIRNAME.tar.xz"
+ mv "$DISTDIR" "$DIRNAME"
+ tar cfJ "$TARBALL" "$DIRNAME"
+
+ s3cmd put -P --add-header="cache-control: public, max-age=31536000, immutable" "$TARBALL" s3://ziglang.org/builds/
+
+ SHASUM=$(shasum -a 256 $TARBALL | cut '-d ' -f1)
+ BYTESIZE=$(wc -c < $TARBALL)
+
+ JSONFILE="$TRIPLEARCH-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/$TRIPLEARCH-linux-$VERSION.json"
+ if [ "$GITBRANCH" = "master" ]; then
+ # avoid leaking oauth token
+ set +x
+
+ cd "$BUILDDIR"
+ ./ci/srht/on_master_success "$VERSION" "$SRHT_OAUTH_TOKEN"
+ fi
+fi
diff --git a/ci/srht/freebsd_script b/ci/srht/freebsd_script
index 2e16ca9173..fbdf8efd8f 100755
--- a/ci/srht/freebsd_script
+++ b/ci/srht/freebsd_script
@@ -13,9 +13,14 @@ wget -nv "https://ziglang.org/builds/$CACHE_BASENAME.tar.xz"
tar xf "$CACHE_BASENAME.tar.xz"
cd $ZIGDIR
+
+# Make the `zig version` number consistent.
+# This will affect the cmake command below.
+git config core.abbrev 9
+
mkdir build
cd build
-cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PREFIX -DCMAKE_INSTALL_PREFIX=$(pwd)/release -DZIG_STATIC=ON
+cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PREFIX "-DCMAKE_INSTALL_PREFIX=$(pwd)/release" -DZIG_STATIC=ON
make $JOBS install
release/bin/zig build test-fmt
@@ -80,5 +85,14 @@ if [ -f ~/.s3cfg ]; then
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/freebsd-$VERSION.json"
+ s3cmd put -P "$JSONFILE" "s3://ziglang.org/builds/x86_64-freebsd-$VERSION.json"
+
+ if [ "$GITBRANCH" = "master" ]; then
+ # avoid leaking oauth token
+ set +x
+
+ OAUTH_TOKEN="$(cat ~/.oauth_token)"
+ cd "$ZIGDIR"
+ ./ci/srht/on_master_success "$VERSION" "$OAUTH_TOKEN"
+ fi
fi
diff --git a/ci/srht/on_master_success b/ci/srht/on_master_success
new file mode 100755
index 0000000000..c5a01f3bfe
--- /dev/null
+++ b/ci/srht/on_master_success
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# This script must run on a lot of different platforms.
+# It assumes that the following things are installed:
+# * curl
+# * jq
+# * cat
+
+# We do not set -x because this would leak the oauth access token.
+set +x
+
+set -e
+
+VERSION="$1"
+OAUTH_TOKEN="$2"
+YML_FILE="tmp.yml"
+
+cat <<EOF >"$YML_FILE"
+image: alpine/latest
+packages:
+ - py3-pip
+ - curl
+ - jq
+ - xz
+secrets:
+ - 6c60aaee-92e7-4e7d-812c-114817689b4d
+sources:
+ - https://github.com/ziglang/zig
+tasks:
+ - build: cd zig && ./ci/srht/update_download_page $VERSION
+EOF
+
+jq <$YML_FILE -sR '{
+ "manifest": .,
+ }' | curl \
+ -H Authorization:"token $OAUTH_TOKEN" \
+ -H Content-Type:application/json \
+ -X POST \
+ -d @- "https://builds.sr.ht/api/jobs"
diff --git a/ci/srht/update_download_page b/ci/srht/update_download_page
new file mode 100755
index 0000000000..1a721bec80
--- /dev/null
+++ b/ci/srht/update_download_page
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+set -x
+set -e
+
+VERSION="$1"
+SRCDIR="$(pwd)"
+NATIVE_TARBALL="zig-linux-$(uname -m)-$VERSION.tar.xz"
+
+# Check for all the builds being completed. It's expected that this script is run several times
+# before they are all complete.
+AARCH64_LINUX_JSON_URL="https://ziglang.org/builds/aarch64-linux-$VERSION.json"
+X86_64_LINUX_JSON_URL="https://ziglang.org/builds/x86_64-linux-$VERSION.json"
+X86_64_WINDOWS_JSON_URL="https://ziglang.org/builds/x86_64-windows-$VERSION.json"
+X86_64_MACOS_JSON_URL="https://ziglang.org/builds/x86_64-macos-$VERSION.json"
+X86_64_FREEBSD_JSON_URL="https://ziglang.org/builds/x86_64-freebsd-$VERSION.json"
+
+# If any of these fail, it's not really this job failing; rather we have detected
+# that this job will be called again later when other jobs have completed.
+curl --fail -I "$AARCH64_LINUX_JSON_URL" >/dev/null || exit 0
+curl --fail -I "$X86_64_LINUX_JSON_URL" >/dev/null || exit 0
+curl --fail -I "$X86_64_WINDOWS_JSON_URL" >/dev/null || exit 0
+curl --fail -I "$X86_64_MACOS_JSON_URL" >/dev/null || exit 0
+curl --fail -I "$X86_64_FREEBSD_JSON_URL" >/dev/null || exit 0
+
+# Without --user, this gave me:
+# ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied
+pip3 install s3cmd --user
+S3CMD="$HOME/.local/bin/s3cmd"
+
+rm -rf .git
+
+cd "$HOME"
+wget "https://ziglang.org/builds/$NATIVE_TARBALL"
+tar xf "$NATIVE_TARBALL"
+ZIGDIR=$(basename $NATIVE_TARBALL .tar.xz)
+ZIG="$ZIGDIR/zig"
+LANGREF="$ZIGDIR/langref.html"
+SRCTARBALLDIR="zig-$VERSION"
+export SRC_TARBALL="$SRCTARBALLDIR.tar.xz"
+mv "$SRCDIR" "$SRCTARBALLDIR"
+tar cfJ "$SRC_TARBALL" "$SRCTARBALLDIR"
+export SRC_SHASUM=$(sha256sum $SRC_TARBALL | cut '-d ' -f1)
+export SRC_BYTESIZE=$(wc -c < $SRC_TARBALL)
+
+X86_64_WINDOWS_JSON=$(curl --fail "$X86_64_WINDOWS_JSON_URL" || exit 1)
+export X86_64_WINDOWS_TARBALL="$(echo "$X86_64_WINDOWS_JSON" | jq .tarball -r)"
+export X86_64_WINDOWS_BYTESIZE="$(echo "$X86_64_WINDOWS_JSON" | jq .size -r)"
+export X86_64_WINDOWS_SHASUM="$(echo "$X86_64_WINDOWS_JSON" | jq .shasum -r)"
+
+X86_64_MACOS_JSON=$(curl --fail "$X86_64_MACOS_JSON_URL" || exit 1)
+export X86_64_MACOS_TARBALL="$(echo "$X86_64_MACOS_JSON" | jq .tarball -r)"
+export X86_64_MACOS_BYTESIZE="$(echo "$X86_64_MACOS_JSON" | jq .size -r)"
+export X86_64_MACOS_SHASUM="$(echo "$X86_64_MACOS_JSON" | jq .shasum -r)"
+
+X86_64_LINUX_JSON=$(curl --fail "$X86_64_LINUX_JSON_URL" || exit 1)
+export X86_64_LINUX_TARBALL="$(echo "$X86_64_LINUX_JSON" | jq .tarball -r)"
+export X86_64_LINUX_BYTESIZE="$(echo "$X86_64_LINUX_JSON" | jq .size -r)"
+export X86_64_LINUX_SHASUM="$(echo "$X86_64_LINUX_JSON" | jq .shasum -r)"
+
+AARCH64_LINUX_JSON=$(curl --fail "$AARCH64_LINUX_JSON_URL" || exit 1)
+export AARCH64_LINUX_TARBALL="$(echo "$AARCH64_LINUX_JSON" | jq .tarball -r)"
+export AARCH64_LINUX_BYTESIZE="$(echo "$AARCH64_LINUX_JSON" | jq .size -r)"
+export AARCH64_LINUX_SHASUM="$(echo "$AARCH64_LINUX_JSON" | jq .shasum -r)"
+
+X86_64_FREEBSD_JSON=$(curl --fail "$X86_64_FREEBSD_JSON_URL" || exit 1)
+export X86_64_FREEBSD_TARBALL="$(echo "$X86_64_FREEBSD_JSON" | jq .tarball -r)"
+export X86_64_FREEBSD_BYTESIZE="$(echo "$X86_64_FREEBSD_JSON" | jq .size -r)"
+export X86_64_FREEBSD_SHASUM="$(echo "$X86_64_FREEBSD_JSON" | jq .shasum -r)"
+
+git clone https://github.com/ziglang/www.ziglang.org --depth 1
+cd www.ziglang.org
+export MASTER_DATE="$(date +%Y-%m-%d)"
+"../$ZIG" run update-download-page.zig
+
+$S3CMD put -P --no-mime-magic --add-header="cache-control: public, max-age=31536000, immutable" "../$SRC_TARBALL" s3://ziglang.org/builds/
+$S3CMD put -P --no-mime-magic "../$LANGREF" s3://ziglang.org/documentation/master/index.html --add-header="Cache-Control: max-age=0, must-revalidate"
+$S3CMD put -P --no-mime-magic www/download/index.html s3://ziglang.org/download/index.html --add-header="Cache-Control: max-age=0, must-revalidate"
+$S3CMD put -P --no-mime-magic www/download/index.json s3://ziglang.org/download/index.json --add-header="Cache-Control: max-age=0, must-revalidate"