You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The repomd workflow builds everything and publishes one tree:
Path
Content
/index.html, /favicon.svg
The website, copied from .site/.
/catalog.json
Extra data for the website, built by buildsite.py.
/ns8/updates/repodata.json
The repository metadata NethServer reads, built by createrepo.py.
/ns8/updates/<module>/
Logo and screenshots of each module.
/CNAME, /.nojekyll
Custom domain and plain file serving for GitHub Pages.
The same commit is pushed to two branches:
repomd, read through raw.githubusercontent.com by NethServer and by the NS8 App Index.
gh-pages, served by GitHub Pages on https://forge.genius.ke/.
So both repository URLs always serve the same files. In the repository settings, GitHub Pages must use Deploy from a branch, branch gh-pages, folder / (root), with forge.genius.ke as custom domain.
What each file does:
createrepo.py only writes repodata.json. It is kept close to the NethForge original.
buildsite.py writes catalog.json: stars, release dates and the quality score of each published module, plus the ns8-* repositories of the organization that are not published yet. The website lists those under "In development". The "Alternative to" and upstream links come from the tables of this README.
site.json holds the settings: organization, custom domain, tools (ns8-* repositories that are not modules) and exclude (repositories to hide).
.site/index.html is the website. It loads repodata.json and catalog.json in the browser, and still works when catalog.json is missing.
To preview the website locally, build a copy of the published tree and serve it:
mkdir -p /tmp/forge/ns8/updates && cp -a .site/. /tmp/forge/ && cp -a */ /tmp/forge/ns8/updates/
pins.yml lets you control image visibility and ordering for modules to support staged upgrades and hide broken tags. Each module key contains a list of pin rules:
tag: <semver>, prepend: <True|False> — ensure a specific tag is listed; prepend True puts it at the top, False appends it.
match: "<Python semver match string>", remove: True — hide matching tags from clients. E.g. <2.0.0.
Use cases:
Maintain upgrade path across breaking releases (e.g., Nextcloud NC27→NC28):
nextcloud:
- { tag: 1.2.1, prepend: False }
Keep a known-good baseline visible for older cores:
Edit pins.yml and commit to main branch; metadata will rebuild automatically on schedule and on push.
Prefer prepend: True only for critical baseline tags; otherwise use prepend: False to keep natural ordering.
Use remove: True for temporary blacklisting; add comments with issue references for traceability.
Quality score
The NS8 apps catalog shows each app with a quality score out of 9. The score does not judge the software; it measures how complete the listing is, so administrators can choose with confidence. The crawler computes every check from public data and the new score appears after the next crawl.
Check
Passes when
How to fix it
GitHub topic ns8
The code repository has the ns8 topic.
GitHub: gear icon next to "About", then Topics.
Standard categories
categories is not empty and every entry is a Software Center category: collaboration, communication, core, database, development, documentation, monitoring, multimedia, office, security, storage, system_administration, web.
Replace custom names in metadata.json.
Logo
The app has a logo in repodata.json.
Put a logo.png next to metadata.json.
Screenshots
The app has at least one screenshot in repodata.json.
Put PNG files in a screenshots/ folder next to metadata.json.
Description of 60+ characters
description.en is at least 60 characters long.
Write one or two sentences about what the software does for the user.
Translated description
description has a language besides en.
Add fr, it, de, es, pt, pt_BR, eu or any other.
Documentation and bug links
docs.documentation_url and docs.bug_url are both set.
Fill both in metadata.json.
Minimum core label
The image of the version shown has the org.nethserver.min-core label.
Add --label="org.nethserver.min-core=3.x.y" in build-images.sh and publish a release.
License file
GitHub detects a license in the code repository.
Add a LICENSE file with a standard license at the repository root.
When docs.code_url is missing or points to a repository the crawler cannot read, the topic and license checks fail, and stars and dates stay empty.
Example of a complete metadata.json
{
"name": "dnshelper",
"description": {
"en": "Manage DNS records through DNS provider APIs, for other modules",
"de": "Verwaltet DNS-Einträge über die APIs von DNS-Anbietern, für andere Module",
"es": "Gestiona registros DNS a través de las API de los proveedores DNS, para otros módulos",
"eu": "DNS erregistroak kudeatzen ditu DNS hornitzaileen APIen bidez, beste moduluentzat",
"fr": "Gère les enregistrements DNS via les API des hébergeurs DNS, pour les autres modules",
"it": "Gestisce i record DNS tramite le API dei provider DNS, per altri moduli",
"pt": "Gere registos DNS através das APIs dos fornecedores de DNS, para outros módulos",
"pt_BR": "Gerencia registros DNS por meio das APIs dos provedores de DNS, para outros módulos"
},
"categories": [
"system_administration",
"security"
],
"authors": [
{
"name": "Dan Brown",
"email": "dan@familybrown.org"
}
],
"docs": {
"terms_url": "https://github.com/danb35/ns8-dnshelper/blob/master/TERMS.md",
"documentation_url": "https://github.com/danb35/ns8-dnshelper/blob/master/docs/USER-GUIDE.md",
"bug_url": "https://github.com/danb35/ns8-dnshelper/issues",
"code_url": "https://github.com/danb35/ns8-dnshelper",
"relnotes_url": "https://github.com/danb35/ns8-dnshelper/releases"
},
"source": "ghcr.io/danb35/dnshelper"
}
Each module directory also needs a logo.png and a screenshots/ folder, next to its metadata.json.
Under settings, Chose Software Repository
Click on Add Repository
Define the Repo URL as shown below with the Define URL
Then CLick Add
Enabling Testing Repo
For testing Purposes, you may enable the testing Toggle.
Note that Apps installed with Testing Toggle enable may not be suitable for production
Application List
All apps are sorted by categories and listed alphabetically. Click on the stars badge to visit the product's GitHub repository. Apps not yet listed but available in the Software Center can be added upon request. Happy searching!
Securely share sensitive information with automatic expiration & deletion after a set number of views or duration. Track who, what and when with full audit logs.
Secrets manager to store and control access to tokens, passwords, certificates and encryption keys. Open source fork of HashiCorp Vault with Raft storage, PKI, audit log and LDAP/AD login. Release 1.0.1