Compare commits

...
4 Commits
Author SHA1 Message Date
lukaszraczyloandGitHub 501711a743 Update go.mod and go.sum (#17) 2026-04-28 05:17:42 +01:00
lukaszraczyloandGitHub 16bcfdcb86 Update go.mod and go.sum (#16) 2026-04-22 05:03:15 +01:00
lukaszraczyloandGitHub ad696a51d8 feat(release): drop darwin_amd64 (Intel Macs) (#15)
Intel Macs are no longer receiving macOS updates. Drop from release
matrix and re-add to goreleaser ignore list. install.sh now prints
a clear message pointing Intel users to build-from-source. README
manual-install section no longer advertises a darwin_amd64 URL.
2026-04-19 23:48:25 +01:00
lukaszraczyloandGitHub 1ef24994ca Fix/release split by target (#14)
* fix(release): split partial by target to avoid CGO cross-compile

goreleaser --split defaults to splitting by GOOS only, so on a
linux_amd64 runner it tried to build both linux/amd64 and linux/arm64
CGO binaries. The amd64 host gcc cannot assemble ARM64 runtime/cgo
(gcc_arm64.S: no such instruction: stp, ldp, blr).

Setting partial.by: target makes goreleaser split by the full
goos+goarch tuple. Each matrix runner then builds only the artifact
matching its own architecture — native CGO compile, no cross-toolchain
needed.

* feat(release): ship raw binaries instead of tar.gz/zip archives

Users want curl-and-run, not 'download archive, unpack, locate binary'.
Switched archives.formats from tar.gz (with zip override for Windows)
to binary. goreleaser now emits:

  mcp-filepuff_<v>_darwin_amd64
  mcp-filepuff_<v>_darwin_arm64
  mcp-filepuff_<v>_linux_amd64
  mcp-filepuff_<v>_linux_arm64
  mcp-filepuff_<v>_windows_amd64.exe

Dropped the LICENSE+README bundling — tree-view on the release page
still shows them, and no one was extracting them from tarballs to
read anyway.

* docs,install: drop tarball indirection; download raw binary

Releases now ship raw binaries (goreleaser archives.formats=binary).
install.sh and README manual-install blurb now curl the binary
directly, chmod +x, and move into place. No tar, no zip, no extract.

Also removes the Linux ARM64 hard-reject in install.sh — that platform
is now shipped from the ubuntu-24.04-arm matrix runner.
2026-04-19 23:01:44 +01:00
6 changed files with 49 additions and 54 deletions
-1
View File
@@ -22,7 +22,6 @@ jobs:
rolling-release-tag: "v1" rolling-release-tag: "v1"
platforms: >- platforms: >-
[ [
{"os":"macos-13","goos":"darwin","goarch":"amd64","platform":"darwin_amd64"},
{"os":"macos-latest","goos":"darwin","goarch":"arm64","platform":"darwin_arm64"}, {"os":"macos-latest","goos":"darwin","goarch":"arm64","platform":"darwin_arm64"},
{"os":"ubuntu-latest","goos":"linux","goarch":"amd64","platform":"linux_amd64"}, {"os":"ubuntu-latest","goos":"linux","goarch":"amd64","platform":"linux_amd64"},
{"os":"ubuntu-24.04-arm","goos":"linux","goarch":"arm64","platform":"linux_arm64"}, {"os":"ubuntu-24.04-arm","goos":"linux","goarch":"arm64","platform":"linux_arm64"},
+11 -8
View File
@@ -5,6 +5,12 @@ version: 2
project_name: mcp-filepuff project_name: mcp-filepuff
# Split mode by full target (goos+goarch). Each matrix runner only builds the
# artifact matching its own architecture, avoiding CGO cross-compile failures
# (ARM asm on x86 runners and vice versa).
partial:
by: target
before: before:
hooks: hooks:
- go mod tidy - go mod tidy
@@ -31,25 +37,22 @@ builds:
- amd64 - amd64
- arm64 - arm64
ignore: ignore:
- goos: darwin
goarch: amd64
- goos: windows - goos: windows
goarch: arm64 goarch: arm64
archives: archives:
- id: default - id: default
# Ship raw binaries — downloaders curl the asset and run it directly
# (Windows gets .exe appended automatically). No tarball indirection.
formats: formats:
- tar.gz - binary
name_template: >- name_template: >-
{{ .ProjectName }}_ {{ .ProjectName }}_
{{- .Version }}_ {{- .Version }}_
{{- .Os }}_ {{- .Os }}_
{{- .Arch }} {{- .Arch }}
files:
- LICENSE
- README.md
format_overrides:
- goos: windows
formats:
- zip
checksum: checksum:
name_template: 'checksums.txt' name_template: 'checksums.txt'
+9 -13
View File
@@ -58,25 +58,21 @@ Claude Code configuration (`.claude/settings.json`):
Download pre-built binaries from the [releases page](https://github.com/lukaszraczylo/filepuff-mcp/releases): Download pre-built binaries from the [releases page](https://github.com/lukaszraczylo/filepuff-mcp/releases):
```bash ```bash
# macOS (ARM64) # macOS (Apple Silicon)
curl -L https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_darwin_arm64.tar.gz | tar xz curl -fsSL -o mcp-filepuff https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_darwin_arm64
mv mcp-filepuff ~/.local/bin/ chmod +x mcp-filepuff && mv mcp-filepuff ~/.local/bin/
# macOS (AMD64)
curl -L https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_darwin_amd64.tar.gz | tar xz
mv mcp-filepuff ~/.local/bin/
# Linux (ARM64) # Linux (ARM64)
curl -L https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_linux_arm64.tar.gz | tar xz curl -fsSL -o mcp-filepuff https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_linux_arm64
mv mcp-filepuff ~/.local/bin/ chmod +x mcp-filepuff && mv mcp-filepuff ~/.local/bin/
# Linux (AMD64) # Linux (AMD64)
curl -L https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_linux_amd64.tar.gz | tar xz curl -fsSL -o mcp-filepuff https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_linux_amd64
mv mcp-filepuff ~/.local/bin/ chmod +x mcp-filepuff && mv mcp-filepuff ~/.local/bin/
# Windows (PowerShell) # Windows (PowerShell)
Invoke-WebRequest -Uri "https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_windows_amd64.zip" -OutFile mcp-filepuff.zip Invoke-WebRequest -Uri "https://github.com/lukaszraczylo/filepuff-mcp/releases/latest/download/mcp-filepuff_<version>_windows_amd64.exe" -OutFile mcp-filepuff.exe
Expand-Archive mcp-filepuff.zip -DestinationPath $env:USERPROFILE\.local\bin Move-Item mcp-filepuff.exe $env:USERPROFILE\.local\bin\
``` ```
Replace `<version>` with the actual version (e.g., `v1.0.0`). Replace `<version>` with the actual version (e.g., `v1.0.0`).
+2 -2
View File
@@ -6,14 +6,14 @@ require (
github.com/cespare/xxhash/v2 v2.3.0 github.com/cespare/xxhash/v2 v2.3.0
github.com/goccy/go-json v0.10.6 github.com/goccy/go-json v0.10.6
github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/mark3labs/mcp-go v0.48.0 github.com/mark3labs/mcp-go v0.49.0
github.com/sergi/go-diff v1.4.0 github.com/sergi/go-diff v1.4.0
github.com/smacker/go-tree-sitter v0.0.0-20240827094217-dd81d9e9be82 github.com/smacker/go-tree-sitter v0.0.0-20240827094217-dd81d9e9be82
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )
require ( require (
github.com/google/jsonschema-go v0.4.2 // indirect github.com/google/jsonschema-go v0.4.3 // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/spf13/cast v1.10.0 // indirect github.com/spf13/cast v1.10.0 // indirect
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
+4 -4
View File
@@ -9,8 +9,8 @@ github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU=
github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8= github.com/google/jsonschema-go v0.4.3 h1:/DBOLZTfDow7pe2GmaJNhltueGTtDKICi8V8p+DQPd0=
github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= github.com/google/jsonschema-go v0.4.3/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
@@ -22,8 +22,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mark3labs/mcp-go v0.48.0 h1:o+MXuGW/HCeR2ny5LcAcZQn2bo6I2xaZMEHnpRG+dtw= github.com/mark3labs/mcp-go v0.49.0 h1:7Ssx4d7/T86qnWoJIdye7wEEvUzv39UIbnZb/FqUZMY=
github.com/mark3labs/mcp-go v0.48.0/go.mod h1:JKTC7R2LLVagkEWK7Kwu7DbmA6iIvnNAod6yrHiQMag= github.com/mark3labs/mcp-go v0.49.0/go.mod h1:BflTAZAzXlrTpiO44gmjMu89n2FO56rJ9m31fp4zd5k=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
+20 -23
View File
@@ -59,10 +59,12 @@ detect_platform() {
;; ;;
esac esac
# Warn about unsupported combinations # Intel Macs are no longer receiving macOS updates; we only ship Apple
if [ "$os" = "linux" ] && [ "$arch" = "arm64" ]; then # Silicon builds. Users on older hardware can build from source.
print_error "Linux ARM64 builds are not currently available due to CGO cross-compilation complexity" if [ "$os" = "darwin" ] && [ "$arch" = "amd64" ]; then
print_error "Please build from source: https://github.com/lukaszraczylo/filepuff-mcp#build-from-source" print_error "macOS Intel (x86_64) is no longer supported."
print_error "Apple Silicon binaries are available; for Intel, build from source:"
print_error " https://github.com/lukaszraczylo/filepuff-mcp#build-from-source"
exit 1 exit 1
fi fi
@@ -73,7 +75,7 @@ check_dependencies() {
local missing_deps=() local missing_deps=()
# Check for required commands # Check for required commands
for cmd in curl tar; do for cmd in curl; do
if ! command -v "$cmd" &> /dev/null; then if ! command -v "$cmd" &> /dev/null; then
missing_deps+=("$cmd") missing_deps+=("$cmd")
fi fi
@@ -210,14 +212,15 @@ download_and_install() {
print_info "Downloading mcp-filepuff ${version} for ${platform}..." print_info "Downloading mcp-filepuff ${version} for ${platform}..."
# Construct download URLs # Releases ship raw binaries named mcp-filepuff_<version>_<os>_<arch>
local archive_name="mcp-filepuff_${version#v}_${platform}.tar.gz" # (with .exe on Windows — not handled here).
local archive_url="https://github.com/${REPO}/releases/download/${version}/${archive_name}" local asset_name="mcp-filepuff_${version#v}_${platform}"
local asset_url="https://github.com/${REPO}/releases/download/${version}/${asset_name}"
local checksum_url="https://github.com/${REPO}/releases/download/${version}/checksums.txt" local checksum_url="https://github.com/${REPO}/releases/download/${version}/checksums.txt"
# Download archive # Download binary
if ! curl -sSfL "$archive_url" -o "$tmpdir/$archive_name"; then if ! curl -sSfL "$asset_url" -o "$tmpdir/$asset_name"; then
print_error "Failed to download $archive_url" print_error "Failed to download $asset_url"
exit 1 exit 1
fi fi
@@ -228,19 +231,17 @@ download_and_install() {
print_info "Verifying checksum..." print_info "Verifying checksum..."
cd "$tmpdir" cd "$tmpdir"
# Extract expected checksum for our archive
local expected_checksum local expected_checksum
expected_checksum=$(grep "$archive_name" checksums.txt | awk '{print $1}') expected_checksum=$(grep "$asset_name" checksums.txt | awk '{print $1}')
if [ -z "$expected_checksum" ]; then if [ -z "$expected_checksum" ]; then
print_warn "Checksum not found for $archive_name, skipping verification" print_warn "Checksum not found for $asset_name, skipping verification"
else else
# Calculate actual checksum (use shasum on macOS, sha256sum on Linux)
local actual_checksum local actual_checksum
if command -v sha256sum &> /dev/null; then if command -v sha256sum &> /dev/null; then
actual_checksum=$(sha256sum "$archive_name" | awk '{print $1}') actual_checksum=$(sha256sum "$asset_name" | awk '{print $1}')
elif command -v shasum &> /dev/null; then elif command -v shasum &> /dev/null; then
actual_checksum=$(shasum -a 256 "$archive_name" | awk '{print $1}') actual_checksum=$(shasum -a 256 "$asset_name" | awk '{print $1}')
else else
print_warn "No checksum utility found, skipping verification" print_warn "No checksum utility found, skipping verification"
cd - > /dev/null cd - > /dev/null
@@ -259,10 +260,6 @@ download_and_install() {
cd - > /dev/null cd - > /dev/null
fi fi
# Extract archive
print_info "Extracting archive..."
tar -xzf "$tmpdir/$archive_name" -C "$tmpdir"
# Ensure install directory exists # Ensure install directory exists
if [ ! -d "$INSTALL_DIR" ]; then if [ ! -d "$INSTALL_DIR" ]; then
print_info "Creating installation directory: $INSTALL_DIR" print_info "Creating installation directory: $INSTALL_DIR"
@@ -272,11 +269,11 @@ download_and_install() {
# Install binary # Install binary
print_info "Installing to $INSTALL_DIR/$BINARY_NAME..." print_info "Installing to $INSTALL_DIR/$BINARY_NAME..."
if [ -w "$INSTALL_DIR" ]; then if [ -w "$INSTALL_DIR" ]; then
cp "$tmpdir/$BINARY_NAME" "$INSTALL_DIR/$BINARY_NAME" cp "$tmpdir/$asset_name" "$INSTALL_DIR/$BINARY_NAME"
chmod +x "$INSTALL_DIR/$BINARY_NAME" chmod +x "$INSTALL_DIR/$BINARY_NAME"
else else
print_warn "No write permission to $INSTALL_DIR, trying with sudo..." print_warn "No write permission to $INSTALL_DIR, trying with sudo..."
sudo cp "$tmpdir/$BINARY_NAME" "$INSTALL_DIR/$BINARY_NAME" sudo cp "$tmpdir/$asset_name" "$INSTALL_DIR/$BINARY_NAME"
sudo chmod +x "$INSTALL_DIR/$BINARY_NAME" sudo chmod +x "$INSTALL_DIR/$BINARY_NAME"
fi fi