mcp-rubber-duck 1.2.1 โ†’ 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,6 @@
1
1
  name: ๐Ÿ”’ Security & Quality
2
2
 
3
3
  on:
4
- push:
5
- branches: [ master, main ]
6
4
  pull_request:
7
5
  branches: [ master, main ]
8
6
  schedule:
@@ -7,6 +7,18 @@ on:
7
7
  - main
8
8
  workflow_dispatch:
9
9
 
10
+ env:
11
+ REGISTRY: ghcr.io
12
+ IMAGE_NAME: ${{ github.repository }}
13
+
14
+ permissions:
15
+ contents: write
16
+ issues: write
17
+ pull-requests: write
18
+ packages: write
19
+ security-events: write
20
+ actions: read
21
+
10
22
  jobs:
11
23
  test:
12
24
  name: ๐Ÿงช Test Before Release
@@ -37,15 +49,103 @@ jobs:
37
49
  # - name: ๐Ÿงช Test
38
50
  # run: npm test
39
51
 
52
+ security-scan:
53
+ name: ๐Ÿ” Security Scan
54
+ runs-on: ubuntu-latest
55
+
56
+ steps:
57
+ - name: ๐Ÿ“ฅ Checkout
58
+ uses: actions/checkout@v4
59
+
60
+ - name: ๐Ÿ”’ Run Trivy vulnerability scanner
61
+ uses: aquasecurity/trivy-action@master
62
+ with:
63
+ scan-type: 'fs'
64
+ scan-ref: '.'
65
+ format: 'sarif'
66
+ output: 'trivy-results.sarif'
67
+
68
+ - name: ๐Ÿ“ค Upload Trivy scan results to GitHub Security
69
+ uses: github/codeql-action/upload-sarif@v3
70
+ if: always()
71
+ with:
72
+ sarif_file: 'trivy-results.sarif'
73
+ category: 'trivy-filesystem'
74
+
75
+ - name: ๐Ÿณ Build Docker image for security scan
76
+ run: |
77
+ docker build -t security-scan-image .
78
+
79
+ - name: ๐Ÿ”’ Run Trivy on Docker image
80
+ uses: aquasecurity/trivy-action@master
81
+ with:
82
+ image-ref: 'security-scan-image'
83
+ format: 'sarif'
84
+ output: 'trivy-docker-results.sarif'
85
+
86
+ - name: ๐Ÿ“ค Upload Docker scan results
87
+ uses: github/codeql-action/upload-sarif@v3
88
+ if: always()
89
+ with:
90
+ sarif_file: 'trivy-docker-results.sarif'
91
+ category: 'trivy-docker'
92
+
93
+ dependency-check:
94
+ name: ๐Ÿ“ฆ Dependency Check
95
+ runs-on: ubuntu-latest
96
+
97
+ steps:
98
+ - name: ๐Ÿ“ฅ Checkout
99
+ uses: actions/checkout@v4
100
+
101
+ - name: ๐Ÿ“ฆ Setup Node.js
102
+ uses: actions/setup-node@v4
103
+ with:
104
+ node-version: '20'
105
+ cache: 'npm'
106
+
107
+ - name: ๐Ÿ“ฅ Install dependencies
108
+ run: npm ci
109
+
110
+ - name: ๐Ÿ” Audit dependencies
111
+ run: npm audit --audit-level=moderate
112
+
113
+ - name: ๐Ÿ“Š Check for outdated packages
114
+ run: npm outdated || true
115
+
116
+ - name: ๐Ÿ”’ Check for known vulnerabilities
117
+ run: npx audit-ci --config audit-ci.json || true
118
+
119
+ dockerfile-lint:
120
+ name: ๐Ÿณ Dockerfile Lint
121
+ runs-on: ubuntu-latest
122
+
123
+ steps:
124
+ - name: ๐Ÿ“ฅ Checkout
125
+ uses: actions/checkout@v4
126
+
127
+ - name: ๐Ÿ” Lint Dockerfile
128
+ uses: hadolint/hadolint-action@v3.1.0
129
+ with:
130
+ dockerfile: Dockerfile
131
+ format: sarif
132
+ output-file: hadolint-results.sarif
133
+ no-fail: true
134
+
135
+ - name: ๐Ÿ“ค Upload Dockerfile lint results
136
+ uses: github/codeql-action/upload-sarif@v3
137
+ if: always()
138
+ with:
139
+ sarif_file: hadolint-results.sarif
140
+ category: 'hadolint'
141
+
40
142
  release:
