Skip to main content

gentian-apps

App Store catalog for Gentian OS — ComponentProfile bundles plus first-party app implementations.

This is the single source of truth for the ComponentProfile catalog metadata of the community (ce) and maintained (me) editions. Proprietary profiles live in their supplier's catalog.

Structure​

profiles/ # App catalog bundles (ce + me editions) — published as the catalog a cluster installs from
odoo/ # family with addons (L3)
base/
base-ce/ # dir is short; the profile is odoo-base-ce
addons/
crm-ce/ # -> odoo-crm-ce
invoicing-ce/ # -> odoo-invoicing-ce
packages/ # AppPackage presets (not deployable)
nextcloud/ # family with addons (L3)
base/
base-ce/ # -> nextcloud-base-ce
addons/ # 9 addons, enabled per tenant
calendar-ce/ # -> nextcloud-calendar-ce
packages/ # AppPackage presets: office, suite
xwiki/ # true singleton: stays flat
paperless-ngx/ # singleton with a companion: paperless-ngx-ce + its MCP server (spec.extensions)
apps/ # first-party implementations (FastAPI + React + Helm)
_template/ # scaffold for new first-party apps (the one source of truth)
charts/ # Helm charts published to oci://ghcr.io/gentian-org/charts
odoo/ # Gentian-authored chart for OCB — backs all 10 odoo profiles
paperless-ngx/ # Gentian-authored chart for the official Paperless-ngx image
gentian-sidecar-*/ # sidecar charts referenced by profiles
images/ # Dockerfiles published to ghcr.io
contracts/ # integration contract schemas

Discovery: catalog = profiles/ · implementation = apps/<name>/ · chart = charts/<name>/

A profile bundle is identified by its profile.yaml, at any depth. It is published under the profile's metadata.name, not under the directory's — so directories can be short (addons/crm-ce holds odoo-crm-ce) and CI enforces that metadata.name is globally unique rather than that it matches the folder.

A bundle is published as one file with one digest: the profile and, after it, the other objects the app needs on a cluster (its Composition, its OIDC pack, the ConfigMaps its composition reads, its customization records). The bundle's kustomization.yaml lists what goes in; nothing else in the directory reaches a cluster. What a bundle may hold and how it is named: docs/profile-bundles.md.

apps/ is only for first-party apps we build. A chart that wraps an upstream image — vendored or Gentian-authored — belongs in charts/<name>/, and its profile references it by OCI coordinates, not by path. Charts and images are not nested inside profiles: charts/odoo backs 10 profiles, and 7 profiles wrap external charts this repo never contains. See docs/app-profile-guide.md §2 for why this repo is organized as a distribution repo rather than an application monorepo.

Branches​

Work lands on develop; main is what is released, and a release is a tag on it. v05, the branch the new architecture was built on, is merged into develop and frozen — do not push to it.

Catalog addressImagesCharts
mainhttps://gentian-org.github.io/gentian-apps/version, latest<version>
develophttps://gentian-org.github.io/gentian-apps/develop/develop-<sha7><version>-develop.<sha7>

A platform release is one tag vX.Y.Z on gentian-os, gentian-ui and gentian-apps, marking what was tested together. The catalog may move between platform releases, so a newer catalog has to stay readable by an older platform. The rules: docs/releasing.md.

Licensing​

There is no license for the repository as a whole: every app carries its own. It is the SPDX-License-Identifier: comment at the top of the app's profile.yaml, and it covers what this repository holds for that app — its profile, its chart and its image build. A new app is not accepted without one.

What belongs to no single app is Apache-2.0 (LICENSES/Apache-2.0.txt): scripts/, contracts/, docs/, the CI workflows, apps/_template, the sidecar charts and images, and images/nextcloud-mcp.

Guides​

GuideAudience
docs/app-profile-guide.mdPublish an existing Helm chart (profile YAML only)
docs/custom-app-guide.mdBuild a new Gentian-native app end-to-end

Adding an upstream app​

Add profiles/<app>/ (see docs/app-profile-guide.md).

kubectl gentian apps list

Adding a first-party app​

  1. Copy apps/_template/ → apps/<name>/
  2. Implement backend + frontend + chart
  3. Add profiles/<name>/profile.yaml (+ kustomization.yaml)
  4. CI (.github/workflows/apps-ci.yaml) publishes images + OCI chart

See docs/custom-app-guide.md.

RepoPurpose
gentian-osOrchestrator, CRDs, kernel
gentian-deploymentsPer-environment tenant state
gentian-uiPortal shell