mirror of
https://github.com/oneclickvirt/ecs.git
synced 2025-09-28 20:22:09 +08:00
Compare commits
45 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
33d9a3ccb0 | ||
![]() |
1d5758999c | ||
![]() |
94ce394e04 | ||
![]() |
ede04bd2c2 | ||
![]() |
50f6ef1f60 | ||
![]() |
e5129ab244 | ||
![]() |
15b6ba4eb8 | ||
![]() |
6c77f74003 | ||
![]() |
61a1508b53 | ||
![]() |
022284018d | ||
![]() |
1d682213fe | ||
![]() |
649a09b50a | ||
![]() |
0fa2ff9300 | ||
![]() |
b174e5cfa8 | ||
![]() |
afd667db59 | ||
![]() |
d846dcbf4f | ||
![]() |
f47b1e3023 | ||
![]() |
63658bb2dc | ||
![]() |
b1a8368af3 | ||
![]() |
df6d1236cc | ||
![]() |
7c64102581 | ||
![]() |
58cb4f3831 | ||
![]() |
20bddae048 | ||
![]() |
3c0590ca8d | ||
![]() |
a752eeeeb0 | ||
![]() |
630a28f2f2 | ||
![]() |
cfd70e100b | ||
![]() |
9114f5b97a | ||
![]() |
8c0fc16384 | ||
![]() |
2ded570639 | ||
![]() |
42f0cb3399 | ||
![]() |
14adbddeb9 | ||
![]() |
27fd06b007 | ||
![]() |
88db8df827 | ||
![]() |
ec728796f4 | ||
![]() |
147e8c1113 | ||
![]() |
b9b1d5ca76 | ||
![]() |
1500c8342e | ||
![]() |
e523ca3c84 | ||
![]() |
42943370bb | ||
![]() |
7339f0336c | ||
![]() |
54bbe16563 | ||
![]() |
2a66452f40 | ||
![]() |
aab6bf197d | ||
![]() |
9206088bad |
522
.back/.goreleaser.yaml
Normal file
522
.back/.goreleaser.yaml
Normal file
@@ -0,0 +1,522 @@
|
|||||||
|
version: 2
|
||||||
|
project_name: goecs
|
||||||
|
|
||||||
|
env:
|
||||||
|
- GO111MODULE=on
|
||||||
|
|
||||||
|
before:
|
||||||
|
hooks:
|
||||||
|
- go mod tidy -v
|
||||||
|
|
||||||
|
builds:
|
||||||
|
# Linux AMD64 with CGO
|
||||||
|
- id: linux-amd64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=x86_64-linux-gnu-gcc
|
||||||
|
- CGO_CFLAGS=-O2 -static -fno-stack-protector
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/amd64 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/amd64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux 386 with CGO - 修复了编译器和标志
|
||||||
|
- id: linux-386-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=gcc
|
||||||
|
- CGO_CFLAGS=-m32 -O1 -march=i686 -mtune=generic -fno-stack-protector
|
||||||
|
- CGO_LDFLAGS=-m32
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags="-m32 -static"
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- 386
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/386 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/386 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux ARM64 with CGO
|
||||||
|
- id: linux-arm64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=aarch64-linux-gnu-gcc
|
||||||
|
- CGO_CFLAGS=-O1 -fno-stack-protector
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- arm64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/arm64 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/arm64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Windows AMD64 with CGO
|
||||||
|
- id: windows-amd64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=x86_64-w64-mingw32-gcc
|
||||||
|
- CGO_CFLAGS=-O2 -static-libgcc -static-libstdc++
|
||||||
|
- CGO_LDFLAGS=-static-libgcc -static-libstdc++
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- windows
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for windows/amd64 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built windows/amd64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Windows 386 with CGO - 修复了编译器名称
|
||||||
|
- id: windows-386-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=i686-w64-mingw32-gcc
|
||||||
|
- CGO_CFLAGS=-O2 -static-libgcc -static-libstdc++
|
||||||
|
- CGO_LDFLAGS=-static-libgcc -static-libstdc++
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- windows
|
||||||
|
goarch:
|
||||||
|
- 386
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for windows/386 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built windows/386 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Darwin AMD64 with CGO
|
||||||
|
- id: darwin-amd64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=o64-clang
|
||||||
|
- CGO_CFLAGS=-O2 -arch x86_64 -mmacosx-version-min=10.12
|
||||||
|
- CGO_LDFLAGS=-arch x86_64 -mmacosx-version-min=10.12
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- darwin
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for darwin/amd64 (CGO)"
|
||||||
|
- echo "Checking osxcross tools..."
|
||||||
|
- which o64-clang || echo "o64-clang not found"
|
||||||
|
- which o64-clang++ || echo "o64-clang++ not found"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built darwin/amd64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Darwin ARM64 with CGO
|
||||||
|
- id: darwin-arm64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=oa64-clang
|
||||||
|
- CGO_CFLAGS=-O2 -arch arm64 -mmacosx-version-min=11.0
|
||||||
|
- CGO_LDFLAGS=-arch arm64 -mmacosx-version-min=11.0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- darwin
|
||||||
|
goarch:
|
||||||
|
- arm64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for darwin/arm64 (CGO)"
|
||||||
|
- echo "Checking osxcross tools..."
|
||||||
|
- which oa64-clang || echo "oa64-clang not found"
|
||||||
|
- which oa64-clang++ || echo "oa64-clang++ not found"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built darwin/arm64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux RISC-V 64 with CGO
|
||||||
|
- id: linux-riscv64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=riscv64-linux-gnu-gcc
|
||||||
|
- CGO_CFLAGS=-O1 -fno-stack-protector
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- riscv64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/riscv64 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/riscv64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux MIPS64 with CGO
|
||||||
|
- id: linux-mips64-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=mips64-linux-gnuabi64-gcc
|
||||||
|
- CGO_CFLAGS=-O1 -fno-stack-protector
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- mips64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/mips64 (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/mips64 (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux MIPS64LE with CGO
|
||||||
|
- id: linux-mips64le-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=mips64el-linux-gnuabi64-gcc
|
||||||
|
- CGO_CFLAGS=-O1 -fno-stack-protector
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- mips64le
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/mips64le (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/mips64le (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux PPC64LE with CGO
|
||||||
|
- id: linux-ppc64le-cgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=1
|
||||||
|
- CC=powerpc64le-linux-gnu-gcc
|
||||||
|
- CGO_CFLAGS=-O1 -fno-stack-protector
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0 -extldflags=-static
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- ppc64le
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/ppc64le (CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/ppc64le (CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux ARM (no CGO)
|
||||||
|
- id: linux-arm-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- arm
|
||||||
|
goarm:
|
||||||
|
- "5"
|
||||||
|
- "6"
|
||||||
|
- "7"
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/arm (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/arm (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux S390X (no CGO)
|
||||||
|
- id: linux-s390x-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- s390x
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/s390x (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/s390x (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux MIPS (no CGO)
|
||||||
|
- id: linux-mips-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- mips
|
||||||
|
gomips:
|
||||||
|
- softfloat
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/mips (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/mips (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux MIPSLE (no CGO)
|
||||||
|
- id: linux-mipsle-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- mipsle
|
||||||
|
gomips:
|
||||||
|
- softfloat
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/mipsle (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/mipsle (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# Linux PPC64 (no CGO)
|
||||||
|
- id: linux-ppc64-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- linux
|
||||||
|
goarch:
|
||||||
|
- ppc64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for linux/ppc64 (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built linux/ppc64 (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# FreeBSD AMD64 (no CGO)
|
||||||
|
- id: freebsd-amd64-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- freebsd
|
||||||
|
goarch:
|
||||||
|
- amd64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for freebsd/amd64 (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built freebsd/amd64 (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
# FreeBSD ARM64 (no CGO)
|
||||||
|
- id: freebsd-arm64-nocgo
|
||||||
|
env:
|
||||||
|
- CGO_ENABLED=0
|
||||||
|
ldflags:
|
||||||
|
- -s -w -X main.version={{.Version}} -X main.arch={{.Arch}} -checklinkname=0
|
||||||
|
flags:
|
||||||
|
- -trimpath
|
||||||
|
goos:
|
||||||
|
- freebsd
|
||||||
|
goarch:
|
||||||
|
- arm64
|
||||||
|
main: ./
|
||||||
|
binary: goecs
|
||||||
|
no_unique_dist_dir: true
|
||||||
|
hooks:
|
||||||
|
pre:
|
||||||
|
- echo "Starting build for freebsd/arm64 (no CGO)"
|
||||||
|
post:
|
||||||
|
- echo "Successfully built freebsd/arm64 (no CGO)"
|
||||||
|
- echo "---"
|
||||||
|
|
||||||
|
universal_binaries:
|
||||||
|
- name_template: "goecs"
|
||||||
|
replace: false
|
||||||
|
ids:
|
||||||
|
- darwin-amd64-cgo
|
||||||
|
- darwin-arm64-cgo
|
||||||
|
|
||||||
|
checksum:
|
||||||
|
name_template: "checksums.txt"
|
||||||
|
algorithm: sha256
|
||||||
|
disable: false
|
||||||
|
ids:
|
||||||
|
- linux-amd64-cgo
|
||||||
|
- linux-386-cgo
|
||||||
|
- linux-arm64-cgo
|
||||||
|
- linux-riscv64-cgo
|
||||||
|
- linux-mips64-cgo
|
||||||
|
- linux-mips64le-cgo
|
||||||
|
- linux-ppc64le-cgo
|
||||||
|
- windows-amd64-cgo
|
||||||
|
- windows-386-cgo
|
||||||
|
- darwin-amd64-cgo
|
||||||
|
- darwin-arm64-cgo
|
||||||
|
- linux-arm-nocgo
|
||||||
|
- linux-s390x-nocgo
|
||||||
|
- linux-mips-nocgo
|
||||||
|
- linux-mipsle-nocgo
|
||||||
|
- linux-ppc64-nocgo
|
||||||
|
- freebsd-amd64-nocgo
|
||||||
|
- freebsd-arm64-nocgo
|
||||||
|
extra_files:
|
||||||
|
- glob: "./goecs.sh"
|
||||||
|
|
||||||
|
snapshot:
|
||||||
|
name_template: "goecs"
|
||||||
|
|
||||||
|
archives:
|
||||||
|
- id: default
|
||||||
|
name_template: "goecs_{{ .Os }}_{{ .Arch }}"
|
||||||
|
format: zip
|
||||||
|
files:
|
||||||
|
- none*
|
||||||
|
allow_different_binary_count: true
|
||||||
|
builds:
|
||||||
|
- linux-amd64-cgo
|
||||||
|
- linux-386-cgo
|
||||||
|
- linux-arm64-cgo
|
||||||
|
- linux-riscv64-cgo
|
||||||
|
- linux-mips64-cgo
|
||||||
|
- linux-mips64le-cgo
|
||||||
|
- linux-ppc64le-cgo
|
||||||
|
- windows-amd64-cgo
|
||||||
|
- windows-386-cgo
|
||||||
|
- darwin-amd64-cgo
|
||||||
|
- darwin-arm64-cgo
|
||||||
|
- linux-arm-nocgo
|
||||||
|
- linux-s390x-nocgo
|
||||||
|
- linux-mips-nocgo
|
||||||
|
- linux-mipsle-nocgo
|
||||||
|
- linux-ppc64-nocgo
|
||||||
|
- freebsd-amd64-nocgo
|
||||||
|
- freebsd-arm64-nocgo
|
||||||
|
|
||||||
|
changelog:
|
||||||
|
sort: asc
|
||||||
|
filters:
|
||||||
|
exclude:
|
||||||
|
- "^docs:"
|
||||||
|
- "^test:"
|
||||||
|
- "^chore"
|
||||||
|
- Merge pull request
|
||||||
|
- Merge branch
|
||||||
|
- go mod tidy
|
||||||
|
- New translations
|
132
.back/build.yaml
Normal file
132
.back/build.yaml
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
name: Goreleaser
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
tags:
|
||||||
|
- "v*.*.*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
goreleaser:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
# 1.20 是 Windows 7/8 Server 2008/2012 最后一个支持版本
|
||||||
|
image: goreleaser/goreleaser-cross:v1.20
|
||||||
|
steps:
|
||||||
|
- name: Configure git safe directory
|
||||||
|
run: |
|
||||||
|
git config --global --add safe.directory /__w/ecs/ecs
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 1.23.4
|
||||||
|
|
||||||
|
- name: Configure Git for Private Modules
|
||||||
|
run: |
|
||||||
|
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
|
||||||
|
git config --global url."git@github.com:".insteadOf "https://github.com/"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
|
||||||
|
- name: Install missing cross-compilation tools
|
||||||
|
run: |
|
||||||
|
echo "Installing missing cross-compilation tools..."
|
||||||
|
apt-get update
|
||||||
|
PACKAGES=(
|
||||||
|
gcc-multilib
|
||||||
|
g++-multilib
|
||||||
|
linux-libc-dev
|
||||||
|
linux-libc-dev:i386
|
||||||
|
libc6-dev-i386
|
||||||
|
libc6-dev-i386-cross
|
||||||
|
gcc-aarch64-linux-gnu
|
||||||
|
gcc-riscv64-linux-gnu
|
||||||
|
gcc-mips64-linux-gnuabi64
|
||||||
|
gcc-mips64el-linux-gnuabi64
|
||||||
|
gcc-powerpc64le-linux-gnu
|
||||||
|
gcc-mingw-w64-x86-64
|
||||||
|
gcc-mingw-w64-i686
|
||||||
|
libc6-dev-amd64-cross
|
||||||
|
libc6-dev-arm64-cross
|
||||||
|
libc6-dev-riscv64-cross
|
||||||
|
libc6-dev-mips64-cross
|
||||||
|
libc6-dev-mips64el-cross
|
||||||
|
libc6-dev-ppc64el-cross
|
||||||
|
)
|
||||||
|
for pkg in "${PACKAGES[@]}"; do
|
||||||
|
echo "Installing $pkg..."
|
||||||
|
apt-get install -y "$pkg" || echo "Failed to install $pkg, continuing..."
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Verify cross-compilation tools
|
||||||
|
run: |
|
||||||
|
echo "Checking available cross-compilation tools..."
|
||||||
|
echo "=== GCC compilers ==="
|
||||||
|
which gcc || echo "gcc not found"
|
||||||
|
which x86_64-linux-gnu-gcc || echo "x86_64-linux-gnu-gcc not found"
|
||||||
|
which aarch64-linux-gnu-gcc || echo "aarch64-linux-gnu-gcc not found"
|
||||||
|
which riscv64-linux-gnu-gcc || echo "riscv64-linux-gnu-gcc not found"
|
||||||
|
which mips64-linux-gnuabi64-gcc || echo "mips64-linux-gnuabi64-gcc not found"
|
||||||
|
which mips64el-linux-gnuabi64-gcc || echo "mips64el-linux-gnuabi64-gcc not found"
|
||||||
|
which powerpc64le-linux-gnu-gcc || echo "powerpc64le-linux-gnu-gcc not found"
|
||||||
|
echo "=== MinGW compilers ==="
|
||||||
|
which x86_64-w64-mingw32-gcc || echo "x86_64-w64-mingw32-gcc not found"
|
||||||
|
which i686-w64-mingw32-gcc || echo "i686-w64-mingw32-gcc not found"
|
||||||
|
echo "=== OSXCross compilers ==="
|
||||||
|
which o64-clang || echo "o64-clang not found"
|
||||||
|
which oa64-clang || echo "oa64-clang not found"
|
||||||
|
which o64-clang++ || echo "o64-clang++ not found"
|
||||||
|
which oa64-clang++ || echo "oa64-clang++ not found"
|
||||||
|
echo "=== Clang compilers ==="
|
||||||
|
which clang || echo "clang not found"
|
||||||
|
echo "=== Available gcc binaries ==="
|
||||||
|
ls -la /usr/bin/*gcc* | head -20
|
||||||
|
echo "=== Available clang binaries ==="
|
||||||
|
ls -la /usr/bin/*clang* | head -10
|
||||||
|
echo "=== OSXCross directory ==="
|
||||||
|
ls -la /usr/osxcross/bin/ 2>/dev/null || echo "OSXCross not found in /usr/osxcross/bin/"
|
||||||
|
|
||||||
|
- name: Run GoReleaser
|
||||||
|
uses: goreleaser/goreleaser-action@v6
|
||||||
|
with:
|
||||||
|
distribution: goreleaser
|
||||||
|
version: latest
|
||||||
|
args: release --parallelism 1 --verbose
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
GOPRIVATE: github.com/oneclickvirt/security
|
||||||
|
|
||||||
|
- name: Update goecs.sh with new version
|
||||||
|
run: |
|
||||||
|
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
|
||||||
|
VERSION="${GITHUB_REF#refs/tags/v}"
|
||||||
|
else
|
||||||
|
VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.1.37")
|
||||||
|
fi
|
||||||
|
echo "Using version: $VERSION"
|
||||||
|
FILE="goecs.sh"
|
||||||
|
BRANCH="master"
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git config --global --unset url."git@github.com:".insteadOf || true
|
||||||
|
git fetch origin $BRANCH
|
||||||
|
git checkout $BRANCH
|
||||||
|
if [ ! -f "$FILE" ]; then
|
||||||
|
echo "Error: $FILE not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "$FILE"
|
||||||
|
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "$FILE"
|
||||||
|
if git diff --quiet "$FILE"; then
|
||||||
|
echo "No changes detected in $FILE"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git add "$FILE"
|
||||||
|
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
||||||
|
git push origin $BRANCH
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
444
.github/workflows/build_binary.yaml
vendored
Normal file
444
.github/workflows/build_binary.yaml
vendored
Normal file
@@ -0,0 +1,444 @@
|
|||||||
|
name: Build and Release
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
tags:
|
||||||
|
- "v*.*.*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Release Check And Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Generate changelog
|
||||||
|
id: changelog
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
PREV_TAG=$(git describe --tags --abbrev=0 "$TAG^" 2>/dev/null || echo "")
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$TAG" | head -20)
|
||||||
|
else
|
||||||
|
CHANGELOG=$(git log --oneline --pretty=format:"* %H %s" "$PREV_TAG..$TAG")
|
||||||
|
fi
|
||||||
|
FULL_CHANGELOG="## Changelog"$'\n'"$CHANGELOG"
|
||||||
|
echo "$FULL_CHANGELOG" > changelog.txt
|
||||||
|
echo "changelog<<EOF" >> $GITHUB_OUTPUT
|
||||||
|
echo "$FULL_CHANGELOG" >> $GITHUB_OUTPUT
|
||||||
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create release if not exists
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_EXISTS=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id // empty')
|
||||||
|
if [ -z "$RELEASE_EXISTS" ]; then
|
||||||
|
CHANGELOG_BODY=$(cat changelog.txt | jq -Rs .)
|
||||||
|
curl -s -X POST -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":$CHANGELOG_BODY,\"draft\":false,\"prerelease\":false}" \
|
||||||
|
"https://api.github.com/repos/${{ github.repository }}/releases" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Delete existing release assets
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
if [ "$RELEASE_ID" != "null" ]; then
|
||||||
|
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets" | jq -r '.[] | .id')
|
||||||
|
for asset in $ASSETS; do
|
||||||
|
curl -s -X DELETE -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/assets/$asset"
|
||||||
|
done
|
||||||
|
sleep 30
|
||||||
|
fi
|
||||||
|
|
||||||
|
release-binary:
|
||||||
|
name: Release Go Binary
|
||||||
|
needs: build
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- goos: linux
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-linux-gnu-gcc
|
||||||
|
cflags: "-O2 -static -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: 386
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-linux-gnu-gcc
|
||||||
|
cflags: "-m32 -O1 -march=i686 -mtune=generic -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-multilib"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: aarch64-linux-gnu-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-aarch64-linux-gnu"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: riscv64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: riscv64-linux-gnu-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-riscv64-linux-gnu"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: mips64-linux-gnuabi64-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mips64-linux-gnuabi64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips64le
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: mips64el-linux-gnuabi64-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mips64el-linux-gnuabi64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: ppc64le
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: powerpc64le-linux-gnu-gcc
|
||||||
|
cflags: "-O1 -fno-stack-protector"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-powerpc64le-linux-gnu"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: x86_64-w64-mingw32-gcc
|
||||||
|
cflags: "-O2 -static-libgcc -static-libstdc++"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mingw-w64-x86-64"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: 386
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: i686-w64-mingw32-gcc
|
||||||
|
cflags: "-O2 -static-libgcc -static-libstdc++"
|
||||||
|
ldflags: "-extldflags=-static -s -w"
|
||||||
|
packages: "build-essential gcc-mingw-w64-i686"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: darwin
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: "clang --target=x86_64-apple-darwin"
|
||||||
|
cflags: "-O2 -arch x86_64 -mmacosx-version-min=10.12"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
requires_osxcross: true
|
||||||
|
|
||||||
|
- goos: darwin
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "1"
|
||||||
|
cc: "clang --target=aarch64-apple-darwin"
|
||||||
|
cflags: "-O2 -arch arm64 -mmacosx-version-min=11.0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
requires_osxcross: true
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: arm
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: s390x
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mips
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: mipsle
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: linux
|
||||||
|
goarch: ppc64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: windows
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: amd64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
- goos: freebsd
|
||||||
|
goarch: arm64
|
||||||
|
cgo_enabled: "0"
|
||||||
|
ldflags: "-s -w"
|
||||||
|
runner: ubuntu-latest
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.runner }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: 1.23.4
|
||||||
|
|
||||||
|
- name: Configure Git for Private Modules
|
||||||
|
run: |
|
||||||
|
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
|
||||||
|
git config --global url."git@github.com:".insteadOf "https://github.com/"
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
||||||
|
|
||||||
|
- name: Install cross-compilation tools
|
||||||
|
if: matrix.runner != 'macos-latest'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
case "${{ matrix.goos }}-${{ matrix.goarch }}" in
|
||||||
|
linux-386)
|
||||||
|
sudo apt-get install -y build-essential gcc-multilib g++-multilib ;;
|
||||||
|
linux-arm64)
|
||||||
|
sudo apt-get install -y build-essential gcc-aarch64-linux-gnu ;;
|
||||||
|
linux-riscv64)
|
||||||
|
sudo apt-get install -y build-essential gcc-riscv64-linux-gnu ;;
|
||||||
|
linux-mips64)
|
||||||
|
sudo apt-get install -y build-essential gcc-mips64-linux-gnuabi64 ;;
|
||||||
|
linux-mips64le)
|
||||||
|
sudo apt-get install -y build-essential gcc-mips64el-linux-gnuabi64 ;;
|
||||||
|
linux-ppc64le)
|
||||||
|
sudo apt-get install -y build-essential gcc-powerpc64le-linux-gnu ;;
|
||||||
|
windows-amd64|windows-386)
|
||||||
|
sudo apt-get install -y build-essential gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 ;;
|
||||||
|
*)
|
||||||
|
sudo apt-get install -y build-essential ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
- name: Install osxcross for Darwin
|
||||||
|
if: matrix.requires_osxcross == true
|
||||||
|
run: |
|
||||||
|
git clone --depth=1 https://github.com/tpoechtrager/osxcross.git
|
||||||
|
cd osxcross
|
||||||
|
wget -nc https://github.com/joseluisq/macosx-sdks/releases/download/12.3/MacOSX12.3.sdk.tar.xz
|
||||||
|
mv MacOSX12.3.sdk.tar.xz tarballs/
|
||||||
|
UNATTENDED=yes OSX_VERSION_MIN=10.12 ./build.sh
|
||||||
|
echo "$PWD/target/bin" >> $GITHUB_PATH
|
||||||
|
echo "OSXCROSS_ROOT=$PWD" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build Binary
|
||||||
|
run: |
|
||||||
|
go clean -cache -modcache -testcache
|
||||||
|
export CGO_ENABLED=${{ matrix.cgo_enabled }}
|
||||||
|
export GOOS=${{ matrix.goos }}
|
||||||
|
export GOARCH=${{ matrix.goarch }}
|
||||||
|
if [[ -n "${{ matrix.goarm }}" ]]; then
|
||||||
|
export GOARM=${{ matrix.goarm }}
|
||||||
|
fi
|
||||||
|
if [[ -n "${{ matrix.gomips }}" ]]; then
|
||||||
|
export GOMIPS=${{ matrix.gomips }}
|
||||||
|
fi
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.goos }}" == "darwin" ]]; then
|
||||||
|
if [[ "${{ matrix.goarch }}" == "amd64" ]]; then
|
||||||
|
export CC="x86_64-apple-darwin21.4-clang"
|
||||||
|
export CXX="x86_64-apple-darwin21.4-clang++"
|
||||||
|
elif [[ "${{ matrix.goarch }}" == "arm64" ]]; then
|
||||||
|
export CC="aarch64-apple-darwin21.4-clang"
|
||||||
|
export CXX="aarch64-apple-darwin21.4-clang++"
|
||||||
|
fi
|
||||||
|
export CGO_CFLAGS="${{ matrix.cflags }}"
|
||||||
|
export CGO_LDFLAGS="${{ matrix.ldflags }}"
|
||||||
|
export OSXCROSS_ROOT="${OSXCROSS_ROOT}"
|
||||||
|
elif [[ "${{ matrix.cgo_enabled }}" == "1" && "${{ matrix.runner }}" != "macos-latest" ]]; then
|
||||||
|
export CC="${{ matrix.cc }}"
|
||||||
|
export CGO_CFLAGS="${{ matrix.cflags }}"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
export CGO_LDFLAGS="-static-libgcc -static-libstdc++"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" ]]; then
|
||||||
|
echo 'int main() { return 0; }' > test.c
|
||||||
|
$CC $CGO_CFLAGS test.c -o test || exit 1
|
||||||
|
rm -f test.c test
|
||||||
|
fi
|
||||||
|
rm -rf vendor/
|
||||||
|
go mod download
|
||||||
|
go mod tidy
|
||||||
|
mkdir -p bin
|
||||||
|
BINARY_NAME="goecs"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
BINARY_NAME="${BINARY_NAME}.exe"
|
||||||
|
fi
|
||||||
|
LDFLAGS="-s -w -X main.version=${{ steps.tag.outputs.version }} -X main.arch=${{ matrix.goarch }}"
|
||||||
|
if [[ "${{ matrix.cgo_enabled }}" == "1" ]]; then
|
||||||
|
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
||||||
|
env CGO_ENABLED=1 GOOS=$GOOS GOARCH=$GOARCH CC="$CC" CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
|
||||||
|
go build -a -o bin/$BINARY_NAME -ldflags="$LDFLAGS" -trimpath ./
|
||||||
|
else
|
||||||
|
LDFLAGS="${LDFLAGS} -checklinkname=0 ${{ matrix.ldflags }}"
|
||||||
|
env CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH \
|
||||||
|
go build -o bin/$BINARY_NAME -ldflags="$LDFLAGS" -trimpath ./
|
||||||
|
fi
|
||||||
|
[[ -f "bin/$BINARY_NAME" ]] || exit 1
|
||||||
|
|
||||||
|
- name: Create ZIP archive
|
||||||
|
run: |
|
||||||
|
cd bin
|
||||||
|
BINARY_NAME="goecs"
|
||||||
|
if [[ "${{ matrix.goos }}" == "windows" ]]; then
|
||||||
|
BINARY_NAME="${BINARY_NAME}.exe"
|
||||||
|
fi
|
||||||
|
ZIP_NAME="goecs_${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
|
if [[ -n "${{ matrix.goarm }}" ]]; then
|
||||||
|
ZIP_NAME="${ZIP_NAME}v${{ matrix.goarm }}"
|
||||||
|
fi
|
||||||
|
if [[ -n "${{ matrix.gomips }}" ]]; then
|
||||||
|
ZIP_NAME="${ZIP_NAME}_${{ matrix.gomips }}"
|
||||||
|
fi
|
||||||
|
ZIP_NAME="${ZIP_NAME}.zip"
|
||||||
|
zip "$ZIP_NAME" "$BINARY_NAME"
|
||||||
|
|
||||||
|
- name: Upload to Release
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
cd bin
|
||||||
|
for file in *.zip; do
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: application/zip" \
|
||||||
|
--data-binary @"$file" \
|
||||||
|
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=$file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
checksums:
|
||||||
|
name: Generate Checksums
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: release-binary
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Download release assets
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
mkdir -p assets
|
||||||
|
ASSETS=$(curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets")
|
||||||
|
echo "$ASSETS" | jq -r '.[] | select(.name | endswith(".zip")) | .browser_download_url' | while read url; do
|
||||||
|
filename=$(basename "$url")
|
||||||
|
curl -L -H "Authorization: Bearer ${{ secrets.GHT }}" "$url" -o "assets/$filename"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Generate checksums
|
||||||
|
run: |
|
||||||
|
cd assets
|
||||||
|
sha256sum *.zip > checksums.txt
|
||||||
|
if [[ -f "../goecs.sh" ]]; then
|
||||||
|
sha256sum ../goecs.sh >> checksums.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Upload checksums
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
RELEASE_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG" | jq -r '.id')
|
||||||
|
curl -s -H "Authorization: Bearer ${{ secrets.GHT }}" \
|
||||||
|
-H "Content-Type: text/plain" \
|
||||||
|
--data-binary @assets/checksums.txt \
|
||||||
|
"https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets?name=checksums.txt"
|
||||||
|
|
||||||
|
update-script:
|
||||||
|
name: Update Script Version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: checksums
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
id: tag
|
||||||
|
run: |
|
||||||
|
TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0")
|
||||||
|
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${TAG#v}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Update goecs.sh version
|
||||||
|
run: |
|
||||||
|
VERSION="${{ steps.tag.outputs.version }}"
|
||||||
|
BRANCH="master"
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git config --global --unset url."git@github.com:".insteadOf || true
|
||||||
|
git fetch origin $BRANCH
|
||||||
|
git checkout $BRANCH
|
||||||
|
if [ -f "goecs.sh" ]; then
|
||||||
|
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "goecs.sh"
|
||||||
|
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "goecs.sh"
|
||||||
|
if ! git diff --quiet "goecs.sh"; then
|
||||||
|
git add "goecs.sh"
|
||||||
|
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
||||||
|
git push origin $BRANCH
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GHT }}
|
73
.github/workflows/main.yaml
vendored
73
.github/workflows/main.yaml
vendored
@@ -1,73 +0,0 @@
|
|||||||
name: goreleaser
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
tags:
|
|
||||||
- "v*.*.*"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
goreleaser:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
# 1.20 是 Windows 7/8 Server 2008/2012 最后一个支持版本
|
|
||||||
image: goreleaser/goreleaser-cross:v1.20
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
git config --global --add safe.directory /__w/ecs/ecs
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Set up Go
|
|
||||||
uses: actions/setup-go@v4
|
|
||||||
with:
|
|
||||||
go-version: 1.23.4
|
|
||||||
|
|
||||||
- name: Configure Git for Private Modules
|
|
||||||
run: |
|
|
||||||
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
|
|
||||||
git config --global url."git@github.com:".insteadOf "https://github.com/"
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GHT }}
|
|
||||||
|
|
||||||
- name: Run GoReleaser
|
|
||||||
uses: goreleaser/goreleaser-action@v2
|
|
||||||
with:
|
|
||||||
distribution: goreleaser
|
|
||||||
version: latest
|
|
||||||
args: release
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GHT }}
|
|
||||||
GOPRIVATE: github.com/oneclickvirt/security
|
|
||||||
|
|
||||||
- name: Update goecs.sh with new version
|
|
||||||
run: |
|
|
||||||
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
|
|
||||||
VERSION="${GITHUB_REF#refs/tags/v}"
|
|
||||||
else
|
|
||||||
VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.1.37")
|
|
||||||
fi
|
|
||||||
echo "Using version: $VERSION"
|
|
||||||
FILE="goecs.sh"
|
|
||||||
BRANCH="master"
|
|
||||||
git config --global user.name "github-actions[bot]"
|
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
||||||
git config --global --unset url."git@github.com:".insteadOf || true
|
|
||||||
git fetch origin $BRANCH
|
|
||||||
git checkout $BRANCH
|
|
||||||
if [ ! -f "$FILE" ]; then
|
|
||||||
echo "Error: $FILE not found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
sed -i "s/\(_yellow \"Unable to get version info, using default version \).*\(\".*\)/\1$VERSION\2/" "$FILE"
|
|
||||||
sed -i "s/\(ECS_VERSION=\"\).*\(\"\)/\1$VERSION\2/" "$FILE"
|
|
||||||
if git diff --quiet "$FILE"; then
|
|
||||||
echo "No changes detected in $FILE"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
git add "$FILE"
|
|
||||||
git commit -m "chore: update ECS_VERSION to $VERSION in goecs.sh"
|
|
||||||
git push origin $BRANCH
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GHT }}
|
|
@@ -30,9 +30,9 @@ Shell 版本:[https://github.com/spiritLHLS/ecs](https://github.com/spiritLHLS
|
|||||||
| 编译支持的架构 | 测试支持的架构 | 编译支持的系统 | 测试支持的系统 |
|
| 编译支持的架构 | 测试支持的架构 | 编译支持的系统 | 测试支持的系统 |
|
||||||
|---------------------------|-----------|---------|-----------|
|
|---------------------------|-----------|---------|-----------|
|
||||||
| amd64 | amd64 | Linux | Linux |
|
| amd64 | amd64 | Linux | Linux |
|
||||||
| arm | arm | Windows | Windows |
|
| arm | | Windows | Windows |
|
||||||
| arm64 | arm64 | FreeBSD | FreeBSD |
|
| arm64 | arm64 | FreeBSD | |
|
||||||
| 386 | 386 | OpenBSD | |
|
| 386 | | OpenBSD | |
|
||||||
| mips | | MacOS | MacOS |
|
| mips | | MacOS | MacOS |
|
||||||
| mipsle | | | |
|
| mipsle | | | |
|
||||||
| s390x | s390x | | |
|
| s390x | s390x | | |
|
||||||
|
@@ -28,10 +28,10 @@ Shell version: [https://github.com/spiritLHLS/ecs/blob/main/README_EN.md](https:
|
|||||||
| Supported for Compilation | Tested on | Supported OS for Compilation | Tested OS |
|
| Supported for Compilation | Tested on | Supported OS for Compilation | Tested OS |
|
||||||
|---------------------------|-----------|------------------------------|-----------|
|
|---------------------------|-----------|------------------------------|-----------|
|
||||||
| amd64 | amd64 | Linux | Linux |
|
| amd64 | amd64 | Linux | Linux |
|
||||||
| arm | arm | Windows | Windows |
|
| arm | | Windows | Windows |
|
||||||
| arm64 | arm64 | FreeBSD | FreeBSD |
|
| arm64 | arm64 | FreeBSD | |
|
||||||
| 386 | 386 | OpenBSD | |
|
| 386 | | OpenBSD | |
|
||||||
| mips | | MacOS | MacOS |
|
| mips | | MacOS(darwin) | MacOS |
|
||||||
| mipsle | | | |
|
| mipsle | | | |
|
||||||
| s390x | s390x | | |
|
| s390x | s390x | | |
|
||||||
| riscv64 | | | |
|
| riscv64 | | | |
|
||||||
|
@@ -36,6 +36,7 @@ func CpuTest(language, testMethod, testThread string) (realTestMethod, res strin
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
res = "Invalid test method specified.\n"
|
res = "Invalid test method specified.\n"
|
||||||
|
realTestMethod = "null"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !strings.Contains(res, "\n") && res != "" {
|
if !strings.Contains(res, "\n") && res != "" {
|
||||||
|
@@ -1,9 +1,11 @@
|
|||||||
package cputest
|
package cputest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test(t *testing.T) {
|
func Test(t *testing.T) {
|
||||||
CpuTest("zh", "sysbench", "1")
|
_, res := CpuTest("zh", "sysbench", "1")
|
||||||
|
fmt.Print(res)
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,17 @@
|
|||||||
package disktest
|
package disktest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"github.com/oneclickvirt/disktest/disk"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/oneclickvirt/disktest/disk"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DiskTest(language, testMethod, testPath string, isMultiCheck bool, autoChange bool) {
|
func DiskTest(language, testMethod, testPath string, isMultiCheck bool, autoChange bool) (realTestMethod, res string) {
|
||||||
var res string
|
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
if testMethod != "winsat" && testMethod != "" {
|
if testMethod != "winsat" && testMethod != "" {
|
||||||
res = "Detected host is Windows, using Winsat for testing.\n"
|
// res = "Detected host is Windows, using Winsat for testing.\n"
|
||||||
|
realTestMethod = "winsat"
|
||||||
}
|
}
|
||||||
res = disk.WinsatTest(language, isMultiCheck, testPath)
|
res = disk.WinsatTest(language, isMultiCheck, testPath)
|
||||||
} else {
|
} else {
|
||||||
@@ -19,24 +19,29 @@ func DiskTest(language, testMethod, testPath string, isMultiCheck bool, autoChan
|
|||||||
case "fio":
|
case "fio":
|
||||||
res = disk.FioTest(language, isMultiCheck, testPath)
|
res = disk.FioTest(language, isMultiCheck, testPath)
|
||||||
if res == "" && autoChange {
|
if res == "" && autoChange {
|
||||||
res = "Fio test failed, switching to DD for testing.\n"
|
// res = "Fio test failed, switching to DD for testing.\n"
|
||||||
res += disk.DDTest(language, isMultiCheck, testPath)
|
res += disk.DDTest(language, isMultiCheck, testPath)
|
||||||
|
realTestMethod = "dd"
|
||||||
|
} else {
|
||||||
|
realTestMethod = "fio"
|
||||||
}
|
}
|
||||||
case "dd":
|
case "dd":
|
||||||
res = disk.DDTest(language, isMultiCheck, testPath)
|
res = disk.DDTest(language, isMultiCheck, testPath)
|
||||||
if res == "" && autoChange {
|
if res == "" && autoChange {
|
||||||
res = "DD test failed, switching to Fio for testing.\n"
|
// res = "DD test failed, switching to Fio for testing.\n"
|
||||||
res += disk.FioTest(language, isMultiCheck, testPath)
|
res += disk.FioTest(language, isMultiCheck, testPath)
|
||||||
|
realTestMethod = "fio"
|
||||||
|
} else {
|
||||||
|
realTestMethod = "dd"
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
res = "Unsupported test method specified, switching to DD for testing.\n"
|
// res = "Unsupported test method specified, switching to DD for testing.\n"
|
||||||
res += disk.DDTest(language, isMultiCheck, testPath)
|
res += disk.DDTest(language, isMultiCheck, testPath)
|
||||||
|
realTestMethod = "dd"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//fmt.Println("--------------------------------------------------")
|
|
||||||
if !strings.Contains(res, "\n") && res != "" {
|
if !strings.Contains(res, "\n") && res != "" {
|
||||||
res += "\n"
|
res += "\n"
|
||||||
}
|
}
|
||||||
fmt.Printf("%s", res)
|
return
|
||||||
//fmt.Println("--------------------------------------------------")
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,11 @@
|
|||||||
package disktest
|
package disktest
|
||||||
|
|
||||||
import "testing"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
func TestDiskIoTest(t *testing.T) {
|
func TestDiskIoTest(t *testing.T) {
|
||||||
DiskTest("zh", "sysbench", "", false, false)
|
_, res := DiskTest("zh", "sysbench", "", false, false)
|
||||||
|
fmt.Print(res)
|
||||||
}
|
}
|
||||||
|
8
go.mod
8
go.mod
@@ -1,8 +1,6 @@
|
|||||||
module github.com/oneclickvirt/ecs
|
module github.com/oneclickvirt/ecs
|
||||||
|
|
||||||
go 1.24.1
|
go 1.24.5
|
||||||
|
|
||||||
toolchain go1.24.2
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/imroc/req/v3 v3.50.0
|
github.com/imroc/req/v3 v3.50.0
|
||||||
@@ -10,11 +8,11 @@ require (
|
|||||||
github.com/oneclickvirt/UnlockTests v0.0.27-20250628125053
|
github.com/oneclickvirt/UnlockTests v0.0.27-20250628125053
|
||||||
github.com/oneclickvirt/backtrace v0.0.5-20250629024536
|
github.com/oneclickvirt/backtrace v0.0.5-20250629024536
|
||||||
github.com/oneclickvirt/basics v0.0.15-20250714163009
|
github.com/oneclickvirt/basics v0.0.15-20250714163009
|
||||||
github.com/oneclickvirt/cputest v0.0.10-20250404151448
|
github.com/oneclickvirt/cputest v0.0.11-20250717060914
|
||||||
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
|
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
|
||||||
github.com/oneclickvirt/disktest v0.0.8-20250701092629
|
github.com/oneclickvirt/disktest v0.0.8-20250701092629
|
||||||
github.com/oneclickvirt/gostun v0.0.3-20250329105202
|
github.com/oneclickvirt/gostun v0.0.3-20250329105202
|
||||||
github.com/oneclickvirt/memorytest v0.0.6-20250630141424.0.20250701113027-9edfc91f68e6
|
github.com/oneclickvirt/memorytest v0.0.8-20250717053253
|
||||||
github.com/oneclickvirt/nt3 v0.0.5-20250416131047
|
github.com/oneclickvirt/nt3 v0.0.5-20250416131047
|
||||||
github.com/oneclickvirt/pingtest v0.0.8-20250701125637
|
github.com/oneclickvirt/pingtest v0.0.8-20250701125637
|
||||||
github.com/oneclickvirt/portchecker v0.0.3-20250329125750
|
github.com/oneclickvirt/portchecker v0.0.3-20250329125750
|
||||||
|
8
go.sum
8
go.sum
@@ -105,8 +105,8 @@ github.com/oneclickvirt/backtrace v0.0.5-20250629024536 h1:caHCa0DHmbYWBFN1bqKxp
|
|||||||
github.com/oneclickvirt/backtrace v0.0.5-20250629024536/go.mod h1:5AH00bo41hH3d2/JVuCTlBkZUs3AXX4nlKVXb6piZcI=
|
github.com/oneclickvirt/backtrace v0.0.5-20250629024536/go.mod h1:5AH00bo41hH3d2/JVuCTlBkZUs3AXX4nlKVXb6piZcI=
|
||||||
github.com/oneclickvirt/basics v0.0.15-20250714163009 h1:7I1lU7N91kClw6Cb6o+vGfScc/HngrjhsaaW10AbBFs=
|
github.com/oneclickvirt/basics v0.0.15-20250714163009 h1:7I1lU7N91kClw6Cb6o+vGfScc/HngrjhsaaW10AbBFs=
|
||||||
github.com/oneclickvirt/basics v0.0.15-20250714163009/go.mod h1:yN1IEOXN6v/GJqJSA70Pooo6nXBI/6rq72vTY72wJMQ=
|
github.com/oneclickvirt/basics v0.0.15-20250714163009/go.mod h1:yN1IEOXN6v/GJqJSA70Pooo6nXBI/6rq72vTY72wJMQ=
|
||||||
github.com/oneclickvirt/cputest v0.0.10-20250404151448 h1:ovGtCwFXG0qmpyNDRqcNDIiAmhrtemCjIUXTJ1fPH0o=
|
github.com/oneclickvirt/cputest v0.0.11-20250717060914 h1:1cGHHXq7R8vghnRjviMJ1TqricwJwZPeQtgb9zRYYLA=
|
||||||
github.com/oneclickvirt/cputest v0.0.10-20250404151448/go.mod h1:MmaHN9+XMntI3rLycwj8Ne31fG18IfNoa8N2utDK1CY=
|
github.com/oneclickvirt/cputest v0.0.11-20250717060914/go.mod h1:vjlH8tkPFft1tlLOpeNskXVvurxkHaJ3+dgFxQGLXY4=
|
||||||
github.com/oneclickvirt/dd v0.0.2-20250701085922 h1:WiWZwcnCPhRc8hLZdvkjD2kOEpnqn1S31z1j0x3V4l0=
|
github.com/oneclickvirt/dd v0.0.2-20250701085922 h1:WiWZwcnCPhRc8hLZdvkjD2kOEpnqn1S31z1j0x3V4l0=
|
||||||
github.com/oneclickvirt/dd v0.0.2-20250701085922/go.mod h1:tImu9sPTkLWo2tf1dEN1xQzrylWKauj9hbU8PHfyAeU=
|
github.com/oneclickvirt/dd v0.0.2-20250701085922/go.mod h1:tImu9sPTkLWo2tf1dEN1xQzrylWKauj9hbU8PHfyAeU=
|
||||||
github.com/oneclickvirt/defaultset v0.0.2-20240624082446 h1:5Pg3mK/u/vQvSz7anu0nxzrNdELi/AcDAU1mMsmPzyc=
|
github.com/oneclickvirt/defaultset v0.0.2-20240624082446 h1:5Pg3mK/u/vQvSz7anu0nxzrNdELi/AcDAU1mMsmPzyc=
|
||||||
@@ -119,8 +119,8 @@ github.com/oneclickvirt/gostun v0.0.3-20250329105202 h1:aJ6E91Lp94lq8iWRcCaxpXTj
|
|||||||
github.com/oneclickvirt/gostun v0.0.3-20250329105202/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
|
github.com/oneclickvirt/gostun v0.0.3-20250329105202/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
|
||||||
github.com/oneclickvirt/mbw v0.0.1-20250630140849 h1:p6RMhOPBnQKAm9+VEQ2axAFsidrdSdrhXMyheIyv2a8=
|
github.com/oneclickvirt/mbw v0.0.1-20250630140849 h1:p6RMhOPBnQKAm9+VEQ2axAFsidrdSdrhXMyheIyv2a8=
|
||||||
github.com/oneclickvirt/mbw v0.0.1-20250630140849/go.mod h1:0Vq6NRpyLmGUdfHfL3uDcFsuZhi7KlG+OCs5ky2757Y=
|
github.com/oneclickvirt/mbw v0.0.1-20250630140849/go.mod h1:0Vq6NRpyLmGUdfHfL3uDcFsuZhi7KlG+OCs5ky2757Y=
|
||||||
github.com/oneclickvirt/memorytest v0.0.6-20250630141424.0.20250701113027-9edfc91f68e6 h1:78/eMk+FGeDxxpKgkTb4GF5KJe76y8UW7Htcwm2hF9I=
|
github.com/oneclickvirt/memorytest v0.0.8-20250717053253 h1:Q5dsDgtQQljcsphSIA5atJV+UpLUdHI/q5Yyzq4mPb8=
|
||||||
github.com/oneclickvirt/memorytest v0.0.6-20250630141424.0.20250701113027-9edfc91f68e6/go.mod h1:7xMacjQobvFAtODht2hxTsB9hM2IFS7vZk3gxx+bsjo=
|
github.com/oneclickvirt/memorytest v0.0.8-20250717053253/go.mod h1:7xMacjQobvFAtODht2hxTsB9hM2IFS7vZk3gxx+bsjo=
|
||||||
github.com/oneclickvirt/nt3 v0.0.5-20250416131047 h1:KL0xowq19cW+FMBGMJxdqpRNoeyR+eEmb+jYSubmlTk=
|
github.com/oneclickvirt/nt3 v0.0.5-20250416131047 h1:KL0xowq19cW+FMBGMJxdqpRNoeyR+eEmb+jYSubmlTk=
|
||||||
github.com/oneclickvirt/nt3 v0.0.5-20250416131047/go.mod h1:CVsDJEaIdyyZHn3WKbhU8Wn6GOfmBNvJlC/dDLRqcSQ=
|
github.com/oneclickvirt/nt3 v0.0.5-20250416131047/go.mod h1:CVsDJEaIdyyZHn3WKbhU8Wn6GOfmBNvJlC/dDLRqcSQ=
|
||||||
github.com/oneclickvirt/pingtest v0.0.8-20250701125637 h1:J28Ai5miTq1J0I4gdT8rewJSd3LwzD90L/bNiiaKfHM=
|
github.com/oneclickvirt/pingtest v0.0.8-20250701125637 h1:J28Ai5miTq1J0I4gdT8rewJSd3LwzD90L/bNiiaKfHM=
|
||||||
|
112
goecs.go
112
goecs.go
@@ -39,7 +39,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ecsVersion = "v0.1.53"
|
ecsVersion = "v0.1.61"
|
||||||
menuMode bool
|
menuMode bool
|
||||||
onlyChinaTest bool
|
onlyChinaTest bool
|
||||||
input, choice string
|
input, choice string
|
||||||
@@ -396,7 +396,7 @@ func handleSignalInterrupt(sig chan os.Signal, startTime *time.Time, output *str
|
|||||||
seconds := int(duration.Seconds()) % 60
|
seconds := int(duration.Seconds()) % 60
|
||||||
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
|
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
|
||||||
outputMutex.Lock()
|
outputMutex.Lock()
|
||||||
*output = utils.PrintAndCapture(func() {
|
timeInfo := utils.PrintAndCapture(func() {
|
||||||
utils.PrintCenteredTitle("", width)
|
utils.PrintCenteredTitle("", width)
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
fmt.Printf("花费 : %d 分 %d 秒\n", minutes, seconds)
|
fmt.Printf("花费 : %d 分 %d 秒\n", minutes, seconds)
|
||||||
@@ -406,7 +406,8 @@ func handleSignalInterrupt(sig chan os.Signal, startTime *time.Time, output *str
|
|||||||
fmt.Printf("Current Time : %s\n", currentTime)
|
fmt.Printf("Current Time : %s\n", currentTime)
|
||||||
}
|
}
|
||||||
utils.PrintCenteredTitle("", width)
|
utils.PrintCenteredTitle("", width)
|
||||||
}, tempOutput, *output)
|
}, "", "")
|
||||||
|
*output += timeInfo
|
||||||
finalOutput := *output
|
finalOutput := *output
|
||||||
outputMutex.Unlock()
|
outputMutex.Unlock()
|
||||||
resultChan := make(chan struct {
|
resultChan := make(chan struct {
|
||||||
@@ -461,11 +462,11 @@ func handleSignalInterrupt(sig chan os.Signal, startTime *time.Time, output *str
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func runChineseTests(preCheck utils.NetCheckResult, wg1, wg2, wg3 *sync.WaitGroup, basicInfo, securityInfo, emailInfo, mediaInfo, ptInfo *string, output, tempOutput string, startTime time.Time, outputMutex *sync.Mutex) string {
|
func runChineseTests(preCheck utils.NetCheckResult, wg1, wg2, wg3 *sync.WaitGroup, basicInfo, securityInfo, emailInfo, mediaInfo, ptInfo *string, output *string, tempOutput string, startTime time.Time, outputMutex *sync.Mutex) {
|
||||||
output = runBasicTests(preCheck, basicInfo, securityInfo, output, tempOutput, outputMutex)
|
*output = runBasicTests(preCheck, basicInfo, securityInfo, *output, tempOutput, outputMutex)
|
||||||
output = runCPUTest(output, tempOutput, outputMutex)
|
*output = runCPUTest(*output, tempOutput, outputMutex)
|
||||||
output = runMemoryTest(output, tempOutput, outputMutex)
|
*output = runMemoryTest(*output, tempOutput, outputMutex)
|
||||||
output = runDiskTest(output, tempOutput, outputMutex)
|
*output = runDiskTest(*output, tempOutput, outputMutex)
|
||||||
if (onlyChinaTest || pingTestStatus) && preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
if (onlyChinaTest || pingTestStatus) && preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
||||||
wg3.Add(1)
|
wg3.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
@@ -488,24 +489,24 @@ func runChineseTests(preCheck utils.NetCheckResult, wg1, wg2, wg3 *sync.WaitGrou
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
if preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
if preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
||||||
output = runStreamingTests(wg1, mediaInfo, output, tempOutput, outputMutex)
|
*output = runStreamingTests(wg1, mediaInfo, *output, tempOutput, outputMutex)
|
||||||
output = runSecurityTests(*securityInfo, output, tempOutput, outputMutex)
|
*output = runSecurityTests(*securityInfo, *output, tempOutput, outputMutex)
|
||||||
output = runEmailTests(wg2, emailInfo, output, tempOutput, outputMutex)
|
*output = runEmailTests(wg2, emailInfo, *output, tempOutput, outputMutex)
|
||||||
}
|
}
|
||||||
if runtime.GOOS != "windows" && preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
if runtime.GOOS != "windows" && preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
||||||
output = runNetworkTests(wg3, ptInfo, output, tempOutput, outputMutex)
|
*output = runNetworkTests(wg3, ptInfo, *output, tempOutput, outputMutex)
|
||||||
}
|
}
|
||||||
if preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
if preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
||||||
output = runSpeedTests(output, tempOutput, outputMutex)
|
*output = runSpeedTests(*output, tempOutput, outputMutex)
|
||||||
}
|
}
|
||||||
return appendTimeInfo(output, tempOutput, startTime, outputMutex)
|
*output = appendTimeInfo(*output, tempOutput, startTime, outputMutex)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runEnglishTests(preCheck utils.NetCheckResult, wg1, wg2 *sync.WaitGroup, basicInfo, securityInfo, emailInfo, mediaInfo *string, output, tempOutput string, startTime time.Time, outputMutex *sync.Mutex) string {
|
func runEnglishTests(preCheck utils.NetCheckResult, wg1, wg2 *sync.WaitGroup, basicInfo, securityInfo, emailInfo, mediaInfo *string, output *string, tempOutput string, startTime time.Time, outputMutex *sync.Mutex) {
|
||||||
output = runBasicTests(preCheck, basicInfo, securityInfo, output, tempOutput, outputMutex)
|
*output = runBasicTests(preCheck, basicInfo, securityInfo, *output, tempOutput, outputMutex)
|
||||||
output = runCPUTest(output, tempOutput, outputMutex)
|
*output = runCPUTest(*output, tempOutput, outputMutex)
|
||||||
output = runMemoryTest(output, tempOutput, outputMutex)
|
*output = runMemoryTest(*output, tempOutput, outputMutex)
|
||||||
output = runDiskTest(output, tempOutput, outputMutex)
|
*output = runDiskTest(*output, tempOutput, outputMutex)
|
||||||
if preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
if preCheck.Connected && preCheck.StackType != "" && preCheck.StackType != "None" {
|
||||||
if utTestStatus {
|
if utTestStatus {
|
||||||
wg1.Add(1)
|
wg1.Add(1)
|
||||||
@@ -521,16 +522,17 @@ func runEnglishTests(preCheck utils.NetCheckResult, wg1, wg2 *sync.WaitGroup, ba
|
|||||||
*emailInfo = email.EmailCheck()
|
*emailInfo = email.EmailCheck()
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
output = runStreamingTests(wg1, mediaInfo, output, tempOutput, outputMutex) // 传递指针
|
*output = runStreamingTests(wg1, mediaInfo, *output, tempOutput, outputMutex)
|
||||||
output = runSecurityTests(*securityInfo, output, tempOutput, outputMutex)
|
*output = runSecurityTests(*securityInfo, *output, tempOutput, outputMutex)
|
||||||
output = runEmailTests(wg2, emailInfo, output, tempOutput, outputMutex)
|
*output = runEmailTests(wg2, emailInfo, *output, tempOutput, outputMutex)
|
||||||
output = runEnglishSpeedTests(output, tempOutput, outputMutex)
|
*output = runEnglishSpeedTests(*output, tempOutput, outputMutex)
|
||||||
}
|
}
|
||||||
return appendTimeInfo(output, tempOutput, startTime, outputMutex)
|
*output = appendTimeInfo(*output, tempOutput, startTime, outputMutex)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runBasicTests(preCheck utils.NetCheckResult, basicInfo, securityInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runBasicTests(preCheck utils.NetCheckResult, basicInfo, securityInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
utils.PrintHead(language, width, ecsVersion)
|
utils.PrintHead(language, width, ecsVersion)
|
||||||
if basicStatus || securityTestStatus {
|
if basicStatus || securityTestStatus {
|
||||||
@@ -567,7 +569,8 @@ func runBasicTests(preCheck utils.NetCheckResult, basicInfo, securityInfo *strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runCPUTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runCPUTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if cpuTestStatus {
|
if cpuTestStatus {
|
||||||
realTestMethod, res := cputest.CpuTest(language, cpuTestMethod, cpuTestThreadMode)
|
realTestMethod, res := cputest.CpuTest(language, cpuTestMethod, cpuTestThreadMode)
|
||||||
@@ -582,47 +585,56 @@ func runCPUTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runMemoryTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runMemoryTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if memoryTestStatus {
|
if memoryTestStatus {
|
||||||
|
realTestMethod, res := memorytest.MemoryTest(language, memoryTestMethod)
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("内存测试-通过%s测试", memoryTestMethod), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("内存测试-通过%s测试", realTestMethod), width)
|
||||||
} else {
|
} else {
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("Memory-Test--%s-Method", memoryTestMethod), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("Memory-Test--%s-Method", realTestMethod), width)
|
||||||
}
|
}
|
||||||
memorytest.MemoryTest(language, memoryTestMethod)
|
fmt.Print(res)
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runDiskTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runDiskTest(output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if diskTestStatus && autoChangeDiskTestMethod {
|
if diskTestStatus && autoChangeDiskTestMethod {
|
||||||
|
realTestMethod, res := disktest.DiskTest(language, diskTestMethod, diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", diskTestMethod), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", realTestMethod), width)
|
||||||
} else {
|
} else {
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("Disk-Test--%s-Method", diskTestMethod), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("Disk-Test--%s-Method", realTestMethod), width)
|
||||||
}
|
}
|
||||||
disktest.DiskTest(language, diskTestMethod, diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
fmt.Print(res)
|
||||||
} else if diskTestStatus && !autoChangeDiskTestMethod {
|
} else if diskTestStatus && !autoChangeDiskTestMethod {
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", "dd"), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", "dd"), width)
|
||||||
disktest.DiskTest(language, "dd", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
_, res := disktest.DiskTest(language, "dd", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
||||||
|
fmt.Print(res)
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", "fio"), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("硬盘测试-通过%s测试", "fio"), width)
|
||||||
disktest.DiskTest(language, "fio", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
_, res = disktest.DiskTest(language, "fio", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
||||||
|
fmt.Print(res)
|
||||||
} else {
|
} else {
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("Disk-Test--%s-Method", "dd"), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("Disk-Test--%s-Method", "dd"), width)
|
||||||
disktest.DiskTest(language, "dd", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
_, res := disktest.DiskTest(language, "dd", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
||||||
|
fmt.Print(res)
|
||||||
utils.PrintCenteredTitle(fmt.Sprintf("Disk-Test--%s-Method", "fio"), width)
|
utils.PrintCenteredTitle(fmt.Sprintf("Disk-Test--%s-Method", "fio"), width)
|
||||||
disktest.DiskTest(language, "fio", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
_, res = disktest.DiskTest(language, "fio", diskTestPath, diskMultiCheck, autoChangeDiskTestMethod)
|
||||||
|
fmt.Print(res)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runStreamingTests(wg1 *sync.WaitGroup, mediaInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runStreamingTests(wg1 *sync.WaitGroup, mediaInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
if commTestStatus && !onlyChinaTest {
|
if commTestStatus && !onlyChinaTest {
|
||||||
@@ -643,7 +655,8 @@ func runStreamingTests(wg1 *sync.WaitGroup, mediaInfo *string, output, tempOutpu
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runSecurityTests(securityInfo, output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runSecurityTests(securityInfo, output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if securityTestStatus {
|
if securityTestStatus {
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
@@ -657,7 +670,8 @@ func runSecurityTests(securityInfo, output, tempOutput string, outputMutex *sync
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runEmailTests(wg2 *sync.WaitGroup, emailInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runEmailTests(wg2 *sync.WaitGroup, emailInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if emailTestStatus {
|
if emailTestStatus {
|
||||||
wg2.Wait()
|
wg2.Wait()
|
||||||
@@ -672,7 +686,8 @@ func runEmailTests(wg2 *sync.WaitGroup, emailInfo *string, output, tempOutput st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runNetworkTests(wg3 *sync.WaitGroup, ptInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runNetworkTests(wg3 *sync.WaitGroup, ptInfo *string, output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if backtraceStatus && !onlyChinaTest {
|
if backtraceStatus && !onlyChinaTest {
|
||||||
utils.PrintCenteredTitle("三网回程线路检测", width)
|
utils.PrintCenteredTitle("三网回程线路检测", width)
|
||||||
@@ -699,7 +714,8 @@ func runNetworkTests(wg3 *sync.WaitGroup, ptInfo *string, output, tempOutput str
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runSpeedTests(output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runSpeedTests(output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if speedTestStatus {
|
if speedTestStatus {
|
||||||
utils.PrintCenteredTitle("就近节点测速", width)
|
utils.PrintCenteredTitle("就近节点测速", width)
|
||||||
@@ -720,7 +736,8 @@ func runSpeedTests(output, tempOutput string, outputMutex *sync.Mutex) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runEnglishSpeedTests(output, tempOutput string, outputMutex *sync.Mutex) string {
|
func runEnglishSpeedTests(output, tempOutput string, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
return utils.PrintAndCapture(func() {
|
return utils.PrintAndCapture(func() {
|
||||||
if speedTestStatus {
|
if speedTestStatus {
|
||||||
utils.PrintCenteredTitle("Speed-Test", width)
|
utils.PrintCenteredTitle("Speed-Test", width)
|
||||||
@@ -732,7 +749,8 @@ func runEnglishSpeedTests(output, tempOutput string, outputMutex *sync.Mutex) st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func appendTimeInfo(output, tempOutput string, startTime time.Time, outputMutex *sync.Mutex) string {
|
func appendTimeInfo(output, tempOutput string, startTime time.Time, outputMutex *sync.Mutex) string {
|
||||||
_ = outputMutex
|
outputMutex.Lock()
|
||||||
|
defer outputMutex.Unlock()
|
||||||
endTime := time.Now()
|
endTime := time.Now()
|
||||||
duration := endTime.Sub(startTime)
|
duration := endTime.Sub(startTime)
|
||||||
minutes := int(duration.Minutes())
|
minutes := int(duration.Minutes())
|
||||||
@@ -792,9 +810,9 @@ func main() {
|
|||||||
go handleSignalInterrupt(sig, &startTime, &output, tempOutput, uploadDone, &outputMutex)
|
go handleSignalInterrupt(sig, &startTime, &output, tempOutput, uploadDone, &outputMutex)
|
||||||
switch language {
|
switch language {
|
||||||
case "zh":
|
case "zh":
|
||||||
output = runChineseTests(preCheck, &wg1, &wg2, &wg3, &basicInfo, &securityInfo, &emailInfo, &mediaInfo, &ptInfo, output, tempOutput, startTime, &outputMutex)
|
runChineseTests(preCheck, &wg1, &wg2, &wg3, &basicInfo, &securityInfo, &emailInfo, &mediaInfo, &ptInfo, &output, tempOutput, startTime, &outputMutex)
|
||||||
case "en":
|
case "en":
|
||||||
output = runEnglishTests(preCheck, &wg1, &wg2, &basicInfo, &securityInfo, &emailInfo, &mediaInfo, output, tempOutput, startTime, &outputMutex)
|
runEnglishTests(preCheck, &wg1, &wg2, &basicInfo, &securityInfo, &emailInfo, &mediaInfo, &output, tempOutput, startTime, &outputMutex)
|
||||||
default:
|
default:
|
||||||
fmt.Println("Unsupported language")
|
fmt.Println("Unsupported language")
|
||||||
}
|
}
|
||||||
|
6
goecs.sh
6
goecs.sh
@@ -143,7 +143,7 @@ goecs_check() {
|
|||||||
os=$(uname -s 2>/dev/null || echo "Unknown")
|
os=$(uname -s 2>/dev/null || echo "Unknown")
|
||||||
arch=$(uname -m 2>/dev/null || echo "Unknown")
|
arch=$(uname -m 2>/dev/null || echo "Unknown")
|
||||||
check_china
|
check_china
|
||||||
ECS_VERSION="0.1.52"
|
ECS_VERSION="0.1.55"
|
||||||
for api in \
|
for api in \
|
||||||
"https://api.github.com/repos/oneclickvirt/ecs/releases/latest" \
|
"https://api.github.com/repos/oneclickvirt/ecs/releases/latest" \
|
||||||
"https://githubapi.spiritlhl.workers.dev/repos/oneclickvirt/ecs/releases/latest" \
|
"https://githubapi.spiritlhl.workers.dev/repos/oneclickvirt/ecs/releases/latest" \
|
||||||
@@ -155,8 +155,8 @@ goecs_check() {
|
|||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
if [ -z "$ECS_VERSION" ]; then
|
if [ -z "$ECS_VERSION" ]; then
|
||||||
_yellow "Unable to get version info, using default version 0.1.52"
|
_yellow "Unable to get version info, using default version 0.1.55"
|
||||||
ECS_VERSION="0.1.52"
|
ECS_VERSION="0.1.55"
|
||||||
fi
|
fi
|
||||||
version_output=""
|
version_output=""
|
||||||
for cmd_path in "goecs" "./goecs" "/usr/bin/goecs" "/usr/local/bin/goecs"; do
|
for cmd_path in "goecs" "./goecs" "/usr/bin/goecs" "/usr/local/bin/goecs"; do
|
||||||
|
@@ -1,17 +1,17 @@
|
|||||||
package memorytest
|
package memorytest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"github.com/oneclickvirt/memorytest/memory"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/oneclickvirt/memorytest/memory"
|
||||||
)
|
)
|
||||||
|
|
||||||
func MemoryTest(language, testMethod string) {
|
func MemoryTest(language, testMethod string) (realTestMethod, res string) {
|
||||||
var res string
|
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
if testMethod != "winsat" && testMethod != "" {
|
if testMethod != "winsat" && testMethod != "" {
|
||||||
res = "Detected host is Windows, using Winsat for testing.\n"
|
// res = "Detected host is Windows, using Winsat for testing.\n"
|
||||||
|
realTestMethod = "winsat"
|
||||||
}
|
}
|
||||||
res += memory.WinsatTest(language)
|
res += memory.WinsatTest(language)
|
||||||
} else {
|
} else {
|
||||||
@@ -19,18 +19,23 @@ func MemoryTest(language, testMethod string) {
|
|||||||
case "sysbench":
|
case "sysbench":
|
||||||
res = memory.SysBenchTest(language)
|
res = memory.SysBenchTest(language)
|
||||||
if res == "" {
|
if res == "" {
|
||||||
res = "sysbench test failed, switch to use dd test.\n"
|
// res = "sysbench test failed, switch to use dd test.\n"
|
||||||
res += memory.DDTest(language)
|
res += memory.DDTest(language)
|
||||||
|
realTestMethod = "dd"
|
||||||
|
} else {
|
||||||
|
realTestMethod = "sysbench"
|
||||||
}
|
}
|
||||||
case "dd":
|
case "dd":
|
||||||
res = memory.DDTest(language)
|
res = memory.DDTest(language)
|
||||||
|
realTestMethod = "dd"
|
||||||
default:
|
default:
|
||||||
res = "Unsupported test method, switch to use dd test.\n"
|
// res = "Unsupported test method, switch to use dd test.\n"
|
||||||
res += memory.DDTest(language)
|
res += memory.DDTest(language)
|
||||||
|
realTestMethod = "dd"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !strings.Contains(res, "\n") && res != "" {
|
if !strings.Contains(res, "\n") && res != "" {
|
||||||
res += "\n"
|
res += "\n"
|
||||||
}
|
}
|
||||||
fmt.Printf("%s", res)
|
return
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,11 @@
|
|||||||
package memorytest
|
package memorytest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test(t *testing.T) {
|
func Test(t *testing.T) {
|
||||||
MemoryTest("zh", "sysbench")
|
_, res := MemoryTest("zh", "sysbench")
|
||||||
|
fmt.Print(res)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user