Skip to content

Commit ead6172

Browse files
committed
Improve the build process
1 parent a19f603 commit ead6172

File tree

5 files changed

+140
-86
lines changed

5 files changed

+140
-86
lines changed

Dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ RUN go mod download
1515
COPY . .
1616

1717
# Build for both architectures to support different platforms
18-
RUN make build_linux_amd64 && make build_linux_arm64
18+
RUN make build_linux
1919

2020
# Create a minimal runtime image
2121
FROM --platform=$TARGETPLATFORM alpine:3.19 AS runtime
@@ -106,6 +106,5 @@ ENV DB_TYPE="mmdb"
106106
# ENV DB_NAME=""
107107
# ENV DB_SCHEMA="" # used for postgres/sqlite
108108

109-
110109
# Command to run the entrypoint script that will generate .env and start the app
111-
CMD ["/app/entrypoint.sh"]
110+
CMD ["/app/entrypoint.sh"]

Makefile

Lines changed: 60 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,86 @@
11
BINARY_NAME=ip-location-api
22

3-
ifeq ($(OS), Windows_NT)
3+
ifeq ($(OS), Windows_NT)
44
DETECTED_OS := Windows
5-
BUILD_COMMAND := build_windows
6-
CLEAN_COMMAND := clean_windows
5+
BUILD_COMMAND := build_on_windows_all
6+
BUILD_COMMAND_LINUX_X64 := build_on_windows_linux_x64
7+
BUILD_COMMAND_LINUX_ARM64 := build_on_windows_linux_arm64
8+
BUILD_COMMAND_DARWIN_X64 := build_on_windows_darwin_x64
9+
BUILD_COMMAND_DARWIN_ARM64 := build_on_windows_darwin_arm64
10+
BUILD_COMMAND_WINDOWS_X64 := build_on_windows_windows_x64
11+
BUILD_COMMAND_WINDOWS_ARM64 := build_on_windows_windows_arm64
12+
CLEAN_COMMAND := clean_on_windows
713
else
814
DETECTED_OS := $(shell sh -c 'uname 2>/dev/null || echo Unknown')
9-
BUILD_COMMAND := build_other
10-
CLEAN_COMMAND := clean_other
15+
BUILD_COMMAND := build_on_unix_all
16+
BUILD_COMMAND_LINUX_X64 := build_on_unix_linux_x64
17+
BUILD_COMMAND_LINUX_ARM64 := build_on_unix_linux_arm64
18+
BUILD_COMMAND_DARWIN_X64 := build_on_unix_darwin_x64
19+
BUILD_COMMAND_DARWIN_ARM64 := build_on_unix_darwin_arm64
20+
BUILD_COMMAND_WINDOWS_X64 := build_on_unix_windows_x64
21+
BUILD_COMMAND_WINDOWS_ARM64 := build_on_unix_windows_arm64
22+
CLEAN_COMMAND := clean_on_unix
1123
endif
12-
24+
1325
all: test build
1426

