chore: rename project from go-upkeep to uptop
CI / test (pull_request) Successful in 4m19s
CI / lint (pull_request) Successful in 1m6s

Module path now gitea.lerkolabs.com/lerko/uptop.
Binary moves to cmd/uptop. All imports, display strings,
CI config, and docs updated.
This commit is contained in:
2026-05-24 19:40:37 -04:00
parent 36a4b69837
commit 5862a46b00
30 changed files with 82 additions and 82 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
with: with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/go-upkeep images: ${{ secrets.DOCKERHUB_USERNAME }}/uptop
tags: | tags: |
# This turns git tag "v1.0.0" into docker tag "1.0.0" # This turns git tag "v1.0.0" into docker tag "1.0.0"
type=semver,pattern={{version}} type=semver,pattern={{version}}
+1 -1
View File
@@ -3,7 +3,7 @@
## Development ## Development
```sh ```sh
go run cmd/goupkeep/main.go -demo # starts with sample data go run cmd/uptop/main.go -demo # starts with sample data
ssh -p 23234 localhost # connect to TUI ssh -p 23234 localhost # connect to TUI
``` ```
+12 -12
View File
@@ -1,8 +1,8 @@
# Go-Upkeep # uptop
Self-hosted uptime monitor with a TUI you can access over SSH. No browser, no install on the client — just `ssh -p 23234 your-server`. Self-hosted uptime monitor with a TUI you can access over SSH. No browser, no install on the client — just `ssh -p 23234 your-server`.
Built on the foundation of [RDGames/go-upkeep](https://github.com/RDGames/go-upkeep). Built on the foundation of [RDGames/uptop](https://github.com/RDGames/uptop).
## What it does ## What it does
@@ -18,14 +18,14 @@ Built on the foundation of [RDGames/go-upkeep](https://github.com/RDGames/go-upk
## Quick start ## Quick start
```bash ```bash
go run cmd/goupkeep/main.go go run cmd/uptop/main.go
ssh -p 23234 localhost ssh -p 23234 localhost
``` ```
Seed some demo data to see it in action: Seed some demo data to see it in action:
```bash ```bash
go run cmd/goupkeep/main.go -demo go run cmd/uptop/main.go -demo
``` ```
## Install ## Install
@@ -33,14 +33,14 @@ go run cmd/goupkeep/main.go -demo
### From source ### From source
```bash ```bash
go install gitea.lerkolabs.com/lerko/uptime/cmd/goupkeep@latest go install gitea.lerkolabs.com/lerko/uptime/cmd/uptop@latest
``` ```
### Docker ### Docker
```bash ```bash
docker pull lerko/go-upkeep:latest docker pull lerko/uptop:latest
docker run -p 23234:23234 -p 8080:8080 -v ./data:/data lerko/go-upkeep docker run -p 23234:23234 -p 8080:8080 -v ./data:/data lerko/uptop
``` ```
### Binary ### Binary
@@ -52,15 +52,15 @@ Download from [Releases](https://gitea.lerkolabs.com/lerko/uptime/releases).
Export your current monitors: Export your current monitors:
```bash ```bash
goupkeep export -o monitors.yaml uptop export -o monitors.yaml
``` ```
Apply a config file: Apply a config file:
```bash ```bash
goupkeep apply -f monitors.yaml uptop apply -f monitors.yaml
goupkeep apply -f monitors.yaml --dry-run # see what would change uptop apply -f monitors.yaml --dry-run # see what would change
goupkeep apply -f monitors.yaml --prune # delete anything not in the YAML uptop apply -f monitors.yaml --prune # delete anything not in the YAML
``` ```
See [docs/config-as-code.md](docs/config-as-code.md) for the full reference. See [docs/config-as-code.md](docs/config-as-code.md) for the full reference.
@@ -87,7 +87,7 @@ services:
- UPKEEP_CLUSTER_SECRET=change-me - UPKEEP_CLUSTER_SECRET=change-me
``` ```
First run: attach to the container (`docker attach go-upkeep`), go to the Users tab, add your SSH public key. Then detach with `Ctrl+P, Ctrl+Q` and connect normally over SSH. First run: attach to the container (`docker attach uptop`), go to the Users tab, add your SSH public key. Then detach with `Ctrl+P, Ctrl+Q` and connect normally over SSH.
## Environment variables ## Environment variables
+11 -11
View File
@@ -5,14 +5,14 @@ import (
"errors" "errors"
"flag" "flag"
"fmt" "fmt"
"go-upkeep/internal/cluster" "gitea.lerkolabs.com/lerko/uptop/internal/cluster"
"go-upkeep/internal/config" "gitea.lerkolabs.com/lerko/uptop/internal/config"
"go-upkeep/internal/importer" "gitea.lerkolabs.com/lerko/uptop/internal/importer"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"go-upkeep/internal/server" "gitea.lerkolabs.com/lerko/uptop/internal/server"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"go-upkeep/internal/tui" "gitea.lerkolabs.com/lerko/uptop/internal/tui"
"log" "log"
"os" "os"
"os/signal" "os/signal"
@@ -54,9 +54,9 @@ func main() {
func printVersion() { func printVersion() {
if version == "dev" { if version == "dev" {
fmt.Println("go-upkeep dev") fmt.Println("uptop dev")
} else { } else {
fmt.Printf("go-upkeep %s (%s, %s)\n", version, commit, date) fmt.Printf("uptop %s (%s, %s)\n", version, commit, date)
} }
} }
@@ -305,7 +305,7 @@ func runServe(args []string) {
fmt.Printf("Error: %v\n", err) fmt.Printf("Error: %v\n", err)
} }
} else { } else {
fmt.Println("Go-Upkeep running in HEADLESS mode") fmt.Println("uptop running in HEADLESS mode")
done := make(chan os.Signal, 1) done := make(chan os.Signal, 1)
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
<-done <-done
+12 -12
View File
@@ -7,13 +7,13 @@ Define your monitors and alerts in a YAML file. Version control them, copy them
Export what you already have: Export what you already have:
```bash ```bash
goupkeep export -o monitors.yaml uptop export -o monitors.yaml
``` ```
That gives you a working file you can edit and re-apply: That gives you a working file you can edit and re-apply:
```bash ```bash
goupkeep apply -f monitors.yaml uptop apply -f monitors.yaml
``` ```
That's it. Apply only creates or updates — it won't delete anything unless you tell it to. That's it. Apply only creates or updates — it won't delete anything unless you tell it to.
@@ -184,31 +184,31 @@ All 9 providers work in the YAML. The `settings` map is different per type.
**Export current state:** **Export current state:**
```bash ```bash
goupkeep export -o monitors.yaml # to a file uptop export -o monitors.yaml # to a file
goupkeep export # to stdout uptop export # to stdout
``` ```
**Apply a config:** **Apply a config:**
```bash ```bash
goupkeep apply -f monitors.yaml uptop apply -f monitors.yaml
``` ```
**See what would change first:** **See what would change first:**
```bash ```bash
goupkeep apply -f monitors.yaml --dry-run uptop apply -f monitors.yaml --dry-run
``` ```
**Delete monitors not in the YAML:** **Delete monitors not in the YAML:**
```bash ```bash
goupkeep apply -f monitors.yaml --prune uptop apply -f monitors.yaml --prune
``` ```
Without `--prune`, apply never deletes anything. It only creates and updates. Without `--prune`, apply never deletes anything. It only creates and updates.
**Pointing at a different database:** **Pointing at a different database:**
```bash ```bash
goupkeep export -db-type postgres -dsn "host=localhost dbname=upkeep sslmode=disable" uptop export -db-type postgres -dsn "host=localhost dbname=upkeep sslmode=disable"
goupkeep apply -f monitors.yaml -db-type postgres -dsn "..." uptop apply -f monitors.yaml -db-type postgres -dsn "..."
``` ```
Both commands respect the `UPKEEP_DB_TYPE` and `UPKEEP_DB_DSN` environment variables too. Both commands respect the `UPKEEP_DB_TYPE` and `UPKEEP_DB_DSN` environment variables too.
@@ -230,15 +230,15 @@ If something fails mid-apply, just fix the issue and run it again. It picks up w
```bash ```bash
# set up your monitors in the TUI first, then export # set up your monitors in the TUI first, then export
goupkeep export -o monitors.yaml uptop export -o monitors.yaml
# commit it # commit it
git add monitors.yaml && git commit -m "add monitor config" git add monitors.yaml && git commit -m "add monitor config"
# deploy to another instance # deploy to another instance
scp monitors.yaml prod-server: scp monitors.yaml prod-server:
ssh prod-server goupkeep apply -f monitors.yaml ssh prod-server uptop apply -f monitors.yaml
# or just keep it as a backup you can restore from # or just keep it as a backup you can restore from
goupkeep apply -f monitors.yaml uptop apply -f monitors.yaml
``` ```
+1 -1
View File
@@ -1,4 +1,4 @@
module go-upkeep module gitea.lerkolabs.com/lerko/uptop
go 1.24.4 go 1.24.4
+3 -3
View File
@@ -5,7 +5,7 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"net/http" "net/http"
"net/smtp" "net/smtp"
"strconv" "strconv"
@@ -76,7 +76,7 @@ func pagerdutyPayload(routingKey, severity string) PayloadFunc {
"event_action": "trigger", "event_action": "trigger",
"payload": map[string]string{ "payload": map[string]string{
"summary": fmt.Sprintf("%s: %s", title, message), "summary": fmt.Sprintf("%s: %s", title, message),
"source": "go-upkeep", "source": "uptop",
"severity": severity, "severity": severity,
}, },
}) })
@@ -184,7 +184,7 @@ func (e *EmailProvider) Send(ctx context.Context, title, message string) error {
} }
auth := smtp.PlainAuth("", e.User, e.Pass, e.Host) auth := smtp.PlainAuth("", e.User, e.Pass, e.Host)
msg := []byte("To: " + e.To + "\r\n" + msg := []byte("To: " + e.To + "\r\n" +
"Subject: Go-Upkeep: " + title + "\r\n" + "Subject: uptop: " + title + "\r\n" +
"\r\n" + "\r\n" +
message + "\r\n") message + "\r\n")
return smtp.SendMail(e.Host+":"+e.Port, auth, e.From, []string{e.To}, msg) return smtp.SendMail(e.Host+":"+e.Port, auth, e.From, []string{e.To}, msg)
+1 -1
View File
@@ -3,7 +3,7 @@ package alert
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"testing" "testing"
+1 -1
View File
@@ -3,7 +3,7 @@ package cluster
import ( import (
"context" "context"
"fmt" "fmt"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"net/http" "net/http"
"strings" "strings"
"time" "time"
+2 -2
View File
@@ -3,8 +3,8 @@ package cluster
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"sync" "sync"
+2 -2
View File
@@ -6,8 +6,8 @@ import (
"crypto/tls" "crypto/tls"
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"log" "log"
"net/http" "net/http"
"sync" "sync"
+2 -2
View File
@@ -2,8 +2,8 @@ package config
import ( import (
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"reflect" "reflect"
"strings" "strings"
) )
+2 -2
View File
@@ -1,8 +1,8 @@
package config package config
import ( import (
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"strings" "strings"
"testing" "testing"
) )
+2 -2
View File
@@ -2,8 +2,8 @@ package config
import ( import (
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"os" "os"
"sort" "sort"
+1 -1
View File
@@ -1,7 +1,7 @@
package config package config
import ( import (
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"testing" "testing"
) )
+1 -1
View File
@@ -3,7 +3,7 @@ package importer
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"os" "os"
"strings" "strings"
) )
+2 -2
View File
@@ -2,8 +2,8 @@ package metrics
import ( import (
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"net/http" "net/http"
"sort" "sort"
"strings" "strings"
+2 -2
View File
@@ -2,8 +2,8 @@ package metrics
import ( import (
"context" "context"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"strings" "strings"
+1 -1
View File
@@ -2,7 +2,7 @@ package monitor
import ( import (
"context" "context"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"net" "net"
"net/http" "net/http"
"strconv" "strconv"
+1 -1
View File
@@ -2,7 +2,7 @@ package monitor
import ( import (
"crypto/tls" "crypto/tls"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"net" "net"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
+3 -3
View File
@@ -4,9 +4,9 @@ import (
"context" "context"
"crypto/tls" "crypto/tls"
"fmt" "fmt"
"go-upkeep/internal/alert" "gitea.lerkolabs.com/lerko/uptop/internal/alert"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"math/rand/v2" "math/rand/v2"
"net/http" "net/http"
"sync" "sync"
+1 -1
View File
@@ -2,7 +2,7 @@ package monitor
import ( import (
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"sync" "sync"
"testing" "testing"
"time" "time"
+6 -6
View File
@@ -4,11 +4,11 @@ import (
"crypto/subtle" "crypto/subtle"
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/importer" "gitea.lerkolabs.com/lerko/uptop/internal/importer"
"go-upkeep/internal/metrics" "gitea.lerkolabs.com/lerko/uptop/internal/metrics"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"html/template" "html/template"
"log" "log"
"net/http" "net/http"
@@ -59,7 +59,7 @@ var statusTpl = template.Must(template.New("status").Parse(`
<div id="summary" class="summary"></div> <div id="summary" class="summary"></div>
<div id="stale" class="stale-bar"></div> <div id="stale" class="stale-bar"></div>
<div id="cards"></div> <div id="cards"></div>
<div style="text-align: center; margin-top: 40px; color: #565f89; font-size: 0.8em;">Powered by Go-Upkeep</div> <div style="text-align: center; margin-top: 40px; color: #565f89; font-size: 0.8em;">Powered by uptop</div>
</div> </div>
<script> <script>
var lastUpdate = null; var lastUpdate = null;
+2 -2
View File
@@ -4,8 +4,8 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"net" "net"
"net/http" "net/http"
"sync" "sync"
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"log" "log"
"time" "time"
) )
+1 -1
View File
@@ -1,7 +1,7 @@
package store package store
import ( import (
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"testing" "testing"
) )
+1 -1
View File
@@ -1,7 +1,7 @@
package store package store
import ( import (
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
) )
type Store interface { type Store interface {
+1 -1
View File
@@ -2,7 +2,7 @@ package tui
import ( import (
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"strconv" "strconv"
"time" "time"
+2 -2
View File
@@ -2,7 +2,7 @@ package tui
import ( import (
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"net/url" "net/url"
"strconv" "strconv"
"strings" "strings"
@@ -340,7 +340,7 @@ func (m Model) viewSitesTab() string {
BorderForeground(m.theme.Accent). BorderForeground(m.theme.Accent).
Padding(1, 3). Padding(1, 3).
Render( Render(
titleStyle.Render("Go-Upkeep") + "\n\n" + titleStyle.Render("uptop") + "\n\n" +
"No monitors configured yet.\n\n" + "No monitors configured yet.\n\n" +
subtleStyle.Render("[n] Add your first monitor"), subtleStyle.Render("[n] Add your first monitor"),
) )
+3 -3
View File
@@ -3,9 +3,9 @@ package tui
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"go-upkeep/internal/models" "gitea.lerkolabs.com/lerko/uptop/internal/models"
"go-upkeep/internal/monitor" "gitea.lerkolabs.com/lerko/uptop/internal/monitor"
"go-upkeep/internal/store" "gitea.lerkolabs.com/lerko/uptop/internal/store"
"math" "math"
"sort" "sort"
"strings" "strings"