Skip to content

Commit a4efc79

Browse files
Implement CI and build releases (vibe-kanban 2ef3e91a)
Implement CI and build releases Please copy the pre-release and logic that allows us to use JS + NPX to distribute the rust binary, with code signing on mac. You can view some examples in a different repo at /Users/lkw/Documents/repos/vibe-kanban - .github/workflows/pre-release.yml - .github/workflows/publish.yml - npx-cli/bin/cli.js - npx-cli/package.json
1 parent c2bbd9f commit a4efc79

File tree

10 files changed

+251
-57
lines changed

10 files changed

+251
-57
lines changed

.github/workflows/pre-release.yml

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666
- name: Determine and update versions
6767
id: version
6868
run: |
69-
latest_npm_version=$(npm view mcp-dev-manager version 2>/dev/null || echo "0.0.0")
69+
latest_npm_version=$(npm view dev-manager-mcp version 2>/dev/null || echo "0.0.0")
7070
echo "Latest npm version: $latest_npm_version"
7171
7272
timestamp=$(date +%Y%m%d%H%M%S)
@@ -168,9 +168,9 @@ jobs:
168168
run: |
169169
mkdir -p dist
170170
if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
171-
cp target/${{ matrix.target }}/release/mcp-dev-manager.exe dist/mcp-dev-manager-${{ matrix.name }}.exe
171+
cp target/${{ matrix.target }}/release/dev-manager-mcp.exe dist/dev-manager-mcp-${{ matrix.name }}.exe
172172
else
173-
cp target/${{ matrix.target }}/release/mcp-dev-manager dist/mcp-dev-manager-${{ matrix.name }}
173+
cp target/${{ matrix.target }}/release/dev-manager-mcp dist/dev-manager-mcp-${{ matrix.name }}
174174
fi
175175
176176
- name: Prepare Apple certificate (macOS)
@@ -182,22 +182,22 @@ jobs:
182182
if: runner.os == 'macOS'
183183
uses: indygreg/apple-code-sign-action@v1
184184
with:
185-
input_path: target/${{ matrix.target }}/release/mcp-dev-manager
186-
output_path: mcp-dev-manager
185+
input_path: target/${{ matrix.target }}/release/dev-manager-mcp
186+
output_path: dev-manager-mcp
187187
p12_file: certificate.p12
188188
p12_password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
189189
sign: true
190190
sign_args: "--code-signature-flags=runtime"
191191

192192
- name: Package binary (macOS)
193193
if: runner.os == 'macOS'
194-
run: zip mcp-dev-manager.zip mcp-dev-manager
194+
run: zip dev-manager-mcp.zip dev-manager-mcp
195195

196196
- name: Prepare signed binaries (macOS)
197197
if: runner.os == 'macOS'
198198
run: |
199199
mkdir -p dist
200-
cp mcp-dev-manager.zip dist/mcp-dev-manager-${{ matrix.name }}.zip
200+
cp dev-manager-mcp.zip dist/dev-manager-mcp-${{ matrix.name }}.zip
201201
202202
- name: Clean up certificates (macOS)
203203
if: runner.os == 'macOS'
@@ -218,22 +218,22 @@ jobs:
218218
include:
219219
- target: x86_64-unknown-linux-musl
220220
name: linux-x64
221-
binary: mcp-dev-manager
221+
binary: dev-manager-mcp
222222
- target: x86_64-pc-windows-msvc
223223
name: windows-x64
224-
binary: mcp-dev-manager.exe
224+
binary: dev-manager-mcp.exe
225225
- target: x86_64-apple-darwin
226226
name: macos-x64
227-
binary: mcp-dev-manager
227+
binary: dev-manager-mcp
228228
- target: aarch64-apple-darwin
229229
name: macos-arm64
230-
binary: mcp-dev-manager
230+
binary: dev-manager-mcp
231231
- target: aarch64-pc-windows-msvc
232232
name: windows-arm64
233-
binary: mcp-dev-manager.exe
233+
binary: dev-manager-mcp.exe
234234
- target: aarch64-unknown-linux-musl
235235
name: linux-arm64
236-
binary: mcp-dev-manager
236+
binary: dev-manager-mcp
237237
steps:
238238
- uses: actions/checkout@v4
239239
with:
@@ -249,17 +249,17 @@ jobs:
249249
if: matrix.name != 'macos-arm64' && matrix.name != 'macos-x64'
250250
run: |
251251
mkdir -p npx-cli/dist/${{ matrix.name }}
252-
mkdir mcp-dev-manager-${{ matrix.name }}
252+
mkdir dev-manager-mcp-${{ matrix.name }}
253253
254-
cp dist/mcp-dev-manager-${{ matrix.name }}* mcp-dev-manager-${{ matrix.name }}/${{ matrix.binary }}
254+
cp dist/dev-manager-mcp-${{ matrix.name }}* dev-manager-mcp-${{ matrix.name }}/${{ matrix.binary }}
255255
256-
zip -j npx-cli/dist/${{ matrix.name }}/mcp-dev-manager.zip mcp-dev-manager-${{ matrix.name }}/${{ matrix.binary }}
256+
zip -j npx-cli/dist/${{ matrix.name }}/dev-manager-mcp.zip dev-manager-mcp-${{ matrix.name }}/${{ matrix.binary }}
257257
258258
- name: Create platform package (macOS)
259259
if: matrix.name == 'macos-arm64' || matrix.name == 'macos-x64'
260260
run: |
261261
mkdir -p npx-cli/dist/${{ matrix.name }}
262-
cp dist/mcp-dev-manager-${{ matrix.name }}* npx-cli/dist/${{ matrix.name }}/mcp-dev-manager.zip
262+
cp dist/dev-manager-mcp-${{ matrix.name }}* npx-cli/dist/${{ matrix.name }}/dev-manager-mcp.zip
263263
264264
- name: Upload platform package artifact
265265
uses: actions/upload-artifact@v4
@@ -301,4 +301,4 @@ jobs:
301301
prerelease: true
302302
generate_release_notes: true
303303
files: |
304-
npx-cli/mcp-dev-manager-*.tgz
304+
npx-cli/dev-manager-mcp-*.tgz