41
143
  name: ๐Ÿ“ฆ Release
42
- needs: test
144
+ needs: [test, security-scan, dependency-check, dockerfile-lint]
43
145
  runs-on: ubuntu-latest
44
- permissions:
45
- contents: write
46
- issues: write
47
- pull-requests: write
48
- packages: write
146
+ outputs:
147
+ release-version: ${{ steps.get-version.outputs.version }}
148
+ new-release-published: ${{ steps.check-release.outputs.released }}
49
149
 
50
150
  steps:
51
151
  - name: ๐Ÿ“ฅ Checkout
@@ -66,12 +166,49 @@ jobs:
66
166
  - name: ๐Ÿ—๏ธ Build
67
167
  run: npm run build
68
168
 
169
+ - name: ๐Ÿท๏ธ Get latest tag before release
170
+ id: tag-before
171
+ run: |
172
+ latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")
173
+ echo "tag=$latest_tag" >> $GITHUB_OUTPUT
174
+ echo "Latest tag before release: $latest_tag"
175
+
69
176
  - name: ๐Ÿ“ฆ Run semantic-release
70
177
  env:
71
178
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
72
179
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
73
180
  run: npx semantic-release
74
181
 
182
+ - name: ๐Ÿท๏ธ Get latest tag after release
183
+ id: tag-after
184
+ run: |
185
+ git fetch --tags
186
+ latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "none")
187
+ echo "tag=$latest_tag" >> $GITHUB_OUTPUT
188
+ echo "Latest tag after release: $latest_tag"
189
+
190
+ - name: ๐Ÿ“ฆ Extract version from new tag
191
+ id: get-version
192
+ run: |
193
+ if [ "${{ steps.tag-after.outputs.tag }}" != "none" ]; then
194
+ version=$(echo "${{ steps.tag-after.outputs.tag }}" | sed 's/^v//')
195
+ echo "version=$version" >> $GITHUB_OUTPUT
196
+ echo "Extracted version: $version"
197
+ else
198
+ echo "version=" >> $GITHUB_OUTPUT
199
+ fi
200
+
201
+ - name: ๐Ÿ” Check if new release was published
202
+ id: check-release
203
+ run: |
204
+ if [ "${{ steps.tag-before.outputs.tag }}" != "${{ steps.tag-after.outputs.tag }}" ] && [ "${{ steps.tag-after.outputs.tag }}" != "none" ]; then
205
+ echo "released=true" >> $GITHUB_OUTPUT
206
+ echo "New release detected: ${{ steps.tag-after.outputs.tag }}"
207
+ else
208
+ echo "released=false" >> $GITHUB_OUTPUT
209
+ echo "No new release"
210
+ fi
211
+
75
212
  - name: ๐Ÿ“Š Release Summary
76
213
  if: success()
77
214
  run: |
@@ -82,8 +219,100 @@ jobs:
82
219
  echo "- ๐Ÿ“ Generated changelog entries" >> $GITHUB_STEP_SUMMARY
83
220
  echo "- ๐Ÿท๏ธ Created git tag (if new version)" >> $GITHUB_STEP_SUMMARY
84
221
  echo "- ๐Ÿ“ฆ Updated package.json version" >> $GITHUB_STEP_SUMMARY