1527
# Build commands
1628
build: update $(BUILD_COMMAND)
17-
18-
build_linux_amd64:
29+
build_linux: update $(BUILD_COMMAND_LINUX_X64) $(BUILD_COMMAND_LINUX_ARM64)
30+
build_linux_x64: update $(BUILD_COMMAND_LINUX_X64)
31+
build_linux_arm64: update $(BUILD_COMMAND_LINUX_ARM64)
32+
build_darwin: update $(BUILD_COMMAND_DARWIN_X64) $(BUILD_COMMAND_DARWIN_ARM64)
33+
build_darwin_x64: update $(BUILD_COMMAND_DARWIN_X64)
34+
build_darwin_arm64: update $(BUILD_COMMAND_DARWIN_ARM64)
35+
build_windows: update $(BUILD_COMMAND_WINDOWS_X64) $(BUILD_COMMAND_WINDOWS_ARM64)
36+
build_windows_x64: update $(BUILD_COMMAND_WINDOWS_X64)
37+
build_windows_arm64: update $(BUILD_COMMAND_WINDOWS_ARM64)
38+
39+
# Build on Unix
40+
build_on_unix_all: build_on_unix_linux_x64 build_on_unix_linux_arm64 build_on_unix_darwin_x64 build_on_unix_darwin_arm64 build_on_unix_windows_x64 build_on_unix_windows_arm64
41+
build_on_unix_linux_x64:
1942
GOARCH=amd64 GOOS=linux go build -o builds/$(BINARY_NAME)-linux-x64.bin .
20-
21-
build_windows_amd64:
22-
GOARCH=amd64 GOOS=windows go build -o builds/$(BINARY_NAME)-windows-x64.exe .
23-
24-
build_darwin_amd64:
25-
GOARCH=amd64 GOOS=darwin go build -o builds/$(BINARY_NAME)-darwin-x64.dmg .
26-
27-
build_linux_arm64:
43+
build_on_unix_linux_arm64:
2844
GOARCH=arm64 GOOS=linux go build -o builds/$(BINARY_NAME)-linux-arm64.bin .
29-
30-
build_windows_arm64:
31-
GOARCH=arm64 GOOS=windows go build -o builds/$(BINARY_NAME)-windows-arm64.exe .
32-
33-
build_darwin_arm64:
45+
build_on_unix_darwin_x64:
46+
GOARCH=amd64 GOOS=darwin go build -o builds/$(BINARY_NAME)-darwin-x64.dmg .
47+
build_on_unix_darwin_arm64:
3448
GOARCH=arm64 GOOS=darwin go build -o builds/$(BINARY_NAME)-darwin-arm64.dmg .
49+
build_on_unix_windows_x64:
50+
GOARCH=amd64 GOOS=windows go build -o builds/$(BINARY_NAME)-windows-x64.exe .
51+
build_on_unix_windows_arm64:
52+
GOARCH=arm64 GOOS=windows go build -o builds/$(BINARY_NAME)-windows-arm64.exe .
3553

36-
build_other: build_linux_amd64 build_windows_amd64 build_darwin_amd64
37-
build_other: build_linux_arm64 build_windows_arm64 build_darwin_arm64
38-
39-
build_windows:
54+
# Build on Windows
55+
build_on_windows_all: build_on_windows_linux_x64 build_on_windows_linux_arm64 build_on_windows_darwin_x64 build_on_windows_darwin_arm64 build_on_windows_windows_x64 build_on_windows_windows_arm64
56+
build_on_windows_linux_x64:
4057
set "GOARCH=amd64" && set "GOOS=linux" && go build -o builds\$(BINARY_NAME)-linux-x64.bin .
41-
set "GOARCH=amd64" && set "GOOS=windows" && go build -o builds\$(BINARY_NAME)-windows-x64.exe .
42-
set "GOARCH=amd64" && set "GOOS=darwin" && go build -o builds\$(BINARY_NAME)-darwin-x64.dmg .
58+
build_on_windows_linux_arm64:
4359
set "GOARCH=arm64" && set "GOOS=linux" && go build -o builds\$(BINARY_NAME)-linux-arm64.bin .
44-
set "GOARCH=arm64" && set "GOOS=windows" && go build -o builds\$(BINARY_NAME)-windows-arm64.exe .
60+
build_on_windows_darwin_x64:
61+
set "GOARCH=amd64" && set "GOOS=darwin" && go build -o builds\$(BINARY_NAME)-darwin-x64.dmg .
62+
build_on_windows_darwin_arm64:
4563
set "GOARCH=arm64" && set "GOOS=darwin" && go build -o builds\$(BINARY_NAME)-darwin-arm64.dmg .
64+
build_on_windows_windows_x64:
65+
set "GOARCH=amd64" && set "GOOS=windows" && go build -o builds\$(BINARY_NAME)-windows-x64.exe .
66+
build_on_windows_windows_arm64:
67+
set "GOARCH=arm64" && set "GOOS=windows" && go build -o builds\$(BINARY_NAME)-windows-arm64.exe .
4668

4769
# Clean commands
4870
clean: $(CLEAN_COMMAND)
4971

5072
clean_go:
5173
go clean
5274

