Skip to content

Commit ef2c792

Browse files
gbiagombaclaude
andcommitted
chore: Release v2.0.1 - Documentation and infrastructure improvements
## Documentation Updates - Added comprehensive scripts/README.md for installation scripts - Enhanced main README with detailed TODO roadmap breakdown - Marked httpx/nuclei integration as completed in TODO - Added vulnerability scanner ingestion roadmap (Nessus/OpenVAS/Nmap) - Added service-specific exploitation hooks roadmap (Metasploit) - Added mindpalace visualization enhancement roadmap ## Infrastructure - Created .version-tracking.md for semantic versioning compliance - Enhanced .gitignore with comprehensive exclusions (test artifacts, logs, secrets) - Added .github/workflows/ to version control for CI/CD transparency - Updated Cargo.toml version from 2.0.0-dev to 2.0.1 ## Analysis & Resource Audit - Confirmed httpx/nuclei fully integrated (tool_httpx.rs, tool_nuclei.rs) - Identified Metasploit mentioned but not implemented in hound mode - Documented mindpalace capabilities and enhancement options - Analyzed rsc/ directory usage and identified unused artifacts ## Version Bump Rationale PATCH version bump (2.0.1) - backward compatible documentation and infrastructure improvements without code functionality changes. Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 3e2deed commit ef2c792

File tree

12 files changed

+684
-186
lines changed

12 files changed

