# This is a composition of lint and test scripts
# Make sure to update this file along with the others

name: Test and Release

# Run this job on all pushes and pull requests
# as well as tags with a semantic version
on:
  push:
    branches:
      - '*'
    tags:
      # normal versions
      - 'v?[0-9]+.[0-9]+.[0-9]+'
      # pre-releases
      - 'v?[0-9]+.[0-9]+.[0-9]+-**'
  pull_request: {}

# Cancel previous PR/branch runs when a new commit is pushed
concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

jobs:
  # Performs quick checks before the expensive test runs
  check-and-lint:
    if: contains(github.event.head_commit.message, '[skip ci]') == false

    runs-on: ubuntu-latest

    steps:
      - uses: ioBroker/testing-action-check@v2.0.0
        with:
          node-version: '24.x'
          test-command: 'false'  # Skip tests in this step
          lint: true

  # Runs adapter tests on all supported node versions and OSes
  adapter-tests:
    if: contains(github.event.head_commit.message, '[skip ci]') == false

    needs: [check-and-lint]

    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [20.x, 22.x, 24.x]

    steps:
      - uses: ioBroker/testing-action-adapter@v1
        with:
          build: true
          os: 'ubuntu-latest'
          node-version: ${{ matrix.node-version }}

  # Deploys the final package to NPM
  deploy:
    needs: [check-and-lint, adapter-tests]

    # Permissions are required to create GitHub releases and npm trusted publishing
    permissions:
      contents: write
      id-token: write

    # Trigger this step only when a commit on any branch is tagged with a version number
    if: |
      contains(github.event.head_commit.message, '[skip ci]') == false &&
      github.event_name == 'push' &&
      startsWith(github.ref, 'refs/tags/v')

    runs-on: ubuntu-latest

    steps:
      - uses: ioBroker/testing-action-deploy@v1
        with:
          node-version: '24.x'
          build: true
          github-token: ${{ secrets.GITHUB_TOKEN }}
