name: Build and release on: push: branches: - master tags: - 'v*' pull_request: branches: - master schedule: - cron: '0 2 * * *' jobs: build-linux: name: Build linux binary runs-on: ${{ matrix.os }} env: CABAL_VER: 3.6.2.0 JSON_VERSION: "0.0.7" AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ secrets.S3_HOST }} strategy: fail-fast: true matrix: include: - os: ubuntu-latest ARTIFACT: "i386-linux-ghcup" GHC_VER: 8.10.7 ARCH: 32 - os: ubuntu-latest ARTIFACT: "x86_64-linux-ghcup" GHC_VER: 8.10.7 ARCH: 64 steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - if: matrix.ARCH == '32' name: Run build (32 bit linux) uses: docker://hasufell/i386-alpine-haskell:3.12 with: args: sh .github/scripts/build.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: Alpine AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ env.S3_HOST }} - if: matrix.ARCH == '64' name: Run build (64 bit linux) uses: docker://hasufell/alpine-haskell:3.12 with: args: sh .github/scripts/build.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: Alpine AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ env.S3_HOST }} - if: always() name: Upload artifact uses: actions/upload-artifact@v3 with: name: artifacts path: | ./out/* build-arm: name: Build ARM binary runs-on: ${{ matrix.os }} env: CABAL_VER: 3.6.2.0 JSON_VERSION: "0.0.7" AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ secrets.S3_HOST }} strategy: fail-fast: true matrix: include: - os: [self-hosted, Linux, aarch64] ARTIFACT: "armv7-linux-ghcup" GHC_VER: 8.10.7 ARCH: ARM - os: [self-hosted, Linux, aarch64] ARTIFACT: "aarch64-linux-ghcup" GHC_VER: 8.10.7 ARCH: ARM64 steps: - uses: docker://arm64v8/ubuntu:focal name: Cleanup (aarch64 linux) with: args: rm -rf .ghcup/ cabal/ dist-newstyle/ out/ - name: git config run: | git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*" shell: bash - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - if: matrix.ARCH == 'ARM' uses: docker://hasufell/arm32v7-ubuntu-haskell:focal name: Run build (armv7 linux) with: args: sh .github/scripts/build.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: Ubuntu AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ env.S3_HOST }} - if: matrix.ARCH == 'ARM64' uses: docker://hasufell/arm64v8-ubuntu-haskell:focal name: Run build (aarch64 linux) with: args: sh .github/scripts/build.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: Ubuntu AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ env.S3_HOST }} - if: always() name: Upload artifact uses: actions/upload-artifact@v3 with: name: artifacts path: | ./out/* build-macwin: name: Build binary (Mac/Win) runs-on: ${{ matrix.os }} env: CABAL_VER: 3.6.2.0 MACOSX_DEPLOYMENT_TARGET: 10.13 JSON_VERSION: "0.0.7" AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ secrets.S3_HOST }} strategy: fail-fast: false matrix: include: - os: [self-hosted, macOS, aarch64] ARTIFACT: "aarch64-apple-darwin-ghcup" GHC_VER: 9.2.5 ARCH: ARM64 - os: macOS-10.15 ARTIFACT: "x86_64-apple-darwin-ghcup" GHC_VER: 9.2.5 ARCH: 64 - os: windows-latest ARTIFACT: "x86_64-mingw64-ghcup" GHC_VER: 8.10.7 ARCH: 64 steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - name: Run build (windows/mac) run: bash .github/scripts/build.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: na AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ env.S3_HOST }} HOMEBREW_CHANGE_ARCH_TO_ARM: 1 - if: always() name: Upload artifact uses: actions/upload-artifact@v3 with: name: artifacts path: | ./out/* test-linux: name: Test linux needs: "build-linux" runs-on: ${{ matrix.os }} env: CABAL_VER: 3.6.2.0 JSON_VERSION: "0.0.7" strategy: matrix: include: - os: ubuntu-latest ARTIFACT: "i386-linux-ghcup" GHC_VER: 8.10.7 ARCH: 32 DISTRO: Alpine - os: ubuntu-latest ARTIFACT: "x86_64-linux-ghcup" GHC_VER: 8.10.7 ARCH: 64 DISTRO: Alpine - os: ubuntu-latest ARTIFACT: "x86_64-linux-ghcup" GHC_VER: 8.10.7 ARCH: 64 DISTRO: Ubuntu steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - uses: actions/download-artifact@v3 with: name: artifacts path: ./out - if: matrix.ARCH == '32' && matrix.DISTRO == 'Alpine' name: Run test (32 bit linux Alpine) uses: docker://hasufell/i386-alpine-haskell:3.12 with: args: sh .github/scripts/test.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: ${{ matrix.DISTRO }} - if: matrix.ARCH == '64' && matrix.DISTRO == 'Alpine' name: Run test (64 bit linux Alpine) uses: docker://hasufell/alpine-haskell:3.12 with: args: sh .github/scripts/test.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: ${{ matrix.DISTRO }} - if: matrix.DISTRO != 'Alpine' name: Run test (64 bit linux) run: sh .github/scripts/test.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: ${{ matrix.DISTRO }} APT_GET: "sudo apt-get" test-arm: name: Test ARM needs: "build-arm" runs-on: ${{ matrix.os }} env: CABAL_VER: 3.6.2.0 JSON_VERSION: "0.0.7" strategy: matrix: include: - os: [self-hosted, Linux, aarch64] ARTIFACT: "armv7-linux-ghcup" GHC_VER: 8.10.7 ARCH: ARM DISTRO: Ubuntu - os: [self-hosted, Linux, aarch64] ARTIFACT: "aarch64-linux-ghcup" GHC_VER: 8.10.7 ARCH: ARM64 DISTRO: Ubuntu steps: - uses: docker://arm64v8/ubuntu:focal name: Cleanup (aarch64 linux) with: args: rm -rf .ghcup/ cabal/ dist-newstyle/ out/ - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - uses: actions/download-artifact@v3 with: name: artifacts path: ./out - if: matrix.ARCH == 'ARM' uses: docker://hasufell/arm32v7-ubuntu-haskell:focal name: Run build (armv7 linux) with: run: sh .github/scripts/test.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: Ubuntu - if: matrix.ARCH == 'ARM64' uses: docker://hasufell/arm64v8-ubuntu-haskell:focal name: Run build (aarch64 linux) with: run: sh .github/scripts/test.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: Ubuntu test-macwin: name: Test Mac/Win needs: "build-macwin" runs-on: ${{ matrix.os }} env: CABAL_VER: 3.6.2.0 MACOSX_DEPLOYMENT_TARGET: 10.13 JSON_VERSION: "0.0.7" strategy: matrix: include: - os: [self-hosted, macOS, aarch64] ARTIFACT: "aarch64-apple-darwin-ghcup" GHC_VER: 9.2.5 ARCH: ARM64 DISTRO: na - os: macOS-10.15 ARTIFACT: "x86_64-apple-darwin-ghcup" GHC_VER: 9.2.5 ARCH: 64 DISTRO: na - os: windows-latest ARTIFACT: "x86_64-mingw64-ghcup" GHC_VER: 8.10.7 ARCH: 64 DISTRO: na steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - uses: actions/download-artifact@v3 with: name: artifacts path: ./out - name: Run test (windows/mac) run: bash .github/scripts/test.sh env: ARTIFACT: ${{ matrix.ARTIFACT }} ARCH: ${{ matrix.ARCH }} GHC_VER: ${{ matrix.GHC_VER }} DISTRO: ${{ matrix.DISTRO }} HOMEBREW_CHANGE_ARCH_TO_ARM: 1 hls: name: hls needs: build-linux runs-on: ubuntu-latest env: GHC_VERSION: "8.10.7" HLS_TARGET_VERSION: "1.8.0.0" CABAL_VERSION: "3.6.2.0" JSON_VERSION: "0.0.7" ARTIFACT: "x86_64-linux-ghcup" DISTRO: Ubuntu ARCH: 64 AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} S3_HOST: ${{ secrets.S3_HOST }} steps: - name: Checkout code uses: actions/checkout@v3 with: submodules: 'true' - uses: actions/download-artifact@v3 with: name: artifacts path: ./out - name: Run hls build run: sh .github/scripts/hls.sh env: APT_GET: "sudo apt-get" release: name: release needs: ["test-linux", "test-arm", "test-macwin", "hls"] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/v') steps: - name: Download artifacts uses: actions/download-artifact@v3 with: name: artifacts path: ./out - name: Release uses: softprops/action-gh-release@v1 with: draft: true files: | ./out/*