Cargo.lock

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
[package]
2-
name = "mcp-dev-manager"
2+
name = "dev-manager-mcp"
33
version = "0.1.0"
44
edition = "2021"
55

66
[[bin]]
7-
name = "mcp-dev-manager"
7+
name = "dev-manager-mcp"
88
path = "src/main.rs"
99

1010
[dependencies]

README.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,25 @@ A daemon process that runs continuously and accepts multiple concurrent MCP clie
1717
cargo build --release
1818
```
1919

20-
The binary will be at `target/release/mcp-dev-manager`.
20+
The binary will be at `target/release/dev-manager-mcp`.
2121

2222
## Running
2323

2424
### Start the Daemon
2525

2626
```bash
2727
# Foreground (default mode)
28-
./target/release/mcp-dev-manager
28+
./target/release/dev-manager-mcp
2929
# or explicitly:
30-
./target/release/mcp-dev-manager daemon
30+
./target/release/dev-manager-mcp daemon
3131

3232
# Background
33-
./target/release/mcp-dev-manager daemon &
33+
./target/release/dev-manager-mcp daemon &
3434

3535
# Custom port
36-
./target/release/mcp-dev-manager daemon --port 3010
36+
./target/release/dev-manager-mcp daemon --port 3010
3737
# or via environment variable:
38-
PORT=3010 ./target/release/mcp-dev-manager daemon
38+
PORT=3010 ./target/release/dev-manager-mcp daemon
3939
```
4040

4141
The daemon will listen on `http://127.0.0.1:3009` by default.
@@ -50,7 +50,7 @@ For Claude Desktop (`claude_desktop_config.json`):
5050
{
5151
"mcpServers": {
5252
"dev-manager": {
53-
"command": "mcp-dev-manager",
53+
"command": "dev-manager-mcp",
5454
"args": ["stdio"]
5555
}
5656
}
@@ -63,7 +63,7 @@ The STDIO proxy connects to the daemon at `http://127.0.0.1:3009/sse` by default
6363
{
6464
"mcpServers": {
6565
"dev-manager": {
66-
"command": "mcp-dev-manager",
66+
"command": "dev-manager-mcp",
6767
"args": ["stdio", "--daemon-url", "http://127.0.0.1:3010/sse"]
6868
}
6969
}
@@ -76,7 +76,7 @@ Or use the environment variable:
7676
{
7777
"mcpServers": {
7878
"dev-manager": {
79-
"command": "mcp-dev-manager",
79+
"command": "dev-manager-mcp",
8080
"args": ["stdio"],
8181
"env": {
8282
"MCP_DAEMON_URL": "http://127.0.0.1:3009/sse"
@@ -207,7 +207,7 @@ Get stdout/stderr logs for a development server session.
207207

208208
## Testing Multi-Client Behavior
209209

210-
1. Start daemon: `./target/release/mcp-dev-manager`
210+
1. Start daemon: `./target/release/dev-manager-mcp`
211211
2. Connect Client A and start a server session
212212
3. Connect Client B and query status - should see Client A's session
213213
4. Client B can stop Client A's session

npx-cli/bin/cli.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ function getPlatformDir() {
5656
}
5757

5858
function getBinaryName() {
59-
return platform === "win32" ? "mcp-dev-manager.exe" : "mcp-dev-manager";
59+
return platform === "win32" ? "dev-manager-mcp.exe" : "dev-manager-mcp";
6060
}
6161

6262
const platformDir = getPlatformDir();
@@ -67,7 +67,7 @@ fs.mkdirSync(extractDir, { recursive: true });
6767
function extractAndRun() {
6868
const binName = getBinaryName();
6969
const binPath = path.join(extractDir, binName);
70-
const zipName = "mcp-dev-manager.zip";
70+
const zipName = "dev-manager-mcp.zip";
7171
const zipPath = path.join(extractDir, zipName);
7272

7373
if (fs.existsSync(binPath)) fs.unlinkSync(binPath);
@@ -82,8 +82,8 @@ function extractAndRun() {
8282
const zip = new AdmZip(zipPath);
8383
zip.extractAllTo(extractDir, true);
8484
} catch (err) {
85-
console.error("❌ Failed to extract mcp-dev-manager archive:", err.message);
86-
if (process.env.MCP_DEV_MANAGER_DEBUG) {
85+
console.error("❌ Failed to extract dev-manager-mcp archive:", err.message);
86+
if (process.env.DEV_MANAGER_MCP_DEBUG) {
8787
console.error(err.stack);
8888
}
8989
process.exit(1);
@@ -101,14 +101,14 @@ function extractAndRun() {
101101
} catch { }
102102
}
103103

104-
console.log(`🚀 Launching mcp-dev-manager...`);
104+
console.log(`🚀 Launching dev-manager-mcp...`);
105105

106106
const args = process.argv.slice(2);
107107
const proc = spawn(binPath, args, { stdio: "inherit" });
108108

109109
proc.on("exit", (code) => process.exit(code || 0));
110110
proc.on("error", (err) => {
111-
console.error("❌ Failed to start mcp-dev-manager:", err.message);
111+
console.error("❌ Failed to start dev-manager-mcp:", err.message);
112112
process.exit(1);
113113
});
114114

npx-cli/package-lock.json

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

npx-cli/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"name": "mcp-dev-manager",
2+
"name": "dev-manager-mcp",
33
"private": false,
44
"version": "0.1.0",
55
"main": "index.js",
66
"bin": {
7-
"mcp-dev-manager": "bin/cli.js"
7+
"dev-manager-mcp": "bin/cli.js"
88
},
99
"keywords": [
1010
"mcp",

scripts/README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Manual Release Scripts
2+
3+
## manual-release.sh
4+
5+
Creates a single-platform npm package for testing or manual publishing.
6+
7+
### Usage
8+
9+
```bash
10+
./scripts/manual-release.sh
11+
```
12+
13+
This script will:
14+
1. Detect your current platform (macOS/Linux/Windows, x64/ARM64)
15+
2. Install the Rust target if needed
16+
3. Build the release binary
17+
4. Create the dist structure
18+
5. Zip the binary
19+
6. Install npm dependencies
20+
7. Create a .tgz package
21+
22+
### Testing Locally
23+
24+
After running the script:
25+
26+
```bash
27+
# Install globally to test
28+
npm install -g npx-cli/dev-manager-mcp-*.tgz
29+
30+
# Run it
31+
dev-manager-mcp --help
32+
33+
# Uninstall when done
34+
npm uninstall -g dev-manager-mcp
35+
```
36+
37+
### Publishing Manually
38+
39+
```bash
40+
cd npx-cli
41+
npm login
42+
npm publish dev-manager-mcp-*.tgz --access public
43+
```
44+
45+
### Important Notes
46+
47+
- This creates a **single-platform** package (only your current platform)
48+
- For production releases with **all platforms**, use GitHub Actions
49+
- The manual script is useful for:
50+
- Local testing before setting up CI/CD
51+
- Quick iterations during development
52+
- Publishing platform-specific test versions

0 commit comments

Comments
 (0)