Skip to content

Commit 51803e2

Browse files
committed
Feat: Finished test
1 parent a36a484 commit 51803e2

File tree

3 files changed

+176
-78
lines changed

3 files changed

+176
-78
lines changed

.github/workflows/build.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Build
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
build:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- uses: actions/checkout@v3
13+
14+
- name: Set up Go
15+
uses: actions/setup-go@v3
16+
with:
17+
go-version: 1.19
18+
19+
- name: Build
20+
run: |
21+
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_windows_x64.exe
22+
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_x64
23+
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_arm64
24+
CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_arm
25+
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_386
26+
CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_mips
27+
CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_mipsle
28+
CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_ppc64
29+
CGO_ENABLED=0 GOOS=linux GOARCH=riscv64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_riscv64
30+
CGO_ENABLED=0 GOOS=linux GOARCH=s390x go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_linux_s390x
31+
CGO_ENABLED=0 GOOS=netbsd GOARCH=amd64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_netbsd_x64
32+
CGO_ENABLED=0 GOOS=netbsd GOARCH=arm go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_netbsd_arm
33+
CGO_ENABLED=0 GOOS=netbsd GOARCH=arm64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_netbsd_arm64
34+
CGO_ENABLED=0 GOOS=openbsd GOARCH=386 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_openbsd_386
35+
CGO_ENABLED=0 GOOS=openbsd GOARCH=amd64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_openbsd_x64
36+
CGO_ENABLED=0 GOOS=openbsd GOARCH=arm go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_openbsd_arm
37+
CGO_ENABLED=0 GOOS=openbsd GOARCH=arm64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_openbsd_arm64
38+
CGO_ENABLED=0 GOOS=freebsd GOARCH=386 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_freebsd_386
39+
CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_freebsd_x64
40+
CGO_ENABLED=0 GOOS=freebsd GOARCH=arm go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_freebsd_arm
41+
CGO_ENABLED=0 GOOS=freebsd GOARCH=arm64 go build -trimpath -ldflags '-s -w --extldflags "-static -fpic"' -o pty_freebsd_arm64
42+
43+
- uses: "marvinpinto/action-automatic-releases@latest"
44+
with:
45+
repo_token: "${{ secrets.GITHUB_TOKEN }}"
46+
automatic_release_tag: "latest"
47+
title: Development Build
48+
prerelease: true
49+
files: |
50+
pty_windows_x64.exe
51+
pty_linux_x64
52+
pty_linux_arm64
53+
pty_linux_arm
54+
pty_linux_386
55+
pty_linux_mips
56+
pty_linux_mipsle
57+
pty_linux_ppc64
58+
pty_linux_riscv64
59+
pty_linux_s390x
60+
pty_netbsd_x64
61+
pty_netbsd_arm
62+
pty_netbsd_arm64
63+
pty_openbsd_386
64+
pty_openbsd_x64
65+
pty_openbsd_arm
66+
pty_openbsd_arm64
67+
pty_freebsd_386
68+
pty_freebsd_x64
69+
pty_freebsd_arm
70+
pty_freebsd_arm64

main.go

Lines changed: 26 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"os"
1212
"path/filepath"
1313

14-
"golang.org/x/text/encoding/simplifiedchinese"
1514
"golang.org/x/text/transform"
1615
)
1716

@@ -47,35 +46,36 @@ func init() {
4746
}
4847

4948
func main() {
50-
flag.Parse() // 解析参数
51-
52-
fmt.Println("PPPP:", zipPath, distDirPath, mode, srcFiles)
53-
49+
flag.Parse()
5450
if mode == UNZIP_MODE {
55-
fmt.Println("UNZIP:", zipPath, "-->", distDirPath)
56-
UnZip(distDirPath, zipPath)
51+
fmt.Println("UNZIP:", zipPath, "-->", distDirPath, "code:", encode)
52+
err := UnZip(distDirPath, zipPath)
53+
if err != nil {
54+
fmt.Println(err)
55+
os.Exit(-3)
56+
}
5757
return
5858
}
5959
if mode == ZIP_MODE {
60-
fmt.Println("ZIP:", srcFiles, "-->"+zipPath)
61-
Zip(srcFiles, zipPath)
60+
fmt.Println("ZIP:", srcFiles, "-->", zipPath, "code:", encode)
61+
err := Zip(srcFiles, zipPath)
62+
if err != nil {
63+
fmt.Println(err)
64+
os.Exit(-2)
65+
}
6266
return
6367
}
64-
65-
fmt.Println("ERR Params!")
68+
fmt.Println("Err Mode Params!")
6669
os.Exit(-1)
6770
}
6871

