refactor: migrate eventsourced to codeberg and go-messaging-amqp
schemas / check (push) Skipped
schemas / vulnerabilities (push) Skipped
schemas / check-release (push) Skipped
schemas / build (push) Skipped
pre-commit / pre-commit (push) Skipped
schemas / vulnerabilities (pull_request) Successful in 58s
schemas / check-release (pull_request) Successful in 59s
schemas / check (pull_request) Successful in 1m58s
pre-commit / pre-commit (pull_request) Successful in 2m54s
schemas / build (pull_request) Successful in 6m9s
schemas / deploy-prod (pull_request) Skipped

Move eventsourced modules from gitlab.com/unboundsoftware to codeberg.org/eventsourced.
The Codeberg amqp publisher is built on go-messaging-amqp, so the service
switches from sparetimecoders/goamqp as well:

- routing keys are mapped on the eventsourced publisher (newEventPublisher)
- cache consumers are typed handlers; Cache.Update drops the goamqp shape
- publishes detach from the request context (uncancelledPublisher)
- closeEvents is buffered and the receiver also watches rootCtx
- WithPrefetchLimit dropped (no-op, 20 is the default)
- amqp091-go v1.15.0 (GO-2026-6372)
- renovate groups codeberg.org/messaging with eventsourced

Only transient consumer queues are used, so no queue cutover is needed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dpb7Y47dPz246oY9bCzh7k
This commit is contained in:
argoyleandClaude Opus 5 committed 2026-09-16 17:23:38 +02:00
1 parent d38f599974
commit 57682f2dc3
18 files changed
+221 -73

No files matched your search

+3 -4
View File
@@ -6,8 +6,7 @@ import (
"sync"
"time"
"github.com/sparetimecoders/goamqp"
"gitlab.com/unboundsoftware/eventsourced/eventsourced"
"codeberg.org/eventsourced/eventsourced"
"gitea.unbound.se/unboundsoftware/schemas/domain"
"gitea.unbound.se/unboundsoftware/schemas/graph/model"
@@ -133,7 +132,7 @@ func (c *Cache) SubGraphId(orgId, ref, service string) string {
return c.subGraphs[subGraphKey(orgId, ref, service)]
}
func (c *Cache) Update(msg any, _ goamqp.Headers) (any, error) {
func (c *Cache) Update(msg any) error {
c.mu.Lock()
defer c.mu.Unlock()
@@ -250,7 +249,7 @@ func (c *Cache) Update(msg any, _ goamqp.Headers) (any, error) {
default:
c.logger.With("msg", msg).Warn("unexpected message received")
}
return nil, nil
return nil
}
func (c *Cache) updateSubGraph(orgId string, ref string, subGraphId string, service string, updated time.Time) {
+10 -10
View File
@@ -7,10 +7,10 @@ import (
"testing"
"time"
"codeberg.org/eventsourced/eventsourced"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gitlab.com/unboundsoftware/eventsourced/eventsourced"
"gitea.unbound.se/unboundsoftware/schemas/domain"
"gitea.unbound.se/unboundsoftware/schemas/hash"
@@ -208,7 +208,7 @@ func TestCache_Update_OrganizationAdded(t *testing.T) {
}
event.ID = *eventsourced.IdFromString(orgID)
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify organization was added
@@ -247,7 +247,7 @@ func TestCache_Update_APIKeyAdded(t *testing.T) {
}
event.ID = *eventsourced.IdFromString(uuid.New().String())
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify API key was added to cache
@@ -281,7 +281,7 @@ func TestCache_Update_SubGraphUpdated(t *testing.T) {
event.ID = *eventsourced.IdFromString(subGraphID)
event.SetWhen(time.Now())
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify subgraph was added to services
@@ -366,7 +366,7 @@ func TestCache_ConcurrentWrites(t *testing.T) {
Initiator: "user-" + string(rune(index)),
}
event.ID = *eventsourced.IdFromString(orgID)
_, err := c.Update(event, nil)
err := c.Update(event)
assert.NoError(t, err)
}(i)
}
@@ -423,7 +423,7 @@ func TestCache_ConcurrentReadsAndWrites(t *testing.T) {
Initiator: "user-new-" + string(rune(index)),
}
event.ID = *eventsourced.IdFromString(newOrgID)
_, err := c.Update(event, nil)
err := c.Update(event)
assert.NoError(t, err)
}(i)
}
@@ -471,7 +471,7 @@ func TestCache_Update_APIKeyRemoved(t *testing.T) {
}
event.ID = *eventsourced.IdFromString(orgID)
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify API key was removed from cache
@@ -523,7 +523,7 @@ func TestCache_Update_APIKeyRemoved_MultipleKeys(t *testing.T) {
}
event.ID = *eventsourced.IdFromString(orgID)
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify only key2 was removed
@@ -579,7 +579,7 @@ func TestCache_Update_OrganizationRemoved(t *testing.T) {
}
event.ID = *eventsourced.IdFromString(orgID)
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify organization was removed
@@ -633,7 +633,7 @@ func TestCache_Update_OrganizationRemoved_MultipleUsers(t *testing.T) {
}
event.ID = *eventsourced.IdFromString(orgID)
_, err := c.Update(event, nil)
err := c.Update(event)
require.NoError(t, err)
// Verify user1 still has otherOrgID but not removed orgID