---
name: action

permissions:
  contents: read

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - '*'
  workflow_dispatch: {}

env:
  GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

jobs:
  version:
    name: Version with commit unique id
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v6.0.2
      - name: Version it!
        run: |
          # We expect a string such as const setupBeamVersion = 'undefined' in the code
          SHA=$(git rev-parse --short HEAD)
          sed -i'.bak' \
              -e "s/const setupBeamVersion = '.*'/const setupBeamVersion = '${SHA}'/g" \
              src/setup-beam.js
          npm run build-dist
          git config user.name "GitHub Actions"
          git config user.email "actions@user.noreply.github.com"
          git add src/setup-beam.js
          git add dist/index.js
          git commit -m "Automation: update setup-beam version output to ${SHA}"
          git push origin main

  check_integrity:
    name: Expected local npm actions
    runs-on: ubuntu-latest
    if: github.ref != 'refs/heads/main'
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: actions/setup-node@v6.3.0
        with:
          node-version: '20'
      - run: npm run build-dist
      - name: Check if build left artifacts
        run: git diff --exit-code --ignore-space-at-eol

  check_action:
    name: Action
    runs-on: ubuntu-latest
    if: github.ref != 'refs/heads/main'
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: raven-actions/actionlint@v2.1.2

  unit_tests_ubuntu:
    name: Unit tests (Ubuntu)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: actions/setup-node@v6.3.0
        with:
          node-version: '20'
      - run: npm ci
      - run: npm test
        env:
          NODE_ENV: test
      - name: .tool-versions test
        id: setup-beam
        uses: ./
        with:
          install-rebar: false
          install-hex: false
          version-file: test/.tool-versions
          version-type: strict

  unit_tests_windows:
    name: Unit tests (Windows)
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: actions/setup-node@v6.3.0
        with:
          node-version: '20'
      - run: npm install --production
      - run: npm test
        env:
          NODE_ENV: test
      - name: .tool-versions test
        id: setup-beam
        uses: ./
        with:
          install-rebar: false
          install-hex: false
          version-file: test/.tool-versions
          version-type: strict

  unit_tests_macos:
    name: Unit tests (macOS)
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v6.0.2
      - uses: actions/setup-node@v6.3.0
        with:
          node-version: '20'
      - run: npm ci
      - run: npm test
        env:
          NODE_ENV: test
