diff --git a/.github/version-pr/action.yml b/.github/version-pr/action.yml new file mode 100644 index 000000000..9e82caeba --- /dev/null +++ b/.github/version-pr/action.yml @@ -0,0 +1,8 @@ +name: "Determine version" +description: "Determines npm package version based on PR number and commit SHA" +outputs: + version: + description: "npm package version" +runs: + using: "node16" + main: "index.js" diff --git a/.github/version-pr/index.js b/.github/version-pr/index.js new file mode 100644 index 000000000..3236b6559 --- /dev/null +++ b/.github/version-pr/index.js @@ -0,0 +1,19 @@ +// This is based on the work done by the next-auth team. +const fs = require("fs") +const path = require("path") +const core = require("@actions/core") + +try { + const packageJSONPath = path.join(process.cwd(), "packages/cli/package.json") + const packageJSON = JSON.parse(fs.readFileSync(packageJSONPath, "utf8")) + + const sha8 = process.env.GITHUB_SHA.substring(0, 8) + const prNumber = process.env.PR_NUMBER + + const packageVersion = `0.0.0-pr.${prNumber}.${sha8}` + packageJSON.version = packageVersion + core.setOutput("version", packageVersion) + fs.writeFileSync(packageJSONPath, JSON.stringify(packageJSON)) +} catch (error) { + core.setFailed(error.message) +} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index df20e3d67..000000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,45 +0,0 @@ -# Adapted from create-t3-app. - -name: Publish - -on: - push: - branches: - - main - -concurrency: ${{ github.workflow }}-${{ github.ref }} - -jobs: - build: - if: ${{ github.repository_owner == 'shadcn' }} - name: Create a PR for release workflow - runs-on: ubuntu-latest - steps: - - name: Checkout Repo - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Use PNPM - uses: pnpm/action-setup@v2.2.4 - - - name: Use Node.js 18 - uses: actions/setup-node@v3 - with: - node-version: 18 - cache: "pnpm" - - - name: Install NPM Dependencies - run: pnpm install - - - name: Create Version PR or Publish to NPM - id: changesets - uses: changesets/action@v1.4.1 - with: - commit: "chore(release): version packages" - title: "chore(release): version packages" - publish: pnpm build:cli - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} - NODE_ENV: "production" diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml new file mode 100644 index 000000000..12acd637f --- /dev/null +++ b/.github/workflows/release-pr.yml @@ -0,0 +1,44 @@ +name: release-pr +on: + pull_request: + types: [opened, reopened, synchronize, labeled] + +jobs: + next-drupal: + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'shadcn' && contains(github.event.pull_request.labels.*.name, format('release-pr{0} cli', ':')) }} + environment: Preview + steps: + - name: Init + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Install dependencies + run: yarn install + - name: Determine version + uses: ./.github/version-pr + id: determine-version + env: + PR_NUMBER: ${{ github.event.number }} + - name: Publish to npm + run: | + cd packages/cli + echo "//registry.npmjs.org/:_authToken=$NPM_ACCESS_TOKEN" >> .npmrc + yarn publish --no-git-checks --access public --tag experimental + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Comment version on PR + uses: NejcZdovc/comment-pr@v2 + with: + message: + "🎉 Experimental release [published 📦️ on npm](https://npmjs.com/package/@shadcn/ui/v/${{ env.VERSION }})!\n \ + ```sh\npnpm @shadcn/ui@${{ env.VERSION }}\n```\n \ + ```sh\nyarn @shadcn/ui@${{ env.VERSION }}\n```\n \ + ```sh\nnpx @shadcn/ui@${{ env.VERSION }}\n```" + env: + VERSION: ${{ steps.determine-version.outputs.version }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}