name: Release

on:
  push:
    tags:
      - v*.*.*

jobs:
  release:
    name: Create release
    runs-on: ubuntu-20.04
    steps:
      - name: Set variables
        id: init
        run: |
          echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
          echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
      - name: Checkout
        uses: actions/checkout@v4
      - name: Write release body
        id: body
        run: |
          FILENAME=RELEASE.md
          tee $FILENAME <<END
          ## Changes

          $(extras/scripts/extract_changes.awk CHANGELOG.md)

          [View version history](https://github.com/bblanchon/ArduinoJson/blob/${{ steps.init.outputs.tag }}/CHANGELOG.md)
          END
          echo "filename=$FILENAME" >> $GITHUB_OUTPUT
      - name: Amalgamate ArduinoJson.h
        id: amalgamate_h
        run: |
          FILENAME=ArduinoJson-${{ steps.init.outputs.tag }}.h
          extras/scripts/build-single-header.sh src/ArduinoJson.h "$FILENAME"
          echo "filename=$FILENAME" >> $GITHUB_OUTPUT
      - name: Amalgamate ArduinoJson.hpp
        id: amalgamate_hpp
        run: |
          FILENAME=ArduinoJson-${{ steps.init.outputs.tag }}.hpp
          extras/scripts/build-single-header.sh src/ArduinoJson.hpp "$FILENAME"
          echo "filename=$FILENAME" >> $GITHUB_OUTPUT
      - name: Create release
        uses: ncipollo/release-action@v1
        with:
          bodyFile: ${{ steps.body.outputs.filename }}
          name: ArduinoJson ${{ steps.init.outputs.version }}
          artifacts: ${{ steps.amalgamate_h.outputs.filename }},${{ steps.amalgamate_hpp.outputs.filename }}
          token: ${{ secrets.GITHUB_TOKEN }}

  idf:
    name: IDF Component Registry
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Upload component to the component registry
        uses: espressif/upload-components-ci-action@v1
        with:
          name: ArduinoJson
          namespace: bblanchon
          api_token: ${{ secrets.IDF_COMPONENT_API_TOKEN }}

  particle:
    name: Particle
    runs-on: ubuntu-latest
    steps:
      - name: Install
        run: npm install -g particle-cli
      - name: Checkout
        uses: actions/checkout@v4
      - name: Login
        run: particle login --token ${{ secrets.PARTICLE_TOKEN }}
      - name: Publish
        run: bash -eux extras/scripts/publish-particle-library.sh

  platformio:
    name: PlatformIO
    runs-on: ubuntu-latest
    steps:
      - name: Set up Python 3.x
        uses: actions/setup-python@v5
        with:
          python-version: "3.x"
      - name: Install PlatformIO
        run: pip install platformio
      - name: Checkout
        uses: actions/checkout@v4
      - name: Publish
        run: pio pkg publish --no-interactive --no-notify
        env:
          PLATFORMIO_AUTH_TOKEN: ${{ secrets.PLATFORMIO_AUTH_TOKEN }}
