name: macOS on: pull_request: push: branches: - dev - release concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build-macos: name: build-macos runs-on: macos-11 steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: '1.18.1' - name: Install Dependencies shell: bash run: | HOMEBREW_NO_AUTO_UPDATE=1 brew install qemu binaryen - name: Install Xtensa toolchain shell: bash run: | curl -L https://github.com/espressif/crosstool-NG/releases/download/esp-2020r2/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-macos.tar.gz -o xtensa-esp32-elf-gcc8_2_0-esp-2020r2-macos.tar.gz sudo tar -C /usr/local -xf xtensa-esp32-elf-gcc8_2_0-esp-2020r2-macos.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-macos.tar.gz - name: Checkout uses: actions/checkout@v2 with: submodules: true - name: Cache LLVM source uses: actions/cache@v3 id: cache-llvm-source with: key: llvm-source-14-macos-v1 path: | llvm-project/clang/lib/Headers llvm-project/clang/include llvm-project/compiler-rt llvm-project/lld/include llvm-project/llvm/include - name: Download LLVM source if: steps.cache-llvm-source.outputs.cache-hit != 'true' run: make llvm-source - name: Cache LLVM build uses: actions/cache@v3 id: cache-llvm-build with: key: llvm-build-14-macos-v1 path: llvm-build - name: Build LLVM if: steps.cache-llvm-build.outputs.cache-hit != 'true' shell: bash run: | # fetch LLVM source rm -rf llvm-project make llvm-source # install dependencies HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake ninja # build! make llvm-build find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \; - name: Cache wasi-libc sysroot uses: actions/cache@v3 id: cache-wasi-libc with: key: wasi-libc-sysroot-v4 path: lib/wasi-libc/sysroot - name: Build wasi-libc if: steps.cache-wasi-libc.outputs.cache-hit != 'true' run: make wasi-libc - name: Test TinyGo shell: bash run: make test GOTESTFLAGS="-v -short" - name: Build TinyGo release tarball run: make release -j3 - name: Test stdlib packages run: make tinygo-test - name: Make release artifact shell: bash run: cp -p build/release.tar.gz build/tinygo.darwin-amd64.tar.gz - name: Publish release artifact # Note: this release artifact is double-zipped, see: # https://github.com/actions/upload-artifact/issues/39 # We can essentially pick one of these: # - have a double-zipped artifact when downloaded from the UI # - have a very slow artifact upload # We're doing the former here, to keep artifact uploads fast. uses: actions/upload-artifact@v2 with: name: release-double-zipped path: build/tinygo.darwin-amd64.tar.gz - name: Smoke tests shell: bash run: make smoketest TINYGO=$(PWD)/build/tinygo AVR=0 test-macos-homebrew: name: homebrew-install runs-on: macos-latest steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: '1.18' - name: Install LLVM shell: bash run: | HOMEBREW_NO_AUTO_UPDATE=1 brew install llvm@14 - name: Checkout uses: actions/checkout@v2 - name: Cache Go uses: actions/cache@v3 with: key: go-cache-macos-homebrew-v1-${{ hashFiles('go.mod') }} path: | ~/Library/Caches/go-build ~/go/pkg/mod - name: Build TinyGo run: go install - name: Check binary run: tinygo version