all: librarify golink and make importable

Export LastSnapshot var so that snapshots can be stored in separate repo
from the golink code.
This commit is contained in:
Will Norris
2022-08-20 07:25:26 -07:00
committed by Will Norris
parent d4f6b5f22e
commit 113923a9af
8 changed files with 36 additions and 16 deletions
-1
View File
@@ -1,3 +1,2 @@
node_modules
package-lock.json
golink
+1 -1
View File
@@ -8,7 +8,7 @@ export PATH=$(readlink -f $(dirname $0)/../../tool):$PATH
go run github.com/tailscale/mkctr \
--target="flyio" \
--base="alpine:3.15" \
--gopaths="tailscale.io/cmd/golink:/tsgo" \
--gopaths="github.com/tailscale/golink/cmd/golink:/tsgo" \
--tags="latest" \
--repos="registry.fly.io/tsgo" \
--push \
+19
View File
@@ -0,0 +1,19 @@
// The golink server runs http://go/, a private shortlink service for tailnets.
package main
import (
_ "embed"
"log"
"github.com/tailscale/golink"
)
//go:embed link-snapshot.json
var lastSnapshot []byte
func main() {
golink.LastSnapshot = lastSnapshot
if err := golink.Run(); err != nil {
log.Fatal(err)
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
package main
package golink
import (
"context"
+1 -1
View File
@@ -1,4 +1,4 @@
package main
package golink
import (
"path"
+13 -11
View File
@@ -1,5 +1,5 @@
// The golink server runs http://go/, a private shortlink service for tailnets.
package main
package golink
import (
"bufio"
@@ -43,8 +43,9 @@ var stats struct {
dirty ClickStats
}
//go:embed link-snapshot.json
var lastSnapshot []byte
// LastSnapshot is the data snapshot (as returned by the /.export handler)
// that will be loaded on startup.
var LastSnapshot []byte
//go:embed static tmpl/*.html
var embeddedFS embed.FS
@@ -54,25 +55,25 @@ var db *SQLiteDB
var localClient *tailscale.LocalClient
func main() {
func Run() error {
flag.Parse()
if *sqlitefile == "" {
if devMode() {
tmpdir, err := ioutil.TempDir("", "golink_dev_*")
if err != nil {
log.Fatal(err)
return err
}
*sqlitefile = filepath.Join(tmpdir, "golink.db")
log.Printf("Dev mode temp db: %s", *sqlitefile)
} else {
log.Fatalf("--sqlitedb is required")
return errors.New("--sqlitedb is required")
}
}
var err error
if db, err = NewSQLiteDB(*sqlitefile); err != nil {
log.Fatalf("NewSQLiteDB(%q): %v", *sqlitefile, err)
return fmt.Errorf("NewSQLiteDB(%q): %w", *sqlitefile, err)
}
if err := restoreLastSnapshot(); err != nil {
@@ -105,19 +106,20 @@ func main() {
srv.Logf = log.Printf
}
if err := srv.Start(); err != nil {
log.Fatal(err)
return err
}
localClient, _ = srv.LocalClient()
l80, err := srv.Listen("tcp", ":80")
if err != nil {
log.Fatal(err)
return err
}
log.Printf("Serving http://go/ ...")
if err := http.Serve(l80, nil); err != nil {
log.Fatal(err)
return err
}
return nil
}
var (
@@ -520,7 +522,7 @@ func serveExport(w http.ResponseWriter, r *http.Request) {
}
func restoreLastSnapshot() error {
bs := bufio.NewScanner(bytes.NewReader(lastSnapshot))
bs := bufio.NewScanner(bytes.NewReader(LastSnapshot))
var restored int
for bs.Scan() {
link := new(Link)
+1 -1
View File
@@ -1,4 +1,4 @@
package main
package golink
import (
"testing"