53-
clean_other: clean_go
54-
$(RM) builds/$(BINARY_NAME)-linux-x64.bin
55-
$(RM) builds/$(BINARY_NAME)-windows-x64.exe
56-
$(RM) builds/$(BINARY_NAME)-darwin-x64.dmg
57-
$(RM) builds/$(BINARY_NAME)-linux-arm64.bin
58-
$(RM) builds/$(BINARY_NAME)-windows-arm64.exe
59-
$(RM) builds/$(BINARY_NAME)-darwin-arm64.dmg
75+
clean_on_unix: clean_go
76+
rm -f builds/$(BINARY_NAME)-linux-x64.bin
77+
rm -f builds/$(BINARY_NAME)-windows-x64.exe
78+
rm -f builds/$(BINARY_NAME)-darwin-x64.dmg
79+
rm -f builds/$(BINARY_NAME)-linux-arm64.bin
80+
rm -f builds/$(BINARY_NAME)-windows-arm64.exe
81+
rm -f builds/$(BINARY_NAME)-darwin-arm64.dmg
6082

61-
clean_windows: clean_go
83+
clean_on_windows: clean_go
6284
del "builds\$(BINARY_NAME)-linux-x64.bin"
6385
del "builds\$(BINARY_NAME)-windows-x64.exe"
6486
del "builds\$(BINARY_NAME)-darwin-x64.dmg"
@@ -84,5 +106,5 @@ update:
84106
go mod tidy
85107

86108
# Docker commands
87-
dockerbuild:
88-
docker build -t ip-location-api .
109+
docker:
110+
docker build -t ip-location-api .

README.md

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ If you wish to expose the system without a reverse proxy, you may wish to update
8787

8888
`API_KEY` allows a very basic protection of the system to be applied, a header named `API-KEY` *(hyphen not underscore!)* with a matching value must be passed if this variable is populated. If left blank, the API is open.
8989

90-
`LOAD_LOG_FREQ` allows adjusting how frequently progress in saving records will be logged.
91-
9290
`COUNTRY`, `CITY` and `ASN` are the databases that will be loaded. **If you don't need cities or ASNs, just leave them blank.** The values / names used should mirror the directory values found in the [ip-location-db](https://github.com/sapics/ip-location-db) project:
9391

9492
### Allowed `COUNTRY` values
@@ -115,6 +113,8 @@ If you wish to expose the system without a reverse proxy, you may wish to update
115113

116114
`UPDATE_TIME` is optional, but if present *(and in standard HH:MM format)*, it will check for / download / reload new data every 24 hours at the time specified.
117115

116+
`LOAD_LOG_FREQ` is optional, but if present allows adjusting how frequently load progress is logged. Defaults to 1000.
117+
118118
### MMDB
119119

120120
The MMDB adaption doesn't need any initialisation, it just needs to be told to use that format:
@@ -263,24 +263,50 @@ More interestingly, for a single IP, `/benchmark/{ipVersion}/1`:
263263

264264
**1000μs is still only 0.001 seconds, so all are acceptably quick.**
265265

266+
## Building
267+
268+
The tool can be built for all architectures using the command:
269+
270+
```Shell
271+
make build
272+
```
273+
274+
Or specific platforms using more specific commands:
275+
276+
```Shell
277+
make build_linux
278+
make build_darwin
279+
make build_windows
280+
```
281+
282+
Or specific platforms and architectures using even more specific commands:
283+
284+
```Shell
285+
make build_linux_x64
286+
make build_linux_arm64
287+
make build_darwin_x64
288+
make build_darwin_arm64
289+
make build_windows_x64
290+
make build_windows_arm64
291+
```
292+
266293
## Docker
267294

268-
There is a Dockerfile included that supports building a docker container image, `ip-location-api`.
269-
This can be built by running `make dockerbuild`.
270-
By default, this uses the `mmdb` data storage, and open data that doesn't require a license:
295+
There is a Dockerfile included that supports building a docker container image, `ip-location-api`. This can be built by running `make dockerbuild`. By default, this uses the `mmdb` data storage, and open data that doesn't require a licence:
271296

