Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ export const SITE = CUSTOM_DOMAIN ?? "https://gameplanepanel.github.io";
export const BASE = CUSTOM_DOMAIN ? "/" : "/website";

export const GITHUB_URL = "https://github.com/GameplanePanel/Gameplane";
export const VERSION = "v0.3.0";
export const VERSION = "v0.4.0";
64 changes: 32 additions & 32 deletions src/content/docs/air-gapped-installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
An offline install is accepted only when rendered manifests contain no public endpoint or mutable tag. Render once and validate before disconnecting from the public internet.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

## Build the release bundle

Expand Down Expand Up @@ -48,24 +48,24 @@ Inventory, verify, and mirror all artifacts by digest before entering the restri

Collect **all of the following by digest** (immutable hash references, not mutable tags):

- **Helm chart** — `oci://ghcr.io/valgulnecron/charts/gameplane:<version>` and its SBOMs (Software Bill of Materials)
- **Helm chart** — `oci://ghcr.io/gameplanepanel/charts/gameplane:<version>` and its SBOMs (Software Bill of Materials)
- **Container images** — the four mandatory images:
- `ghcr.io/valgulnecron/gameplane/operator:<version>`
- `ghcr.io/valgulnecron/gameplane/api:<version>`
- `ghcr.io/valgulnecron/gameplane/web:<version>`
- `ghcr.io/valgulnecron/gameplane/agent:<version>`
- `ghcr.io/gameplanepanel/gameplane/operator:<version>`
- `ghcr.io/gameplanepanel/gameplane/api:<version>`
- `ghcr.io/gameplanepanel/gameplane/web:<version>`
- `ghcr.io/gameplanepanel/gameplane/agent:<version>`
- **Optional images** (if enabled in values) — pulled per-feature:
- `busybox` (via `operator.configInitImage`, defaults to Docker Hub)
- `restic/restic` (via `operator.resticImage`, defaults to Docker Hub)
- `ghcr.io/valgulnecron/gameplane/sentinel` (wake-on-connect, optional)
- `ghcr.io/valgulnecron/gameplane/capture-sidecar` (packet capture, optional)
- `ghcr.io/valgulnecron/gameplane/audit-syslog-bridge` (audit relay, optional)
- `ghcr.io/valgulnecron/gameplane/telemetry-receiver` (usage metrics, optional)
- `ghcr.io/valgulnecron/gameplane/mcp-server` (AI integration, optional)
- `ghcr.io/valgulnecron/gameplane/tunnel-frp` (via `tunnelImages.frp`, relay tunnel components, optional)
- `ghcr.io/valgulnecron/gameplane/tunnel-tailscale` (via `tunnelImages.tailscale`, relay tunnel components, optional)
- `ghcr.io/valgulnecron/gameplane/tunnel-playit` (via `tunnelImages.playit`, relay tunnel components, optional)
- **Game modules** — all bundles from `ghcr.io/valgulnecron/gameplane-modules`, versioned per your module source config
- `ghcr.io/gameplanepanel/gameplane/sentinel` (wake-on-connect, optional)
- `ghcr.io/gameplanepanel/gameplane/capture-sidecar` (packet capture, optional)
- `ghcr.io/gameplanepanel/gameplane/audit-syslog-bridge` (audit relay, optional)
- `ghcr.io/gameplanepanel/gameplane/telemetry-receiver` (usage metrics, optional)
- `ghcr.io/gameplanepanel/gameplane/mcp-server` (AI integration, optional)
- `ghcr.io/gameplanepanel/gameplane/tunnel-frp` (via `tunnelImages.frp`, relay tunnel components, optional)
- `ghcr.io/gameplanepanel/gameplane/tunnel-tailscale` (via `tunnelImages.tailscale`, relay tunnel components, optional)
- `ghcr.io/gameplanepanel/gameplane/tunnel-playit` (via `tunnelImages.playit`, relay tunnel components, optional)
- **Game modules** — all bundles from `ghcr.io/gameplanepanel/gameplane-modules`, versioned per your module source config
- **CRD manifests** — the CRD schemas (bundled in the chart)
- **CRD-apply hook image** — the `kubectl` image behind `crds.autoApply.image` (default `registry.k8s.io/kubectl:v1.36.3`). The hook runs on every `helm upgrade`, and also on a `helm install` over Gameplane CRDs that an earlier, uninstalled release left behind. A genuinely fresh first install does not run it. Any image with `kubectl` on its `PATH` works.
- **Cosign public keys** — `cosign.pub` (current key, ECDSA P-256) and `cosign-legacy.pub` (pre-rotation, Ed25519)
Expand All @@ -78,15 +78,15 @@ Every image and the chart are signed with cosign. Before mirroring, verify the s
```sh
# Verify operator image
cosign verify --key cosign.pub \
ghcr.io/valgulnecron/gameplane/operator:0.3.0
ghcr.io/gameplanepanel/gameplane/operator:0.4.0

# Verify chart
cosign verify --key cosign.pub \
ghcr.io/valgulnecron/charts/gameplane:0.3.0
ghcr.io/gameplanepanel/charts/gameplane:0.4.0

# Game modules are signed the same way
cosign verify --key cosign.pub \
ghcr.io/valgulnecron/gameplane-modules/minecraft:1.20.4
ghcr.io/gameplanepanel/gameplane-modules/minecraft:1.20.4
```

