Repository navigation
Releases
gosite 0.68.0
Includes 0.66.0 and 0.67.0, which were not published as releases.
0.68.0
Analytics: Meta Pixel and store events
- Added: Meta Pixel (
meta-pixel,{ "pixelId": "..." }, 15 to 20 digits),
in themarketingcategory. Nothing from Meta loads, and no_fbp/_fbc
cookie is written, before marketing consent; withdrawing it clears them. No
<noscript>image. Offered on thin sites only: a legacy CMS does not list it. - Added: store events. With Commerce, the product page, add to cart,
checkout and confirmation sendViewContent,AddToCart,
InitiateCheckoutandPurchase(value, currency, variant ids, item count,
order id) throughanalytics.track(), so every enabled provider gets them
under its own consent.Purchasegoes once per order in a browser session,
with the order id as Meta'seventID. - Changed: no replay after a late accept. An event raised before the
visitor answered the banner is dropped, also when they accept later on the
same page. Before, page-codeanalytics.track()calls were replayed. This
applies to every provider. - Changed: the GTM key in the README is
containerId, as the code always
had it, and an extra config key is kept and named on the Analytics screen,
as the code did. - Upgrade (thin sites):
gosite generate(adds thegosite.layoutmarker
tocockpit/config.core.php), rebuild the CMS image, and update the core
module (go get github.com/Avanxo-Technology/gosite-cli/core@v0.68.0).
A theme that replaces the product, checkout or confirmation page must keep
the newdata-analytics-eventblock.
0.67.0
Replica: protected content and comparison between instances
- Added: protected content per instance. The Replica screen has a
Protected content card with one switch per content model. A protected
model refuses every replication write (entries and definitions), whoever
sends it; local editing and reading are not affected. Nothing is protected by
default. Each change is in the activity log. - Added: a push skips protected models and continues. The destination's
manifest lists them; they are counted asprotected, not as errors. A pull
does not write into a model protected on the local instance. - Added:
replica:diffand the Compare view. Read-only, per entry: only
here, changed here, changed there, only there, same. Sameness is a hash of
the content, so a re-save without changes issame. - Added: push a selection.
replica:push <target> <model> --ids=a,b, or
tick entries in the Compare view. - Changed: identical entries are skipped as
same, in the dry run and in
the real run, so a run reports what its dry run planned. Against a 1.0.0
destination the real run still rewrites them. - Fixed: singletons pair by model. Each instance creates its own singleton
(for exampleanalyticsConsent), so the two sides had different ids: a push
left two documents on the destination and the site read either one. A push
or pull now replaces the destination's singleton, and the next push merges a
duplicate left by 1.0.0. - Fixed: a push to a plain Cockpit no longer fails on an empty singleton.
Its 404 stopped the whole run. - Upgrade: Replica goes to 1.1.0 and is baked into the CMS image, so rebuild
the CMS of each site that uses it. Upgrade the destination before the source:
a 1.0.0 source that pushes to a protected model fails that run with a
"protected" message and writes nothing for the model; a 1.0.0 destination has
no protection, and every push says so.
0.66.0
Mailer: send an order's e-mails to the address the buyer chose
- Added: the recipient "The order's receipt address" (
order_receipt).
It sends to the addresses in the order'smetadata.receipt_email(one or
more, separated by commas; invalid ones are dropped), and to the order's
e-mail when the key is missing or holds none. A checkout can ask the buyer
where the purchase details go without changing the order's e-mail.
A migration adds the value tomailer_rule.recipient. - See
gosite docs medusa-mailer.
gosite 0.65.5
Releases 0.65.0 through 0.65.5. No tags existed for 0.65.x before this release, so none of these versions were installable from a tag.
0.65.5
Cache keys carry the environment
- Changed: cache keys include
APP_ENV. The page, blog, SEO and purge keys
are<project>:<env>:cache:. Production and QA sharing one Redis no longer
read or purge each other's pages. WithAPP_ENVempty the prefix is
unchanged. The cache rebuilds after the deploy; app state keys do not move.
See MIGRATIONS.md, "0.65.5". - Added:
seo.WithCachePrefix. Takes the full cache prefix from
config.CacheKeyPrefix().WithProjectstays for existing callers.
0.65.4
Analytics: one provider loads once, in a stable order
- Changed: integrations are read in a stable order. Entries sort by provider,
then by_id, so "the first entry" is the same on every request. - Added: a duplicate provider is skipped. When two enabled entries for one
provider both apply to this deployment, the first loads and the rest are
logged as a warning. This runs in the Go core, so it protects every site that
takes this core release, whatever the addon version.
0.65.3
S3 uploads are private by default
- Changed:
S3_ACLcontrols the ACL. Uploads send no ACL unlessS3_ACLis
true,yes,1oron(any letter case). The old defaultpublic-read
failed on buckets where ACLs are disabled, and the upload reported success
with no stored asset. See MIGRATIONS.md, "0.65.3". - Added:
gosite_env_flag()in both Cockpit config files. One reader for
boolean environment variables, with a test intests/thin.bats.
0.65.0
Forms: a webhook body Mattermost accepts, and a default for every form
- Added:
webhookFormaton Form settings.json(the original flat body,
unchanged and still the default),mattermost(an incoming-webhook message,
{text, attachments}) ornone. Mattermost and Slack answer 400 to the flat
body, and the addon only logs that, so a form pointed at a chat hook looked
configured and delivered nothing. An unknown value falls back tojson.
Themattermostbody carries only the submitted fields: no IP, no user agent. - Added: a default webhook for every form, from
FORMS_WEBHOOK_URL,
FORMS_WEBHOOK_FORMATandFORMS_WEBHOOK_SECRETon the CMS service, so a
form created later inherits it. A form's ownwebhook/webhookFormatwins;
webhookFormat: noneopts one form out. All three are empty in new sites. - Fixed: Forms model migrations never ran after the first request. A
boolean in app memory skippedensureModels(), so a field added to
formSettingsnever reached an existing site and Content dropped it on save.
The addon now compares aMODELS_VERSION. - Existing sites: see MIGRATIONS.md, "0.65.0 — Forms webhook format".
gosite 0.64.0
gosite 0.64.0
Source archive of the CLI (src/) at main.
Changes since 0.63.0
- PostHog session recording switch in the Analytics addon: the entry has a Record sessions switch that sets
session_recordingfor the browser. - One PostHog plugin per provider: the browser mounts only the first of two entries of the same provider, and both entries get an admin warning when they overlap in environment. Two plugins used to break all analytics on the page.
Related
core/v0.57.3carries the samesrc/addonssource for sites that pin the core addon.
gosite 0.63.0
gosite 0.63.0
Source archive of the CLI (src/) at tag v0.63.0.
Changes since 0.60.0 in the CLI
- Fix: locks hold under uutils
mkdir(0.62.1).
Related work in the repository (not in the CLI archive)
- Medusa storefront features in
services/medusa: sign-in by e-mail code, local delivery priced by area and weight, local delivery by map point, and bulk orders.
Verify the download against gosite-0.63.0.tar.gz.sha256 before installing manually. gosite update checks it automatically.
gosite 0.60.0 — gosite versions
Image versions: gosite versions
- Added:
gosite versions local|prod. Compares every image reference with
the newest Docker Hub tag in the same line. Read-only by default.localcovers the shared infrastructure compose and each project's
docker-compose.yml,deploy/Dockerfile.devanddeploy/Dockerfile.cms.prodcoversdocker-compose.prod.yml,docker-compose.qa.yml,
deploy/Dockerfileanddeploy/Dockerfile.cmsin each registered project.
The repository is the source of truth for these files.
- Added:
gosite versions prod --patch DIR. Writes one unified diff per
file for updates inside the current major.minor line. Diff paths are relative
to the project, sogit applyworks from the project directory. Minor and
major updates are reported but never written. - Added:
--strict. Exits non-zero when any reference is not current, for
use in a pre-deploy check. - Status values:
current,patch,minor,major,floating(no version
in the tag),unknownandunchecked(registry other than Docker Hub, or the
API could not be reached). Variant tags such as-windowsservercoreor
-alpine3.24are never compared with the plain tag. - Known limit: Docker Hub returns at most 100 tags per name prefix. A repository
with many matching tags (for examplegolangunder1) can hide a newer tag;
the check does not detect that case. - No change to generated sites and no runtime change. Nothing is applied
automatically.
gosite 0.57.0
Agent context: AGENTS.md, CLAUDE.md and gosite docs
- Added:
gosite docs [topic]. Lists the agent notes shipped with the CLI
(src/knowledge/) or prints one. Inside a site it also says on stderr when
the site was made by another gosite version. - Added to new sites:
AGENTS.mdandCLAUDE.md(importsAGENTS.md), for
thin and legacy scaffolds. The repository gets a pull request template with a
Proof section. - Changed in this repository and both scaffolds:
MEMORY.mdis renamed to
AGENTS.md, which Claude Code (throughCLAUDE.md), OpenCode and omp load on
every turn. The legacyAGENTS.mdis trimmed to under 80 lines; its detail
(the rules, common tasks and Cockpit addons) moved toARCHITECTURE.md. - Existing sites: see MIGRATIONS.md, "0.57.0 — agent context". No runtime file
changes.
gosite 0.56.0
Commerce: images in the bucket, the Admin in QA and production
- Product images are stored in the site's bucket. Medusa reads the same
S3_*variables as the CMS and uploads tomedusa/underS3_PREFIX(QA:
qa/medusa/by default), in dev, QA and production. Before, an upload from
the Admin or/admin/uploadsstayed inside the container (lost on every
deploy) with alocalhost:9000URL. WithoutSTORAGE_ADAPTER=s3Medusa
keeps its local provider;S3_PUBLIC_URLis required with S3. shop.<domain>in QA and production. The Medusa service gets a Traefik
router onSERVICE_FQDN_SHOPfor/app,/admin,/authand/hooks
only (payment webhooks included);/storestays internal. Router names
follow the QA/production rule (<project>-qa-shop/<project>-shop).
Verified that the Admin signs in on its own origin withoutADMIN_CORS.- Existing Commerce sites: see MIGRATIONS.md (Coolify needs
SERVICE_FQDN_SHOP; images uploaded before this release are gone).
gosite 0.55.2
- Fix: the store pages answered 502 on every real store. Medusa v2 sends a
variant's options as a list of option values; core decoded them as a map, so
/tienda,/producto/:handleand the buy island failed as soon as Medusa
returned a product (the seed's demo product included). Sites get the fix by
movingcore:andgo.modto 0.55.2. The test fixture is now a real Medusa
2.21 response. - Knowledge:
src/knowledge/medusa-admin-api.md. How to load a catalogue
through Medusa's Admin API (by script or AI): the Secret API Key and its
Basic-auth form, thegositesales channel, variants, prices in the major
unit, stock levels, idempotent updates by handle. New sites'MEMORY.md
points to it. - Known issue: images uploaded to Medusa (Admin UI or
/admin/uploads)
are stored inside the container and get alocalhost:9000URL, so they are
lost on redeploy. Use image URLs from the site's own storage until uploads
go to MinIO.
gosite 0.55.1
gosite listshows the store. A site with the Commerce addon gets a
third status dot (its Medusa container) and aShop:line with the Medusa
Admin URL,https://shop.<domain>/app.gosite-medusais published. EveryvX.Y.Zrelease now pushes
ghcr.io/avanxo-technology/gosite-medusa:X.Y.Z(amd64 + arm64), so sites
pull the store engine instead of building it; 0.55.0 was published after the
fact. The Medusa inside is recorded as the image label
dev.avanxo.medusa.version. Dependabot proposes@medusajs/*upgrades
weekly as one PR.- Medusa 2.21.0 → 2.21.2 in
gosite-medusa:0.55.1. Checked on a fresh
store, a restart and a 2.21.0 store upgraded in place (its migration
create-super-admin-roleruns; the seed reuses every record).
gosite 0.55.0 — Commerce (preview) and SMTP for the CMS
Cockpit sends e-mail over SMTP. Cockpit had no mailer config and fell back to PHP mail(), which the CMS image cannot deliver, so Forms notifications never arrived (the submission was always stored). SMTP_HOST now switches it to SMTP, with SMTP_PORT (587), SMTP_ENCRYPTION (tls / ssl / none), SMTP_USER, SMTP_PASSWORD, SMTP_FROM and SMTP_FROM_NAME. The dev, QA and prod composes pass them to the CMS, empty by default. Without SMTP_HOST, nothing changes.
Commerce: a store per site (preview). A new optional addon for thin sites: its own Medusa v2 per site and environment, with Postgres and Redis on an internal network; a server-rendered storefront in core (listing, detail, cart, guest checkout); Wompi and manual payments. gosite addons add Commerce <site> requires commerce_region: co|us.
It is a preview because the build on Coolify, the Traefik labels for shop.<domain>, and Wompi refunds against the sandbox remain unverified, and Stripe is not implemented.
Existing sites: nothing is required. Thin sites get SMTP on the next gosite generate; for legacy sites, see MIGRATIONS.md → 0.55.0.
Tagged core/v0.55.0 on the same commit. Details in CHANGELOG.md.