name: release

on:
  push:
    tags:
      - "v*.*.*"

jobs:
  linux-x86:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - uses: jirutka/setup-alpine@v1
        with:
          arch: x86
          packages: "build-base make cmake"
      - name: build
        shell: alpine.sh {0}
        run: |
          mkdir build
          cd build
          cmake -DBUILD_STATIC_QJS_EXE=ON ..
          cd ..
          cmake --build build --target qjs_exe -j$(getconf _NPROCESSORS_ONLN)
          cmake --build build --target qjsc -j$(getconf _NPROCESSORS_ONLN)
          mv build/qjs build/qjs-linux-x86
          mv build/qjsc build/qjsc-linux-x86
      - name: check
        shell: alpine.sh {0}
        run: |
          file build/qjs-linux-x86 build/qjsc-linux-x86
      - name: upload
        uses: actions/upload-artifact@v3
        with:
          name: qjs
          path: build/*-linux-x86

  linux-x86_64:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - uses: jirutka/setup-alpine@v1
        with:
          arch: x86_64
          packages: "build-base make cmake"
      - name: build
        shell: alpine.sh {0}
        run: |
          mkdir build
          cd build
          cmake -DBUILD_STATIC_QJS_EXE=ON ..
          cd ..
          cmake --build build --target qjs_exe -j$(getconf _NPROCESSORS_ONLN)
          cmake --build build --target qjsc -j$(getconf _NPROCESSORS_ONLN)
          mv build/qjs build/qjs-linux-x86_64
          mv build/qjsc build/qjsc-linux-x86_64
      - name: check
        shell: alpine.sh {0}
        run: |
          file build/qjs-linux-x86_64 build/qjsc-linux-x86_64
      - name: upload
        uses: actions/upload-artifact@v3
        with:
          name: qjs
          path: build/*-linux-x86_64

  macos:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: build
        run: |
          mkdir build
          cd build
          cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" ..
          make -j$(getconf _NPROCESSORS_ONLN)
          mv qjs qjs-darwin
          mv qjsc qjsc-darwin
      - name: check
        run: |
          lipo -info build/qjs-darwin build/qjsc-darwin
      - name: upload
        uses: actions/upload-artifact@v3
        with:
          name: qjs
          path: build/*-darwin

  windows-x86:
    runs-on: windows-latest
    defaults:
      run:
        shell: msys2 {0}
    steps:
      - uses: actions/checkout@v4
      - name: Setup MSYS2
        uses: msys2/setup-msys2@v2
        with:
          msystem: mingw32
          install: >-
            git
            make
          pacboy: >-
            cmake:p
            ninja:p
            toolchain:p
      - name: build
        run: |
          make
          mv build/qjs.exe build/qjs-windows-x86.exe
          mv build/qjsc.exe build/qjsc-windows-x86.exe
      - name: check
        run: |
          ldd build/qjs-windows-x86.exe build/qjsc-windows-x86.exe
      - name: upload
        uses: actions/upload-artifact@v3
        with:
          name: qjs
          path: build/*-windows-x86.exe

  windows-x86_64:
    runs-on: windows-latest
    defaults:
      run:
        shell: msys2 {0}
    steps:
      - uses: actions/checkout@v4
      - name: Setup MSYS2
        uses: msys2/setup-msys2@v2
        with:
          msystem: mingw64
          install: >-
            git
            make
          pacboy: >-
            cmake:p
            ninja:p
            toolchain:p
      - name: build
        run: |
          make
          mv build/qjs.exe build/qjs-windows-x86_64.exe
          mv build/qjsc.exe build/qjsc-windows-x86_64.exe
      - name: check
        run: |
          ldd build/qjs-windows-x86_64.exe build/qjsc-windows-x86_64.exe
      - name: upload
        uses: actions/upload-artifact@v3
        with:
          name: qjs
          path: build/*-windows-x86_64.exe

  wasi:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - name: setup wasi-sdk
        run: |
          wget -nv https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-21/wasi-sdk_21.0_amd64.deb -P /tmp
          sudo apt install /tmp/wasi-sdk*.deb
      - name: build
        run: |
          cmake -B build -DCMAKE_TOOLCHAIN_FILE=/opt/wasi-sdk/share/cmake/wasi-sdk.cmake
          make -C build qjs_exe
          mv build/qjs build/qjs-wasi.wasm
      - name: upload
        uses: actions/upload-artifact@v3
        with:
          name: qjs
          path: build/qjs-wasi.wasm

  upload-to-release:
    needs: [linux-x86, linux-x86_64, macos, windows-x86, windows-x86_64, wasi]
    runs-on: ubuntu-20.04
    steps:
      - name: get assets
        uses: actions/download-artifact@v3
        with:
          path: build
      - name: release
        uses: softprops/action-gh-release@v1
        with:
          files: |
            build/qjs/qjs-*
            build/qjs/qjsc-*