Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/legal-hoops-doubt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"brand-shell": minor
---

use npm pack
128 changes: 82 additions & 46 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,35 @@ on:
workflow_dispatch:

jobs:
release:
name: Version & Publish
detect-mode:
name: Detect Release Mode
runs-on: ubuntu-latest
outputs:
publish_mode: ${{ steps.check.outputs.publish_mode }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
fetch-depth: 0

- name: Check if version needs publishing
id: check
run: |
VERSION=$(node -p "require('./package.json').version")
if git tag --list "brand-shell@${VERSION}" | grep -qF "brand-shell@${VERSION}"; then
echo "publish_mode=false" >> "$GITHUB_OUTPUT"
else
echo "publish_mode=true" >> "$GITHUB_OUTPUT"
fi

create-release-pr:
name: Create / Update Release PR
runs-on: ubuntu-latest
needs: detect-mode
if: needs.detect-mode.outputs.publish_mode == 'false'
permissions:
contents: write
pull-requests: write
id-token: write
outputs:
published: ${{ steps.changesets.outputs.published }}
publishedPackages: ${{ steps.changesets.outputs.publishedPackages }}

steps:
- name: Checkout
Expand All @@ -38,64 +57,81 @@ jobs:
- name: Install Dependencies
run: bun install --frozen-lockfile

- name: Create release PR or publish
id: changesets
- name: Create or update Release PR
uses: changesets/action@v1
with:
version: bun run version:packages
publish: bun run release:publish
title: "chore(release): version packages"
commit: "chore(release): version packages"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

starter-canary:
name: Starter Canary (local pack)
validate-and-publish:
name: Validate & Publish
runs-on: ubuntu-latest
needs:
- release
if: ${{ needs.release.outputs.published == 'true' }}
needs: detect-mode
if: needs.detect-mode.outputs.publish_mode == 'true'
permissions:
contents: read
contents: write
id-token: write

steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
fetch-depth: 0

- name: Setup Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: 24.13.0
registry-url: https://registry.npmjs.org

- name: Setup Bun
uses: oven-sh/setup-bun@3d267786b128fe76c2f16a390aa2448b815359f3
with:
bun-version: 1.3.6

- name: Install and build
run: bun install --frozen-lockfile && bun run build

- name: Pack
run: bun pm pack

- name: Install react-npm starter
run: bun install --cwd starters/react-npm

- name: Pin brand-shell in react-npm starter
run: bun add "$(ls brand-shell-*.tgz)" --cwd starters/react-npm --exact

- name: Build react-npm starter
run: bun run --cwd starters/react-npm build

- name: Install vue-npm starter
run: bun install --cwd starters/vue-npm

- name: Pin brand-shell in vue-npm starter
run: bun add "$(ls brand-shell-*.tgz)" --cwd starters/vue-npm --exact

- name: Build vue-npm starter
run: bun run --cwd starters/vue-npm build

- name: Install svelte-npm starter
run: bun install --cwd starters/svelte-npm

- name: Pin brand-shell in svelte-npm starter
run: bun add "$(ls brand-shell-*.tgz)" --cwd starters/svelte-npm --exact
- name: Install Dependencies
run: bun install --frozen-lockfile

- name: Build svelte-npm starter
run: bun run --cwd starters/svelte-npm build
# ── Step 1: Build ──────────────────────────────────────────────────────
- name: Build
run: bun run build

# ── Step 2: Pack tarball ───────────────────────────────────────────────
- name: Pack tarball
id: pack
run: |
bun pm pack
echo "tarball=$(ls brand-shell-*.tgz)" >> "$GITHUB_OUTPUT"

# ── Step 3: Test (unit + web-smoke + storybook) ───────────────────────
- name: Install Playwright browsers
run: bunx playwright install chromium --with-deps

- name: Run tests
run: bun run test

# ── Step 4: Canary builds from tarball ────────────────────────────────
- name: Canary — react-npm
run: |
bun install --cwd starters/react-npm
bun add "./${{ steps.pack.outputs.tarball }}" --cwd starters/react-npm --exact
bun run --cwd starters/react-npm build

- name: Canary — vue-npm
run: |
bun install --cwd starters/vue-npm
bun add "./${{ steps.pack.outputs.tarball }}" --cwd starters/vue-npm --exact
bun run --cwd starters/vue-npm build

- name: Canary — svelte-npm
run: |
bun install --cwd starters/svelte-npm
bun add "./${{ steps.pack.outputs.tarball }}" --cwd starters/svelte-npm --exact
bun run --cwd starters/svelte-npm build

# ── Step 5: Publish to npm (only if all above passed) ─────────────────
- name: Publish to npm
run: bun run release:publish