Extract the digest from the verified signature and record it. On pre-rotation releases (v0.2.0-beta.7 and earlier), use `cosign-legacy.pub` with `--insecure-ignore-tlog=true` instead.
Expand All @@ -98,20 +98,20 @@ Use `crane` (Google's OCI tool) or your registry vendor's mirror command to copy
```sh
# Mirror operator image to private registry
crane copy \
ghcr.io/valgulnecron/gameplane/operator:0.3.0 \
registry.internal.corp/gameplane/operator:0.3.0
ghcr.io/gameplanepanel/gameplane/operator:0.4.0 \
registry.internal.corp/gameplane/operator:0.4.0

# Mirror Helm chart
crane copy \
ghcr.io/valgulnecron/charts/gameplane:0.3.0 \
registry.internal.corp/gameplane/charts-gameplane:0.3.0
ghcr.io/gameplanepanel/charts/gameplane:0.4.0 \
registry.internal.corp/gameplane/charts-gameplane:0.4.0
```

Mirrors must preserve the digest — verify the copied artifacts have the same digest as the source:

```sh
crane digest ghcr.io/valgulnecron/gameplane/operator:0.3.0
crane digest registry.internal.corp/gameplane/operator:0.3.0
crane digest ghcr.io/gameplanepanel/gameplane/operator:0.4.0
crane digest registry.internal.corp/gameplane/operator:0.4.0
# Both must print the same sha256:...
```

Expand Down Expand Up @@ -190,7 +190,7 @@ Configure Helm to use it:

```sh
helm upgrade --install gameplane oci://registry.internal.corp/gameplane/charts-gameplane \
--version 0.3.0 \
--version 0.4.0 \
--namespace gameplane-system --create-namespace \
--set image.pullSecrets[0].name=registry-creds
```
Expand All @@ -202,19 +202,19 @@ For every image in the chart values, rewrite the registry hostname but **never c
```yaml
# Default
image:
registry: ghcr.io/valgulnecron
tag: "0.3.0"
registry: ghcr.io/gameplanepanel/gameplane
tag: "0.4.0"

# Rewritten for internal registry (same tag, different registry)
image:
registry: registry.internal.corp/gameplane
tag: "0.3.0"
tag: "0.4.0"

# Override optional image pulls
operator:
configInitImage: registry.internal.corp/busybox # instead of busybox
resticImage: registry.internal.corp/restic:latest # instead of restic/restic
sentinelImage: registry.internal.corp/gameplane/sentinel:0.3.0
sentinelImage: registry.internal.corp/gameplane/sentinel:0.4.0

# Mirror the CRD-apply hook's kubectl image (needed at upgrade time and on
# an install over leftover CRDs)
Expand Down Expand Up @@ -246,7 +246,7 @@ Before disconnecting from the public internet, render the final manifest to conf

```sh
helm template gameplane oci://registry.internal.corp/gameplane/charts-gameplane \
--version 0.3.0 \
--version 0.4.0 \
--namespace gameplane-system \
-f values-offline.yaml \
> manifests.yaml
Expand All @@ -264,7 +264,7 @@ Apply the rendered manifest or use Helm with your internal registry:

```sh
helm upgrade --install gameplane oci://registry.internal.corp/gameplane/charts-gameplane \
--version 0.3.0 \
--version 0.4.0 \
--namespace gameplane-system --create-namespace \
-f values-offline.yaml
```
Expand Down Expand Up @@ -324,7 +324,7 @@ Download the next release bundle (same process), mirror it, and upgrade:

```sh
helm upgrade gameplane oci://registry.internal.corp/gameplane/charts-gameplane \
--version 0.3.0 \
--version 0.4.0 \
--namespace gameplane-system
```

Expand Down
6 changes: 3 additions & 3 deletions src/content/docs/cluster-nodes-kubeconfig.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
Treat kubeconfig files and bootstrap tokens as secrets: keep them out of tickets, chat, logs, and shell history. Downloaded kubeconfigs expire after 1 hour and are bound to a read-only role, but the underlying cluster API access must still be guarded.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

## Read cluster and node health

Expand Down Expand Up @@ -99,8 +99,8 @@ clusterOps:
Then redeploy:

```bash
helm upgrade gameplane oci://ghcr.io/valgulnecron/charts/gameplane \
--version 0.3.0 \
helm upgrade gameplane oci://ghcr.io/gameplanepanel/charts/gameplane \
--version 0.4.0 \
--set clusterOps.enabled=true
```

Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/executable-upgrades-rollback.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
Use only the release-specific rollback window.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

## Preflight compatibility

Expand All @@ -40,7 +40,7 @@ Capture the entire current state before starting the upgrade:
- **Database version:** Query the migration ledger directly: `sqlite3 <db-path> "SELECT version, applied_at FROM schema_migrations ORDER BY version;"` (or the equivalent `psql` query when running with `--db-driver=postgres`)
- **CRD versions:** `kubectl get crd -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.names.kind}{"\n"}{end}'`
- **Helm values:** `helm get values gameplane -n gameplane-system > current-values.yaml`
- **Rendered manifest diff:** `helm diff upgrade gameplane oci://ghcr.io/valgulnecron/charts/gameplane --version <target-version> -n gameplane-system` (requires `helm-diff` plugin)
- **Rendered manifest diff:** `helm diff upgrade gameplane oci://ghcr.io/gameplanepanel/charts/gameplane --version <target-version> -n gameplane-system` (requires `helm-diff` plugin)

## Execute in release order

Expand Down
6 changes: 3 additions & 3 deletions src/content/docs/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ Kubernetes 1.28+, Helm 3.13+, and a default StorageClass. An ingress controller

Pull the chart straight from GHCR and install with one helm upgrade --install command — no manual repo add needed.

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

<CodeLabel>ONE-SHOT INSTALL</CodeLabel>

```sh
helm upgrade --install gameplane \
oci://ghcr.io/valgulnecron/charts/gameplane \
--version 0.3.0 \
oci://ghcr.io/gameplanepanel/charts/gameplane \
--version 0.4.0 \
--namespace gameplane-system --create-namespace
```

Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/helm-values-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ import DocsCallout from "../../components/docs/DocsCallout.astro";
Use `helm template` or `helm diff` to preview your values before applying them to production. Secret values should always be referenced from Kubernetes Secrets, never committed to version control.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

## Core and image settings

Configure container images, registry access, and fundamental cluster behavior.

| Key | Type | Default | Description |
|---|---|---|---|
| `image.registry` | string | `ghcr.io/valgulnecron/gameplane` | Container registry where component images are published. Override to point to a private mirror for air-gapped installs. |
| `image.registry` | string | `ghcr.io/gameplanepanel/gameplane` | Container registry where component images are published. Override to point to a private mirror for air-gapped installs. |
| `image.tag` | string | *(empty — uses chart's `appVersion`)* | Image tag for all components. Empty defaults to the chart version (e.g., chart v0.2.0 pulls `v0.2.0` images). Set to `"edge"` to track rolling images published on every master push. |
| `image.pullPolicy` | enum | `IfNotPresent` | Kubernetes image pull behavior: `IfNotPresent`, `Always`, or `Never`. Use `Always` for `:edge` tags; use `IfNotPresent` for production release tags. |
| `image.pullSecrets` | list | `[]` | Array of image pull Secret names if your registry requires authentication. Example: `[{name: myregistry}]` |
Expand Down
20 changes: 10 additions & 10 deletions src/content/docs/installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";

Gameplane runs on Kubernetes and deploys via Helm. This guide walks through preparing a cluster, configuring the Helm chart, installing Gameplane, and verifying a working control plane.

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

## Prerequisites and topology

Expand Down Expand Up @@ -164,7 +164,7 @@ defaultModuleSource:
enabled: true
type: oci # Pull pre-built modules from OCI registry
oci:
url: ghcr.io/valgulnecron/gameplane-modules
url: ghcr.io/gameplanepanel/gameplane-modules
verify:
enabled: true # Verify cosign signatures on official modules
```
Expand All @@ -181,11 +181,11 @@ Deploy the pinned OCI chart, bootstrap the first administrator, then validate po

### Step 1: Install the Helm chart

Install a tagged release straight from the GitHub Container Registry (GHCR). Replace `<version>` with a release, e.g., `0.3.0`:
Install a tagged release straight from the GitHub Container Registry (GHCR). Replace `<version>` with a release, e.g., `0.4.0`:

```bash
helm upgrade --install gameplane oci://ghcr.io/valgulnecron/charts/gameplane \
--version 0.3.0 \
helm upgrade --install gameplane oci://ghcr.io/gameplanepanel/charts/gameplane \
--version 0.4.0 \
--namespace gameplane-system --create-namespace \
--values values.override.yaml
```
Expand All @@ -195,7 +195,7 @@ The chart is OCI-packaged — no `helm repo add` is needed. The `appVersion` fie
**Edge channel (latest development):** To track rolling `:edge` images from the `main` branch instead of a released version:

```bash
helm upgrade --install gameplane oci://ghcr.io/valgulnecron/charts/gameplane \
helm upgrade --install gameplane oci://ghcr.io/gameplanepanel/charts/gameplane \
--version <version> --set image.tag=edge \
--namespace gameplane-system --create-namespace
```
Expand Down Expand Up @@ -260,7 +260,7 @@ Create a simple test GameServer to verify the operator is reconciling correctly:
<DocsQuickReference
label="INSTALL CHECK"
items={[
"helm upgrade --install gameplane oci://ghcr.io/valgulnecron/charts/gameplane --version 0.3.0 --namespace gameplane-system --create-namespace --values values.override.yaml",
"helm upgrade --install gameplane oci://ghcr.io/gameplanepanel/charts/gameplane --version 0.4.0 --namespace gameplane-system --create-namespace --values values.override.yaml",
"kubectl -n gameplane-system get pods && kubectl get crds | grep gameplane",
"Log in, select the cluster, and create a test server to verify the operator reconciles",
]}
Expand All @@ -272,7 +272,7 @@ Every published image (tagged releases and `:edge`), the Helm chart, and officia

```bash
cosign verify --key cosign.pub \
ghcr.io/valgulnecron/gameplane/operator:0.3.0
ghcr.io/gameplanepanel/gameplane/operator:0.4.0
```

Pre-rotation releases (v0.2.0-beta.7 and earlier) used the retired Ed25519 key and lack transparency log entries — verify those with `cosign-legacy.pub` and `--insecure-ignore-tlog=true`.
Expand All @@ -284,8 +284,8 @@ Pre-rotation releases (v0.2.0-beta.7 and earlier) used the retired Ed25519 key a
The Helm chart defaults to pulling images from GitHub Container Registry (`ghcr.io`). For air-gapped clusters where Docker Hub or GHCR is unreachable, retag the images to a private registry mirror and set `image.registry`:

```bash
helm upgrade --install gameplane oci://ghcr.io/valgulnecron/charts/gameplane \
--version 0.3.0 \
helm upgrade --install gameplane oci://ghcr.io/gameplanepanel/charts/gameplane \
--version 0.4.0 \
--set image.registry=your-private-registry.com
```

Expand Down
6 changes: 3 additions & 3 deletions src/content/docs/platform-disaster-recovery.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import DocsQuickReference from "../../components/docs/DocsQuickReference.astro";
A world backup only captures game data. To recover from a platform-wide outage (cluster loss, database corruption, credential compromise), you must also capture and restore Gameplane's own state: release versions, configuration, CRDs, database, encryption keys, identity providers, repository credentials, DNS, TLS certificates, and ownership records.
</DocsCallout>

Releases up to and including v0.3.0 are published under `ghcr.io/valgulnecron`, so this page uses that registry; releases after v0.3.0 move to `ghcr.io/gameplanepanel`.
Releases from v0.4.0 are published under `ghcr.io/gameplanepanel`, which this page uses; v0.3.0 and earlier releases stay under `ghcr.io/valgulnecron`.

<DocsSectionList
items={[
Expand Down Expand Up @@ -77,8 +77,8 @@ A platform-wide rebuild must follow this sequence:
- **Install the exact version** that was running when the backup was taken. Use the backup manifest's recorded Helm values:

```bash
helm upgrade --install gameplane oci://ghcr.io/valgulnecron/charts/gameplane \
--version 0.3.0 \
helm upgrade --install gameplane oci://ghcr.io/gameplanepanel/charts/gameplane \
--version 0.4.0 \
--namespace gameplane-system \
--create-namespace \
--values /path/to/recorded-values.yaml
Expand Down
Loading
Loading