name: Scratch Paint CI-CD

on:
  pull_request: # Runs whenever a pull request is created or updated
  push: # Runs whenever a commit is pushed to the repository...
    branches: [master, develop, beta, hotfix/*] # ...on any of these branches

concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

permissions: 
  contents: write
  pages: write
  issues: write
  pull-requests: write

jobs:
  ci-cd:
    runs-on: ubuntu-latest
    env:
        TRIGGER_DEPLOY: ${{ startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/heads/hotfix') || startsWith(github.ref, 'refs/heads/develop') || startsWith(github.ref, 'refs/heads/beta') }}
    steps: 
        - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
        - uses: wagoid/commitlint-github-action@b948419dd99f3fd78a6548d48f94e3df7f6bf3ed # v6
          if: github.event_name == 'pull_request'
        - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
          with:
            cache: "npm"
            node-version-file: ".nvmrc"
        - name: Info
          run: |
            cat <<EOF
            Node version: $(node --version)
            NPM version: $(npm --version)
            GitHub ref: ${{ github.ref }}
            GitHub head ref: ${{ github.head_ref }}
            EOF
        - name: Install NPM Dependencies
          run: |
            npm ci
            mkdir -p ./test/results
        - name: Run Lint
          run: npm run lint
        - name: Run Tests
          run: npm run test
        - name: Build
          run: npm run build
          env:
            NODE_ENV: production
        - name: Deploy playground to GitHub Pages
          if: ${{ env.TRIGGER_DEPLOY == 'true'}}
          uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
          with:
            github_token: ${{ secrets.GITHUB_TOKEN }}
            publish_dir: playground
            full_commit_message: "Build for ${{ github.sha }} ${{ github.event.head_commit.message }}"
        - name: Semantic Release
          if: ${{ env.TRIGGER_DEPLOY == 'true'}}
          env:
            NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          run: npx --no -- semantic-release

  