name: Emscripten

on:
  workflow_dispatch:
  push:
    branches: [ master ]

jobs:
  js-build:
    name: Build liblouis for js

    runs-on: ubuntu-latest

    steps:
    - name: Harden Runner
      uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
      with:
        egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs

    - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

    # Contains tests and js snippets appended to builds. The tests are
    # not run for now. liblouis-js version should be incremented by
    # hand, to keep the repositories in sync.
    - name: Obtain liblouis-js
      run: git clone https://github.com/liblouis/liblouis-js.git

    - name: Pull the docker image
      run: docker pull dolp/liblouis-js-build-travis:1.37.3-64bit

    - name: Run the docker image
      run: docker run --rm -v $(pwd):/src dolp/liblouis-js-build-travis:1.37.3-64bit /bin/bash  ".github/workflows/scripts/emscripten-build.sh"

#    - name: Move the build result to a better place
#      run: |
#        cp -r ./out/* ./liblouis-js/js-build
#        cp -r ./out-emscripten-install/share/liblouis/tables ./liblouis-js/js-build/
#
#    - name: Echo phantomjs version
#      run: phantomjs --version
#
#    # `npm link` exposes the newly build npm package to the test
#    # runner. The `--production`-flag is necessary as it ensures that
#    # no publicly published package of the build is downloaded and
#    # tested instead.
#    - name: Build and test the npm package
#      run: |
#        cd ./liblouis-js
#        # FIXME: unclear why the npm link is needed
#        sudo npm link js-build --production
#        npm test
#        cd ..

    - name: Upload the release assets
      uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
      with:
        name: build-no-tables-utf32.js
        path: ./out/build-no-tables-utf32.js

    - name: Upload the assets to the snapshot release
      # only upload to snapshot page if it is a push to master in the main repo
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository =='liblouis/liblouis'}}
      uses: shogo82148/actions-upload-release-asset@8f6863c6c894ba46f9e676ef5cccec4752723c1e # v1.9.2
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        upload_url: https://uploads.github.com/repos/liblouis/liblouis/releases/8031256/assets{?name,label}
        asset_path: ./out/build-no-tables-utf32.js
        asset_name: build-no-tables-utf32.js
        asset_content_type: application/javascript
        overwrite: true

    - name: Publish JS file and tables to js-build
      # only publish if it is a push to master in the main repo
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository =='liblouis/liblouis'}}
      env:
        GITHUB_TOKEN: ${{ secrets.JS_BUILD_GITHUB_TOKEN }}
      run: |
        # clone the repository to a location outside of the liblouis
        # repository to avoid issues caused by nested repositories
        git clone --depth 1 https://github.com/liblouis/js-build.git ../js-build
        rm -f ../js-build/build-*.js
        rm -rf ../js-build/tables/
        cp -R ./out-emscripten-install/share/liblouis/tables/ ../js-build/tables/
        cp -Rf ./out/* ../js-build/
        cd ../js-build
        git add --all
        git remote set-url origin https://${GITHUB_TOKEN}@github.com/liblouis/js-build.git
        git config user.name "Github CI"
        git config user.email "liblouis@users.noreply.github.com"
        BUILD_VERSION=commit-$(echo $GITHUB_SHA | cut -c1-6)
        if [[ -z $(git diff --cached --exit-code) ]]; then
            : Build is identical to previous build. Omitting commit, only adding tag.
        else
            git commit -m "Automatic build of version ${BUILD_VERSION}"
            git push origin master:master
        fi
        git tag -a ${BUILD_VERSION} -m "automatic build for version ${BUILD_VERSION}"
        git push origin $BUILD_VERSION:$BUILD_VERSION
