Files

77 lines
1.4 KiB
Go

package main
import (
"encoding/json"
"io/fs"
"strings"
)
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") {
return nil
}
// Add file with full relative 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
}