Skip to content

Commit 0f64fc8

Browse files
release scripts and automations
1 parent ffce355 commit 0f64fc8

7 files changed

Lines changed: 1162 additions & 83 deletions

File tree

.github/workflows/release.yml

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
name: Release
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
permissions:
8+
contents: write
9+
id-token: write
10+
11+
jobs:
12+
release:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Enable Corepack
19+
run: corepack enable
20+
21+
- name: Use Node.js
22+
uses: actions/setup-node@v4
23+
with:
24+
node-version: '22.x'
25+
cache: 'yarn'
26+
registry-url: 'https://registry.npmjs.org'
27+
28+
- name: Install dependencies
29+
run: yarn install --frozen-lockfile
30+
31+
- name: Build all packages
32+
run: yarn build
33+
34+
- name: Run tests
35+
run: yarn test
36+
37+
# Publish extension to Chrome Web Store
38+
- name: Publish to Chrome Web Store
39+
if: ${{ secrets.CHROME_EXTENSION_ID != '' && secrets.CHROME_CLIENT_ID != '' && secrets.CHROME_CLIENT_SECRET != '' && secrets.CHROME_REFRESH_TOKEN != '' }}
40+
env:
41+
EXTENSION_ID: ${{ secrets.CHROME_EXTENSION_ID }}
42+
CLIENT_ID: ${{ secrets.CHROME_CLIENT_ID }}
43+
CLIENT_SECRET: ${{ secrets.CHROME_CLIENT_SECRET }}
44+
REFRESH_TOKEN: ${{ secrets.CHROME_REFRESH_TOKEN }}
45+
run: |
46+
echo "Publishing extension to Chrome Web Store..."
47+
48+
# Install chrome-webstore-upload-cli
49+
npm install -g chrome-webstore-upload-cli
50+
51+
# Create zip of extension
52+
cd packages/extension/dist
53+
zip -r extension.zip .
54+
cd ../../..
55+
56+
# Upload to Chrome Web Store
57+
chrome-webstore-upload upload \
58+
--source packages/extension/dist/extension.zip \
59+
--extension-id "$EXTENSION_ID" \
60+
--client-id "$CLIENT_ID" \
61+
--client-secret "$CLIENT_SECRET" \
62+
--refresh-token "$REFRESH_TOKEN" \
63+
--auto-publish
64+
65+
# Publish packages to npm (if they are not private)
66+
- name: Publish to npm
67+
if: ${{ secrets.NPM_TOKEN != '' }}
68+
env:
69+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
70+
run: |
71+
echo "Publishing packages to npm..."
72+
73+
# Publish core package if not private
74+
if [ -d "packages/core" ]; then
75+
cd packages/core
76+
if [ "$(node -p "require('./package.json').private || false")" != "true" ]; then
77+
npm publish --access public --provenance
78+
else
79+
echo "Skipping packages/core (marked as private)"
80+
fi
81+
cd ../..
82+
fi
83+
84+
# Publish CLI package if not private
85+
if [ -d "packages/cli" ]; then
86+
cd packages/cli
87+
if [ "$(node -p "require('./package.json').private || false")" != "true" ]; then
88+
npm publish --access public --provenance
89+
else
90+
echo "Skipping packages/cli (marked as private)"
91+
fi
92+
cd ../..
93+
fi
94+
95+
# Upload extension build as release asset
96+
- name: Upload extension to release
97+
run: |
98+
cd packages/extension/dist
99+
zip -r ../../../extension-${{ github.ref_name }}.zip .
100+
cd ../../..
101+
gh release upload ${{ github.ref_name }} extension-${{ github.ref_name }}.zip
102+
env:
103+
GH_TOKEN: ${{ github.token }}
104+
105+
- name: Release summary
106+
run: |
107+
echo "✅ Release ${{ github.ref_name }} published successfully!"
108+
echo ""
109+
echo "Published artifacts:"
110+
111+
if [ "${{ secrets.CHROME_EXTENSION_ID }}" != "" ]; then
112+
echo " - Chrome Web Store extension"
113+
fi
114+
115+
if [ "${{ secrets.NPM_TOKEN }}" != "" ]; then
116+
echo " - npm packages (if public)"
117+
fi
118+
119+
echo " - Extension zip attached to GitHub release"

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@
1212
"typecheck": "turbo typecheck",
1313
"format": "prettier --write .",
1414
"format:check": "prettier --check .",
15-
"redis": "docker compose run -p 6379:6379 -v ./redis-data:/data redis redis-server --save 1 1 --loglevel warning"
15+
"redis": "docker compose run -p 6379:6379 -v ./redis-data:/data redis redis-server --save 1 1 --loglevel warning",
16+
"release": "./scripts/release.sh",
17+
"release:dry-run": "./scripts/release.sh --dry-run",
18+
"release:major": "./scripts/release.sh major",
19+
"release:minor": "./scripts/release.sh minor",
20+
"release:patch": "./scripts/release.sh patch",
21+
"validate": "./scripts/validate-release.sh",
22+
"changelog": "./scripts/generate-changelog.sh"
1623
},
1724
"devDependencies": {
1825
"@eslint/js": "^9.39.2",

0 commit comments

Comments
 (0)