Skip to content

Commit 35e30b8

Browse files
authored
Merge pull request #46 from yfedoseev/release/0.1.8
Release v0.1.8
2 parents 6b44321 + c0072d4 commit 35e30b8

6 files changed

Lines changed: 668 additions & 32 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#!/bin/bash
2+
# Extracts release notes for a given version from CHANGELOG.md
3+
# Usage: extract-release-notes.sh <version>
4+
# Outputs:
5+
# release-title.txt — "v0.1.8 | Subtitle..." or just "v0.1.8"
6+
# release-notes.md — Full body (changelog section + installation footer)
7+
8+
set -euo pipefail
9+
10+
VERSION="$1"
11+
CHANGELOG="CHANGELOG.md"
12+
13+
if [ ! -f "$CHANGELOG" ]; then
14+
echo "Error: $CHANGELOG not found" >&2
15+
exit 1
16+
fi
17+
18+
# Extract subtitle from "> ..." line after version header
19+
SUBTITLE=$(awk "/^## \[${VERSION}\]/{found=1; next} found && /^>/{gsub(/^> */, \"\"); print; exit}" "$CHANGELOG")
20+
21+
# Build title
22+
if [ -n "$SUBTITLE" ]; then
23+
echo "v${VERSION} | ${SUBTITLE}" > release-title.txt
24+
else
25+
echo "v${VERSION}" > release-title.txt
26+
fi
27+
28+
# Extract body: everything between this version's ## and the next ##
29+
awk "/^## \[${VERSION}\]/{flag=1; next} /^## \[/{flag=0} flag" "$CHANGELOG" \
30+
| sed '/^> /d' \
31+
| sed '1{/^$/d}' > changelog-section.md
32+
33+
if [ ! -s changelog-section.md ]; then
34+
echo "Warning: No changelog content found for version ${VERSION}" >&2
35+
fi
36+
37+
# Build release body = changelog section + installation footer
38+
cat changelog-section.md > release-notes.md
39+
cat >> release-notes.md << 'FOOTER'
40+
41+
---
42+
43+
### Installation
44+
45+
**From crates.io**
46+
```bash
47+
cargo install fossil-mcp
48+
```
49+
50+
**Pre-built Binaries**
51+
Download the appropriate archive for your platform from the assets below, extract, and place `fossil-mcp` in your PATH.
52+
53+
### Platform Support
54+
| Platform | Architecture | Archive |
55+
|----------|-------------|---------|
56+
| Linux | x86_64 (recommended) | `fossil-mcp-linux-x86_64-musl-*.tar.gz` |
57+
| Linux | x86_64 (glibc) | `fossil-mcp-linux-x86_64-*.tar.gz` |
58+
| Linux | ARM64 | `fossil-mcp-linux-aarch64-*.tar.gz` |
59+
| macOS | x86_64 (Intel) | `fossil-mcp-macos-x86_64-*.tar.gz` |
60+
| macOS | ARM64 (Apple Silicon) | `fossil-mcp-macos-aarch64-*.tar.gz` |
61+
| Windows | x86_64 | `fossil-mcp-windows-x86_64-*.zip` |
62+
63+
### Changelog
64+
See [CHANGELOG.md](https://github.com/yfedoseev/fossil-mcp/blob/main/CHANGELOG.md) for full details.
65+
FOOTER
66+
67+
# Cleanup
68+
rm -f changelog-section.md
69+
70+
echo "Generated release-title.txt and release-notes.md for v${VERSION}"

.github/workflows/release.yml

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ jobs:
161161
Compress-Archive -Path dist/fossil-mcp.exe -DestinationPath ${{ matrix.artifact_name }}.zip
162162
163163
- name: Upload artifact
164-
uses: actions/upload-artifact@v6
164+
uses: actions/upload-artifact@v7
165165
with:
166166
name: ${{ matrix.artifact_name }}
167167
path: |
@@ -178,7 +178,7 @@ jobs:
178178
- uses: actions/checkout@v6
179179

180180
- name: Download all artifacts
181-
uses: actions/download-artifact@v7
181+
uses: actions/download-artifact@v8
182182
with:
183183
path: artifacts
184184

@@ -189,38 +189,19 @@ jobs:
189189
echo "=== Release files ==="
190190
ls -lh release-files/
191191
192-
- name: Generate release notes
192+
- name: Extract release notes from CHANGELOG
193193
run: |
194-
cat << 'EOF' > release-notes.md
195-
## fossil-mcp v${{ needs.validate.outputs.version }}
194+
chmod +x .github/scripts/extract-release-notes.sh
195+
.github/scripts/extract-release-notes.sh "${{ needs.validate.outputs.version }}"
196196
197-
The code quality toolkit for the vibe coding era.
198-
199-
### Installation
200-
201-
#### From crates.io
202-
```bash
203-
cargo install fossil-mcp
204-
```
205-
206-
#### Pre-built Binaries
207-
Download the appropriate archive for your platform from the assets below, extract, and place `fossil-mcp` in your PATH.
208-
209-
### Platform Support
210-
| Platform | Architecture | Archive |
211-
|----------|-------------|---------|
212-
| Linux | x86_64 (recommended) | `fossil-mcp-linux-x86_64-musl-*.tar.gz` |
213-
| Linux | x86_64 (glibc) | `fossil-mcp-linux-x86_64-*.tar.gz` |
214-
| Linux | ARM64 | `fossil-mcp-linux-aarch64-*.tar.gz` |
215-
| macOS | x86_64 (Intel) | `fossil-mcp-macos-x86_64-*.tar.gz` |
216-
| macOS | ARM64 (Apple Silicon) | `fossil-mcp-macos-aarch64-*.tar.gz` |
217-
| Windows | x86_64 | `fossil-mcp-windows-x86_64-*.zip` |
218-
EOF
197+
- name: Read release title
198+
id: title
199+
run: echo "title=$(cat release-title.txt)" >> $GITHUB_OUTPUT
219200

220201
- name: Create release
221202
uses: softprops/action-gh-release@v2
222203
with:
223-
name: fossil-mcp v${{ needs.validate.outputs.version }}
204+
name: ${{ steps.title.outputs.title }}
224205
body_path: release-notes.md
225206
files: release-files/*
226207
draft: false

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.1.8] - 2026-04-08
9+
10+
### Added
11+
12+
- **Hardcoded secrets detection in scaffolding scanner** — contributed by [@nooscraft](https://github.com/nooscraft) in [#45](https://github.com/yfedoseev/fossil-mcp/pull/45)
13+
- New `include_secrets` parameter (default: false) for `fossil_detect_scaffolding`
14+
- Detects ~15 secret patterns: OpenAI, Anthropic, AWS, GitHub, Google, Stripe API keys, PEM headers, Slack/Discord webhooks, DB connection strings with credentials, JWT tokens
15+
- High and medium confidence findings with automatic redaction (first 8 chars + `***`)
16+
- Environment variable access lines are excluded to reduce false positives
17+
- Known placeholder strings (changeme, your_api_key, etc.) are filtered out
18+
- 17 new tests (unit + integration) covering all pattern types, redaction, and exclusions
19+
20+
### Changed
21+
22+
- **Dependency updates**
23+
- `sha2` 0.10 → 0.11 ([#43](https://github.com/yfedoseev/fossil-mcp/pull/43))
24+
- `tree-sitter-scala` 0.24 → 0.25 ([#41](https://github.com/yfedoseev/fossil-mcp/pull/41))
25+
- `actions/upload-artifact` v6 → v7 ([#38](https://github.com/yfedoseev/fossil-mcp/pull/38))
26+
- `actions/download-artifact` v7 → v8 ([#39](https://github.com/yfedoseev/fossil-mcp/pull/39))
27+
28+
### Contributors
29+
30+
Thank you to [@nooscraft](https://github.com/nooscraft) for another great contribution!
31+
32+
[0.1.8]: https://github.com/yfedoseev/fossil-mcp/compare/v0.1.7...v0.1.8
33+
834
## [0.1.7] - 2026-02-19
935

1036
### Added

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "fossil-mcp"
3-
version = "0.1.7"
3+
version = "0.1.8"
44
edition = "2021"
55
authors = ["Yury Fedoseev <yfedoseev@gmail.com>"]
66
license = "MIT OR Apache-2.0"
@@ -43,7 +43,7 @@ tree-sitter-cpp = "0.23"
4343
tree-sitter-c = "0.24"
4444
tree-sitter-swift = "0.7"
4545
tree-sitter-bash = "0.25"
46-
tree-sitter-scala = "0.24"
46+
tree-sitter-scala = "0.25"
4747
tree-sitter-r = "1.2"
4848
streaming-iterator = "0.1"
4949

@@ -63,7 +63,7 @@ indexmap = { version = "2.0", features = ["serde"] }
6363
dashmap = "6.1"
6464

6565
# Hashing
66-
sha2 = "0.10"
66+
sha2 = "0.11"
6767
xxhash-rust = { version = "0.8", features = ["xxh3"] }
6868

6969
# Probabilistic data structures

src/mcp/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ impl McpServer {
379379
},
380380
{
381381
"name": "fossil_detect_scaffolding",
382-
"description": "Detect AI-generated scaffolding artifacts in source code: phased/temporal function names, phased comments (Phase N/Step N/Part N), TODO/FIXME markers, placeholder method bodies, debug prints, delivery/summary files, framework defaults, verbose doc comments, identical error strings, AI vocabulary density, comment clones, over-documented functions, documented ignored parameters, misleading algorithm names, emoji characters",
382+
"description": "Detect AI-generated scaffolding artifacts in source code: phased/temporal function names, phased comments (Phase N/Step N/Part N), TODO/FIXME markers, placeholder method bodies, debug prints, delivery/summary files, framework defaults, verbose doc comments, identical error strings, AI vocabulary density, comment clones, over-documented functions, documented ignored parameters, misleading algorithm names, emoji characters, hardcoded secrets and credentials",
383383
"annotations": annotations,
384384
"inputSchema": {
385385
"type": "object",
@@ -408,6 +408,10 @@ impl McpServer {
408408
"type": "boolean",
409409
"description": "Include emoji characters found anywhere in source code (comments, strings, identifiers) (default: false)"
410410
},
411+
"include_secrets": {
412+
"type": "boolean",
413+
"description": "Include hardcoded secrets and credentials: API keys, passwords, tokens, private keys, webhook URLs, database connection strings with credentials (default: false)"
414+
},
411415
"limit": {
412416
"type": "integer",
413417
"description": "Maximum findings to return (default: 200)",

0 commit comments

Comments
 (0)