85
- echo "- ๐Ÿณ Tagged version will trigger Docker build via release.yml" >> $GITHUB_STEP_SUMMARY
222
+ if [ "${{ steps.check-release.outputs.released }}" == "true" ]; then
223
+ echo "- โœ… **New version released:** ${{ steps.get-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
224
+ echo "- ๐Ÿณ Docker images will be built next" >> $GITHUB_STEP_SUMMARY
225
+ else
226
+ echo "- โ„น๏ธ **No new version:** No changes warranted a release" >> $GITHUB_STEP_SUMMARY
227
+ fi
228
+
229
+ docker:
230
+ name: ๐Ÿณ Build & Push Docker Images
231
+ needs: release
232
+ runs-on: ubuntu-latest
233
+ if: needs.release.outputs.new-release-published == 'true'
234
+
235
+ steps:
236
+ - name: ๐Ÿ“ฅ Checkout release tag
237
+ uses: actions/checkout@v4
238
+ with:
239
+ ref: v${{ needs.release.outputs.release-version }}
240
+ fetch-depth: 0
241
+
242
+ - name: ๐Ÿ› ๏ธ Set up QEMU
243
+ uses: docker/setup-qemu-action@v3
244
+
245
+ - name: ๐Ÿ› ๏ธ Set up Docker Buildx
246
+ uses: docker/setup-buildx-action@v3
247
+
248
+ - name: ๐Ÿ”‘ Login to Container Registry
249
+ uses: docker/login-action@v3
250
+ with:
251
+ registry: ${{ env.REGISTRY }}
252
+ username: ${{ github.actor }}
253
+ password: ${{ secrets.GITHUB_TOKEN }}
254
+
255
+ - name: ๐Ÿท๏ธ Extract metadata
256
+ id: meta
257
+ uses: docker/metadata-action@v5
258
+ with:
259
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
260
+ tags: |
261
+ type=semver,pattern={{version}},value=${{ needs.release.outputs.release-version }}
262
+ type=semver,pattern={{major}}.{{minor}},value=${{ needs.release.outputs.release-version }}
263
+ type=semver,pattern={{major}},value=${{ needs.release.outputs.release-version }}
264
+ type=raw,value=latest
265
+ labels: |
266
+ org.opencontainers.image.title=MCP Rubber Duck
267
+ org.opencontainers.image.description=Multi-platform MCP server for multiple OpenAI-compatible LLMs
268
+ org.opencontainers.image.version=${{ needs.release.outputs.release-version }}
269
+
270
+ - name: ๐Ÿณ Build and push Docker image
271
+ id: build
272
+ uses: docker/build-push-action@v5
273
+ with:
274
+ context: .
275
+ platforms: linux/amd64,linux/arm64
276
+ push: true
277
+ tags: ${{ steps.meta.outputs.tags }}
278
+ labels: ${{ steps.meta.outputs.labels }}
279
+ cache-from: type=gha
280
+ cache-to: type=gha,mode=max
281
+ build-args: |
282
+ BUILDKIT_INLINE_CACHE=1
283
+
284
+ - name: ๐Ÿ”ง Make package public
285
+ if: success()
286
+ run: |
287
+ # Wait a moment for package to appear
288
+ sleep 10
289
+
290
+ # Try to make package public (may fail if already public)
291
+ gh api --method PATCH \
292
+ "user/packages/container/${{ github.event.repository.name }}" \
293
+ --field visibility=public \
294
+ --silent || echo "Package may already be public or visibility change failed"
295
+ env:
296
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
297
+
298
+ - name: ๐Ÿ“Š Docker Success Summary
299
+ if: success()
300
+ run: |
301
+ echo "๐ŸŽ‰ **Docker Images Built Successfully!**" >> $GITHUB_STEP_SUMMARY
302
+ echo "" >> $GITHUB_STEP_SUMMARY
303
+ echo "๐Ÿ“ฆ **Built for version:** ${{ needs.release.outputs.release-version }}" >> $GITHUB_STEP_SUMMARY
304
+ echo "" >> $GITHUB_STEP_SUMMARY
305
+ echo "๐Ÿณ **Docker Images Published:**" >> $GITHUB_STEP_SUMMARY
306
+ for tag in $(echo '${{ steps.meta.outputs.tags }}' | tr ',' '\n'); do
307
+ echo "- \`$tag\`" >> $GITHUB_STEP_SUMMARY
308
+ done
309
+ echo "" >> $GITHUB_STEP_SUMMARY
310
+ echo "๐Ÿ—๏ธ **Platforms:** AMD64, ARM64" >> $GITHUB_STEP_SUMMARY
311
+ echo "๐Ÿ“ **Registry:** ${{ env.REGISTRY }}" >> $GITHUB_STEP_SUMMARY
312
+ echo "๐Ÿ”— **Package URL:** https://github.com/${{ github.repository }}/pkgs/container/${{ github.event.repository.name }}" >> $GITHUB_STEP_SUMMARY
86
313
  echo "" >> $GITHUB_STEP_SUMMARY
