diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 00000000..7dc5adad --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,85 @@ +name: Windows + +on: push + +jobs: + build-windows: + runs-on: windows-2016 + steps: + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: '1.17' + - name: Install QEMU + shell: bash + run: | + choco install qemu --version=2020.06.12 + echo "C:\Program Files\QEMU" >> $GITHUB_PATH + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: true + - name: Cache LLVM source + uses: actions/cache@v2 + id: cache-llvm-source + with: + key: llvm-source-11-windows-v1 + path: | + llvm-project/clang/lib/Headers + llvm-project/clang/include + 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@v2 + id: cache-llvm-build + with: + key: llvm-build-11-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 + # install dependencies + choco install ninja + # build! + make llvm-build + # Remove unnecessary object files (to reduce cache size). + find llvm-build -name CMakeFiles -prune -exec rm -r '{}' \; + - name: Cache wasi-libc sysroot + uses: actions/cache@v2 + id: cache-wasi-libc + with: + key: wasi-libc-sysroot-v1 + 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 + - name: Build TinyGo release tarball + run: make build/release -j4 + - name: Make release artifact + shell: bash + working-directory: build/release + run: 7z -tzip a release.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@v2 + with: + name: release-double-zipped + path: build/release/release.zip + - name: Smoke tests + shell: bash + run: make smoketest TINYGO=build/tinygo AVR=0 XTENSA=0 diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 6a983aae..00000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,88 +0,0 @@ -# Avoid lengthy LLVM rebuilds on each newly pushed branch. Pull requests will -# be built anyway. -trigger: -- release -- dev - -jobs: -- job: Build - timeoutInMinutes: 240 # 4h - pool: - vmImage: 'VS2017-Win2016' - steps: - - task: GoTool@0 - inputs: - version: '1.17' - - checkout: self - fetchDepth: 1 - - task: Cache@2 - displayName: Cache LLVM source - inputs: - key: llvm-source-11-windows-v1 - path: llvm-project - - task: Bash@3 - displayName: Download LLVM source - inputs: - targetType: inline - script: make llvm-source - - task: CacheBeta@0 - displayName: Cache LLVM build - inputs: - key: llvm-build-11-windows-v5 - path: llvm-build - - task: Bash@3 - displayName: Build LLVM - inputs: - targetType: inline - script: | - if [ ! -f llvm-build/lib/liblldELF.a ] - then - # install dependencies - choco install ninja - # hack ninja to use fewer jobs - echo -e 'C:\\ProgramData\\Chocolatey\\bin\\ninja -j4 %*' > /usr/bin/ninja.bat - # build! - make llvm-build - fi - - task: Bash@3 - displayName: Install QEMU - inputs: - targetType: inline - script: choco install qemu --version=2020.06.12 - - task: CacheBeta@0 - displayName: Cache wasi-libc sysroot - inputs: - key: wasi-libc-sysroot-v4 - path: lib/wasi-libc/sysroot - - task: Bash@3 - displayName: Build wasi-libc - inputs: - targetType: inline - script: PATH=/usr/bin:$PATH make wasi-libc - - task: Bash@3 - displayName: Test TinyGo - inputs: - targetType: inline - script: | - export PATH="$PATH:./llvm-build/bin:/c/Program Files/qemu" - unset GOROOT - make test - - task: Bash@3 - displayName: Build TinyGo release tarball - inputs: - targetType: inline - script: | - export PATH="$PATH:./llvm-build/bin:/c/Program Files/qemu" - unset GOROOT - make build/release -j4 - - publish: $(System.DefaultWorkingDirectory)/build/release/tinygo - displayName: Publish zip as artifact - artifact: tinygo - - task: Bash@3 - displayName: Smoke tests - inputs: - targetType: inline - script: | - export PATH="$PATH:./llvm-build/bin:/c/Program Files/qemu" - unset GOROOT - make smoketest TINYGO=build/tinygo AVR=0 XTENSA=0