69-
// 压缩文件
70-
// files 文件数组,可以是不同dir下的文件或者文件夹
71-
// dest 压缩文件存放地址
7272
func Zip(srcFiles []string, dest string) error {
7373
var files []*os.File
7474
for _, fileName := range srcFiles {
7575
file, err := os.Open(fileName)
7676
if err != nil {
7777
log.Fatalln(err)
78-
os.Exit(-4)
78+
return err
7979
}
8080
files = append(files, file)
8181
}
@@ -92,96 +92,44 @@ func Zip(srcFiles []string, dest string) error {
9292
return nil
9393
}
9494

95-
func fileToZipWriter(file *os.File, prefix string, zw *zip.Writer) error {
96-
info, err := file.Stat()
95+
func UnZip(distDirPath, zipPath string) error {
96+
zipFile, err := zip.OpenReader(zipPath)
9797
if err != nil {
9898
return err
9999
}
100-
if info.IsDir() {
101-
if prefix == "" {
102-
prefix = info.Name()
103-
} else {
104-
prefix = prefix + "/" + info.Name()
105-
}
106-
107-
fileInfos, err := file.Readdir(-1)
108-
if err != nil {
109-
return err
110-
}
111-
for _, fi := range fileInfos {
112-
f, err := os.Open(file.Name() + "/" + fi.Name())
113-
if err != nil {
114-
return err
115-
}
116-
err = fileToZipWriter(f, prefix, zw)
117-
if err != nil {
118-
return err
119-
}
120-
}
121-
} else {
122-
header, err := zip.FileInfoHeader(info)
123-
if prefix != "" {
124-
header.Name = prefix + "/" + header.Name
125-
}
126-
if err != nil {
127-
return err
128-
}
129-
writer, err := zw.CreateHeader(header)
130-
if err != nil {
131-
return err
132-
}
133-
_, err = io.Copy(writer, file)
134-
file.Close()
135-
if err != nil {
136-
return err
137-
}
138-
}
139-
return nil
140-
}
141100

142-
func UnZip(distDirPath, zipPath string) {
143-
zipFile, err := zip.OpenReader(zipPath)
144-
if err != nil {
145-
panic(err)
146-
}
147101
defer zipFile.Close()
148102

149103
prefix := ""
150104
if distDirPath != "" && distDirPath != "." {
151105
prefix = distDirPath + "/"
152106
}
153107

154-
// 第二步,遍历 zip 中的文件
155108
for _, f := range zipFile.File {
156-
filePath := f.Name
157-
if encode == "gbk" {
158-
i := bytes.NewReader([]byte(f.Name))
159-
decoder := transform.NewReader(i, simplifiedchinese.GB18030.NewDecoder())
160-
content, _ := ioutil.ReadAll(decoder)
161-
filePath = string(content)
162-
}
109+
nameReader := bytes.NewReader([]byte(f.Name))
110+
decoder := transform.NewReader(nameReader, getDecoderByCoder(encode))
111+
content, _ := ioutil.ReadAll(decoder)
112+
filePath := string(content)
163113
if f.FileInfo().IsDir() {
164114
_ = os.MkdirAll(prefix+filePath, os.ModePerm)
165115
continue
166116
}
167-
// 创建对应文件夹
168117
if err := os.MkdirAll(prefix+filepath.Dir(filePath), os.ModePerm); err != nil {
169-
panic(err)
118+
return err
170119
}
171-
// 解压到的目标文件
172120
dstFile, err := os.OpenFile(prefix+filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
173121
if err != nil {
174-
panic(err)
122+
return err
175123
}
176124
file, err := f.Open()
177125
if err != nil {
178-
panic(err)
126+
return err
179127
}
180-
// 写入到解压到的目标文件
181128
if _, err := io.Copy(dstFile, file); err != nil {
182-
panic(err)
129+
return err
183130
}
184131
dstFile.Close()
185132
file.Close()
186133
}
134+
return nil
187135
}

utils.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package main
2+
3+
import (
4+
"archive/zip"
5+
"io"
6+
"os"
7+
"strings"
8+
9+
"golang.org/x/text/encoding"
10+
"golang.org/x/text/encoding/japanese"
11+
"golang.org/x/text/encoding/korean"
12+
"golang.org/x/text/encoding/simplifiedchinese"
13+
"golang.org/x/text/encoding/traditionalchinese"
14+
"golang.org/x/text/encoding/unicode"
15+
)
16+
17+
func getDecoderByCoder(code string) *encoding.Decoder {
18+
code = strings.ToLower(code)
19+
var decoder *encoding.Decoder
20+
switch code {
21+
case "gbk":
22+
decoder = simplifiedchinese.GBK.NewDecoder()
23+
case "big5":
24+
decoder = traditionalchinese.Big5.NewDecoder()
25+
case "shift_jis":
26+
decoder = japanese.ShiftJIS.NewDecoder()
27+
case "euckr":
28+
decoder = korean.EUCKR.NewDecoder()
29+
default:
30+
decoder = unicode.UTF8.NewDecoder()
31+
}
32+
return decoder
33+
}
34+
35+
func fileToZipWriter(file *os.File, prefix string, zw *zip.Writer) error {
36+
info, err := file.Stat()
37+
if err != nil {
38+
return err
39+
}
40+
if info.IsDir() {
41+
if prefix == "" {
42+
prefix = info.Name()
43+
} else {
44+
prefix = prefix + "/" + info.Name()
45+
}
46+
47+
fileInfos, err := file.Readdir(-1)
48+
if err != nil {
49+
return err
50+
}
51+
for _, fi := range fileInfos {
52+
f, err := os.Open(file.Name() + "/" + fi.Name())
53+
if err != nil {
54+
return err
55+
}
56+
err = fileToZipWriter(f, prefix, zw)
57+
if err != nil {
58+
return err
59+
}
60+
}
61+
} else {
62+
header, err := zip.FileInfoHeader(info)
63+
if prefix != "" {
64+
header.Name = prefix + "/" + header.Name
65+
}
66+
if err != nil {
67+
return err
68+
}
69+
writer, err := zw.CreateHeader(header)
70+
if err != nil {
71+
return err
72+
}
73+
_, err = io.Copy(writer, file)
74+
file.Close()
75+
if err != nil {
76+
return err
77+
}
78+
}
79+
return nil
80+
}

0 commit comments

Comments
 (0)