Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: William Martin <williammartin@github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: William Martin <williammartin@github.com>
When ```bash is used for a code fence, bash keywords such as "for" and "in" get rendered with syntax highlighting. Switching to ```console avoids this distraction.
* Optimize Docker build with bind mounts
This commit further optimize the Docker builds on top of PR #92 with:
1. Add .dockerignore file to exclude non-source code files [1].
2. Use Alpine image variant for build stage to reduce download size.
golang:1.23.7-alpine is 200 MB smaller than golang:1.23.7 [2][3].
3. Replace COPY instruction with RUN --mount=type=bind. Bind mounts do
not add unnecessary layers to the cache [4][5].
[1]: https://docs.docker.com/build-cloud/optimization/#dockerignore-files
[2]: https://hub.docker.com/layers/library/golang/1.23.7-alpine/images/sha256-333d4ba78773b3a3ae9cf2cff8962df56effc5c9481faa355f211abf2baf175c
[3]: https://hub.docker.com/layers/library/golang/1.23.7/images/sha256-2087a99c3235972660b3d35c1564d9d1a3f639dcace9c790acbabc7e938d1570
[4]: https://docs.docker.com/build/building/best-practices/#add-or-copy
[5]: https://docs.docker.com/build/cache/optimize/#use-bind-mounts
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
* Remove `go mod download` step
`go build` will automatically download module dependencies. In many
cases, that is a much smaller set of modules than what is downloaded by
`go mod download`.
Size of GOMODCACHE with `go mod download:
$ go clean -i -r -cache -modcache
$ go mod download
$ du -sh ~/go/pkg/mod
186M /home/jun/go/pkg/mod
Size of GOMODCACHE with `go build`:
$ go clean -i -r -cache -modcache
$ CGO_ENABLED=0 go build -ldflags="-s -w" cmd/github-mcp-server/main.go
go: downloading github.com/spf13/viper v1.20.1
go: downloading github.com/mark3labs/mcp-go v0.18.0
go: downloading github.com/google/go-github/v69 v69.2.0
go: downloading github.com/sirupsen/logrus v1.9.3
go: downloading github.com/spf13/cobra v1.9.1
go: downloading golang.org/x/sys v0.31.0
go: downloading github.com/spf13/afero v1.14.0
go: downloading github.com/fsnotify/fsnotify v1.8.0
go: downloading github.com/spf13/cast v1.7.1
go: downloading github.com/go-viper/mapstructure/v2 v2.2.1
go: downloading github.com/subosito/gotenv v1.6.0
go: downloading gopkg.in/yaml.v3 v3.0.1
go: downloading github.com/spf13/pflag v1.0.6
go: downloading github.com/pelletier/go-toml/v2 v2.2.3
go: downloading github.com/sagikazarmark/locafero v0.9.0
go: downloading golang.org/x/text v0.23.0
go: downloading github.com/google/uuid v1.6.0
go: downloading github.com/yosida95/uritemplate/v3 v3.0.2
go: downloading github.com/sourcegraph/conc v0.3.0
go: downloading github.com/google/go-querystring v1.1.0
$ du -sh ~/go/pkg/mod
80M /home/jun/go/pkg/mod
Reference: https://stackoverflow.com/a/68172023/7902371
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
This commit cleanly separates config parsing, stdio server execution and
mcp server construction. Aside from significant clarity improvements, it
allows for direct construction of the mcp server in e2e tests to allow
for breakpoint debugging.
Add git tag functionality including:
- List repository tags
- Get tag details
- Support for tag-based content access
This enables basic read-only tag management through the MCP server API.