Files
go-unifi/fields/main.go
T

99 lines
2.8 KiB
Go

package main
import (
_ "embed"
"flag"
"fmt"
"os"
"path"
"path/filepath"
"strings"
log "github.com/sirupsen/logrus"
)
func usage() {
fmt.Printf("Usage: %s [OPTIONS] version\n", path.Base(os.Args[0]))
fmt.Printf("version can be a specific version or '%s' (default) for the latest UniFi Controller version\n", LatestVersionMarker)
flag.PrintDefaults()
}
func setupLogging(debugEnabled bool) {
log.SetFormatter(&log.TextFormatter{
DisableTimestamp: true,
DisableLevelTruncation: true,
FullTimestamp: false,
})
if debugEnabled {
log.SetLevel(log.DebugLevel)
} else {
log.SetLevel(log.InfoLevel)
}
}
func main() {
flag.Usage = usage
versionBaseDirFlag := flag.String("version-base-dir", ".", "The base directory for version JSON files")
outputDirFlag := flag.String("output-dir", ".", "The output directory of the generated Go code")
downloadOnly := flag.Bool("download-only", false, "Only download and build the fields JSON directory, do not generate")
debugFlag := flag.Bool("debug", false, "Enable debug logging")
flag.Parse()
setupLogging(*debugFlag)
specifiedVersion := strings.TrimSpace(flag.Arg(0))
if specifiedVersion == "" {
specifiedVersion = LatestVersionMarker // default to latest version
}
unifiVersion, err := determineUnifiVersion(specifiedVersion)
if err != nil {
log.Fatalf("unable to determine version and download URL for Unifi version %s", specifiedVersion)
panic(err)
}
log.Infof("UniFi Controller version: %s", unifiVersion.Version)
log.Infof("UniFi Controller download URL: %s", unifiVersion.DownloadUrl.String())
wd, err := os.Getwd()
if err != nil {
log.Fatalln("unable to determine working directory")
panic(err)
}
fieldsDir := filepath.Join(wd, *versionBaseDirFlag, fmt.Sprintf("v%s", unifiVersion.Version))
log.Infoln("Downloading UniFi Controller field definitions...")
err = DownloadAndExtract(*unifiVersion.DownloadUrl, fieldsDir)
if err != nil {
log.Fatalln("unable to download and extract UniFi Controller field definitions")
panic(err)
}
log.Infof("Downloaded UniFi Controller field definitions in %s", fieldsDir)
if *downloadOnly {
log.Infoln("Fields JSON ready!")
os.Exit(0)
}
log.Infoln("Generating resources code...")
outDir := filepath.Join(wd, *outputDirFlag)
if err = generateCode(fieldsDir, outDir); err != nil {
log.Fatalln("unable to generate resources code")
panic(err)
}
log.Infof("Writing version file...")
if err = writeVersionFile(unifiVersion.Version, outDir); err != nil {
log.Fatalf("failed to write version file to %s", outDir)
panic(err)
}
workingDir, _ := os.Getwd()
basepath := filepath.Dir(workingDir)
if err = writeVersionRepoMarkerFile(unifiVersion.Version, basepath); err != nil {
log.Fatalf("failed to write version file to %s", basepath)
panic(err)
}
log.Infof("Generated resources in %s", outDir)
}