mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-09-01 18:29:03 +00:00
e083ed31e6
The smoke test ran six times for each push: twice on Linux, twice on macOS, once on Windows, and once in the compatibility test. Together that was about 97 minutes of the CI time. The smoke test checks that TinyGo can build a binary for each board. That does not depend on the host OS. The only part that does is one build behind a Windows check. Add a smoketest-linux job that runs the full set, split across four runners that use the tarball from the build-linux job. The groups are balanced with the measured build time of each group. Remove the full smoke test from test-linux-build, which the new job replaces, and use smoketest-quick for the other four jobs. Expected result: about 55 to 39 minutes for the slowest workflow, and about 97 to 35 minutes of total smoke test time.
146 lines
4.9 KiB
YAML
146 lines
4.9 KiB
YAML
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
|
|
strategy:
|
|
matrix:
|
|
# macos-14: arm64 (oldest supported version as of 18-11-2025)
|
|
# macos-15-intel: amd64 (last intel version to be supported by github runners)
|
|
# See https://github.com/actions/runner-images/issues/13046
|
|
os: [macos-14, macos-15-intel]
|
|
include:
|
|
- os: macos-14
|
|
goarch: arm64
|
|
- os: macos-15-intel
|
|
goarch: amd64
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Install Dependencies
|
|
run: |
|
|
HOMEBREW_NO_AUTO_UPDATE=1 brew install qemu binaryen
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
submodules: true
|
|
- name: Extract TinyGo version
|
|
id: version
|
|
run: ./.github/workflows/tinygo-extract-version.sh | tee -a "$GITHUB_OUTPUT"
|
|
- name: Install Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version: '1.27.0'
|
|
cache: true
|
|
- name: Restore LLVM source cache
|
|
uses: actions/cache/restore@v5
|
|
id: cache-llvm-source
|
|
with:
|
|
key: llvm-source-22-${{ matrix.os }}-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: Save LLVM source cache
|
|
uses: actions/cache/save@v5
|
|
if: steps.cache-llvm-source.outputs.cache-hit != 'true'
|
|
with:
|
|
key: ${{ steps.cache-llvm-source.outputs.cache-primary-key }}
|
|
path: |
|
|
llvm-project/clang/lib/Headers
|
|
llvm-project/clang/include
|
|
llvm-project/compiler-rt
|
|
llvm-project/lld/include
|
|
llvm-project/llvm/include
|
|
- name: Restore LLVM build cache
|
|
uses: actions/cache/restore@v5
|
|
id: cache-llvm-build
|
|
with:
|
|
key: llvm-build-22-${{ matrix.os }}-v1
|
|
path: llvm-build
|
|
- name: Build LLVM
|
|
if: steps.cache-llvm-build.outputs.cache-hit != 'true'
|
|
run: |
|
|
# fetch LLVM source
|
|
rm -rf llvm-project
|
|
make llvm-source
|
|
# install dependencies
|
|
HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja
|
|
# build!
|
|
make llvm-build
|
|
find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \;
|
|
- name: Save LLVM build cache
|
|
uses: actions/cache/save@v5
|
|
if: steps.cache-llvm-build.outputs.cache-hit != 'true'
|
|
with:
|
|
key: ${{ steps.cache-llvm-build.outputs.cache-primary-key }}
|
|
path: llvm-build
|
|
- name: make gen-device
|
|
run: make -j3 gen-device
|
|
- name: Test TinyGo
|
|
run: make test GOTESTFLAGS="-only-current-os"
|
|
- name: Build TinyGo release tarball
|
|
run: make release -j3
|
|
- name: Test stdlib packages
|
|
run: make tinygo-test
|
|
- name: Make release artifact
|
|
run: cp -p build/release.tar.gz build/tinygo${{ steps.version.outputs.version }}.darwin-${{ matrix.goarch }}.tar.gz
|
|
- name: Publish release artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: darwin-${{ matrix.goarch }}-double-zipped-${{ steps.version.outputs.version }}
|
|
path: build/tinygo${{ steps.version.outputs.version }}.darwin-${{ matrix.goarch }}.tar.gz
|
|
archive: false
|
|
- name: Smoke tests
|
|
run: make smoketest-quick TINYGO=$(PWD)/build/tinygo
|
|
test-macos-homebrew:
|
|
name: homebrew-install
|
|
runs-on: macos-latest
|
|
strategy:
|
|
matrix:
|
|
version: [16, 17, 18, 19, 20]
|
|
steps:
|
|
- name: Set up Homebrew
|
|
uses: Homebrew/actions/setup-homebrew@main
|
|
- name: Fix Python symlinks
|
|
run: |
|
|
# Github runners have broken symlinks, so relink
|
|
# see: https://github.com/actions/setup-python/issues/577
|
|
brew list -1 | grep python | while read formula; do brew unlink $formula; brew link --overwrite $formula; done
|
|
- name: Install LLVM
|
|
run: |
|
|
brew install llvm@${{ matrix.version }}
|
|
brew link llvm@${{ matrix.version }}
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
- name: Install Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version: '1.27.0'
|
|
cache: true
|
|
- name: Build TinyGo (LLVM ${{ matrix.version }})
|
|
run: go install -tags=llvm${{ matrix.version }}
|
|
- name: Check binary
|
|
run: tinygo version
|
|
- name: Build TinyGo (default LLVM)
|
|
if: matrix.version == 20
|
|
run: go install
|
|
- name: Check binary
|
|
if: matrix.version == 20
|
|
run: tinygo version
|