Skip to content

GoRun 0.2.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 15:03
· 237 commits to main since this release
6f91736

Second tagged release after the CMS hosting gap sequence, launch-in-core path, admin/theme
polish, and operator runbooks landed on main (#16–#30).

Added

  • Productized staging / promote-to-live for single-process SQLite: gorun staging seed
    and gorun staging promote wrap backup + confined restore into a new --dest
    (never merges into a live data dir), with operator next-steps. Runbook:
    docs/STAGING.md.
  • Embedded launch overlay stylesheet at /static/launch.css (web/launch/launch.css),
    served by the binary so Coolify/Traefik file mounts for that path can be removed
    after upgrade (see deploy/coolify.md).
  • Launch journey in core: /start, /start/login, /start/verify with site-title
    titles (em dash) distinct from staff /admin/login; embed /static/launch-polish.js
    (title/validation agent). Drop Traefik mounts for that script too.

Changed

  • Admin UI polish: light non-flat workspace atmosphere, clearer sidebar/topbar hierarchy,
    brand-first auth panels (login/setup/magic/reauth), shared empty-state treatment on
    high-traffic lists, and quieter flash/form focus rhythm — still Zad + green selection, RTL-safe.
  • Public theme polish: default home is a full-bleed brand-first band (pill featured badge
    removed); shared home-composition intro is edge-to-edge; light focus/empty/hero polish on
    business, portfolio, docs, and magazine (personalities unchanged). Themekit doctor still green.

Themes

  • Shared catalog contract in pkg/themekit (ValidateDir / ValidateCatalogRoot): required
    templates (via inheritance), own lang/en.json + lang/ar.json, rtl + identity supports,
    screenshot, sections/identity/builderStyle head, token selector, no third-party script CDNs.
    Documented in docs/THEMES.md and docs/THEME-CONTRACT.md; covered by ship-with Go tests.
  • gorun theme doctor [slug] [--json] [--warnings]: filesystem contract checks via the same
    pkg/themekit validators (no database). Soft {{t}} lang-key scans are opt-in warnings.
  • Ship-with uplift: business and portfolio gain bilingual lang files; business/portfolio
    comments and portfolio contact forms no longer depend on Tailwind utilities; full-bleed home
    heroes for business, magazine, portfolio and docs (each keeps its existing personality); docs
    tokens move under :where(html[data-theme="docs"]). E2E theme project smokes
    magazine/portfolio/docs home.

Added

  • Custom roles UI and REST API: Settings → Roles (/admin/roles) and /api/v1/roles
    (users.manage) create bilingual packs with explicit permissions on the existing
    roles / role_permissions tables. System roles stay undeletable; Administrator *
    is locked; actors may only grant permissions they hold; UI permission changes and
    deletes require recent password confirmation.
  • Optional Prometheus text scrape at GET /metrics when GORUN_METRICS=true (stdlib exposition:
    HTTP status-class counters, job gauges including dead/failed, backup last-success timestamp).
    Optional GORUN_METRICS_TOKEN Bearer; off by default. Operator guide: docs/OBSERVABILITY.md.
  • Local backup schedule + retain-N: System → Backups settings (backup.schedule_hours,
    backup.retain) drive hourly cron backup.schedule (secrets still excluded; no remote upload).
    backup.Prune keeps the newest N complete local pairs; gorun backup --retain N for host
    cron / Coolify docker exec. Manual create and encrypted S3 upload unchanged.
  • gorun backup-restore --input <stamp>.manifest.json --dest <new-directory-path> restores a local
    backup pair into a destination that must not already exist (inspect preflight; never merges into a
    live data dir).
  • Operations → Backups → Inspect / restore: bilingual preflight and confined restore under
    <data>/restores/<stamp>/, gated by recent password confirmation and system.backup.
  • Restores are staged in a hidden .<name>.partial sibling and renamed into place only after the
    database and archive checksums verify, so an interrupted restore never looks complete; a leftover
    partial directory is reported on the inspect page and blocks the next restore until removed (admin
    can discard it with the same permission and reauth gate as restore).
  • Restored files are always 0600 and directories 0700, whatever modes the archive records.
  • The inspect page explains each preflight error and warning in English and Arabic (the code stays
    alongside for support).
  • Page builder layout history: builder_revisions stores save/publish/reset/restore snapshots
    (default keep 25 via builder.revisions_keep). Admin lists history with preview and
    restore-to-draft (restore requires recent password confirmation). REST and MCP expose
    list/get/restore; MCP restore is sensitive. Public HTML is unchanged until publish.

Documentation

  • Upgrade / rollback runbook (docs/UPGRADE.md): tag → binary or GHCR/Coolify image → migrate on
    serve → smoke → rollback with prior artifact + pre-upgrade backup pair + original secret key.
    Cross-linked from install, production, troubleshooting, Coolify §8, and the docs index. System
    Health and /api/v1/system/health expose the binary build as version (read-only; compare to
    GitHub Releases — no in-app updater).
  • Coolify / Docker HTTPS acceptance checklist (deploy/coolify.md §9): discover trusted-proxy CIDR,
    verify cookie Secure, default HSTS (max-age=31536000) and opt-ins, and probe /healthz +
    /readyz from outside the container — linked from docs/PRODUCTION.md, docs/TROUBLESHOOTING.md,
    docs/GORUN-INSTALLATION.md, and docs/README.md.
  • Operator docs expansion: docs/README.md index; docs/TROUBLESHOOTING.md; install/upgrade from
    release tags (binary + GHCR) in docs/GORUN-INSTALLATION.md; HTTPS / proxy / HSTS and restore
    cutover in docs/PRODUCTION.md; Coolify restore + upgrade + HSTS in deploy/coolify.md; bilingual
    admin and first-site / theme-switch paths in docs/ADMIN_WORKSPACE.md and docs/SITE_BUILDER.md;
    MCP operator overview in docs/MCP.md; README documentation tables link the new index.
  • docs/GORUN-INSTALLATION.md no longer describes an old MIT license or a "source-available" policy:
    it states AGPL-3.0-only, as LICENSE, NOTICE and README do, and points to the public repository and
    releases. CONTRIBUTING names the SPDX identifier.
  • README: new screenshots (1440×900 at 2×, fictional demo content) under each pillar in both languages
    (content list, editor, agent keys, approvals, a canvas with an agent result, the page builder, and the
    default theme on desktop and mobile), a docker run example for the GHCR image, links to the v0.1.0
    release, and short notes on precompiled theme CSS, trusted proxies, HSTS, backups and the DCO check.

Fixed

  • Job workers no longer leave a job running when shutdown cancels the context while the job is being
    claimed: the claim itself is not cancellable, so a claimed job is always finished or requeued (it
    previously waited for stale-job recovery). This also fixes the flaky TestStartRequeuesStaleRunningJobs.
  • Provider truthfulness: System Health no longer marks a stored Stripe secret key or webhook secret as
    ok (both are warn until checkout/delivery are verified elsewhere). Content Studio, AI writing, and
    connection admin copy state that save or list/discovery probes do not prove generation works.

Container image

docker pull ghcr.io/zadstack/gorun:0.2.0

Multi-arch (linux/amd64, linux/arm64). Binary archives below include the themes; verify them with the SHA256SUMS file.