name: Publish
on:
  # Note that the main branch will be used regardless of the branch chosen
  # in the web interface.
  workflow_dispatch:
  schedule:
  - cron: '0 0 * * *'
jobs:
  release:
    name: Packages
    if: github.repository == 'AssemblyScript/assemblyscript'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        ref: main
        fetch-depth: 0
    - uses: actions/setup-node@v4
      with:
        node-version: current
    - name: Install dependencies
      run: npm ci
    - name: Build packages
      run: |
        VERSION=$(npx aspublish --version)
        if [[ "$VERSION" == "" ]]; then
          echo "Changes do not trigger a release"
        elif [[ "$VERSION" != "0."* ]]; then
          echo "Unexpected version: $VERSION"
          exit 1
        else
          echo "Building version: $VERSION"
          npm version "$VERSION" --no-git-tag-version
          npm run build
          npm test
          cd lib/loader
          npm version "$VERSION" --no-git-tag-version
          npm run build
          npm test
          cd ../rtrace
          npm version "$VERSION" --no-git-tag-version
          npm run build
          npm test
          cd ../..
        fi
    - name: Publish packages
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      run: |
        node ./scripts/prepublish
        if [ $(node -pe "require('./package.json').version") != "0.0.0" ]; then
          npx aspublish
        fi
        cd lib/loader
        if [ $(node -pe "require('./package.json').version") != "0.0.0" ]; then
          npm publish --access public
        fi
        cd ../rtrace
        if [ $(node -pe "require('./package.json').version") != "0.0.0" ]; then
          npm publish --access public
        fi
        cd ../..
        node ./scripts/prepublish --reset
