
The idea here is as follows: - Run all Linux and cross compilation tests in the asser-test-linux job. - Only run native tests on MacOS and Windows. This reduces testing time on MacOS and Windows, which are generally more expensive in CI. Also, by not duplicating tests in Windows and MacOS we can reduce overall CI usage a bit. I've also changed the assert-test-linux job a bit to so that the tests that are more likely to break and the tests that are only run in assert-test-linux are run first.
460 строки
14 КиБ
YAML
460 строки
14 КиБ
YAML
version: 2.1
|
|
|
|
commands:
|
|
submodules:
|
|
steps:
|
|
- run:
|
|
name: "Pull submodules"
|
|
command: git submodule update --init
|
|
install-node:
|
|
steps:
|
|
- run:
|
|
name: "Install node.js"
|
|
command: |
|
|
wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz
|
|
sudo tar -C /usr/local -xf node-v10.15.1-linux-x64.tar.xz
|
|
sudo ln -s /usr/local/node-v10.15.1-linux-x64/bin/node /usr/bin/node
|
|
rm node-v10.15.1-linux-x64.tar.xz
|
|
install-chrome:
|
|
steps:
|
|
- run:
|
|
name: "Install Chrome"
|
|
command: |
|
|
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
|
sudo apt install ./google-chrome-stable_current_amd64.deb
|
|
install-wasmtime:
|
|
steps:
|
|
- run:
|
|
name: "Install wasmtime"
|
|
command: |
|
|
curl https://wasmtime.dev/install.sh -sSf | bash
|
|
sudo ln -s ~/.wasmtime/bin/wasmtime /usr/local/bin/wasmtime
|
|
install-cmake:
|
|
steps:
|
|
- run:
|
|
name: "Install CMake"
|
|
command: |
|
|
wget https://github.com/Kitware/CMake/releases/download/v3.21.4/cmake-3.21.4-linux-x86_64.tar.gz
|
|
sudo tar --strip-components=1 -C /usr/local -xf cmake-3.21.4-linux-x86_64.tar.gz
|
|
install-xtensa-toolchain:
|
|
parameters:
|
|
variant:
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: "Install Xtensa toolchain"
|
|
command: |
|
|
curl -L https://github.com/espressif/crosstool-NG/releases/download/esp-2020r2/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<<parameters.variant>>.tar.gz -o xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<<parameters.variant>>.tar.gz
|
|
sudo tar -C /usr/local -xf xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<<parameters.variant>>.tar.gz
|
|
sudo ln -s /usr/local/xtensa-esp32-elf/bin/xtensa-esp32-elf-ld /usr/local/bin/xtensa-esp32-elf-ld
|
|
rm xtensa-esp32-elf-gcc8_2_0-esp-2020r2-<<parameters.variant>>.tar.gz
|
|
llvm-source-linux:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- llvm-source-11-v2
|
|
- run:
|
|
name: "Fetch LLVM source"
|
|
command: make llvm-source
|
|
- save_cache:
|
|
key: llvm-source-11-v2
|
|
paths:
|
|
- llvm-project/clang/lib/Headers
|
|
- llvm-project/clang/include
|
|
- llvm-project/lld/include
|
|
- llvm-project/llvm/include
|
|
hack-ninja-jobs:
|
|
steps:
|
|
- run:
|
|
name: "Hack Ninja to use less jobs"
|
|
command: |
|
|
echo -e '#!/bin/sh\n/usr/bin/ninja -j3 "$@"' > /go/bin/ninja
|
|
chmod +x /go/bin/ninja
|
|
build-binaryen-linux:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- binaryen-linux-v1
|
|
- run:
|
|
name: "Build Binaryen"
|
|
command: |
|
|
make binaryen
|
|
- save_cache:
|
|
key: binaryen-linux-v1
|
|
paths:
|
|
- build/wasm-opt
|
|
build-binaryen-linux-stretch:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- binaryen-linux-stretch-v1
|
|
- run:
|
|
name: "Build Binaryen"
|
|
command: |
|
|
CC=$PWD/llvm-build/bin/clang make binaryen
|
|
- save_cache:
|
|
key: binaryen-linux-stretch-v1
|
|
paths:
|
|
- build/wasm-opt
|
|
build-wasi-libc:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- wasi-libc-sysroot-v4
|
|
- run:
|
|
name: "Build wasi-libc"
|
|
command: make wasi-libc
|
|
- save_cache:
|
|
key: wasi-libc-sysroot-v4
|
|
paths:
|
|
- lib/wasi-libc/sysroot
|
|
test-linux:
|
|
parameters:
|
|
llvm:
|
|
type: string
|
|
steps:
|
|
- checkout
|
|
- submodules
|
|
- run:
|
|
name: "Install apt dependencies"
|
|
command: |
|
|
echo 'deb https://apt.llvm.org/buster/ llvm-toolchain-buster-<<parameters.llvm>> main' | sudo tee /etc/apt/sources.list.d/llvm.list
|
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
|
sudo apt-get update
|
|
sudo apt-get install --no-install-recommends \
|
|
llvm-<<parameters.llvm>>-dev \
|
|
clang-<<parameters.llvm>> \
|
|
libclang-<<parameters.llvm>>-dev \
|
|
lld-<<parameters.llvm>> \
|
|
gcc-avr \
|
|
avr-libc \
|
|
cmake \
|
|
ninja-build
|
|
- hack-ninja-jobs
|
|
- build-binaryen-linux
|
|
- restore_cache:
|
|
keys:
|
|
- go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }}
|
|
- go-cache-v2-{{ checksum "go.mod" }}
|
|
- llvm-source-linux
|
|
- run: go install -tags=llvm<<parameters.llvm>> .
|
|
- restore_cache:
|
|
keys:
|
|
- wasi-libc-sysroot-systemclang-v3
|
|
- run: make wasi-libc
|
|
- save_cache:
|
|
key: wasi-libc-sysroot-systemclang-v3
|
|
paths:
|
|
- lib/wasi-libc/sysroot
|
|
- run: make gen-device -j4
|
|
- run: make smoketest XTENSA=0
|
|
- save_cache:
|
|
key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }}
|
|
paths:
|
|
- ~/.cache/go-build
|
|
- /go/pkg/mod
|
|
- run: make fmt-check
|
|
assert-test-linux:
|
|
steps:
|
|
- checkout
|
|
- submodules
|
|
- run:
|
|
name: "Install apt dependencies"
|
|
command: |
|
|
sudo apt-get update
|
|
sudo apt-get install --no-install-recommends \
|
|
qemu-system-arm \
|
|
qemu-system-riscv32 \
|
|
qemu-user \
|
|
gcc-avr \
|
|
avr-libc \
|
|
ninja-build \
|
|
python3
|
|
- install-node
|
|
- install-wasmtime
|
|
- install-cmake
|
|
- hack-ninja-jobs
|
|
- restore_cache:
|
|
keys:
|
|
- go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }}
|
|
- go-cache-v2-{{ checksum "go.mod" }}
|
|
- llvm-source-linux
|
|
- restore_cache:
|
|
keys:
|
|
- llvm-build-11-linux-v4-assert
|
|
- run:
|
|
name: "Build LLVM"
|
|
command: |
|
|
if [ ! -f llvm-build/lib/liblldELF.a ]
|
|
then
|
|
# fetch LLVM source (may only have headers right now)
|
|
rm -rf llvm-project
|
|
make llvm-source
|
|
# build!
|
|
make ASSERT=1 llvm-build
|
|
find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \;
|
|
fi
|
|
- save_cache:
|
|
key: llvm-build-11-linux-v4-assert
|
|
paths:
|
|
llvm-build
|
|
- build-binaryen-linux
|
|
- build-wasi-libc
|
|
- run:
|
|
name: "Test TinyGo"
|
|
command: make ASSERT=1 test
|
|
no_output_timeout: 20m
|
|
environment:
|
|
# Note: -p=2 limits parallelism to two jobs at a time, which is
|
|
# necessary to keep memory consumption down and avoid OOM (for a
|
|
# 2CPU/4GB executor).
|
|
GOFLAGS: -p=2
|
|
- run:
|
|
name: "Build TinyGo"
|
|
command: |
|
|
make ASSERT=1
|
|
echo 'export PATH=$(pwd)/build:$PATH' >> $BASH_ENV
|
|
- run: make tinygo-test
|
|
- save_cache:
|
|
key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }}
|
|
paths:
|
|
- ~/.cache/go-build
|
|
- /go/pkg/mod
|
|
- install-xtensa-toolchain:
|
|
variant: "linux-amd64"
|
|
- run: make gen-device -j4
|
|
- run: make smoketest
|
|
- install-chrome
|
|
- run: make wasmtest
|
|
build-linux:
|
|
steps:
|
|
- checkout
|
|
- submodules
|
|
- run:
|
|
name: "Install apt dependencies"
|
|
command: |
|
|
sudo apt-get update
|
|
sudo apt-get install --no-install-recommends \
|
|
libgnutls30 libssl1.0.2 \
|
|
ninja-build \
|
|
python3
|
|
- install-cmake
|
|
- hack-ninja-jobs
|
|
- restore_cache:
|
|
keys:
|
|
- go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }}
|
|
- go-cache-v2-{{ checksum "go.mod" }}
|
|
- llvm-source-linux
|
|
- restore_cache:
|
|
keys:
|
|
- llvm-build-11-linux-v4-noassert
|
|
- run:
|
|
name: "Build LLVM"
|
|
command: |
|
|
if [ ! -f llvm-build/lib/liblldELF.a ]
|
|
then
|
|
# fetch LLVM source (may only have headers right now)
|
|
rm -rf llvm-project
|
|
make llvm-source
|
|
# build!
|
|
make llvm-build
|
|
find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \;
|
|
fi
|
|
- save_cache:
|
|
key: llvm-build-11-linux-v4-noassert
|
|
paths:
|
|
llvm-build
|
|
- build-binaryen-linux-stretch
|
|
- build-wasi-libc
|
|
- run:
|
|
name: "Install fpm"
|
|
command: |
|
|
sudo apt-get install ruby ruby-dev
|
|
sudo gem install --no-document fpm
|
|
- run:
|
|
name: "Build TinyGo release"
|
|
command: |
|
|
make release deb -j3
|
|
cp -p build/release.tar.gz /tmp/tinygo.linux-amd64.tar.gz
|
|
cp -p build/release.deb /tmp/tinygo_amd64.deb
|
|
- persist_to_workspace:
|
|
root: /tmp
|
|
paths:
|
|
- tinygo.linux-amd64.tar.gz
|
|
- store_artifacts:
|
|
path: /tmp/tinygo.linux-amd64.tar.gz
|
|
- store_artifacts:
|
|
path: /tmp/tinygo_amd64.deb
|
|
- save_cache:
|
|
key: go-cache-v2-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }}
|
|
paths:
|
|
- ~/.cache/go-build
|
|
- /go/pkg/mod
|
|
test-linux-build:
|
|
# Now run the smoke tests for the generated binary.
|
|
steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- checkout
|
|
- run:
|
|
name: "Install apt dependencies"
|
|
command: |
|
|
sudo apt-get update
|
|
sudo apt-get install --no-install-recommends \
|
|
gcc-avr \
|
|
avr-libc
|
|
- install-xtensa-toolchain:
|
|
variant: "linux-amd64"
|
|
- run:
|
|
name: "Extract release tarball"
|
|
command: |
|
|
mkdir -p ~/lib
|
|
tar -C ~/lib -xf /tmp/workspace/tinygo.linux-amd64.tar.gz
|
|
ln -s ~/lib/tinygo/bin/tinygo ~/go/bin/tinygo
|
|
tinygo version
|
|
- run: make smoketest
|
|
build-macos:
|
|
steps:
|
|
- checkout
|
|
- submodules
|
|
- run:
|
|
name: "Install dependencies"
|
|
command: |
|
|
curl https://dl.google.com/go/go1.17.darwin-amd64.tar.gz -o go1.17.darwin-amd64.tar.gz
|
|
sudo tar -C /usr/local -xzf go1.17.darwin-amd64.tar.gz
|
|
ln -s /usr/local/go/bin/go /usr/local/bin/go
|
|
HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake ninja
|
|
- install-xtensa-toolchain:
|
|
variant: "macos"
|
|
- restore_cache:
|
|
keys:
|
|
- go-cache-macos-v3-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }}
|
|
- go-cache-macos-v3-{{ checksum "go.mod" }}
|
|
- restore_cache:
|
|
keys:
|
|
- llvm-source-11-macos-v3
|
|
- run:
|
|
name: "Fetch LLVM source"
|
|
command: make llvm-source
|
|
- save_cache:
|
|
key: llvm-source-11-macos-v3
|
|
paths:
|
|
- llvm-project/clang/lib/Headers
|
|
- llvm-project/clang/include
|
|
- llvm-project/lld/include
|
|
- llvm-project/llvm/include
|
|
- restore_cache:
|
|
keys:
|
|
- llvm-build-11-macos-v5
|
|
- run:
|
|
name: "Build LLVM"
|
|
command: |
|
|
if [ ! -f llvm-build/lib/liblldELF.a ]
|
|
then
|
|
# fetch LLVM source (may only have headers right now)
|
|
rm -rf llvm-project
|
|
make llvm-source
|
|
# build!
|
|
make llvm-build
|
|
find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \;
|
|
fi
|
|
- save_cache:
|
|
key: llvm-build-11-macos-v5
|
|
paths:
|
|
llvm-build
|
|
- restore_cache:
|
|
keys:
|
|
- binaryen-macos-v1
|
|
- run:
|
|
name: "Build Binaryen"
|
|
command: |
|
|
if [ ! -f build/wasm-opt ]
|
|
then
|
|
make binaryen
|
|
fi
|
|
- save_cache:
|
|
key: binaryen-macos-v1
|
|
paths:
|
|
- build/wasm-opt
|
|
- restore_cache:
|
|
keys:
|
|
- wasi-libc-sysroot-macos-v4
|
|
- run:
|
|
name: "Build wasi-libc"
|
|
command: make wasi-libc
|
|
- save_cache:
|
|
key: wasi-libc-sysroot-macos-v4
|
|
paths:
|
|
- lib/wasi-libc/sysroot
|
|
- run:
|
|
name: "Test TinyGo"
|
|
command: make test GOTESTFLAGS="-v -short"
|
|
no_output_timeout: 20m
|
|
- run:
|
|
name: "Build TinyGo release"
|
|
command: |
|
|
make release -j3
|
|
cp -p build/release.tar.gz /tmp/tinygo.darwin-amd64.tar.gz
|
|
- store_artifacts:
|
|
path: /tmp/tinygo.darwin-amd64.tar.gz
|
|
- run:
|
|
name: "Extract release tarball"
|
|
command: |
|
|
mkdir -p ~/lib
|
|
tar -C /usr/local/opt -xf /tmp/tinygo.darwin-amd64.tar.gz
|
|
ln -s /usr/local/opt/tinygo/bin/tinygo /usr/local/bin/tinygo
|
|
tinygo version
|
|
- run: make smoketest AVR=0
|
|
- save_cache:
|
|
key: go-cache-macos-v3-{{ checksum "go.mod" }}-{{ .Environment.CIRCLE_BUILD_NUM }}
|
|
paths:
|
|
- ~/.cache/go-build
|
|
- /go/pkg/mod
|
|
|
|
jobs:
|
|
test-llvm11-go115:
|
|
docker:
|
|
- image: circleci/golang:1.15-buster
|
|
steps:
|
|
- test-linux:
|
|
llvm: "11"
|
|
test-llvm11-go116:
|
|
docker:
|
|
- image: circleci/golang:1.16-buster
|
|
steps:
|
|
- test-linux:
|
|
llvm: "11"
|
|
assert-test-linux:
|
|
docker:
|
|
- image: circleci/golang:1.17-buster
|
|
steps:
|
|
- assert-test-linux
|
|
build-linux:
|
|
docker:
|
|
- image: circleci/golang:1.17-stretch
|
|
steps:
|
|
- build-linux
|
|
test-linux-build:
|
|
docker:
|
|
- image: cimg/go:1.17
|
|
steps:
|
|
- test-linux-build
|
|
build-macos:
|
|
macos:
|
|
xcode: "11.1.0" # macOS 10.14
|
|
steps:
|
|
- build-macos
|
|
|
|
|
|
|
|
workflows:
|
|
test-all:
|
|
jobs:
|
|
- test-llvm11-go115
|
|
- test-llvm11-go116
|
|
- build-linux
|
|
- test-linux-build:
|
|
requires:
|
|
- build-linux
|
|
- build-macos
|
|
- assert-test-linux
|