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("内嵌资源打包完成") }