From 5041a5bdd3377e6b2920f11e71de28f4ad4ac166 Mon Sep 17 00:00:00 2001 From: Nixevol Date: Wed, 30 Sep 2026 05:50:33 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=BB=BA=E7=AB=8B=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E9=AA=A8=E6=9E=B6=E3=80=81Go=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B8=8E=E6=9E=84=E5=BB=BA=E6=A3=80=E6=9F=A5=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .golangci.yml | 34 ++++++++++++++++ Taskfile.yml | 73 ++++++++++++++++++++++++++++++++++ go.mod | 20 ++++++++++ go.sum | 52 ++++++++++++++++++++++++ internal/admin/.gitkeep | 0 internal/app/group/.gitkeep | 0 internal/app/identity/.gitkeep | 0 internal/app/message/.gitkeep | 0 internal/app/presence/.gitkeep | 0 internal/auth/.gitkeep | 0 internal/broker/.gitkeep | 0 internal/httpx/.gitkeep | 0 internal/listener/.gitkeep | 0 internal/protocol/.gitkeep | 0 sdk/go/.gitkeep | 0 sdk/java/.gitkeep | 0 sdk/js/.gitkeep | 0 sdk/python/.gitkeep | 0 taskfiles/_init.yml | 6 +++ test/harness/.gitkeep | 0 21 files changed, 186 insertions(+) create mode 100644 .golangci.yml create mode 100644 Taskfile.yml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/admin/.gitkeep create mode 100644 internal/app/group/.gitkeep create mode 100644 internal/app/identity/.gitkeep create mode 100644 internal/app/message/.gitkeep create mode 100644 internal/app/presence/.gitkeep create mode 100644 internal/auth/.gitkeep create mode 100644 internal/broker/.gitkeep create mode 100644 internal/httpx/.gitkeep create mode 100644 internal/listener/.gitkeep create mode 100644 internal/protocol/.gitkeep create mode 100644 sdk/go/.gitkeep create mode 100644 sdk/java/.gitkeep create mode 100644 sdk/js/.gitkeep create mode 100644 sdk/python/.gitkeep create mode 100644 taskfiles/_init.yml create mode 100644 test/harness/.gitkeep diff --git a/.gitignore b/.gitignore index 720da61..9d18d8f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /dist/ /web/dist/ node_modules/ +.pnpm-store/ *.exe *.test *.out diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..4128e1f --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,34 @@ +version: "2" + +run: + timeout: 5m + +formatters: + enable: + - gofmt + - goimports + +linters: + enable: + - errcheck + - govet + - ineffassign + - staticcheck + - unused + - misspell + - unconvert + settings: + govet: + enable: + - nilness + - shadow + exclusions: + paths: + - web/node_modules + - third_party + - builtin + - examples + +issues: + max-issues-per-linter: 0 + max-same-issues: 0 diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..684f84f --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,73 @@ +version: "3" + +vars: + BIN_DIR: bin + BIN_NAME: nixmsg + EMBED_TAG: embeddist + EXE: '{{if eq OS "windows"}}.exe{{end}}' + +includes: + '*': + taskfile: taskfiles/*.yml + optional: true + +tasks: + default: + desc: 显示可用任务 + cmds: + - task --list + + web:install: + desc: 安装前端依赖 + dir: web + cmds: + - pnpm install + + web:dev: + desc: 启动前端开发服务器 + dir: web + deps: [web:install] + cmds: + - pnpm dev + + web:build: + desc: 构建前端静态资源到 web/dist + dir: web + deps: [web:install] + cmds: + - pnpm build + + build: + desc: 构建嵌入前端的单个可执行文件 + deps: [web:build] + cmds: + - go build -tags {{.EMBED_TAG}} -o {{.BIN_DIR}}/{{.BIN_NAME}}{{.EXE}} ./cmd/nixmsg + env: + CGO_ENABLED: "0" + + test: + desc: 运行单元测试 + cmds: + - go test ./... + + lint: + desc: 运行 golangci-lint + cmds: + - golangci-lint run ./... + + check: + desc: 构建、检查与单元测试 + cmds: + - task: build + - task: lint + - task: test + + itest: + desc: 运行集成测试(T0.5 后可用) + cmds: + - go test ./test/... -count=1 + + docker: + desc: 构建开发用 Docker 镜像 + cmds: + - docker build -t nixmsg:dev -f deploy/Dockerfile . diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5768d0c --- /dev/null +++ b/go.mod @@ -0,0 +1,20 @@ +module git.asio.asia/nixevol/NixMsg + +go 1.27 + +require ( + go.yaml.in/yaml/v3 v3.0.5 + modernc.org/sqlite v1.60.1 +) + +require ( + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + golang.org/x/sys v0.48.0 // indirect + modernc.org/libc v1.77.1 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.12.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..ad2cb52 --- /dev/null +++ b/go.sum @@ -0,0 +1,52 @@ +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3 h1:LMLX+LgTNWpfvCBdFebv6EsYotImrt/Ppc5cXIriCSo= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3/go.mod h1:jl5iWTm0/hd5PjEYEOuwAJ57L/CibdZfrqZ5XA5GrCk= +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/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= +go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= +golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= +golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= +golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= +golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= +golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/tools v0.50.0 h1:c2ifzfcuY7L90lZ2aKd8S4K2NpASF08SZx9ZuJkHmSU= +golang.org/x/tools v0.50.0/go.mod h1:7ulVMw3831Mwi5EZD6RomGyffr4VFjuNYXf2BbCEAV0= +modernc.org/cc/v4 v4.29.7 h1:q+NXGJ0bK3b4TXFYQQVr9pYETGnmwFWkrUzJnMya/Tg= +modernc.org/cc/v4 v4.29.7/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= +modernc.org/ccgo/v4 v4.36.1 h1:ZNIUZAryN0UgnJwtyxrdEzcFc3yD4Cu4AzjfPXsLsIE= +modernc.org/ccgo/v4 v4.36.1/go.mod h1:rrtGc2QkS239nYb/mQNuBMyjq3/y3ZXWbBjPoV3wqzA= +modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= +modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/gc/v3 v3.1.5 h1:21ldfPfRYE31Tb7B3mwAK8gy1AxP4+dKjrOQPfqakoc= +modernc.org/gc/v3 v3.1.5/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= +modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= +modernc.org/libc v1.77.1 h1:Ct8j47QtiZ1Enj2DtFXQtUqrPCAjdCmPjtCuvrYQ0Hs= +modernc.org/libc v1.77.1/go.mod h1:87/pZ4L6nD1zqW4nItuS12YO7hN1igAah34xjnQo/W0= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.12.1 h1:nFMiWrpStgZczNl6XI9GnIk/rWhYIyHGUaR04pGbp9g= +modernc.org/memory v1.12.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= +modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.60.1 h1:/blz53O951KWFOso4QQvEs/Fq6cDBKLtMVrYNSeJVKw= +modernc.org/sqlite v1.60.1/go.mod h1:1dIoEagfDE72QytD5scH1lxARtaUgKgHC/NuApA27r0= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/internal/admin/.gitkeep b/internal/admin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/app/group/.gitkeep b/internal/app/group/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/app/identity/.gitkeep b/internal/app/identity/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/app/message/.gitkeep b/internal/app/message/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/app/presence/.gitkeep b/internal/app/presence/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/auth/.gitkeep b/internal/auth/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/broker/.gitkeep b/internal/broker/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/httpx/.gitkeep b/internal/httpx/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/listener/.gitkeep b/internal/listener/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/protocol/.gitkeep b/internal/protocol/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sdk/go/.gitkeep b/sdk/go/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sdk/java/.gitkeep b/sdk/java/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sdk/js/.gitkeep b/sdk/js/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sdk/python/.gitkeep b/sdk/python/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/taskfiles/_init.yml b/taskfiles/_init.yml new file mode 100644 index 0000000..901cfaf --- /dev/null +++ b/taskfiles/_init.yml @@ -0,0 +1,6 @@ +version: "3" + +# 各开发线把自己的任务写到本目录 <线名>.yml(如 p.yml、n.yml)。 +# 主 Taskfile 通过 includes 的 glob 引入;本文件仅占位,避免空目录无法匹配。 + +tasks: {} diff --git a/test/harness/.gitkeep b/test/harness/.gitkeep new file mode 100644 index 0000000..e69de29