+684
-186
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
2+
name: Build and Release
3+
4+
on:
5+
push:
6+
branches:
7+
- main
8+
pull_request:
9+
branches:
10+
- main
11+
12+
jobs:
13+
build:
14+
name: Build on ${{ matrix.os }}
15+
runs-on: ${{ matrix.os }}
16+
17+
strategy:
18+
matrix:
19+
os: [ubuntu-latest, macos-latest, windows-latest]
20+
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v4
24+
25+
- name: Install Rust
26+
uses: actions-rs/toolchain@v1
27+
with:
28+
toolchain: stable
29+
30+
- name: Build the project
31+
run: cargo build --release
32+
33+
- name: Upload Artifact
34+
uses: actions/upload-artifact@v3
35+
with:
36+
name: sherlock
37+
path: target/release/sherlock
38+
39+
release:
40+
needs: build
41+
runs-on: ubuntu-latest
42+
steps:
43+
- name: Checkout
44+
uses: actions/checkout@v4
45+
46+
- name: Create Release
47+
uses: softprops/action-gh-release@v1
48+
with:
49+
files: target/release/sherlock
50+
env:
51+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Check Cargo.lock
2+
3+
on:
4+
push:
5+
branches: ["**"]
6+
pull_request:
7+
branches: ["**"]
8+
9+
jobs:
10+
verify-lockfile:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v4
15+
- name: Ensure Cargo.lock exists and is tracked
16+
shell: bash
17+
run: |
18+
if [ ! -f Cargo.lock ]; then
19+
echo "Cargo.lock is missing at repo root" >&2
20+
exit 1
21+
fi
22+
if ! git ls-files --error-unmatch Cargo.lock >/dev/null 2>&1; then
23+
echo "Cargo.lock exists but is not tracked by git" >&2
24+
exit 1
25+
fi
26+
echo "Cargo.lock present and tracked."
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
name: Release Binaries
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*.*'
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
linux:
13+
name: Linux (glibc+musl)
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
- uses: taiki-e/upload-rust-binary@v1
18+
with:
19+
bin: sherlock
20+
target: >-
21+
x86_64-unknown-linux-gnu,
22+
aarch64-unknown-linux-gnu,
23+
x86_64-unknown-linux-musl,
24+
aarch64-unknown-linux-musl
25+
use-cross: true
26+
archive: auto
27+
asset: sherlock-{target}
28+
checksum: sha256
29+
token: ${{ secrets.GITHUB_TOKEN }}
30+
31+
macos-x64:
32+
name: macOS x64 (macos-13)
33+
runs-on: macos-13
34+
steps:
35+
- uses: actions/checkout@v4
36+
- uses: taiki-e/upload-rust-binary@v1
37+
with:
38+
bin: sherlock
39+
target: x86_64-apple-darwin
40+
# Native build on macOS runner
41+
use-cross: false
42+
archive: auto
43+
asset: sherlock-{target}
44+
checksum: sha256
45+
token: ${{ secrets.GITHUB_TOKEN }}
46+
47+
macos-arm64:
48+
name: macOS arm64 (macos-14)
49+
runs-on: macos-14
50+
steps:
51+
- uses: actions/checkout@v4
52+
- uses: taiki-e/upload-rust-binary@v1
53+
with:
54+
bin: sherlock
55+
target: aarch64-apple-darwin
56+
use-cross: false
57+
archive: auto
58+
asset: sherlock-{target}
59+
checksum: sha256
60+
token: ${{ secrets.GITHUB_TOKEN }}
61+
62+
windows:
63+
name: Windows (x64 + arm64)
64+
runs-on: windows-latest
65+
steps:
66+
- uses: actions/checkout@v4
67+
- uses: taiki-e/upload-rust-binary@v1
68+
with:
69+
bin: sherlock
70+
target: >-
71+
x86_64-pc-windows-msvc,
72+
aarch64-pc-windows-msvc
73+
use-cross: false
74+
archive: auto
75+
asset: sherlock-{target}
76+
checksum: sha256
77+
token: ${{ secrets.GITHUB_TOKEN }}
78+
79+
checksums-sign:
80+
name: Checksums and Sign
81+
needs: [linux, macos-x64, macos-arm64, windows]
82+
runs-on: ubuntu-latest
83+
permissions:
84+
contents: write
85+
steps:
86+
- name: Checkout
87+
uses: actions/checkout@v4
88+
- name: Install GitHub CLI
89+
uses: cli/cli/action@v2
90+
- name: Download release assets
91+
env:
92+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
93+
run: |
94+
mkdir -p dist
95+
gh release download "$GITHUB_REF_NAME" --pattern 'sherlock-*' --dir dist
96+
- name: Generate SHA256SUMS
97+
run: |
98+
cd dist
99+
if command -v sha256sum >/dev/null 2>&1; then sha256sum sherlock-* > SHA256SUMS; else shasum -a 256 sherlock-* > SHA256SUMS; fi
100+
- name: Import GPG key
101+
if: ${{ secrets.GPG_PRIVATE_KEY != '' }}
102+
env:
103+
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
104+
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
105+
run: |
106+
echo "$GPG_PRIVATE_KEY" | gpg --batch --yes --passphrase "$GPG_PASSPHRASE" --import
107+
- name: Sign SHA256SUMS
108+
if: ${{ secrets.GPG_PRIVATE_KEY != '' }}
109+
run: |
110+
cd dist
111+
gpg --batch --yes --armor --detach-sign -o SHA256SUMS.asc SHA256SUMS
112+
- name: Upload checksum and signature to release
113+
env:
114+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
115+
run: |
116+
gh release upload "$GITHUB_REF_NAME" dist/SHA256SUMS dist/SHA256SUMS.asc --clobber || gh release upload "$GITHUB_REF_NAME" dist/SHA256SUMS --clobber
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: Release Docker Image
2+
3+
on:
4+
push:
5+
branches: [ "main" ]
6+
tags: [ 'v*.*.*' ]
7+
8+
env:
9+
GHCR_REGISTRY: ghcr.io
10+
IMAGE_NAME: ${{ github.repository }}
11+
12+
jobs:
13+
docker:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
packages: write
18+
id-token: write
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v4
22+
23+
- name: Set up QEMU
24+
uses: docker/setup-qemu-action@v3
25+
26+
- name: Set up Docker Buildx
27+
uses: docker/setup-buildx-action@v3
28+
29+
- name: Install cosign
30+
uses: sigstore/cosign-installer@v3
31+
32+
- name: GHCR Login
33+
if: github.event_name != 'pull_request'
34+
uses: docker/login-action@v3
35+
with:
36+
registry: ${{ env.GHCR_REGISTRY }}
37+
username: ${{ github.actor }}
38+
password: ${{ secrets.GITHUB_TOKEN }}
39+
40+
- name: Docker Hub Login (optional)
41+
if: github.event_name != 'pull_request' && secrets.DOCKERHUB_USERNAME && secrets.DOCKERHUB_TOKEN
42+
uses: docker/login-action@v3
43+
with:
44+
username: ${{ secrets.DOCKERHUB_USERNAME }}
45+
password: ${{ secrets.DOCKERHUB_TOKEN }}
46+
47+
- name: Extract Docker metadata (GHCR)
48+
id: meta_ghcr
49+
uses: docker/metadata-action@v5
50+
with:
51+
images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}
52+
flavor: latest=true
53+
54+
- name: Extract Docker metadata (Docker Hub)
55+
id: meta_dh
56+
uses: docker/metadata-action@v5
57+
with:
58+
images: ${{ secrets.DOCKERHUB_REPO || format('docker.io/{0}', env.IMAGE_NAME) }}
59+
flavor: latest=true
60+
61+
- name: Build and push (multi-arch)
62+
uses: docker/build-push-action@v6
63+
with:
64+
context: .
65+
platforms: linux/amd64,linux/arm64
66+
push: ${{ github.event_name != 'pull_request' }}
67+
tags: |
68+
${{ steps.meta_ghcr.outputs.tags }}
69+
${{ steps.meta_dh.outputs.tags }}
70+
labels: |
71+
${{ steps.meta_ghcr.outputs.labels }}
72+
${{ steps.meta_dh.outputs.labels }}
73+
cache-from: type=gha
74+
cache-to: type=gha,mode=max
75+
76+
- name: Sign images with cosign (keyless)
77+
if: ${{ github.event_name != 'pull_request' }}
78+
env:
79+
COSIGN_EXPERIMENTAL: "true"
80+
run: |
81+
for t in ${{ steps.meta_ghcr.outputs.tags }} ${{ steps.meta_dh.outputs.tags }}; do
82+
if [ -n "$t" ]; then
83+
cosign sign --yes "$t@${{ steps.build-and-push.outputs.digest }}"
84+
fi
85+
done
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Security and Smoke
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
pull_request:
7+
branches: ["main"]
8+
schedule:
9+
- cron: '0 6 * * 1'
10+
11+
jobs:
12+
audit:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: actions-rs/toolchain@v1
17+
with:
18+
toolchain: stable
19+
override: true
20+
- name: Install cargo-audit
21+
run: cargo install cargo-audit --locked
22+
- name: Cargo audit
23+
run: cargo audit --deny warnings
24+
25+
smoke:
26+
name: Build/Tests/CLI Smoke (${{ matrix.os }})
27+
runs-on: ${{ matrix.os }}
28+
strategy:
29+
matrix:
30+
os: [ubuntu-latest, macos-13, macos-14, windows-latest]
31+
steps:
32+
- uses: actions/checkout@v4
33+
- uses: actions-rs/toolchain@v1
34+
with:
35+
toolchain: stable
36+
override: true
37+
- name: Build
38+
run: cargo build --release
39+
- name: Tests
40+
run: cargo test --all --all-features --verbose
41+
- name: CLI dry-run
42+
shell: bash
43+
run: |
44+
target/release/sherlock recon --dry-run -t example.com -p ci-smoke || true