87
- echo "๐Ÿ”„ **Next Steps:**" >> $GITHUB_STEP_SUMMARY
88
- echo "- If a new version was released, the release.yml workflow will build Docker images" >> $GITHUB_STEP_SUMMARY
89
- echo "- Check the releases page for the new version" >> $GITHUB_STEP_SUMMARY
314
+ echo "๐Ÿš€ **Quick Test:**" >> $GITHUB_STEP_SUMMARY
315
+ echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
316
+ echo "docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.release.outputs.release-version }}" >> $GITHUB_STEP_SUMMARY
317
+ echo "docker run --rm -e OPENAI_API_KEY=your-key ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.release.outputs.release-version }}" >> $GITHUB_STEP_SUMMARY
318
+ echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [1.2.3](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.2.2...v1.2.3) (2025-11-17)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * resolve js-yaml security vulnerability with package override ([822a550](https://github.com/nesquikm/mcp-rubber-duck/commit/822a550397cb9b3e3966a8c5335c2ab1182bfd91))
7
+
8
+ ## [1.2.2](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.2.1...v1.2.2) (2025-09-17)
9
+
1
10
  ## [1.2.1](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.2.0...v1.2.1) (2025-09-17)
2
11
 
3
12
  # [1.2.0](https://github.com/nesquikm/mcp-rubber-duck/compare/v1.1.1...v1.2.0) (2025-09-17)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-rubber-duck",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "An MCP server that bridges to multiple OpenAI-compatible LLMs - your AI rubber duck debugging panel",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -61,5 +61,8 @@
61
61
  "ts-jest": "^29.0.0",
62
62
  "tsx": "^4.0.0",
63
63
  "typescript": "^5.0.0"
64
+ },
65
+ "overrides": {
66
+ "js-yaml": "^4.1.1"
64
67
  }
65
68
  }
