From 11a690b1c6cee1c9b6162bbc984696a29196b433 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Mon, 24 Nov 2025 06:37:42 -0300 Subject: [PATCH] git: fix sync publishing wrong repo event and always being mismatched. --- git.go | 48 +++++++++++++++++++++++------------------------- go.mod | 4 +--- go.sum | 17 ++++++++++++----- 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/git.go b/git.go index 251f8d0..eec2002 100644 --- a/git.go +++ b/git.go @@ -8,7 +8,6 @@ import ( "path/filepath" "slices" "strings" - "time" "fiatjaf.com/nostr" "fiatjaf.com/nostr/nip19" @@ -676,7 +675,7 @@ var gitSync = &cli.Command{ }, } -func syncRepository(ctx context.Context, signer nostr.Signer) (nip34.Repository, nip34.RepositoryState, error) { +func syncRepository(ctx context.Context, signer nostr.Keyer) (nip34.Repository, nip34.RepositoryState, error) { // read current nip34.json localConfig, err := readNip34ConfigFile("") if err != nil { @@ -706,35 +705,34 @@ func syncRepository(ctx context.Context, signer nostr.Signer) (nip34.Repository, configPath := filepath.Join(findGitRoot(""), "nip34.json") if fi, err := os.Stat(configPath); err == nil { configModTime := fi.ModTime() - announcementTime := time.Unix(int64(repo.Event.CreatedAt), 0) + announcementTime := repo.Event.CreatedAt.Time() if configModTime.After(announcementTime) { - // local config is newer, publish new announcement if signer is available + // local config is newer, publish new announcement if signer is available and matches owner if signer != nil { - log("local configuration is newer, publishing updated repository announcement...\n") - // prepare clone URLs - for _, server := range localConfig.GraspServers { - graspRelayURL := nostr.NormalizeURL(server) - url := fmt.Sprintf("http%s/%s/%s.git", - graspRelayURL[2:], nip19.EncodeNpub(owner), localConfig.Identifier) - localRepo.Clone = append(localRepo.Clone, url) - localRepo.Relays = append(localRepo.Relays, graspRelayURL) + signerPk, err := signer.GetPublicKey(ctx) + if err != nil { + return repo, state, fmt.Errorf("failed to get signer pubkey: %w", err) } - - announcementEvent := localRepo.ToEvent() - if err := signer.SignEvent(ctx, &announcementEvent); err != nil { - return repo, state, fmt.Errorf("failed to sign announcement: %w", err) - } - - relays := append(sys.FetchOutboxRelays(ctx, owner, 3), localConfig.GraspServers...) - for res := range sys.Pool.PublishMany(ctx, relays, announcementEvent) { - if res.Error != nil { - log("! error publishing to %s: %v\n", color.YellowString(res.RelayURL), res.Error) - } else { - log("> published to %s\n", color.GreenString(res.RelayURL)) + if signerPk != owner { + log("local configuration is newer, but signer pubkey does not match owner, skipping announcement publish\n") + } else { + log("local configuration is newer, publishing updated repository announcement...\n") + announcementEvent := localRepo.ToEvent() + if err := signer.SignEvent(ctx, &announcementEvent); err != nil { + return repo, state, fmt.Errorf("failed to sign announcement: %w", err) } + + relays := append(sys.FetchOutboxRelays(ctx, owner, 3), localConfig.GraspServers...) + for res := range sys.Pool.PublishMany(ctx, relays, announcementEvent) { + if res.Error != nil { + log("! error publishing to %s: %v\n", color.YellowString(res.RelayURL), res.Error) + } else { + log("> published to %s\n", color.GreenString(res.RelayURL)) + } + } + repo = nip34.ParseRepository(announcementEvent) } - repo = nip34.ParseRepository(announcementEvent) } else { log("local configuration is newer than remote, but no signer provided to publish update\n") } diff --git a/go.mod b/go.mod index 5133ab0..ac162ad 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.24.1 require ( fiatjaf.com/lib v0.3.1 - fiatjaf.com/nostr v0.0.0-20251117111008-078e9b4cc257 + fiatjaf.com/nostr v0.0.0-20251124002842-de54dd1fa4b8 github.com/bep/debounce v1.2.1 github.com/btcsuite/btcd/btcec/v2 v2.3.6 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e @@ -80,5 +80,3 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/qr v0.2.0 // indirect ) - -replace fiatjaf.com/nostr => ../nostrlib diff --git a/go.sum b/go.sum index 38305ae..cc7bcf4 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ fiatjaf.com/lib v0.3.1 h1:/oFQwNtFRfV+ukmOCxfBEAuayoLwXp4wu2/fz5iHpwA= fiatjaf.com/lib v0.3.1/go.mod h1:Ycqq3+mJ9jAWu7XjbQI1cVr+OFgnHn79dQR5oTII47g= -fiatjaf.com/nostr v0.0.0-20251117111008-078e9b4cc257 h1:u8ah+Cc+5bXZ3qnBf8MRtzyRk6VAdhA0EYTY3+hVejs= -fiatjaf.com/nostr v0.0.0-20251117111008-078e9b4cc257/go.mod h1:pCbBk3hfs5x0+ND8k25mq9e50LEmQpAYMdTUe1M1Rt0= +fiatjaf.com/nostr v0.0.0-20251124002842-de54dd1fa4b8 h1:R16mnlJ3qvVar7G4rzY+Z+mEAf2O6wpHTlRlHAt2Od8= +fiatjaf.com/nostr v0.0.0-20251124002842-de54dd1fa4b8/go.mod h1:QEGyTgAjjTFwDx2BJGZiCdmoAcWA/G+sQy7wDqKzSPU= github.com/FastFilter/xorfilter v0.2.1 h1:lbdeLG9BdpquK64ZsleBS8B4xO/QW1IM0gMzF7KaBKc= github.com/FastFilter/xorfilter v0.2.1/go.mod h1:aumvdkhscz6YBZF9ZA/6O4fIoNod4YR50kIVGGZ7l9I= github.com/ImVexed/fasturl v0.0.0-20230304231329-4e41488060f3 h1:ClzzXMDDuUbWfNNZqGeYq4PnYOlwlOVIvSyNaIy0ykg= @@ -96,8 +96,8 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -121,6 +121,10 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/liamg/magic v0.0.1 h1:Ru22ElY+sCh6RvRTWjQzKKCxsEco8hE0co8n1qe7TBM= @@ -163,6 +167,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg= github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/savsgio/gotils v0.0.0-20240704082632-aef3928b8a38 h1:D0vL7YNisV2yqE55+q0lFuGse6U8lxlg7fYTctlT5Gc= @@ -251,8 +257,9 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=