.gitignore

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Rust build artifacts
2+
target/
3+
*.rs.bk
4+
Cargo.lock.bak
5+
6+
# IDE/editor configuration files
7+
.idea/
8+
.vscode/
9+
*.swp
10+
*.swo
11+
*~
12+
13+
# OS-specific files
14+
.DS_Store
15+
Thumbs.db
16+
desktop.ini
17+
18+
# Test outputs and artifacts
19+
output.txt
20+
test_output.html
21+
test_output.json
22+
test_output.csv
23+
test_*.txt
24+
test_*.html
25+
test_*.json
26+
test_*.csv
27+
*.test.log
28+
*.test.txt
29+
30+
# Working directories
31+
work/
32+
output/
33+
results/
34+
tmp/
35+
temp/
36+
37+
# Logs
38+
*.log
39+
logs/
40+
41+
# Archives
42+
*.zip
43+
*.tar.gz
44+
*.tgz
45+
*.tar.bz2
46+
47+
# Environment and secrets
48+
.env
49+
.env.local
50+
*.key
51+
*.pem
52+
credentials.json
53+
secrets.txt
54+
55+
# macOS specific
56+
._*
57+
.Spotlight-V100
58+
.Trashes
59+
60+
# Linux specific
61+
.directory
62+
63+
# Windows specific
64+
ehthumbs.db
65+
Desktop.ini
66+
67+
# Backup files
68+
*.bak
69+
*.backup
70+
*~

0 commit comments

Comments
 (0)