Library Usage
Borg can also be used as a Go library. The public API is exposed under the pkg directory. Import paths use the module github.com/Snider/Borg.
Collecting a GitHub repo into a DataNode
package main
import (
"log"
"os"
"github.com/Snider/Borg/pkg/vcs"
)
func main() {
// Clone and package the repository
cloner := vcs.NewGitCloner()
dn, err := cloner.CloneGitRepository("https://github.com/Snider/Borg", nil)
if err != nil {
log.Fatal(err)
}
// Save to disk
tarBytes, err := dn.ToTar()
if err != nil {
log.Fatal(err)
}
if err := os.WriteFile("repo.dat", tarBytes, 0644); err != nil {
log.Fatal(err)
}
}
Collecting a Website
package main
import (
"log"
"os"
"github.com/Snider/Borg/pkg/website"
)
func main() {
// Download and package the website
// 1 is the depth (0 = just the page, 1 = page + links on page)
dn, err := website.DownloadAndPackageWebsite("https://example.com", 1, nil)
if err != nil {
log.Fatal(err)
}
// Save to disk
tarBytes, err := dn.ToTar()
if err != nil {
log.Fatal(err)
}
if err := os.WriteFile("website.dat", tarBytes, 0644); err != nil {
log.Fatal(err)
}
}
PWA Collection
package main
import (
"log"
"os"
"github.com/Snider/Borg/pkg/pwa"
)
func main() {
client := pwa.NewPWAClient()
pwaURL := "https://squoosh.app"
// Find the manifest
manifestURL, err := client.FindManifest(pwaURL)
if err != nil {
log.Fatal(err)
}
// Download and package the PWA
dn, err := client.DownloadAndPackagePWA(pwaURL, manifestURL, nil)
if err != nil {
log.Fatal(err)
}
// Save to disk
tarBytes, err := dn.ToTar()
if err != nil {
log.Fatal(err)
}
if err := os.WriteFile("pwa.dat", tarBytes, 0644); err != nil {
log.Fatal(err)
}
}
Logging
The package pkg/logger provides helpers for configuring output. See pkg/logger tests for examples.
Notes
- Import paths throughout this repository already use the module path and should work when consumed via
go get github.com/Snider/Borg@latest. - The exact function names may differ; consult GoDoc/pkg.go.dev for up-to-date signatures based on the current code.