name: daily
on:
  workflow_dispatch:
  schedule:
    - cron: '42 0 * * *' # daily at 00:42
concurrency:
  group: ${{ github.workflow }}
  cancel-in-progress: true

jobs:
  npm-nightly:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0  # Needed for git history and version tags

      - name: Check for changes
        id: check_changes
        run: |
          if [ $(git rev-list --count --since="24 hours ago" HEAD) -gt 0 ]; then
            echo "has_changes=true" >> $GITHUB_OUTPUT
            echo "Found changes in the last 24 hours, proceeding to publish d2js nightly"
          else
            echo "has_changes=false" >> $GITHUB_OUTPUT
            echo "No changes in the last 24 hours, skipping d2js nightly publish"
          fi

      - uses: actions/setup-go@v4
        if: steps.check_changes.outputs.has_changes == 'true'
        with:
          go-version-file: ./go.mod
          cache: true

      - name: Install binaryen for wasm-opt
        if: steps.check_changes.outputs.has_changes == 'true'
        run: |
          # Install newer version of binaryen from GitHub releases
          BINARYEN_VERSION="version_123"
          curl -L "https://github.com/WebAssembly/binaryen/releases/download/${BINARYEN_VERSION}/binaryen-${BINARYEN_VERSION}-x86_64-linux.tar.gz" | tar -xz
          sudo cp binaryen-${BINARYEN_VERSION}/bin/* /usr/local/bin/
          sudo cp -r binaryen-${BINARYEN_VERSION}/lib/* /usr/local/lib/ || true
          sudo cp -r binaryen-${BINARYEN_VERSION}/include/* /usr/local/include/ || true
          wasm-opt --version

      - name: Publish nightly version to NPM
        if: steps.check_changes.outputs.has_changes == 'true'
        run: |
          export NPM_VERSION=nightly
          COLOR=1 ./make.sh js
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
          DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
  ci:
    needs: [npm-nightly]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-go@v4
        with:
          go-version-file: ./go.mod
          cache: true
      - run: COLOR=1 CI_FORCE=1 ./make.sh all race
        env:
          GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}
          DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: d2chaos
          path: ./d2chaos/out
