From 46aeeeac0813f43c5b3761d3cb632076dfad3ab9 Mon Sep 17 00:00:00 2001 From: n30nex Date: Wed, 30 Sep 2026 13:46:33 -0400 Subject: [PATCH 1/3] ci: reserve latest images for stable releases --- .github/workflows/docker-publish.yml | 1 - README.md | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 48f459db..686b3d98 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -41,7 +41,6 @@ jobs: org.opencontainers.image.description=Beacon — MeshCore LoRa mesh observation server org.opencontainers.image.licenses=AGPL-3.0-or-later tags: | - type=raw,value=latest,enable={{is_default_branch}} type=raw,value=dev,enable=${{ github.ref == 'refs/heads/dev' }} type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} diff --git a/README.md b/README.md index dfcec34f..6e07bc35 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,23 @@ in PostgreSQL, and streams live events to WebSocket clients. For deployment instructions including the frontend app, see the deployment docs. +### MeshCore Canada: Beacon 1.4.0 rollout + +Beacon/web 1.4.0 is planned to replace CoreScope at **https://live.meshcore.ca**. +**https://dev.meshcore.ca** remains online for development testing, with its own +Beacon database, cache, configuration and application deployment. Production must +not depend on the development API or WebSocket endpoint. + +The server retains its independent version history (v1.6.0 is already released). +Record the matched server revision and approved image digest alongside web 1.4.0; +do not retag or downgrade the server to 1.4.0. Follow the +[1.4.0 release and cutover plan](https://github.com/MeshCore-Beacon/beacon-docs/blob/main/app_documentation/release-140-preparation.md) +for migration checks, data continuity and the owner-controlled CoreScope switch. + +Development builds publish `dev` and revision tags. Only stable semantic-version +tags publish `latest`; pushes to `dev` or `main`, and prerelease tags, do not move +that production alias. Production deployments should pin the approved image digest. + For a bounded private database and saved-config bundle, see [backup export](docs/backup-export.md). A standalone export tool is available; the protected download API is opt-in; browser login and import remain separate follow-ups. From 92a8703f1e746510ccc3e6c7f468f07d3719b54d Mon Sep 17 00:00:00 2001 From: n30nex Date: Wed, 30 Sep 2026 16:53:29 -0400 Subject: [PATCH 2/3] test: drain readiness probes before packet assertions --- internal/ingest/packet_summary_test.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/internal/ingest/packet_summary_test.go b/internal/ingest/packet_summary_test.go index 887c3960..7f17aba2 100644 --- a/internal/ingest/packet_summary_test.go +++ b/internal/ingest/packet_summary_test.go @@ -6,6 +6,7 @@ package ingest import ( "context" "crypto/ed25519" + "crypto/rand" "encoding/json" "testing" "time" @@ -24,7 +25,20 @@ func waitForSummarySubscriber(t *testing.T, ctx context.Context, h *hub.Hub, cli h.Broadcast(hub.Event{Type: hub.EventObserverStatus}) select { case <-client.Send: - return + // A slow hub can leave more probes queued. Drain through a final + // marker so the next test read receives its packet, not a probe. + marker := json.RawMessage(`"` + rand.Text() + `"`) + h.Broadcast(hub.Event{Type: hub.EventObserverStatus, Payload: marker}) + for { + select { + case event := <-client.Send: + if string(event.Payload) == string(marker) { + return + } + case <-ctx.Done(): + t.Fatal("hub readiness probes did not drain") + } + } case <-ticker.C: case <-ctx.Done(): t.Fatal("hub subscription did not become ready") From ed9c77320b741a4c6aee2895dc2533c79174ed24 Mon Sep 17 00:00:00 2001 From: MrAlders0n Date: Wed, 30 Sep 2026 19:31:44 -0400 Subject: [PATCH 3/3] ci: tie latest image tag to main Drop the deployment-specific rollout notes from the README. --- .github/workflows/docker-publish.yml | 3 +++ README.md | 17 ----------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 686b3d98..0cc526c8 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -40,7 +40,10 @@ jobs: org.opencontainers.image.title=beacon-server org.opencontainers.image.description=Beacon — MeshCore LoRa mesh observation server org.opencontainers.image.licenses=AGPL-3.0-or-later + flavor: | + latest=false tags: | + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} type=raw,value=dev,enable=${{ github.ref == 'refs/heads/dev' }} type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} diff --git a/README.md b/README.md index 6e07bc35..dfcec34f 100644 --- a/README.md +++ b/README.md @@ -27,23 +27,6 @@ in PostgreSQL, and streams live events to WebSocket clients. For deployment instructions including the frontend app, see the deployment docs. -### MeshCore Canada: Beacon 1.4.0 rollout - -Beacon/web 1.4.0 is planned to replace CoreScope at **https://live.meshcore.ca**. -**https://dev.meshcore.ca** remains online for development testing, with its own -Beacon database, cache, configuration and application deployment. Production must -not depend on the development API or WebSocket endpoint. - -The server retains its independent version history (v1.6.0 is already released). -Record the matched server revision and approved image digest alongside web 1.4.0; -do not retag or downgrade the server to 1.4.0. Follow the -[1.4.0 release and cutover plan](https://github.com/MeshCore-Beacon/beacon-docs/blob/main/app_documentation/release-140-preparation.md) -for migration checks, data continuity and the owner-controlled CoreScope switch. - -Development builds publish `dev` and revision tags. Only stable semantic-version -tags publish `latest`; pushes to `dev` or `main`, and prerelease tags, do not move -that production alias. Production deployments should pin the approved image digest. - For a bounded private database and saved-config bundle, see [backup export](docs/backup-export.md). A standalone export tool is available; the protected download API is opt-in; browser login and import remain separate follow-ups.