Day 1. pull these out from protobuf libraries

This commit is contained in:
Jeff Carr 2024-12-01 19:27:30 -06:00
commit 9d95b18913
15 changed files with 733 additions and 0 deletions

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
*.swp
go.mod
go.sum
/files/*
/work/*
forgeConfig/forgeConfig
scanGoSrc/scanGoSrc
validate/validate
virtbuf-example/virtbuf-example
zoopb-example/zoopb-example

6
Makefile Normal file
View File

@ -0,0 +1,6 @@
all:
make -C forgeConfig
make -C scanGoSrc
make -C validate
make -C virtbuf-example
make -C zoopb-example

48
forgeConfig/Makefile Normal file
View File

@ -0,0 +1,48 @@
VERSION = $(shell git describe --tags)
BUILDTIME = $(shell date +%Y.%m.%d)
build:
GO111MODULE=off go build \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
test2:
./forgeConfig
FORGE_HOME=/tmp/forge ./forgeConfig
FORGE_HOME=/tmp/forge ./forgeConfig --list
install:
GO111MODULE=off go install \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
test:
./forgeConfig --list
./forgeConfig --add --gopath 'go.wit.com/apps/foo'
./forgeConfig --add --gopath 'go.wit.com/apps/foowrite' --writable
./forgeConfig --add --gopath 'gitea.wit.com' --directory
./forgeConfig --add --gopath 'git.wit.org' --directory
./forgeConfig --delete --gopath 'go.wit.com/apps/helloworld'
./forgeConfig --list
list:
./forgeConfig --list
add:
./forgeConfig --add --name 'foo' --gopath 'go.wit.com/apps/foo'
update:
./forgeConfig --update --name 'foo' --gopath 'more stuff but not memory corruption?'
corruptMemory:
./forgeConfig --update --name 'foo' --gopath 'blah'
goimports:
goimports -w *.go
prep:
go get -v -t -u
run:
go run *.go
clean:
-rm -f forgeConfig

50
forgeConfig/argv.go Normal file
View File

@ -0,0 +1,50 @@
package main
import (
"os"
"go.wit.com/dev/alexflint/arg"
)
var argv args
type args struct {
ConfigDir string `arg:"env:FORGE_HOME" help:"defaults to ~/.config/forge/"`
List bool `arg:"--list" default:"false" help:"list repos in your config"`
Add bool `arg:"--add" default:"false" help:"add a new repo"`
Delete bool `arg:"--delete" default:"false" help:"delete a repo"`
Update bool `arg:"--update" default:"false" help:"update a repo"`
GoPath string `arg:"--gopath" help:"gopath of the repo"`
Directory bool `arg:"--directory" default:"false" help:"repo is a directory to match against"`
ReadOnly bool `arg:"--readonly" default:"false" help:"repo is readonly"`
Writable bool `arg:"--writable" default:"false" help:"repo is writable"`
Favorite bool `arg:"--favorite" default:"false" help:"forge will always go-clone or git clone this"`
Private bool `arg:"--private" default:"false" help:"repo can not be published"`
Interesting bool `arg:"--interesting" default:"false" help:"something you decided was cool"`
}
func (a args) Description() string {
return `
forgeConfig -- add entries to your config files
This is just example protobuf code to test forgepb is working
but it could be used to automagically create a config file too.
If you need to change your config file, just edit the forge.text or forge.json
files then remove the forge.pb and ConfigLoad() will attempt to load those files instead
`
}
func (args) Version() string {
return "virtigo " + VERSION
}
func init() {
var pp *arg.Parser
pp = arg.MustParse(&argv)
if pp == nil {
pp.WriteHelp(os.Stdout)
os.Exit(0)
}
}

133
forgeConfig/main.go Normal file
View File

@ -0,0 +1,133 @@
package main
import (
"os"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/log"
)
// sent via ldflags
var VERSION string
func main() {
f := forgepb.Init()
if argv.List {
f.ConfigPrintTable()
loop := f.Config.SortByGoPath() // get the list of forge configs
for loop.Scan() {
r := loop.Next()
log.Info("repo:", r.GoPath)
}
os.Exit(0)
}
// try to delete, then save config and exit
if argv.Delete {
if f.Config.DeleteByGoPath(argv.GoPath) {
log.Info("deleted", argv.GoPath, "did not exist. did nothing")
os.Exit(0)
}
log.Info("deleted", argv.GoPath, "ok")
f.ConfigSave()
os.Exit(0)
}
// try to update, then save config and exit
if argv.Update {
/*
if f.UpdateGoPath(argv.Name, argv.GoPath) {
// save updated config file
repos.ConfigSave()
}
*/
os.Exit(0)
}
// try to add, then save config and exit
if argv.Add {
log.Info("going to add a new repo", argv.GoPath)
new1 := forgepb.ForgeConfig{
GoPath: argv.GoPath,
Writable: argv.Writable,
ReadOnly: argv.ReadOnly,
Private: argv.Private,
Directory: argv.Directory,
Favorite: argv.Favorite,
Interesting: argv.Interesting,
}
if f.Config.Append(&new1) {
log.Info("added", new1.GoPath, "ok")
} else {
log.Info("added", new1.GoPath, "failed")
os.Exit(-1)
}
f.ConfigSave()
os.Exit(0)
}
// testMemoryCorruption(f)
f.ConfigSave()
}
/*
// this fucks shit up
func testMemoryCorruption(all *forgepb.Repos) *forgepb.Repos {
new1 := new(forgepb.Repo)
new1.Name = "bash1"
new1.Version = "5.2.21"
if all.Append(new1) {
log.Info("added", new1.Name, "ok")
} else {
log.Info("added", new1.Name, "failed")
}
new1 = new(forgepb.Repo)
new1.Name = "zookeeper1"
new1.Debname = "zookeeper-go"
if all.Append(new1) {
log.Info("added", new1.Name, "ok")
} else {
log.Info("added", new1.Name, "failed")
}
new1 = new(forgepb.Repo)
new1.Name = "wit-package"
new1.Private = true
if all.Append(new1) {
log.Info("added", new1.Name, "ok")
} else {
log.Info("added", new1.Name, "failed")
}
new1 = new(forgepb.Repo)
new1.Name = "networkQuality"
new1.Debname = "networkquality"
new1.Readonly = true
if all.Append(new1) {
log.Info("added", new1.Name, "ok")
} else {
log.Info("added", new1.Name, "failed")
}
new2 := new(forgepb.Repo)
new2.Name = "go-clone"
new2.Version = "0.6.8" // good version of the macos
if all.Append(new2) {
log.Info("added", new2.Name, "ok")
} else {
log.Info("added", new2.Name, "failed")
}
if all.Append(new2) {
log.Info("added", new2.Name, "ok (this is bad)")
} else {
log.Info("added", new2.Name, "failed (but ok)")
}
fmt.Println("packages are:", len(all.Repos))
return all
}
*/

