name: Create Release

# Trigger whenever a tag is created/updated

on:
  push:
    tags:
      - "*"

permissions:
  contents: write

jobs:
  build:
    name: build
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-14, windows-latest, windows-11-arm]
    defaults:
      run:
        shell: bash
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true

    - name: install ninja (macos)
      run: brew install ninja
      if: startsWith(matrix.os, 'macos')

    - name: install ninja (win)
      run: choco install ninja
      if: startsWith(matrix.os, 'windows')

    - name: mkdir
      run: mkdir -p out

    - name: cmake (macos)
      run: |
        cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install -DCMAKE_OSX_ARCHITECTURES=x86_64
        cmake -S . -B out-arm64 -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out-arm64/install -DCMAKE_OSX_ARCHITECTURES=arm64
      if: startsWith(matrix.os, 'macos')

    - name: cmake (win)
      # -G "Visual Studio 15 2017"
      run: cmake -S . -B out -DCMAKE_INSTALL_PREFIX=out/install
      if: matrix.os == 'windows-latest'

    - name: cmake (win arm64)
      # -G "Visual Studio 15 2017"
      run: cmake -S . -B out -DCMAKE_INSTALL_PREFIX=out-arm64/install 
      if: matrix.os == 'windows-11-arm'

    - name: build
      run: cmake --build out -v --config Release --target install

    - name: build-arm64
      run: cmake --build out-arm64 -v --config Release --target install
      if: startsWith(matrix.os, 'macos')

    - name: strip
      run: find out*/install/ -type f -perm -u=x -exec strip -x {} +
      if: ${{ !startsWith(matrix.os, 'windows') }}

    - name: archive
      id: archive
      run: |
        # Ignore all but the first component of the os name
        OSNAME=$(echo ${{ matrix.os }} | sed 's/-.*//')
        VERSION=$GITHUB_REF_NAME
        PKGNAME="binaryen-$VERSION-x86_64-$OSNAME"
        TARBALL=$PKGNAME.tar.gz
        SHASUM=$PKGNAME.tar.gz.sha256
        rm -rf binaryen-$VERSION
        mv out/install binaryen-$VERSION
        tar -czf $TARBALL binaryen-$VERSION
        # on Windows, MSYS2 will strip the carriage return from CMake output
        cmake -E sha256sum $TARBALL > $SHASUM
        echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT
        echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT
      if: matrix.os != 'windows-11-arm'

    - name: archive-arm64
      id: archive-arm64
      run: |
        # Ignore all but the first component of the os name
        OSNAME=$(echo ${{ matrix.os }} | sed 's/-.*//')
        VERSION=$GITHUB_REF_NAME
        PKGNAME="binaryen-$VERSION-arm64-$OSNAME"
        TARBALL=$PKGNAME.tar.gz
        SHASUM=$PKGNAME.tar.gz.sha256
        rm -rf binaryen-$VERSION
        mv out-arm64/install binaryen-$VERSION
        tar -czf $TARBALL binaryen-$VERSION
        # on Windows, MSYS2 will strip the carriage return from CMake output
        cmake -E sha256sum $TARBALL > $SHASUM
        echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT
        echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT
      if: ${{ matrix.os == 'macos-14' || matrix.os == 'windows-11-arm' }}

    - name: upload tarball
      uses: softprops/action-gh-release@v1
      with:
        draft: true
        files: |
          ${{ steps.archive.outputs.TARBALL }}
          ${{ steps.archive.outputs.SHASUM }}
          ${{ steps.archive-arm64.outputs.TARBALL }}
          ${{ steps.archive-arm64.outputs.SHASUM }}

  # Build with gcc 6.3 and run tests on Alpine Linux (inside chroot).
  # Keep in sync with ci.yml.
  # Note: Alpine uses musl libc.
  build-alpine:
    name: alpine
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, ubuntu-24.04-arm]
    steps:
    - uses: actions/setup-python@v5
      with:
        python-version: '3.x'
    - uses: actions/checkout@v4
      with:
        submodules: true

    - name: start docker
      run: |
        if [[ "${{ matrix.docker_platform }}" == "ubuntu-24.04-arm" ]]; then
          platform="--platform=linux/arm64"
        fi
        docker run -w /src -dit $platform --name alpine -v $PWD:/src node:lts-alpine
        echo 'docker exec alpine "$@";' > ./alpine.sh
        chmod +x ./alpine.sh

    - name: install packages
      run: |
        ./alpine.sh apk update
        ./alpine.sh apk add build-base cmake git python3 py3-pip clang ninja util-linux

    - name: avoid d8 tests (jsvu is not compatible with alpine)
      run: |
        ./alpine.sh rm -Rf test/lit/d8

    - name: install python dev dependencies
      run: ./alpine.sh pip3 install --break-system-packages -r requirements-dev.txt

    - name: cmake
      # Build with an 8MB stack size, as otherwise Alpine/musl's default stack
      # size for pthreads is tiny,
      # https://github.com/WebAssembly/binaryen/issues/8594
      run: |
        ./alpine.sh cmake . -G Ninja -DCMAKE_CXX_FLAGS="-static" -DCMAKE_C_FLAGS="-static" -DCMAKE_EXE_LINKER_FLAGS="-Wl,-z,stack-size=8388608" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DBUILD_MIMALLOC=ON -DCMAKE_INSTALL_PREFIX=install

    - name: build
      run: |
        ./alpine.sh ninja install

    - name: test
      run: ./alpine.sh python3 ./check.py

    - name: archive
      id: archive
      run: |
        VERSION=$GITHUB_REF_NAME
        ARCH=$(./alpine.sh uname -m)
        PKGNAME="binaryen-$VERSION-$ARCH-linux"
        TARBALL=$PKGNAME.tar.gz
        SHASUM=$PKGNAME.tar.gz.sha256
        ./alpine.sh find install/ -type f -perm -u=x -exec strip {} +
        mv install binaryen-$VERSION
        tar -czf $TARBALL binaryen-$VERSION
        cmake -E sha256sum $TARBALL > $SHASUM
        echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT
        echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT

    - name: upload tarball
      uses: softprops/action-gh-release@v1
      with:
        draft: true
        files: |
          ${{ steps.archive.outputs.TARBALL }}
          ${{ steps.archive.outputs.SHASUM }}

  # Build using Emscripten to JavaScript+WebAssembly.
  build-node:
    name: node
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
    steps:
    - uses: actions/setup-python@v5
      with:
        python-version: '3.x'
    - uses: actions/checkout@v1
      with:
        submodules: true
    - name: install ninja
      run: sudo apt-get install ninja-build
    - name: emsdk install
      run: |
        mkdir $HOME/emsdk
        git clone --depth 1 https://github.com/emscripten-core/emsdk.git $HOME/emsdk
        $HOME/emsdk/emsdk update-tags
        $HOME/emsdk/emsdk install tot
        $HOME/emsdk/emsdk activate tot
    - name: update path
      run:  echo "PATH=$PATH:$HOME/emsdk" >> $GITHUB_ENV

    # Configure with wasm EH and pthreads for maximal performance.
    - name: cmake
      run: |
        source $HOME/emsdk/emsdk_env.sh
        emcmake cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=out/install -DEMSCRIPTEN_ENABLE_WASM_EH=ON -DEMSCRIPTEN_ENABLE_PTHREADS=ON

    # Build wasm-opt for now TODO add other tools as desired
    - name: build
      run: ninja -C out wasm-opt

    # Minimal smoke test: roundtrip a file.
    # TODO: Add more testing here, but the full test suite is overkill as there
    #       is a 0.5 second cost to each run of wasm-opt.js
    - name: test
      run: |
        node out/bin/wasm-opt.js test/hello_world.wat --print > out/t.wat
        diff test/hello_world.wat out/t.wat

    - name: archive
      id: archive
      run: |
        VERSION=$GITHUB_REF_NAME
        PKGNAME="binaryen-$VERSION-node"
        TARBALL=$PKGNAME.tar.gz
        SHASUM=$PKGNAME.tar.gz.sha256
        mkdir binaryen-$VERSION
        cp out/bin/wasm-opt* binaryen-$VERSION/
        tar -czf $TARBALL binaryen-$VERSION
        cmake -E sha256sum $TARBALL > $SHASUM
        echo "TARBALL=$TARBALL" >> $GITHUB_OUTPUT
        echo "SHASUM=$SHASUM" >> $GITHUB_OUTPUT

    - name: upload tarball
      uses: softprops/action-gh-release@v1
      with:
        draft: true
        files: |
          ${{ steps.archive.outputs.TARBALL }}
          ${{ steps.archive.outputs.SHASUM }}