272297
* `COUNTRY` defaults to `geo-whois-asn-country`
273298
* `CITY` defaults to blank
274299
* `ASN` defaults to `asn`
275300

276-
To run the docker image, map port 8080 to the desired port, and pass the configuration variables on the commandline.
277-
For example, to serve on port 8454, using a sqlite database, with the dbip data for country and ask but geolite2 for city, run:
301+
To run the docker image, map port 8080 to the desired port, and pass in any configuration variables. For example, to serve on port 8454, using an SQLite database, with the `dbip` data for country and ASN, but `geolite2` for city, run:
278302

279303
```Shell
280304
docker run -p 8454:8080 -e DB_TYPE=sqlite -e DB_USER=ip-location-api.db -e COUNTRY=dbip-country -e CITY=geolite2-city -e ASN=dbip-asn ip-location-api
281305
```
282306

283-
To persist location data between starts, pass `-v ip_location_data:/app/downloads` to the `docker run` command.
307+
To persist location data, pass `-v ip_location_data:/app/downloads` to the `docker run` command, for example:
308+
309+
docker run -p 8454:8080 -e DB_TYPE=sqlite -e DB_USER=ip-location-api.db -e COUNTRY=dbip-country -e CITY=geolite2-city -e ASN=dbip-asn ip-location-api -v ip_location_data:/app/downloads
284310

285311
## Possible Future Improvements / Enhancements
286312

go.mod

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
1-
module github.com/paul-norman/ip_api
1+
module github.com/paul-norman/ip-location-api
22

3-
go 1.23.9
3+
go 1.24.0
4+
5+
toolchain go1.24.3
46

57
require (
68
github.com/glebarez/go-sqlite v1.22.0
7-
github.com/go-sql-driver/mysql v1.9.2
9+
github.com/go-sql-driver/mysql v1.9.3
810
github.com/joho/godotenv v1.5.1
911
github.com/lib/pq v1.10.9
10-
github.com/maxmind/mmdbwriter v1.0.0
12+
github.com/maxmind/mmdbwriter v1.1.0
1113
github.com/oschwald/maxminddb-golang v1.13.1
1214
github.com/praserx/ipconv v1.2.2
1315
github.com/seancfoley/ipaddress-go v1.7.1
14-
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6
16+
golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546
1517
)
1618

1719
require (
1820
filippo.io/edwards25519 v1.1.0 // indirect
1921
github.com/dustin/go-humanize v1.0.1 // indirect
2022
github.com/google/uuid v1.6.0 // indirect
2123
github.com/mattn/go-isatty v0.0.20 // indirect
22-
github.com/ncruces/go-strftime v0.1.9 // indirect
24+
github.com/ncruces/go-strftime v1.0.0 // indirect
25+
github.com/oschwald/maxminddb-golang/v2 v2.0.0 // indirect
2326
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
2427
github.com/seancfoley/bintree v1.3.1 // indirect
2528
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
26-
golang.org/x/sys v0.33.0 // indirect
27-
modernc.org/libc v1.65.7 // indirect
29+
golang.org/x/sys v0.37.0 // indirect
30+
modernc.org/libc v1.66.10 // indirect
2831
modernc.org/mathutil v1.7.1 // indirect
2932
modernc.org/memory v1.11.0 // indirect
30-
modernc.org/sqlite v1.37.0 // indirect
33+
modernc.org/sqlite v1.39.1 // indirect
3134
)

