From 05b8f3766cccde803d909dedb3106905b6b521e1 Mon Sep 17 00:00:00 2001 From: ZxwyWebSite Date: Sat, 25 May 2024 01:26:48 +0800 Subject: [PATCH] support go1.20 and action build --- .github/workflows/action.yml | 51 +++++ action.go | 362 +++++++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 5 - src/sources/custom/kg/utils.go | 2 +- src/sources/custom/wy/refresh.go | 6 +- 6 files changed, 419 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/action.yml create mode 100644 action.go diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml new file mode 100644 index 0000000..c4efa77 --- /dev/null +++ b/.github/workflows/action.yml @@ -0,0 +1,51 @@ +name: Action + +on: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + build: + runs-on: ubuntu-20.04 + steps: + - name: Checkout git repo + uses: actions/checkout@v4 + with: + path: ./repo + fetch-depth: 0 + + - name: Set up Golang + uses: actions/setup-go@v5 + with: + go-version: '1.21' + + - name: Install Dependencies + run: | + go version && go env && export PATH=$PATH:$(go env GOPATH)/bin + go install golang.org/dl/go1.20.14@latest && go1.20.14 download && go1.20.14 version + sudo apt-get update + sudo apt-get -y install gcc-mingw-w64-x86-64 + sudo apt-get -y install gcc-arm-linux-gnueabihf libc6-dev-armhf-cross + sudo apt-get -y install gcc-aarch64-linux-gnu libc6-dev-arm64-cross + wget -q https://dl.google.com/android/repository/android-ndk-r26b-linux.zip && unzip -d ~ android-ndk-r26b-linux.zip && rm android-ndk-r26b-linux.zip + + - name: Fetch Modules + run: | + wget -q "https://r2eu.zxwy.link/gh/lx-source/statics/ztool_20240525.zip" -O ztool.zip && unzip ztool.zip && rm ztool.zip + wget -q "https://r2eu.zxwy.link/gh/lx-source/statics/cr-go-sdk_20240525.zip" -O cr-go-sdk.zip && unzip cr-go-sdk.zip && rm cr-go-sdk.zip + + - name: Run Action + run: cd repo && go run action.go && mv dist ../ + + - name: Short SHA + uses: benjlevesque/short-sha@v3.0 + id: short-sha + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: lx-source-bin_${{ env.SHA }} + path: ./dist diff --git a/action.go b/action.go new file mode 100644 index 0000000..9b085ca --- /dev/null +++ b/action.go @@ -0,0 +1,362 @@ +//go:build ignore + +package main + +import ( + "archive/zip" + "errors" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" +) + +const ( + // 运行参数 + args_name = `lx-source` // 程序名称 + args_path = `dist/` // 输出目录 + args_zpak = true // 打包文件 + // args_repo = `repo/` // 源码目录 + args_home = `/home/runner` // 用户目录 +) + +var workDir string + +func init() { + if runtime.GOOS != `linux` { + fmt.Println(`不兼容的运行环境:`, runtime.GOOS) + os.Exit(0) + } + workDir, _ = os.Getwd() + fmt.Println(`运行目录:`, workDir) +} + +type ( + list_vers map[string]struct { + Tags string + } + list_arch map[string]struct { + AR string + CC string + CXX string + Vers list_vers + } + list_goos map[string]struct { + Arch list_arch + } + list_conf map[string]struct { + Args []string + GoOS list_goos + } +) + +// 构建参数 +var def_args = []string{ + `-trimpath`, `-buildvcs=false`, + `-ldflags`, `-s -w -linkmode external`, +} + +type param struct { + GoVer string // 环境 go1.20.14 + GoOS string // 系统 linux + GoArch string // 架构 amd64 + GoIns string // 指令 GOAMD64=v2 + Args []string // 参数 ldflags + Tag string // 标志 go_json + AR string + CC string + CXX string +} + +func main() { + var def_list = list_conf{ + `go`: { + Args: def_args, + GoOS: list_goos{ + `linux`: { + Arch: list_arch{ + `amd64`: { + AR: `x86_64-linux-gnu-ar`, + CC: `x86_64-linux-gnu-gcc`, + CXX: `x86_64-linux-gnu-g++`, + Vers: list_vers{ + `v1`: { + Tags: `go_json`, + }, + `v2`: { + Tags: `go_json`, + }, + `v3`: { + Tags: `sonic avx`, + }, + `v4`: { + Tags: `sonic avx`, + }, + }, + }, + `arm`: { + AR: `arm-linux-gnueabihf-gcc-ar`, + CC: `arm-linux-gnueabihf-gcc`, + CXX: `arm-linux-gnueabihf-cpp`, + Vers: list_vers{ + `5`: { + Tags: `go_json`, + }, + `6`: { + Tags: `go_json`, + }, + `7`: { + Tags: `go_json`, + }, + }, + }, + `arm64`: { + AR: `aarch64-linux-gnu-gcc-ar`, + CC: `aarch64-linux-gnu-gcc`, + CXX: `aarch64-linux-gnu-cpp`, + Vers: list_vers{ + ``: { + Tags: `go_json`, + }, + }, + }, + }, + }, + `windows`: { + Arch: list_arch{ + `amd64`: { + AR: `x86_64-w64-mingw32-ar`, + CC: `x86_64-w64-mingw32-gcc`, + CXX: `x86_64-w64-mingw32-cpp`, + Vers: list_vers{ + `v2`: { + Tags: `go_json`, + }, + `v3`: { + Tags: `sonic avx`, + }, + `v4`: { + Tags: `sonic avx`, + }, + }, + }, + }, + }, + `android`: { + Arch: list_arch{ + `amd64`: { + AR: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar`, + CC: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang`, + CXX: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang++`, + Vers: list_vers{ + ``: { + Tags: `go_json`, + }, + }, + }, + `arm64`: { + AR: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar`, + CC: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang`, + CXX: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang++`, + Vers: list_vers{ + ``: { + Tags: `go_json`, + }, + }, + }, + `386`: { + AR: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar`, + CC: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang`, + CXX: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang++`, + Vers: list_vers{ + ``: { + Tags: `go_json`, + }, + }, + }, + `arm`: { + AR: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar`, + CC: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang`, + CXX: args_home + `/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++`, + Vers: list_vers{ + ``: { + Tags: `go_json`, + }, + }, + }, + }, + }, + // `darwin`: { + // Arch: list_arch{ + // `amd64`: { + // CC: ``, + // }, + // `arm64`: { + // CC: ``, + // }, + // }, + // }, + }, + }, + args_home + `/go/bin/go1.20.14`: { + Args: def_args, + GoOS: list_goos{ + `windows`: { + Arch: list_arch{ + `amd64`: { + AR: `x86_64-w64-mingw32-ar`, + CC: `x86_64-w64-mingw32-gcc`, + CXX: `x86_64-w64-mingw32-cpp`, + Vers: list_vers{ + `v1`: { + Tags: `go_json`, + }, + `v2`: { + Tags: `go_json`, + }, + `v3`: { + Tags: `sonic avx`, + }, + }, + }, + }, + }, + }, + }, + } + fmt.Printf(` + ================================ + | Action 一键编译脚本 + | 程序名称:%v + | 输出目录:%v + | 打包文件:%v + ================================ +`, args_name, args_path, args_zpak) + // 解析配置文件 + for goVer, conf_list := range def_list { + for goOS, goos_list := range conf_list.GoOS { + for goArch, arch_list := range goos_list.Arch { + for goIns, vers_list := range arch_list.Vers { + // 构建程序二进制 + if err := build(¶m{ + GoVer: goVer, + GoOS: goOS, + GoArch: goArch, + GoIns: goIns, + Args: conf_list.Args, + Tag: vers_list.Tags, + AR: arch_list.AR, + CC: arch_list.CC, + CXX: arch_list.CXX, + }); err != nil { + fmt.Println(`err:`, err) + } + } + } + } + } + fmt.Println(`执行结束`) +} + +func build(p *param) (err error) { + // 检测必要环境 + for _, f := range []string{ + p.GoVer, p.AR, p.CC, p.CXX, + } { + if _, e := exec.LookPath(f); e != nil && !errors.Is(e, exec.ErrDot) { + err = fmt.Errorf(`未找到指定环境: %s`, e) + return + } + } + // 拼接程序名称 + var b strings.Builder + b.WriteString(args_name) // lx-source + b.WriteByte('-') // lx-source- + b.WriteString(p.GoOS) // lx-source-linux + b.WriteByte('-') // lx-source-linux- + b.WriteString(p.GoArch) // lx-source-linux-amd64 + b.WriteString(p.GoIns) // lx-source-linux-amd64v2 + if biname := filepath.Base(p.GoVer); biname != `go` { + b.WriteByte('-') // lx-source-linux-amd64v2- + b.WriteString(biname) // lx-source-linux-amd64v2-go1.20.14 + } + // 拼接输出名称 + oname := args_path + b.String() // dist/lx-source-linux-amd64v2 + if p.GoOS == `windows` { + oname += `.exe` // dist/lx-source-linux-amd64v2.exe + } + fmt.Println(`开始编译:`, oname) + fmt.Printf("编译参数: %+v\n", *p) + // 填入参数并构建 + var args = []string{ + `build`, `-o`, oname, + // `-asmflags=-trimpath="` + workDir + `"`, + // `-gcflags=-trimpath="` + workDir + `"`, + `-tags`, p.Tag, + } + cmd := exec.Command( + p.GoVer, + // append(append(args, p.Args...), args_repo)..., + append(args, p.Args...)..., + ) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = cmd.Stdout + cmd.Dir = workDir + cmd.Env = append(os.Environ(), []string{ + `GOOS=` + p.GoOS, + `GOARCH=` + p.GoArch, + `AR=` + p.AR, + `CC=` + p.CC, + `CXX=` + p.CXX, + `CGO_ENABLED=1`, + `GO` + strings.ToUpper(p.GoArch) + `=` + p.GoIns, + }...) + + if err = cmd.Start(); err == nil { + err = cmd.Wait() + } + if err != nil || !args_zpak { + return + } + // 打包输出文件 + /*apath := filepath.Join(args_path, `archieve`) + if _, e := os.Stat(apath); e != nil { + if os.IsNotExist(e) { + err = os.MkdirAll(apath, os.ModePerm) + if err != nil { + return + } + } + }*/ + zipname := filepath.Join(args_path, b.String()+`.zip`) + fmt.Println(`打包文件:`, zipname) + zipfile, err := os.Create(zipname) + if err != nil { + return err + } + archive := zip.NewWriter(zipfile) + info, err := os.Lstat(oname) + if err == nil { + header, _ := zip.FileInfoHeader(info) + header.Method = zip.Deflate + header.Name = filepath.Base(oname) + writer, err := archive.CreateHeader(header) + if err == nil { + file, err := os.Open(oname) + if err == nil { + _, err = io.Copy(writer, file) + file.Close() + if err == nil { + err = os.Remove(oname) + } + } + } + } + archive.Close() + zipfile.Close() + return err +} diff --git a/go.mod b/go.mod index 06aa77b..2c7df4c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module lx-source -go 1.21 +go 1.20 require ( github.com/ZxwyWebSite/cr-go-sdk v0.0.2 diff --git a/go.sum b/go.sum index a40af1b..855fa61 100644 --- a/go.sum +++ b/go.sum @@ -24,7 +24,6 @@ github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SU github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= @@ -34,7 +33,6 @@ github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaC github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 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= @@ -45,7 +43,6 @@ github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuV github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= @@ -65,7 +62,6 @@ github.com/pelletier/go-toml/v2 v2.2.1/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -104,7 +100,6 @@ google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGm google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/sources/custom/kg/utils.go b/src/sources/custom/kg/utils.go index 6411a25..eed95d1 100644 --- a/src/sources/custom/kg/utils.go +++ b/src/sources/custom/kg/utils.go @@ -3,10 +3,10 @@ package kg import ( "lx-source/src/env" "lx-source/src/sources" - "slices" "strings" "github.com/ZxwyWebSite/ztool" + "github.com/ZxwyWebSite/ztool/x/slices" "github.com/ZxwyWebSite/ztool/zcypt" ) diff --git a/src/sources/custom/wy/refresh.go b/src/sources/custom/wy/refresh.go index e898869..ed63332 100644 --- a/src/sources/custom/wy/refresh.go +++ b/src/sources/custom/wy/refresh.go @@ -3,7 +3,6 @@ package wy import ( "lx-source/src/env" wy "lx-source/src/sources/custom/wy/modules" - "maps" "time" // "time" @@ -48,7 +47,10 @@ func refresh(loger *logs.Logger, now int64) error { if out, ok := res.Body[`cookie`].(string); ok { loger.Info(`获取数据成功`) cmap := cookie.ToMap(cookie.Parse(out)) - maps.Copy(cookies, cmap) + // inline call to maps.Copy + for k, v := range cmap { + cookies[k] = v + } env.Config.Custom.Wy_Api_Cookie = cookie.Marshal(cookies) loger.Debug(`Cookie: %#v`, cookies) // if _, ok := cmap[`MUSIC_U`]; ok {