25
scanGoSrc/Makefile Normal file
View File

@ -0,0 +1,25 @@
VERSION = $(shell git describe --tags)
BUILDTIME = $(shell date +%Y.%m.%d)
build:
GO111MODULE=off go build \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
test:
FORGE_HOME=/tmp/forge ./scanGoSrc
install:
GO111MODULE=off go install \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
goimports:
goimports -w *.go
prep:
go get -v -t -u
run:
go run *.go
clean:
-rm -f scanGoSrc

50
scanGoSrc/argv.go Normal file
View File

@ -0,0 +1,50 @@
package main
import (
"os"
"go.wit.com/dev/alexflint/arg"
)
var argv args
type args struct {
ConfigDir string `arg:"env:FORGE_HOME" help:"defaults to ~/.config/forge/"`
List bool `arg:"--list" default:"false" help:"list repos in your config"`
Add bool `arg:"--add" default:"false" help:"add a new repo"`
Delete bool `arg:"--delete" default:"false" help:"delete a repo"`
Update bool `arg:"--update" default:"false" help:"update a repo"`
GoPath string `arg:"--gopath" help:"gopath of the repo"`
Directory bool `arg:"--directory" default:"false" help:"repo is a directory to match against"`
ReadOnly bool `arg:"--readonly" default:"false" help:"repo is readonly"`
Writable bool `arg:"--writable" default:"false" help:"repo is writable"`
Favorite bool `arg:"--favorite" default:"false" help:"forge will always go-clone or git clone this"`
Private bool `arg:"--private" default:"false" help:"repo can not be published"`
Interesting bool `arg:"--interesting" default:"false" help:"something you decided was cool"`
}
func (a args) Description() string {
return `
forgeConfig -- add entries to your config files
This is just example protobuf code to test forgepb is working
but it could be used to automagically create a config file too.
If you need to change your config file, just edit the forge.text or forge.json
files then remove the forge.pb and ConfigLoad() will attempt to load those files instead
`
}
func (args) Version() string {
return "virtigo " + VERSION
}
func init() {
var pp *arg.Parser
pp = arg.MustParse(&argv)
if pp == nil {
pp.WriteHelp(os.Stdout)
os.Exit(0)
}
}

54
scanGoSrc/main.go Normal file
View File