@@ -1,138 +0,0 @@
1
- name: ๐Ÿณ Docker Build & Deploy
2
-
3
- on:
4
- push:
5
- branches: [ master, main ]
6
- paths-ignore:
7
- - '**.md'
8
- - 'docs/**'
9
- - '.gitignore'
10
- pull_request:
11
- branches: [ master, main ]
12
- paths-ignore:
13
- - '**.md'
14
- - 'docs/**'
15
- - '.gitignore'
16
-
17
- env:
18
- REGISTRY: ghcr.io
19
- IMAGE_NAME: ${{ github.repository }}
20
-
21
- jobs:
22
- test:
23
- name: ๐Ÿงช Test
24
- runs-on: ubuntu-latest
25
- steps:
26
- - name: ๐Ÿ“ฅ Checkout
27
- uses: actions/checkout@v4
28
-
29
- - name: ๐Ÿ“ฆ Setup Node.js
30
- uses: actions/setup-node@v4
31
- with:
32
- node-version: '20'
33
- cache: 'npm'
34
-
35
- - name: ๐Ÿ“ฅ Install dependencies
36
- run: npm ci
37
-
38
- # Temporarily disabled lint to fix deployment
39
- # - name: ๐Ÿ” Lint
40
- # run: npm run lint
41
-
42
- - name: ๐Ÿ—๏ธ Build
43
- run: npm run build
44
-
45
- - name: ๐Ÿ”ฌ Type check
46
- run: npm run typecheck
47
-
48
- # Temporarily disabled tests to fix deployment
49
- # - name: ๐Ÿงช Test
50
- # run: npm test
51
-
52
- build-and-push:
53
- name: ๐Ÿณ Build & Push
54
- needs: test
55
- runs-on: ubuntu-latest
56
- # Only build images on push to master (not PRs)
57
- if: github.event_name == 'push' && github.ref == 'refs/heads/master'
58
- permissions:
59
- contents: read
60
- packages: write
61
-
62
- steps:
63
- - name: ๐Ÿ“ฅ Checkout
64
- uses: actions/checkout@v4
65
-
66
- - name: ๐Ÿ› ๏ธ Set up QEMU
67
- uses: docker/setup-qemu-action@v3
68
-
69
- - name: ๐Ÿ› ๏ธ Set up Docker Buildx
70
- uses: docker/setup-buildx-action@v3
71
-
72
- - name: ๐Ÿ”‘ Login to Container Registry
73
- uses: docker/login-action@v3
74
- with:
75
- registry: ${{ env.REGISTRY }}
76
- username: ${{ github.actor }}
77
- password: ${{ secrets.GITHUB_TOKEN }}
78
-
79
- - name: ๐Ÿท๏ธ Extract metadata
80
- id: meta
81
- uses: docker/metadata-action@v5
82
- with:
83
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
84
- tags: |
85
- type=ref,event=branch
86
- type=ref,event=pr
87
- type=raw,value=latest,enable={{is_default_branch}}
88
- type=raw,value={{date 'YYYY-MM-DD'}},enable={{is_default_branch}}
89
- labels: |
90
- org.opencontainers.image.title=MCP Rubber Duck
91
- org.opencontainers.image.description=Multi-platform MCP server for multiple OpenAI-compatible LLMs
92
-
93
- - name: ๐Ÿณ Build and push Docker image
94
- id: build
95
- uses: docker/build-push-action@v5
96
- with:
97
- context: .
98
- platforms: linux/amd64,linux/arm64
99
- push: true
100
- tags: ${{ steps.meta.outputs.tags }}
101
- labels: ${{ steps.meta.outputs.labels }}
102
- cache-from: type=gha
103
- cache-to: type=gha,mode=max
104
- build-args: |
105
- BUILDKIT_INLINE_CACHE=1
106
-
107
- - name: ๐Ÿ“ Image digest
108
- run: echo ${{ steps.build.outputs.digest }}
109
-
110
- - name: ๐Ÿ”ง Make package public
111
- if: success()
112
- run: |
113
- # Wait a moment for package to appear
114
- sleep 10
115
-
116
- # Try to make package public (may fail if already public)
117
- gh api --method PATCH \
118
- "user/packages/container/${{ github.event.repository.name }}" \
119
- --field visibility=public \
120
- --silent || echo "Package may already be public or visibility change failed"
121
- env:
122
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
123
-
124
- - name: ๐Ÿ“Š Image size
125
- if: success()
126
- run: |
127
- echo "๐ŸŽ‰ **Docker Image Built Successfully!**" >> $GITHUB_STEP_SUMMARY
128
- echo "" >> $GITHUB_STEP_SUMMARY
129
- echo "๐Ÿ“ฆ **Image Details:**" >> $GITHUB_STEP_SUMMARY
130
- echo "- ๐Ÿท๏ธ **Tags:** \`${{ steps.meta.outputs.tags }}\`" >> $GITHUB_STEP_SUMMARY
131
- echo "- ๐Ÿ—๏ธ **Platforms:** AMD64, ARM64" >> $GITHUB_STEP_SUMMARY
132
- echo "- ๐Ÿ“ **Registry:** ${{ env.REGISTRY }}" >> $GITHUB_STEP_SUMMARY
133
- echo "" >> $GITHUB_STEP_SUMMARY
134
- echo "๐Ÿš€ **Quick Start:**" >> $GITHUB_STEP_SUMMARY
135
- echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
136
- echo "docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_STEP_SUMMARY
137
- echo "docker compose up -d" >> $GITHUB_STEP_SUMMARY
138
- echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
@@ -1,182 +0,0 @@
1
- name: ๐Ÿš€ Release & Deploy
2
-
3
- on:
4
- push:
5
- tags:
6
- - 'v*'
7
-
8
- env:
9
- REGISTRY: ghcr.io
10
- IMAGE_NAME: ${{ github.repository }}
11
-
12
- jobs:
13
- test:
14
- name: ๐Ÿงช Test
15
- runs-on: ubuntu-latest
16
- steps:
17
- - name: ๐Ÿ“ฅ Checkout
18
- uses: actions/checkout@v4
19
-
20
- - name: ๐Ÿ“ฆ Setup Node.js
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: '20'
24
- cache: 'npm'
25
-
26
- - name: ๐Ÿ“ฅ Install dependencies
27
- run: npm ci
28
-
29
- - name: ๐Ÿ” Lint
30
- run: npm run lint
31
-
32
- - name: ๐Ÿ—๏ธ Build
33
- run: npm run build
34
-
35
- - name: ๐Ÿ”ฌ Type check
36
- run: npm run typecheck
37
-
38
- # Temporarily disabled tests to fix deployment
39
- # - name: ๐Ÿงช Test
40
- # run: npm test
41
-
42
- build-and-push:
43
- name: ๐Ÿณ Build & Push Release
44
- needs: test
45
- runs-on: ubuntu-latest
46
- permissions:
47
- contents: write
48
- packages: write
49
-
50
- steps:
51
- - name: ๐Ÿ“ฅ Checkout
52
- uses: actions/checkout@v4
53
-
54
- - name: ๐Ÿ› ๏ธ Set up QEMU
55
- uses: docker/setup-qemu-action@v3
56
-
57
- - name: ๐Ÿ› ๏ธ Set up Docker Buildx
58
- uses: docker/setup-buildx-action@v3
59
-
60
- - name: ๐Ÿ”‘ Login to Container Registry
61
- uses: docker/login-action@v3
62
- with:
63
- registry: ${{ env.REGISTRY }}
64
- username: ${{ github.actor }}
65
- password: ${{ secrets.GITHUB_TOKEN }}
66
-
67
- - name: ๐Ÿท๏ธ Extract metadata
68
- id: meta
69
- uses: docker/metadata-action@v5
70
- with:
71
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
72
- tags: |
73
- type=ref,event=tag
74
- type=semver,pattern={{version}}
75
- type=semver,pattern={{major}}.{{minor}}
76
- type=semver,pattern={{major}}
77
- type=raw,value=latest
78
- labels: |
79
- org.opencontainers.image.title=MCP Rubber Duck
80
- org.opencontainers.image.description=Multi-platform MCP server for multiple OpenAI-compatible LLMs
81
- org.opencontainers.image.version=${{ github.ref_name }}
82
-
83
- - name: ๐Ÿณ Build and push Docker image
84
- id: build
85
- uses: docker/build-push-action@v5
86
- with:
87
- context: .
88
- platforms: linux/amd64,linux/arm64
89
- push: true
90
- tags: ${{ steps.meta.outputs.tags }}
91
- labels: ${{ steps.meta.outputs.labels }}
92
- cache-from: type=gha
93
- cache-to: type=gha,mode=max
94
- build-args: |
95
- BUILDKIT_INLINE_CACHE=1
96
-
97
- - name: ๐Ÿ”ง Make package public
98
- if: success()
99
- run: |
100
- # Wait a moment for package to appear
101
- sleep 10
102
-
103
- # Try to make package public (may fail if already public)
104
- gh api --method PATCH \
105
- "user/packages/container/${{ github.event.repository.name }}" \
106
- --field visibility=public \
107
- --silent || echo "Package may already be public or visibility change failed"
108
- env:
109
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110
-
111
- - name: ๐Ÿ“‹ Generate Release Notes
112
- id: release_notes
113
- run: |
114
- echo "## ๐Ÿฆ† MCP Rubber Duck ${{ github.ref_name }}" > release_notes.md
115
- echo "" >> release_notes.md
116
- echo "### ๐Ÿณ Docker Images" >> release_notes.md
117
- echo "" >> release_notes.md
118
- echo "**Multi-platform support:** AMD64, ARM64 (works on Mac, Linux, Windows, Raspberry Pi 3+)" >> release_notes.md
119
- echo "" >> release_notes.md
120
- echo "\`\`\`bash" >> release_notes.md
121
- echo "# Pull the latest release" >> release_notes.md
122
- echo "docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}" >> release_notes.md
123
- echo "" >> release_notes.md
124
- echo "# Or use latest tag" >> release_notes.md
125
- echo "docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> release_notes.md
126
- echo "" >> release_notes.md
127
- echo "# Quick start" >> release_notes.md
128
- echo "cp .env.template .env" >> release_notes.md
129
- echo "# Edit .env with your API keys" >> release_notes.md
130
- echo "docker compose up -d" >> release_notes.md
131
- echo "\`\`\`" >> release_notes.md
132
- echo "" >> release_notes.md
133
- echo "### ๐Ÿ“ฆ Available Tags" >> release_notes.md
134
- echo "" >> release_notes.md
135
- for tag in $(echo '${{ steps.meta.outputs.tags }}' | tr ',' '\n'); do
136
- echo "- \`$tag\`" >> release_notes.md
137
- done
138
- echo "" >> release_notes.md
139
- echo "### ๐Ÿš€ Deployment Options" >> release_notes.md
140
- echo "" >> release_notes.md
141
- echo "- **๐Ÿ–ฅ๏ธ Desktop/Server:** Use \`.env.desktop.example\` for optimal performance" >> release_notes.md
142
- echo "- **๐Ÿฅง Raspberry Pi:** Use \`.env.pi.example\` for memory-optimized settings" >> release_notes.md
143
- echo "- **โ˜๏ธ Remote:** Deploy via SSH with \`./scripts/deploy.sh --mode ssh\`" >> release_notes.md
144
- echo "" >> release_notes.md
145
- echo "### โœจ Features" >> release_notes.md
146
- echo "" >> release_notes.md
147
- echo "- ๐Ÿฆ† **Multiple AI Ducks:** Query OpenAI, Gemini, Groq, Ollama, and more" >> release_notes.md
148
- echo "- ๐Ÿ’ฌ **Conversation Management:** Maintain context across messages" >> release_notes.md
149
- echo "- ๐Ÿ›๏ธ **Duck Council:** Get responses from all configured LLMs" >> release_notes.md
150
- echo "- ๐Ÿ”— **MCP Bridge:** Connect to external MCP servers" >> release_notes.md
151
- echo "- ๐Ÿš€ **Universal Deployment:** Same image works on all platforms" >> release_notes.md
152
-
153
- - name: ๐ŸŽ‰ Create GitHub Release
154
- uses: actions/create-release@v1
155
- env:
156
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
157
- with:
158
- tag_name: ${{ github.ref_name }}
159
- release_name: MCP Rubber Duck ${{ github.ref_name }}
160
- body_path: release_notes.md
161
- draft: false
162
- prerelease: false
163
-
164
- - name: ๐Ÿ“Š Success Summary
165
- if: success()
166
- run: |
167
- echo "๐ŸŽ‰ **Release ${{ github.ref_name }} Published Successfully!**" >> $GITHUB_STEP_SUMMARY
168
- echo "" >> $GITHUB_STEP_SUMMARY
169
- echo "๐Ÿ“ฆ **Docker Images Built:**" >> $GITHUB_STEP_SUMMARY
170
- for tag in $(echo '${{ steps.meta.outputs.tags }}' | tr ',' '\n'); do
171
- echo "- \`$tag\`" >> $GITHUB_STEP_SUMMARY
172
- done
173
- echo "" >> $GITHUB_STEP_SUMMARY
174
- echo "๐Ÿ—๏ธ **Platforms:** AMD64, ARM64" >> $GITHUB_STEP_SUMMARY
175
- echo "๐Ÿ“ **Registry:** ${{ env.REGISTRY }}" >> $GITHUB_STEP_SUMMARY
176
- echo "๐Ÿ”— **Package URL:** https://github.com/${{ github.repository }}/pkgs/container/${{ github.event.repository.name }}" >> $GITHUB_STEP_SUMMARY
177
- echo "" >> $GITHUB_STEP_SUMMARY
178
- echo "๐Ÿš€ **Quick Test:**" >> $GITHUB_STEP_SUMMARY
179
- echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
180
- echo "docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
181
- echo "docker run --rm -e OPENAI_API_KEY=your-key ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
182
- echo "\`\`\`" >> $GITHUB_STEP_SUMMARY