75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"archive/zip"
|
|
"compress/gzip"
|
|
"encoding/json"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func main() {
|
|
metadata, err := os.ReadFile("../dist/data/stream.json")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
var job struct {
|
|
Version string `json:"version"`
|
|
FullVersion string `json:"fullVersion"`
|
|
}
|
|
if err = json.Unmarshal(metadata, &job); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
output, err := os.Create("app.zip")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
archive := zip.NewWriter(output)
|
|
err = filepath.WalkDir("../dist", func(name string, entry os.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if entry.IsDir() {
|
|
return nil
|
|
}
|
|
relative, err := filepath.Rel("../dist", name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
relative = filepath.ToSlash(relative)
|
|
if strings.HasPrefix(relative, "data/") && relative != "data/stream.json" && relative != "data/print-job.png" && relative != "data/print-job.gcode" && !strings.HasPrefix(relative, "data/full/"+job.FullVersion+"/") {
|
|
return nil
|
|
}
|
|
input, err := os.Open(name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer input.Close()
|
|
member, err := archive.CreateHeader(&zip.FileHeader{Name: relative + ".gz", Method: zip.Store})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
compressed, err := gzip.NewWriterLevel(member, gzip.BestCompression)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err = io.Copy(compressed, input); err != nil {
|
|
return err
|
|
}
|
|
return compressed.Close()
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err = archive.Close(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err = output.Close(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Print("内嵌资源打包完成")
|
|
}
|