name: Publish
description: "Run publish"

inputs:
  working-directory:
    description: "Working directory"
    required: true
  npm-auth-token:
    description: "NPM_AUTH_TOKEN"
    required: true

runs:
  using: "composite"
  steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
    - uses: actions/setup-node@v4
      with:
        node-version: 18.18.2

    - name: Install
      id: install
      shell: bash
      run: |
        yarn config set -H enableImmutableInstalls false 
        yarn

    - name: Lint
      id: check-eslint
      working-directory: ${{inputs.working-directory}}
      shell: bash
      run: |
        yarn lint:check

    - name: Test
      id: check-tests
      working-directory: ${{inputs.working-directory}}
      shell: bash
      run: |
        yarn workspaces foreach -R run build
        yarn test

    - name: Read Package Name from package.json
      id: package-json-name
      working-directory: ${{inputs.working-directory}}
      shell: bash
      run: |
        echo "PACKAGE_NAME=$(node -pe "require('./package.json')['name']")" >> $GITHUB_ENV

    - name: Read Version from package.json
      id: package-json-version
      working-directory: ${{inputs.working-directory}}
      shell: bash
      run: |
        echo "VERSION=$(node -pe "require('./package.json')['version']")" >> $GITHUB_ENV

    - name: Create .npmrc
      id: create-npmrc
      working-directory: ${{inputs.working-directory}}
      shell: bash
      env:
        NPM_AUTH_TOKEN: ${{inputs.npm-auth-token}}
      run: |
        echo 'npmAlwaysAuth: true' >> .yarnrc.yml
        echo 'npmAuthToken: "${NPM_AUTH_TOKEN}"' >> .yarnrc.yml
        echo 'npmRegistryServer: "https://registry.npmjs.org/"' >> .yarnrc.yml

    - name: Build & Publish
      id: run-yarn-publish
      working-directory: ${{inputs.working-directory}}
      shell: bash
      env:
        NPM_AUTH_TOKEN: ${{inputs.npm-auth-token}}
      run: |
        yarn build
        yarn npm publish --access=public
