fdm/server/cmd/package/main.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("内嵌资源打包完成")
}