feat: advanced state mapping support #63
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Publish | |
| on: | |
| pull_request: | |
| paths-ignore: | |
| - '.changeset/**' | |
| - '.husky/**' | |
| push: | |
| branches: | |
| - main | |
| concurrency: | |
| group: publish-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| id-token: write # Required for trusted publishing (OIDC) | |
| jobs: | |
| publish-canary: | |
| name: 'Build & canary release' | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| env: | |
| NODE_OPTIONS: --max-old-space-size=4096 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Update Corepack | |
| run: npm i -g corepack@latest | |
| - name: Enable Corepack (pre) | |
| run: corepack enable | |
| - name: Prepare pnpm (pre) | |
| run: corepack prepare [email protected] --activate | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: '.nvmrc' | |
| registry-url: 'https://registry.npmjs.org' | |
| cache: 'pnpm' | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Prepare pnpm | |
| run: corepack prepare [email protected] --activate | |
| # Ensure npm 11.5.1+ for trusted publishing | |
| - name: Update npm for trusted publishing | |
| run: npm install -g npm@latest | |
| - name: Verify npm version and OIDC availability | |
| run: | | |
| echo "npm version: $(npm --version)" | |
| echo "OIDC available: ${{ env.ACTIONS_ID_TOKEN_REQUEST_URL != '' }}" | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Set version info | |
| id: version | |
| run: | | |
| SHORT_SHA=$(git rev-parse --short "$GITHUB_SHA") | |
| VERSION="0.0.0-canary-$SHORT_SHA" | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "short_sha=$SHORT_SHA" >> $GITHUB_OUTPUT | |
| - name: Set canary version | |
| run: npm version ${{ steps.version.outputs.version }} --no-git-tag-version | |
| - name: Build project | |
| run: pnpm build | |
| - name: Clear .npmrc auth token (use OIDC instead) | |
| run: npm config delete //registry.npmjs.org/:_authToken || true | |
| - name: Publish canary to npm | |
| working-directory: ./dist | |
| run: npm publish --access public --tag pr_${{ github.event.number }} --provenance | |
| - name: Comment PR | |
| uses: actions/github-script@v6 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| const setMessage = require('${{ github.workspace }}/scripts/ci/set-message.cjs') | |
| await setMessage({ | |
| header: "## :package: NPM canary release", | |
| body: 'Deployed canary version [${{ steps.version.outputs.version }}](https://www.npmjs.com/package/@cube-dev/ui-kit/v/${{ steps.version.outputs.version }}).', | |
| github, | |
| repo: context.repo, | |
| prNumber: ${{ github.event.number }} | |
| }) | |
| publish-release: | |
| name: 'Publish release' | |
| if: github.event_name == 'push' | |
| runs-on: ubuntu-latest | |
| env: | |
| NODE_OPTIONS: --max-old-space-size=4096 | |
| outputs: | |
| published: ${{ steps.changesets.outputs.published }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Update Corepack | |
| run: npm i -g corepack@latest | |
| - name: Enable Corepack (pre) | |
| run: corepack enable | |
| - name: Prepare pnpm (pre) | |
| run: corepack prepare [email protected] --activate | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: '.nvmrc' | |
| registry-url: 'https://registry.npmjs.org' | |
| cache: 'pnpm' | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Prepare pnpm | |
| run: corepack prepare [email protected] --activate | |
| # Ensure npm 11.5.1+ for trusted publishing | |
| - name: Update npm for trusted publishing | |
| run: npm install -g npm@latest | |
| - name: Verify npm version and OIDC availability | |
| run: | | |
| echo "npm version: $(npm --version)" | |
| echo "OIDC available: ${{ env.ACTIONS_ID_TOKEN_REQUEST_URL != '' }}" | |
| - name: Install Dependencies | |
| run: pnpm install | |
| - name: Clear .npmrc auth token (use OIDC instead) | |
| run: npm config delete //registry.npmjs.org/:_authToken || true | |
| - name: Create Release Pull Request or Publish to npm | |
| id: changesets | |
| uses: changesets/action@v1 | |
| with: | |
| publish: pnpm release | |
| commit: 'chore: release' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # NPM_TOKEN not needed - using trusted publishing (OIDC) | |
| deploy-chromatic-release: | |
| name: 'Deploy storybook to Chromatic' | |
| needs: publish-release | |
| if: github.event_name == 'push' && needs.publish-release.outputs.published == 'false' | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: Chromatic Production | |
| url: ${{ steps.publish_chromatic.outputs.url }} | |
| env: | |
| NODE_OPTIONS: --max-old-space-size=4096 | |
| CHROMATIC_RETRIES: 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Update Corepack | |
| run: npm i -g corepack@latest | |
| - name: Enable Corepack (pre) | |
| run: corepack enable | |
| - name: Prepare pnpm (pre) | |
| run: corepack prepare [email protected] --activate | |
| - uses: actions/cache@v4 | |
| name: Download storybook cache | |
| with: | |
| path: | | |
| **/node_modules/.cache | |
| key: ${{ runner.os }}-storybook-${{ github.run_id }} | |
| restore-keys: | | |
| ${{ runner.os }}-storybook | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: '.nvmrc' | |
| cache: 'pnpm' | |
| - name: Enable Corepack | |
| run: corepack enable | |
| - name: Prepare pnpm | |
| run: corepack prepare [email protected] --activate | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Publish to Chromatic | |
| id: publish_chromatic | |
| uses: chromaui/action@v11 | |
| with: | |
| exitZeroOnChanges: true | |
| exitOnceUploaded: true | |
| autoAcceptChanges: true | |
| onlyChanged: true | |
| projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} |