name: Windows on: pull_request: push: branches: - dev - release concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build-windows: runs-on: windows-2022 outputs: version: ${{ steps.version.outputs.version }} steps: - name: Configure pagefile uses: al-cheb/configure-pagefile-action@v1.4 with: minimum-size: 8GB maximum-size: 24GB disk-root: "C:" - uses: brechtm/setup-scoop@v2 with: scoop_update: 'false' - name: Install Dependencies shell: bash run: | scoop install ninja binaryen - name: Checkout uses: actions/checkout@v4 with: submodules: true - name: Extract TinyGo version id: version shell: bash run: ./.github/workflows/tinygo-extract-version.sh | tee -a "$GITHUB_OUTPUT" - name: Install Go uses: actions/setup-go@v5 with: go-version: '1.23' cache: true - name: Restore cached LLVM source uses: actions/cache/restore@v4 id: cache-llvm-source with: key: llvm-source-18-windows-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 cached LLVM source uses: actions/cache/save@v4 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 cached LLVM build uses: actions/cache/restore@v4 id: cache-llvm-build with: key: llvm-build-18-windows-v2 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 # build! make llvm-build CCACHE=OFF # Remove unnecessary object files (to reduce cache size). find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \; - name: Save cached LLVM build uses: actions/cache/save@v4 if: steps.cache-llvm-build.outputs.cache-hit != 'true' with: key: ${{ steps.cache-llvm-build.outputs.cache-primary-key }} path: llvm-build - name: Cache wasi-libc sysroot uses: actions/cache@v4 id: cache-wasi-libc with: key: wasi-libc-sysroot-v5 path: lib/wasi-libc/sysroot - name: Build wasi-libc if: steps.cache-wasi-libc.outputs.cache-hit != 'true' run: make wasi-libc - name: Cache Go cache uses: actions/cache@v4 with: key: go-cache-windows-v1-${{ hashFiles('go.mod') }} path: | C:/Users/runneradmin/AppData/Local/go-build C:/Users/runneradmin/go/pkg/mod - name: Install wasmtime run: | scoop install wasmtime@14.0.4 - name: make gen-device run: make -j3 gen-device - name: Test TinyGo shell: bash run: make test GOTESTFLAGS="-short" - name: Build TinyGo release tarball shell: bash run: make build/release -j4 - name: Make release artifact shell: bash working-directory: build/release run: 7z -tzip a tinygo${{ steps.version.outputs.version }}.windows-amd64.zip tinygo - 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 dobule-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@v4 with: name: windows-amd64-double-zipped-${{ steps.version.outputs.version }} path: build/release/tinygo${{ steps.version.outputs.version }}.windows-amd64.zip smoke-test-windows: runs-on: windows-2022 needs: build-windows steps: - name: Configure pagefile uses: al-cheb/configure-pagefile-action@v1.4 with: minimum-size: 8GB maximum-size: 24GB disk-root: "C:" - uses: brechtm/setup-scoop@v2 with: scoop_update: 'false' - name: Install Dependencies shell: bash run: | scoop install binaryen - name: Checkout uses: actions/checkout@v4 - name: Install Go uses: actions/setup-go@v5 with: go-version: '1.23' cache: true - name: Download TinyGo build uses: actions/download-artifact@v4 with: name: windows-amd64-double-zipped-${{ needs.build-windows.outputs.version }} path: build/ - name: Unzip TinyGo build shell: bash working-directory: build run: 7z x tinygo*.windows-amd64.zip -r - name: Smoke tests shell: bash run: make smoketest TINYGO=$(PWD)/build/tinygo/bin/tinygo stdlib-test-windows: runs-on: windows-2022 needs: build-windows steps: - name: Configure pagefile uses: al-cheb/configure-pagefile-action@v1.4 with: minimum-size: 8GB maximum-size: 24GB disk-root: "C:" - name: Checkout uses: actions/checkout@v4 - name: Install Go uses: actions/setup-go@v5 with: go-version: '1.23' cache: true - name: Download TinyGo build uses: actions/download-artifact@v4 with: name: windows-amd64-double-zipped-${{ needs.build-windows.outputs.version }} path: build/ - name: Unzip TinyGo build shell: bash working-directory: build run: 7z x tinygo*.windows-amd64.zip -r - name: Test stdlib packages run: make tinygo-test TINYGO=$(PWD)/build/tinygo/bin/tinygo stdlib-wasi-test-windows: runs-on: windows-2022 needs: build-windows steps: - name: Configure pagefile uses: al-cheb/configure-pagefile-action@v1.4 with: minimum-size: 8GB maximum-size: 24GB disk-root: "C:" - uses: brechtm/setup-scoop@v2 with: scoop_update: 'false' - name: Install Dependencies shell: bash run: | scoop install binaryen && scoop install wasmtime@14.0.4 - name: Checkout uses: actions/checkout@v4 - name: Install Go uses: actions/setup-go@v5 with: go-version: '1.23' cache: true - name: Download TinyGo build uses: actions/download-artifact@v4 with: name: windows-amd64-double-zipped-${{ needs.build-windows.outputs.version }} path: build/ - name: Unzip TinyGo build shell: bash working-directory: build run: 7z x tinygo*.windows-amd64.zip -r - name: Test stdlib packages on wasip1 run: make tinygo-test-wasip1-fast TINYGO=$(PWD)/build/tinygo/bin/tinygo