package main import ( "io/fs" "encoding/json" "strings" "log" ) type PackageJSON struct { Pkg string `json:"pkg"` Name string `json:"name"` Version string `json:"version"` Description string `json:"description"` Author string `json:"author"` Icon string `json:"icon"` } /* Packager is a class that helps create cpkg files and handle the upload process. */ func loadPackageJSON(fsys fs.FS) (*PackageJSON, error) { packageJSON, err := fs.ReadFile(fsys, "package.json") if err != nil { return nil, err } pkgData := &PackageJSON{} err = json.Unmarshal(packageJSON, pkgData) if err != nil { return nil, err } return pkgData, nil } func createCpkg(fsys fs.FS, pkgData *PackageJSON) (*cpkg, error) { pkg := NewCpkg(pkgData.Pkg) // Walk through all directories recursively err := fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } // Skip directories themselves (we only want files) if d.IsDir() { return nil } // Skip certain files fileName := d.Name() if fileName == "debug.log" || strings.HasSuffix(fileName, ".cpkg") { log.Println("Skipping file:", path) return nil } // Add file with full relative path log.Println("Adding file:", path) err = pkg.AddFile(fsys, path) if err != nil { return err } return nil }) if err != nil { return nil, err } success, err := pkg.Create() if err != nil { return nil, err } if !success { return nil, err } return pkg, nil }