@ -0,0 +1,54 @@
package main
import (
"os"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
// sent via ldflags
var VERSION string
func main() {
var repos *gitpb.Repos
repos = new(gitpb.Repos)
newr, err := repos.NewGoPath("/home/jcarr/go/src", "go.wit.com/apps/wit-package")
if err != nil {
log.Info("init failed", err)
panic("crapnuts")
} else {
log.Info("init worked for", newr.GoPath)
}
newr, err = repos.NewGoPath("/home/jcarr/go/src", "go.wit.com/apps/notathing")
if err != nil {
log.Info("init failed correctly:", err)
} else {
log.Info("init should have failed for", newr.GoPath)
panic("crapnuts")
}
/*
log.Info(forgepb.RepoHeader())
loop := repos.SortByPath() // get the list of repos
for loop.Scan() {
r := loop.Repo()
log.Info("repo:", r.GoPath)
}
*/
/*
log.Info("going to add a new repo", argv.GoPath)
new1 := forgepb.Repo{
GoPath: argv.GoPath,
Writable: argv.Writable,
ReadOnly: argv.ReadOnly,
Private: argv.Private,
Directory: argv.Directory,
Favorite: argv.Favorite,
Interesting: argv.Interesting,
}
*/
os.Exit(0)
}

21
validate/Makefile Normal file
View File

@ -0,0 +1,21 @@
VERSION = $(shell git describe --tags)
BUILDTIME = $(shell date +%Y.%m.%d)
build:
GO111MODULE=off go build \
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
test:
./validate --repo go.wit.com/apps/wit-package
goimports:
goimports -w *.go
prep:
go get -v -t -u
run:
go run *.go
clean:
-rm -f scanGoSrc

42
validate/argv.go Normal file
View File

@ -0,0 +1,42 @@
package main
import (
"os"
"go.wit.com/dev/alexflint/arg"
)
var argv args
type args struct {
Repo string `arg:"--repo" help:"repo to check"`
List bool `arg:"--list" default:"false" help:"list repos in your config"`
SaveConfig bool `arg:"--save" default:"false" help:"save your config file at the end"`
Interesting bool `arg:"--interesting" default:"false" help:"something you decided was cool"`
}
func (a args) Description() string {
return `
forgeConfig -- add entries to your config files
This is just example protobuf code to test forgepb is working
but it could be used to automagically create a config file too.
If you need to change your config file, just edit the forge.text or forge.json
files then remove the forge.pb and ConfigLoad() will attempt to load those files instead
`
}
func (args) Version() string {
return "virtigo " + VERSION
}
func init() {
var pp *arg.Parser
pp = arg.MustParse(&argv)
if pp == nil {
pp.WriteHelp(os.Stdout)
os.Exit(0)
}
}

97
validate/main.go Normal file
View File

@ -0,0 +1,97 @@
package main
import (
"fmt"
"os"
"go.wit.com/dev/alexflint/arg"
"go.wit.com/gui"
"go.wit.com/lib/gui/repolist"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
// sent via ldflags
var VERSION string
var pp *arg.Parser
var forge *forgepb.Forge
var myGui *gui.Node
var rv *repolist.RepoList
var argvRepo *gitpb.Repo
func main() {
pp = arg.MustParse(&argv)
// load the ~/.config/forge/ config
forge = forgepb.Init()
// forge.ConfigPrintTable()
os.Setenv("REPO_WORK_PATH", forge.GetGoSrc())
myGui = gui.New()
myGui.Default()
repos := forge.Repos.SortByGoPath()
for repos.Scan() {
repo := repos.Next()
if ! repo.IsValid() {
continue
}
// forge.VerifyBranchNames(repo)
fullpath := repo.GetFullPath()
mName := repo.GetMasterBranchName()
dName := repo.GetDevelBranchName()
uName := repo.GetUserBranchName()
dlen := repo.GoDepsLen()
plen := repo.PublishedLen()
var ds, ps string
if dlen == 0 {
ds = " "
} else {
ds = fmt.Sprintf("%2d", dlen)
}
if plen == 0 {
ps = " "
} else {
ps = fmt.Sprintf("%2d", plen)
}
log.Printf("repo: %-60s %-10s %-8s %-8s %s %s %s\n", fullpath, mName, dName, uName, ds, ps, repo.RepoType())
/*
if repo.GoDepsChanged() {
log.Printf("\tdependancy checks indicate a new release is needed for %s\n", repo.GetGoPath())
} else {
log.Printf("\tdependancies have not changed for %s\n", repo.GetGoPath())
}
*/
}
if argv.Repo == "" {
log.Info("no --repo")
os.Exit(-1)
}
check := forge.Repos.FindByGoPath(argv.Repo)
if check == nil {
log.Info("boo, you didn't git check", argv.Repo)
os.Exit(-1)
}
check.RedoGoMod()
match, err := forge.Repos.GoDepsChanged(check)
if err != nil {
log.Info("dependancy checks failed", check.GetGoPath(), err)
os.Exit(-1)
}
if match {
log.Printf("dependancy checks indicate a new release is needed for %s\n", check.GetGoPath())
} else {
log.Printf("dependancies have not changed for %s\n", check.GetGoPath())
}
if argv.SaveConfig {
forge.Repos.ConfigSave()
}
os.Exit(0)
}

17
virtbuf-example/Makefile Normal file
View File

@ -0,0 +1,17 @@
build:
GO111MODULE=off go build
test:
./virtbuf-example
goimports:
goimports -w *.go
prep:
go get -v -t -u
run:
go run *.go
clean:
-rm -f virtbuf-example

91
virtbuf-example/main.go Normal file
View File

@ -0,0 +1,91 @@
package main
import (
"fmt"
"os"
pb "go.wit.com/lib/protobuf/virtbuf"
)
//
// saves entries in a config file
//
func main() {
TestWriteCluster()
var c *pb.Cluster
c = pb.InitCluster()
// log.Println(aCluster.String())
// show the droplets to STDOUT
loop := c.DropletsAll() // get the list of droplets
for loop.Scan() {
d := loop.Next()
fmt.Println("\tdroplet =", d.Hostname, "preffered host:", d.PreferredHypervisor)
}
/*
// show the hypervisors to STDOUT
for _, h := range aCluster.Hypervisors {
fmt.Println("\thypervisor =", h.Hostname, h.GetMemoryPrintable())
}
*/
/*
json := aCluster.FormatJSON()
fmt.Println(json)
data, _ := aCluster.MarshalJSON()
fmt.Println(string(data))
text := aCluster.FormatTEXT()
fmt.Println(text)
*/
}
/*
func marshalWriteToFile(myWriter *bufio.Writer, c *pb.Cluster) {
buf, err := proto.Marshal(c)
if err != nil {
log.Fatal("marshaling error: ", err)
}
tmp, err := myWriter.Write(buf)
myWriter.Flush()
log.Println("bufio.Write() tmp, err = ", tmp, err)
buf, err = proto.Marshal(c)
tmp2, err := myWriter.Write(buf)
myWriter.Flush()
log.Println("bufio.Write() tmp2, err = ", tmp2, err)
}
*/
func TestWriteCluster() {
c := pb.CreateSampleCluster(7)
os.Setenv("VIRTIGO_HOME", "/tmp/virtigo/")
if err := c.ConfigSave(); err != nil {
fmt.Println("configsave error", err)
os.Exit(-1)
}
// marshalUnmarshal()
}
/*
func marshalUnmarshal() {
test := pb.CreateSampleCluster(7)
data, err := proto.Marshal(test)
if err != nil {
log.Fatal("marshaling error: ", err)
}
newTest := &pb.Cluster{}
err = proto.Unmarshal(data, newTest)
if err != nil {
log.Fatal("unmarshaling error: ", err)
} else {
log.Println("proto.Marshal() and proto.Unmarshal() worked")
}
}
*/

17
zoopb-example/Makefile Normal file
View File

@ -0,0 +1,17 @@
build:
GO111MODULE=off go build
test:
./zoopb-example
goimports:
goimports -w *.go
prep:
go get -v -t -u
run:
go run *.go
clean:
-rm -f zoopb-example

71
zoopb-example/main.go Normal file
View File

@ -0,0 +1,71 @@
package main
import (
"fmt"
"go.wit.com/lib/protobuf/zoopb"
"go.wit.com/log"
)
func main() {
m := testMachine()
testPackages(m)
loop := m.Packages.SortByName()
for loop.Scan() {
p := loop.Next()
log.Info("installed package:", p.Name, p.Version, p.PkgName)
}
if m.IsInstalled("bash") {
log.Info("bash installed check worked")
} else {
log.Info("bash installed check failed")
panic("bash")
}
if m.IsInstalled("foo") {
log.Info("foo not-installed check failed")
panic("foo")
} else {
log.Info("foo not-installed check worked")
}
}
func testMachine() *zoopb.Machine {
var m *zoopb.Machine
m = new(zoopb.Machine)
m.Hostname = "zookeeper"
return m
}
func testPackages(m *zoopb.Machine) {
m.Packages = new(zoopb.Packages)
// r = zoopb.LoadJSON("go.wit.com/lib/protobuf/zoopb")
new1 := new(zoopb.Package)
new1.Name = "bash"
new1.Version = "5.2.21"
if m.Packages.Append(new1) {
log.Info("added", new1.Name, "ok")
} else {
log.Info("added", new1.Name, "failed")
}
new2 := new(zoopb.Package)
new2.Name = "go-clone"
new2.Version = "0.6.8" // good version of the macos
if m.Packages.Append(new2) {
log.Info("added", new2.Name, "ok")
} else {
log.Info("added", new2.Name, "failed")
}
if m.Packages.Append(new2) {
log.Info("added", new2.Name, "ok (this is bad)")
} else {
log.Info("added", new2.Name, "failed (but ok)")
}
fmt.Println("package count = ", m.Packages.Len())
}