go.sum

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
66
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
77
github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ=
88
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
9-
github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
10-
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
9+
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
10+
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
1111
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
1212
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
1313
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
@@ -18,12 +18,14 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
1818
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
1919
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
2020
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
21-
github.com/maxmind/mmdbwriter v1.0.0 h1:bieL4P6yaYaHvbtLSwnKtEvScUKKD6jcKaLiTM3WSMw=
22-
github.com/maxmind/mmdbwriter v1.0.0/go.mod h1:noBMCUtyN5PUQ4H8ikkOvGSHhzhLok51fON2hcrpKj8=
23-
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
24-
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
21+
github.com/maxmind/mmdbwriter v1.1.0 h1:/A7oLq07eKIOp2cP3w6N9nV5X1Aa6KqK3kHy6B5bxbo=
22+
github.com/maxmind/mmdbwriter v1.1.0/go.mod h1:hWm/woy2UXZMuHs9GBB6KMmEclvjMZstQ7pJ+KmTqMM=
23+
github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
24+
github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
2525
github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE=
2626
github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8=
27+
github.com/oschwald/maxminddb-golang/v2 v2.0.0 h1:Gyljxck1kHbBxDgLM++NfDWBqvu1pWWfT8XbosSo0bo=
28+
github.com/oschwald/maxminddb-golang/v2 v2.0.0/go.mod h1:gG4V88LsawPEqtbL1Veh1WRh+nVSYwXzJ1P5Fcn77g0=
2729
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2830
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2931
github.com/praserx/ipconv v1.2.2 h1:oz4XXNjywgoJRAnSymUET03OwSLL7JDVjQQEtl08XV8=
@@ -34,33 +36,35 @@ github.com/seancfoley/bintree v1.3.1 h1:cqmmQK7Jm4aw8gna0bP+huu5leVOgHGSJBEpUx3E
3436
github.com/seancfoley/bintree v1.3.1/go.mod h1:hIUabL8OFYyFVTQ6azeajbopogQc2l5C/hiXMcemWNU=
3537
github.com/seancfoley/ipaddress-go v1.7.1 h1:fDWryS+L8iaaH5RxIKbY0xB5Z+Zxk8xoXLN4S4eAPdQ=
3638
github.com/seancfoley/ipaddress-go v1.7.1/go.mod h1:TQRZgv+9jdvzHmKoPGBMxyiaVmoI0rYpfEk8Q/sL/Iw=
37-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
38-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
39+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
40+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
3941
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
4042
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
41-
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI=
42-
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ=
43-
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
44-
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
45-
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
46-
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
43+
golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY=
44+
golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
45+
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
46+
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
47+
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
48+
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
4749
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
48-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
49-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
50-
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
51-
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
50+
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
51+
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
52+
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
53+
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
5254
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
5355
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
54-
modernc.org/cc/v4 v4.26.1 h1:+X5NtzVBn0KgsBCBe+xkDC7twLb/jNVj9FPgiwSQO3s=
55-
modernc.org/cc/v4 v4.26.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
56-
modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU=
57-
modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE=
58-
modernc.org/fileutil v1.3.1 h1:8vq5fe7jdtEvoCf3Zf9Nm0Q05sH6kGx0Op2CPx1wTC8=
59-
modernc.org/fileutil v1.3.1/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc=
56+
modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4=
57+
modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
58+
modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A=
59+
modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q=
60+
modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA=
61+
modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc=
6062
modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
6163
modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
62-
modernc.org/libc v1.65.7 h1:Ia9Z4yzZtWNtUIuiPuQ7Qf7kxYrxP1/jeHZzG8bFu00=
63-
modernc.org/libc v1.65.7/go.mod h1:011EQibzzio/VX3ygj1qGFt5kMjP0lHb0qCW5/D/pQU=
64+
modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
65+
modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
66+
modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A=
67+
modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I=
6468
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
6569
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
6670
modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
@@ -69,8 +73,8 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
6973
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
7074
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
7175
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
72-
modernc.org/sqlite v1.37.0 h1:s1TMe7T3Q3ovQiK2Ouz4Jwh7dw4ZDqbebSDTlSJdfjI=
73-
modernc.org/sqlite v1.37.0/go.mod h1:5YiWv+YviqGMuGw4V+PNplcyaJ5v+vQd7TQOgkACoJM=
76+
modernc.org/sqlite v1.39.1 h1:H+/wGFzuSCIEVCvXYVHX5RQglwhMOvtHSv+VtidL2r4=
77+
modernc.org/sqlite v1.39.1/go.mod h1:9fjQZ0mB1LLP0GYrp39oOJXx/I2sxEnZtzCmEQIKvGE=
7478
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
7579
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
7680
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=

0 commit comments

Comments
 (0)