Skip to content

Commit ee511ca

Browse files
authored
Merge pull request #176 from vue-pivottable/develop
feat: TypeScript support with Changesets migration
2 parents 2969714 + 297d19b commit ee511ca

File tree

65 files changed

+8106
-1891
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+8106
-1891
lines changed

.changeset/config.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
3+
"changelog": "@changesets/cli/changelog",
4+
"commit": false,
5+
"fixed": [],
6+
"linked": [],
7+
"access": "public",
8+
"baseBranch": "main",
9+
"updateInternalDependencies": "patch",
10+
"ignore": [],
11+
"privatePackages": {
12+
"version": true,
13+
"tag": true
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
"vue-pivottable": patch
3+
---
4+
5+
chore: implement Changesets for monorepo release management
6+
7+
- Replace semantic-release with Changesets for better monorepo support
8+
- Add GitHub App integration for automated releases
9+
- Simplify release workflow to avoid circular PR issues
10+
- Add manual release options for individual packages

.github/workflows/create-release-pr.yml

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
name: Release Dashboard
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize, labeled, unlabeled]
6+
branches: [main]
7+
8+
jobs:
9+
check-release:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
pull-requests: write
13+
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 0
19+
20+
- name: Check Changed Packages
21+
id: changed
22+
run: |
23+
# Get changed files
24+
CHANGED_FILES=$(git diff --name-only origin/main...HEAD)
25+
26+
# Check each package
27+
MAIN_CHANGED=false
28+
LAZY_CHANGED=false
29+
PLOTLY_CHANGED=false
30+
31+
if echo "$CHANGED_FILES" | grep -E "^src/|^package\.json$" | grep -v "^packages/"; then
32+
MAIN_CHANGED=true
33+
fi
34+
35+
if echo "$CHANGED_FILES" | grep -E "^packages/lazy-table-renderer/"; then
36+
LAZY_CHANGED=true
37+
fi
38+
39+
if echo "$CHANGED_FILES" | grep -E "^packages/plotly-renderer/"; then
40+
PLOTLY_CHANGED=true
41+
fi
42+
43+
echo "main_changed=$MAIN_CHANGED" >> $GITHUB_OUTPUT
44+
echo "lazy_changed=$LAZY_CHANGED" >> $GITHUB_OUTPUT
45+
echo "plotly_changed=$PLOTLY_CHANGED" >> $GITHUB_OUTPUT
46+
47+
- name: Update PR Comment
48+
uses: actions/github-script@v7
49+
with:
50+
script: |
51+
const { main_changed, lazy_changed, plotly_changed } = ${{ toJson(steps.changed.outputs) }};
52+
53+
let packages = [];
54+
if (main_changed === 'true') packages.push('vue-pivottable');
55+
if (lazy_changed === 'true') packages.push('@vue-pivottable/lazy-table-renderer');
56+
if (plotly_changed === 'true') packages.push('@vue-pivottable/plotly-renderer');
57+
58+
const hasReleaseLabel = context.payload.pull_request.labels.some(
59+
label => label.name === 'release'
60+
);
61+
62+
const body = `## 📦 Release Status
63+
64+
**Packages with changes:**
65+
${packages.length > 0 ? packages.map(p => `- ${p}`).join('\n') : '- No package changes detected'}
66+
67+
**Release label:** ${hasReleaseLabel ? '✅ Applied' : '❌ Not applied'}
68+
69+
${hasReleaseLabel && packages.length > 0 ?
70+
'🚀 **This PR will trigger releases for the changed packages when merged.**' :
71+
packages.length > 0 ?
72+
'⚠️ **Add the `release` label to trigger releases when merged.**' :
73+
'ℹ️ **No package changes to release.**'
74+
}
75+
76+
---
77+
<sub>To release specific packages manually, use the [Manual Package Release](https://github.com/${{ github.repository }}/actions/workflows/release-manual.yml) workflow.</sub>`;
78+
79+
// Find existing comment
80+
const { data: comments } = await github.rest.issues.listComments({
81+
owner: context.repo.owner,
82+
repo: context.repo.repo,
83+
issue_number: context.issue.number,
84+
});
85+
86+
const botComment = comments.find(comment =>
87+
comment.user.type === 'Bot' &&
88+
comment.body.includes('## 📦 Release Status')
89+
);
90+
91+
if (botComment) {
92+
await github.rest.issues.updateComment({
93+
owner: context.repo.owner,
94+
repo: context.repo.repo,
95+
comment_id: botComment.id,
96+
body: body
97+
});
98+
} else {
99+
await github.rest.issues.createComment({
100+
owner: context.repo.owner,
101+
repo: context.repo.repo,
102+
issue_number: context.issue.number,
103+
body: body
104+
});
105+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: Manual Package Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
package:
7+
description: 'Package to release'
8+
required: true
9+
type: choice
10+
options:
11+
- vue-pivottable
12+
- lazy-table-renderer
13+
- plotly-renderer
14+
- all
15+
release-type:
16+
description: 'Release type'
17+
required: true
18+
type: choice
19+
options:
20+
- patch
21+
- minor
22+
- major
23+
- auto
24+
25+
jobs:
26+
release:
27+
runs-on: ubuntu-latest
28+
permissions:
29+
contents: write
30+
packages: write
31+
id-token: write
32+
33+
steps:
34+
- name: Generate GitHub App Token
35+
id: app-token
36+
uses: tibdex/github-app-token@v1
37+
with:
38+
app_id: ${{ secrets.APP_ID }}
39+
private_key: ${{ secrets.APP_PRIVATE_KEY }}
40+
installation_id: ${{ secrets.APP_INSTALLATION_ID }}
41+
42+
- name: Checkout
43+
uses: actions/checkout@v4
44+
with:
45+
token: ${{ steps.app-token.outputs.token }}
46+
fetch-depth: 0
47+
48+
- name: Setup Node.js
49+
uses: actions/setup-node@v4
50+
with:
51+
node-version: '22.10.0'
52+
registry-url: 'https://registry.npmjs.org/'
53+
54+
- name: Setup pnpm
55+
uses: pnpm/action-setup@v2
56+
57+
- name: Install dependencies
58+
run: pnpm install
59+
60+
- name: Configure Git
61+
run: |
62+
git config user.name "github-actions[bot]"
63+
git config user.email "github-actions[bot]@users.noreply.github.com"
64+
65+
- name: Build Package(s)
66+
run: |
67+
if [ "${{ inputs.package }}" = "all" ]; then
68+
pnpm build:all
69+
elif [ "${{ inputs.package }}" = "vue-pivottable" ]; then
70+
pnpm build
71+
else
72+
pnpm --filter @vue-pivottable/${{ inputs.package }} build
73+
fi
74+
75+
- name: Version and Release
76+
env:
77+
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
78+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
79+
NPM_TOKEN_SUMIN: ${{ secrets.NPM_TOKEN_SUMIN }}
80+
run: |
81+
if [ "${{ inputs.release-type }}" != "auto" ]; then
82+
VERSION_ARG="--release-as ${{ inputs.release-type }}"
83+
else
84+
VERSION_ARG=""
85+
fi
86+
87+
if [ "${{ inputs.package }}" = "all" ]; then
88+
# Release all packages
89+
pnpm dlx semantic-release $VERSION_ARG
90+
cd packages/lazy-table-renderer && pnpm dlx semantic-release $VERSION_ARG && cd ../..
91+
cd packages/plotly-renderer && NPM_TOKEN=$NPM_TOKEN_SUMIN pnpm dlx semantic-release $VERSION_ARG && cd ../..
92+
elif [ "${{ inputs.package }}" = "vue-pivottable" ]; then
93+
pnpm dlx semantic-release $VERSION_ARG
94+
else
95+
cd packages/${{ inputs.package }}
96+
if [ "${{ inputs.package }}" = "plotly-renderer" ]; then
97+
NPM_TOKEN=$NPM_TOKEN_SUMIN pnpm dlx semantic-release $VERSION_ARG
98+
else
99+
pnpm dlx semantic-release $VERSION_ARG
100+
fi
101+
fi
Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
name: Release vue-pivottable
1+
name: Release
22

33
on:
44
push:
55
branches:
6-
- release
6+
- main
7+
8+
concurrency: ${{ github.workflow }}-${{ github.ref }}
9+
710
jobs:
811
release:
912
name: Release
@@ -14,13 +17,22 @@ jobs:
1417
pull-requests: write
1518
id-token: write
1619
steps:
20+
- name: Generate GitHub App Token
21+
id: generate-token
22+
uses: tibdex/github-app-token@v1
23+
with:
24+
app_id: ${{ secrets.APP_ID }}
25+
private_key: ${{ secrets.APP_PRIVATE_KEY }}
26+
installation_id: ${{ secrets.APP_INSTALLATION_ID }}
27+
1728
- name: Checkout
1829
uses: actions/checkout@v4
1930
with:
2031
fetch-depth: 0
32+
token: ${{ steps.generate-token.outputs.token }}
2133

2234
- name: Setup Node.js
23-
uses: actions/setup-node@v3
35+
uses: actions/setup-node@v4
2436
with:
2537
node-version: '22.10.0'
2638
registry-url: 'https://registry.npmjs.org/'
@@ -33,41 +45,26 @@ jobs:
3345
- name: Install dependencies
3446
run: pnpm install
3547

36-
- name: Build
37-
run: pnpm build
38-
- name: Generate GitHub App Token
39-
id: generate-token
40-
uses: tibdex/github-app-token@v1
48+
- name: Create Release Pull Request or Publish
49+
id: changesets
50+
uses: changesets/action@v1
4151
with:
42-
app_id: ${{ secrets.APP_ID }}
43-
private_key: ${{ secrets.APP_PRIVATE_KEY }}
44-
installation_id: ${{ secrets.APP_INSTALLATION_ID }}
45-
- name: Release
52+
# This will create a PR with version bumps and changelog updates
53+
# When the PR is merged, it will publish to npm
54+
publish: pnpm release:packages
55+
version: pnpm changeset version
56+
commit: "chore: release packages"
57+
title: "chore: release packages"
58+
createGithubReleases: true
4659
env:
4760
GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
48-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
4961
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
50-
run: |
51-
pnpm dlx semantic-release
52-
53-
- uses: actions/checkout@v4
54-
with:
55-
ref: main
56-
57-
- name: Reset release branch
58-
run: |
59-
git fetch origin release:release
60-
git reset --hard release
61-
- name: Create Pull Request
62-
uses: peter-evans/create-pull-request@v5
63-
with:
64-
branch: release-to-main
65-
commit-message: 'chore: update version to latest release [skip ci]'
66-
title: 'chore: update version to latest release [skip ci]'
67-
body: |
68-
이 PR은 release 브랜치의 최신 버전 정보로 main 브랜치를 업데이트합니다.
69-
70-
- package.json 버전 업데이트
71-
- CHANGELOG.md 업데이트
62+
NPM_TOKEN_SUMIN: ${{ secrets.NPM_TOKEN_SUMIN }}
7263

73-
이 PR은 release 워크플로우에 의해 자동으로 생성되었습니다.
64+
# Alternative: Use semantic-release with GitHub App token
65+
# - name: Release
66+
# env:
67+
# GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
68+
# NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
69+
# run: |
70+
# pnpm dlx semantic-release

0 commit comments

Comments
 (0)