Skip to content

Commit 813f4aa

Browse files
committed
feat: support package cd
1 parent 7341ff0 commit 813f4aa

2 files changed

Lines changed: 142 additions & 0 deletions

File tree

.github/workflows/wallet-mcp.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Publish wallet-mcp
2+
on:
3+
push:
4+
tags:
5+
- "wallet-mcp@*"
6+
7+
jobs:
8+
build-and-publish:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout code
12+
uses: actions/checkout@v4
13+
14+
- name: Setup Node.js
15+
uses: actions/setup-node@v3
16+
with:
17+
node-version: 18
18+
registry-url: 'https://registry.npmjs.org'
19+
20+
- name: Install pnpm
21+
uses: pnpm/action-setup@v2
22+
with:
23+
version: 9.0.0
24+
25+
- name: Install dependencies
26+
run: pnpm install
27+
28+
- name: Extract version from tag
29+
if: startsWith(github.ref, 'refs/tags/')
30+
id: extract_version
31+
run: |
32+
TAG_NAME=${GITHUB_REF#refs/tags/}
33+
VERSION=${TAG_NAME#wallet-mcp@}
34+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
35+
36+
- name: Update version in package.json
37+
if: startsWith(github.ref, 'refs/tags/')
38+
run: |
39+
cd apps/wallet-mcp
40+
npm version ${{ steps.extract_version.outputs.VERSION }} --no-git-tag-version
41+
42+
- name: Build package
43+
run: pnpm turbo run build --filter=wallet-mcp
44+
45+
- name: Remove workspace dependencies
46+
run: |
47+
pnpm tsx ./script/clear-package-file.ts apps/wallet-mcp/package.json
48+
49+
- name: Publish to npm
50+
run: cd apps/wallet-mcp && pnpm publish --no-git-checks --access public
51+
env:
52+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

script/clear-package-file.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env tsx
2+
3+
import fs from 'node:fs';
4+
import path from 'node:path';
5+
6+
// Check if a path argument is provided
7+
if (process.argv.length < 3) {
8+
console.error('Please provide a path to package.json');
9+
process.exit(1);
10+
}
11+
12+
// Get the path argument
13+
const packageJsonPath = path.resolve(process.argv[2]);
14+
15+
// Check if the file exists
16+
if (!fs.existsSync(packageJsonPath)) {
17+
console.error(`File not found: ${packageJsonPath}`);
18+
process.exit(1);
19+
}
20+
21+
try {
22+
// Read the package.json file
23+
const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8');
24+
const packageJson: Record<string, any> = JSON.parse(packageJsonContent);
25+
26+
// Remove workspace-related fields
27+
if (packageJson.workspaces) {
28+
packageJson.workspaces = undefined;
29+
console.log('Removed "workspaces" field');
30+
}
31+
32+
// Update main field
33+
if (packageJson.main === './src/index.ts') {
34+
packageJson.main = './dist/index.js';
35+
console.log('Updated "main" field from "./src/index.ts" to "./dist/index.js"');
36+
}
37+
38+
// Remove dependencies that reference workspaces
39+
if (packageJson.dependencies) {
40+
let removedCount = 0;
41+
for (const dep of Object.keys(packageJson.dependencies)) {
42+
if (String(packageJson.dependencies[dep]).includes('workspace:')) {
43+
packageJson.dependencies[dep] = undefined;
44+
removedCount++;
45+
}
46+
}
47+
if (removedCount > 0) {
48+
console.log(`Removed ${removedCount} workspace dependencies`);
49+
}
50+
}
51+
52+
// Remove devDependencies that reference workspaces
53+
if (packageJson.devDependencies) {
54+
let removedCount = 0;
55+
for (const dep of Object.keys(packageJson.devDependencies)) {
56+
if (String(packageJson.devDependencies[dep]).includes('workspace:')) {
57+
packageJson.devDependencies[dep] = undefined;
58+
removedCount++;
59+
}
60+
}
61+
if (removedCount > 0) {
62+
console.log(`Removed ${removedCount} workspace devDependencies`);
63+
}
64+
}
65+
66+
// Clean up undefined properties before writing
67+
if (packageJson.dependencies) {
68+
packageJson.dependencies = Object.fromEntries(
69+
Object.entries(packageJson.dependencies).filter(([_, value]) => value !== undefined)
70+
);
71+
}
72+
73+
if (packageJson.devDependencies) {
74+
packageJson.devDependencies = Object.fromEntries(
75+
Object.entries(packageJson.devDependencies).filter(([_, value]) => value !== undefined)
76+
);
77+
}
78+
79+
// Write the updated package.json back to the file
80+
fs.writeFileSync(
81+
packageJsonPath,
82+
`${JSON.stringify(packageJson, null, 2)}\n`,
83+
'utf8'
84+
);
85+
86+
console.log(`Updated ${packageJsonPath}`);
87+
} catch (error) {
88+
console.error(`Error processing ${packageJsonPath}:`, error);
89+
process.exit(1);
90+
}

0 commit comments

Comments
 (0)