domjtalbot/nx-mesh

View on GitHub
.github/workflows/__changesets.yml

Summary

Maintainability
Test Coverage
name: 'Changesets'

on:
  workflow_call:
    inputs:
      affected:
        description: >
          Run for affected projects.
        required: false
        default: false
        type: boolean
      release:
        description: >
          Prepare changesets release or publish packages.

          Action is determined by Changesets.
        required: false
        default: false
        type: boolean
      snapshot:
        description: >
          Should a snapshot be published?
        required: false
        default: false
        type: boolean
      snapshot_tag:
        description: >
          What should the snapshot tag be?
        required: false
        default: 'latest'
        type: string
    outputs:
      released:
        description: >
          Has the next version been releaed?
        value: ${{ jobs.changesets.outputs.released == 'true' }}
    secrets:
      NX_CLOUD_ACCESS_TOKEN:
        description: 'The NX Cloud API token'
        required: true
      NX__TRIPPIN__API_KEY:
        description: 'The Trippin API Key'
        required: true

concurrency:
  group: changesets--${{ inputs.release }}--${{ inputs.snapshot_tag }}--${{ github.workflow }}--${{ github.ref }}

env:
  NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
  NX__TRIPPIN__API_KEY: ${{ secrets.NX__TRIPPIN__API_KEY }}

jobs:
  release:
    name: Release (${{ inputs.snapshot_tag }})
    runs-on: ubuntu-latest
    outputs:
      released: ${{ steps.changesets.outputs.published == 'true' }}
    steps:
      - name: Check out repository
        uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3
        with:
          fetch-depth: 0

      - name: Setup Job
        uses: ./.github/actions/setup-job
        with:
          node_version: 'lts/*'

      - name: Affected Production Build
        if: inputs.affected == true
        run: |
          pnpm nx affected \
            --target=build \
            --parallel=2 \
            --configuration=production

      - name: Build
        if: inputs.affected != true
        run: |
          pnpm nx run-many \
            --target=build \
            --parallel=2 \
            --all

      - name: Modify Workspace File
        run: |
          sed -e 's/packages\//dist\/packages\//g' pnpm-workspace.yaml > pnpm-workspace-dist.yaml
          mv pnpm-workspace-dist.yaml pnpm-workspace.yaml

      - name: Create Release Pull Request or Publish packages
        if: ${{ inputs.release == true }}
        id: changesets
        uses: changesets/action@v1
        with:
          # This expects you to have a script called release which does a build for your packages and calls changeset publish
          publish: pnpm changeset publish
          commit: 'ci(changesets): version packages'
          title: 'ci(changesets): version packages'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: Snapshot (${{ inputs.snapshot_tag }})
        if: ${{ inputs.snapshot == true && inputs.snapshot_tag != 'latest' && steps.changesets.outputs.published != 'true' }}
        uses: the-guild-org/changesets-snapshot-action@eeff4d8aecffd035c3d5513d9811f07893737425 # v0.0.1
        with:
          tag: ${{ inputs.snapshot_tag }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}