Skip to content

Commit d845a20

Browse files
committed
feat: 支持 -v 打印版本号、仓库地址与版权信息,构建时自动注入
1 parent 10f5c47 commit d845a20

4 files changed

Lines changed: 19 additions & 4 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ jobs:
3535
GOARCH: ${{ matrix.goarch }}
3636
CGO_ENABLED: "0"
3737
run: |
38+
VERSION="${GITHUB_REF_NAME}"
3839
NAME=gping-${{ matrix.goos }}-${{ matrix.goarch }}
39-
go build -trimpath -ldflags="-s -w" -o "${NAME}" .
40+
go build -trimpath -ldflags="-s -w -X main.version=${VERSION}" -o "${NAME}" .
4041
chmod +x "${NAME}"
4142
tar czf "${NAME}.tar.gz" "${NAME}"
4243
echo "ARCHIVE=${NAME}.tar.gz" >> "$GITHUB_ENV"

‎Makefile‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ GEOLITE_GZ_URL ?= https://raw.githubusercontent.com/wp-statistics/GeoLite2-City/
1010

1111
.PHONY: build clean download-geolite geolite clean-geolite
1212

13+
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
14+
LDFLAGS := -s -w -X main.version=$(VERSION)
15+
1316
build:
1417
mkdir -p $(BIN_DIR)
15-
go build -o $(OUTPUT) .
18+
go build -trimpath -ldflags='$(LDFLAGS)' -o $(OUTPUT) .
1619

1720
clean:
1821
rm -f $(OUTPUT)

‎build.sh‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ case "$OS" in
2222
esac
2323

2424
mkdir -p "$BIN_DIR"
25-
go build -o "$TARGET" .
25+
VERSION="$(git describe --tags --always --dirty 2>/dev/null || echo dev)"
26+
go build -trimpath -ldflags="-s -w -X main.version=${VERSION}" -o "$TARGET" .
2627
chmod +x "$TARGET"
2728

2829
printf '已编译: %s (%s/%s)\n' "$TARGET" "$OS" "$ARCH"

‎main.go‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ import (
2222
"gping/geoip"
2323
)
2424

25-
var errInvalidArgs = errors.New("invalid arguments")
25+
var (
26+
version = "dev"
27+
repoURL = "https://github.com/PrintNow/gping"
28+
copyright = "Copyright (c) 2026 Shine"
29+
errInvalidArgs = errors.New("invalid arguments")
30+
)
2631

2732
type ipFamily int
2833

@@ -33,6 +38,10 @@ const (
3338
)
3439

3540
func main() {
41+
if len(os.Args) > 1 && os.Args[1] == "-v" {
42+
fmt.Printf("gping %s\n%s\n%s\n", version, repoURL, copyright)
43+
return
44+
}
3645
dnsServer, target, family, count, jsonOut, err := parseArgs(os.Args[1:])
3746
if err != nil {
3847
if errors.Is(err, errInvalidArgs) {
@@ -103,6 +112,7 @@ func main() {
103112

104113
func printUsage() {
105114
fmt.Println("Usage:")
115+
fmt.Println(" gping -v")
106116
fmt.Println(" gping <host> [-4|-6] [-c N] [-json]")
107117
fmt.Println(" gping <dns> <host> [-4|-6] [-c N] [-json]")
108118
fmt.Println(" Options may appear before, between, or after positional args.")

0 commit comments

Comments
 (0)