support go1.20 and action build

This commit is contained in:
ZxwyWebSite 2024-05-25 01:26:48 +08:00
parent 30b3260617
commit 05b8f3766c
6 changed files with 419 additions and 9 deletions

51
.github/workflows/action.yml vendored Normal file
View File

@ -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

362
action.go Normal file
View File

@ -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(&param{
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
}

2
go.mod
View File

@ -1,6 +1,6 @@
module lx-source
go 1.21
go 1.20
require (
github.com/ZxwyWebSite/cr-go-sdk v0.0.2

5
go.sum
View File

@ -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=

View File

@ -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"
)

View File

@ -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 {