Scaffold Cloudron packaging workspace and automation
This commit is contained in:
26
.gitea/workflows/ci.yml
Normal file
26
.gitea/workflows/ci.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
name: cloudron-packages-ci
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tasks:
|
||||
description: "Space-separated list of tasks to run via scripts/ci_local.sh"
|
||||
required: false
|
||||
default: "all"
|
||||
|
||||
jobs:
|
||||
lint-and-smoke:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: https://gitea.com/actions/checkout@v4
|
||||
|
||||
- name: Build CI harness image
|
||||
run: docker build -t knel/cloudron-ci docker/ci-runner
|
||||
|
||||
- name: Run requested tasks
|
||||
env:
|
||||
TASKS: ${{ github.event.inputs.tasks }}
|
||||
run: |
|
||||
export CI_IMAGE=knel/cloudron-ci
|
||||
./scripts/ci_local.sh ${TASKS:-all}
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
74
GEMINI/AUDIT-SNAPSHOT1.md
Normal file
74
GEMINI/AUDIT-SNAPSHOT1.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Gemini Audit Report: KNELCloudronPackages (Snapshot 1)
|
||||
|
||||
**Date:** 2025-10-02
|
||||
**Auditor:** Gemini
|
||||
**Scope:** Full repository review, focusing on production-readiness, security, and maintainability.
|
||||
|
||||
---
|
||||
|
||||
## 1. Executive Summary
|
||||
|
||||
The `KNELCloudronPackages` repository establishes a commendable and well-documented foundation for packaging a large portfolio of applications for Cloudron. The core concepts—a centralized catalog, scaffolding automation, a dedicated packager container, and a local CI harness—are excellent choices for ensuring consistency and a clean host environment.
|
||||
|
||||
However, this audit reveals that while the **intent** is production-grade, the **current implementation is not**. The automation scripts and application templates contain systemic weaknesses, brittle logic, and promote anti-patterns that will be replicated across all ~60 applications. This will create significant, immediate technical debt, increase security risks, and lead to high maintenance overhead.
|
||||
|
||||
**The project is at a critical inflection point.** Correcting these foundational issues now is paramount. Proceeding without addressing them will guarantee that every package built will be flawed, inconsistent, and require substantial rework.
|
||||
|
||||
**Overall Grade: D+ (Needs Major Rework)**
|
||||
|
||||
---
|
||||
|
||||
## 2. Critical Issues & Security Vulnerabilities
|
||||
|
||||
These issues require immediate attention before any further packaging work proceeds.
|
||||
|
||||
| ID | Severity | Issue | Component | Recommendation |
|
||||
|---|---|---|---|---|
|
||||
| **C-01** | **Critical** | **Naive Cloudron App ID Generation** | `scripts/new_app.py` | The `build_app_id` function improperly sanitizes slugs, creating invalid IDs (e.g., `com.knel.some..app`). This will break Cloudron deployments. **Action:** Replace the function with a robust slugification library or a more intelligent regex-based sanitizer. |
|
||||
| **C-02** | **High** | **Insecure Dockerfile Practices** | `templates/cloudron-app/Dockerfile` | The template encourages copying raw source code (`COPY ./app`) instead of using multi-stage builds. This bloats images with unnecessary build dependencies, development secrets, and increases the attack surface. **Action:** The template **must** be updated to provide a canonical multi-stage build example. The documentation must enforce this as the default pattern. |
|
||||
| **C-03** | **High** | **Missing File Permissions/Ownership** | `templates/cloudron-app/Dockerfile` | The Dockerfile switches to the `cloudron` user but fails to `chown` the application files. Files copied in as `root` will not be readable/writable by the application at runtime, causing crashes. **Action:** Add a `RUN chown -R cloudron:cloudron /app` command before the `USER cloudron` directive in the template. |
|
||||
| **C-04** | **High** | **Wildly Incorrect Resource Allocation** | `templates/cloudron-app/CloudronManifest.json` | The manifest template hardcodes a `memoryLimit` of 512MB for all applications. This is dangerously incorrect for resource-heavy apps like NetBox or DataHub (which require 8GB+ RAM) and wasteful for tiny ones. **Action:** Remove the hardcoded limit. The `PACKAGING_GUIDE.md` and per-app `README.md` must make it a mandatory step for the developer to determine and set a realistic limit. |
|
||||
|
||||
---
|
||||
|
||||
## 3. Major Concerns & Architectural Flaws
|
||||
|
||||
These issues point to fundamental weaknesses in the project's architecture and tooling.
|
||||
|
||||
| ID | Severity | Issue | Component | Recommendation |
|
||||
|---|---|---|---|---|
|
||||
| **M-01** | **Major** | **Brittle Automation Logic** | `scripts/lint_repo.py`, `scripts/generate_status.py` | The scripts rely on naive string-matching for validation (e.g., `grep "Replace start.sh"`). This is not a reliable indicator of completeness. The Dockerfile linter incorrectly checks for the base image, making it incompatible with multi-stage builds. **Action:** Refactor the linting and status detection. Use Abstract Syntax Trees (AST) for script analysis, a JSON schema for manifest validation, and parse the Dockerfile properly to check the final build stage. |
|
||||
| **M-02** | **Major** | **Overly Simplistic Templates** | `templates/cloudron-app/*` | The templates are "one-size-fits-none." They lack placeholders for essential, common Cloudron features like databases (`postgresql`, `redis`), mail (`sendmail`), or LDAP. This forces developers to add significant boilerplate for almost every app. **Action:** Create a more comprehensive template or multiple templates (e.g., `web-app`, `worker-app`) that include commented-out sections for common addons and configurations. |
|
||||
| **M-03** | **Major** | **Inefficient Scaffolding** | `scripts/new_app.py` | The script uses a crude `copy-then-replace` method. This is inefficient and error-prone. The `date` command bug in the `README.md` template is a direct result of this. **Action:** Replace the custom replacement logic with a standard templating engine like **Jinja2**. This is the industry standard for this exact task. |
|
||||
|
||||
---
|
||||
|
||||
## 4. Minor Concerns & Recommendations
|
||||
|
||||
| ID | Severity | Issue | Component | Recommendation |
|
||||
|---|---|---|---|---|
|
||||
| **R-01** | **Medium** | **Inconsistent Shell Usage** | `templates/cloudron-app/start.sh` | The script has a `#!/bin/bash` shebang, but the placeholder command uses `exec /bin/sh -c`. This can lead to subtle bugs if shell-specific syntax is used. **Action:** Ensure consistency. Use `bash -c` if the script is intended to be run with bash. |
|
||||
| **R-02** | **Low** | **Unexecuted Template Command** | `templates/cloudron-app/README.md` | The `$(date ...)` command is not executed during scaffolding, leaving a literal string in the generated READMEs. **Action:** This will be fixed by moving to a proper templating engine (see **M-03**). |
|
||||
| **R-03** | **Low** | **Simplistic Health & Smoke Tests** | `templates/cloudron-app/*` | The default `healthCheckPath` (`/`) and the smoke test are too basic and will fail for many apps, creating immediate rework for the developer. **Action:** Update documentation to make it clear these are mandatory placeholders to be adapted, not sensible defaults. |
|
||||
| **R-04** | **Low** | **Lack of Schema Validation** | `scripts/lint_repo.py` | The linter only checks for the presence of a few keys in `CloudronManifest.json`. It does not validate data types, enums, or the overall structure. **Action:** Create a JSON schema for `CloudronManifest.json` and use a library like `jsonschema` in the linter to perform proper validation. |
|
||||
|
||||
---
|
||||
|
||||
## 5. Actionable Next Steps (Prioritized)
|
||||
|
||||
1. **Halt All Scaffolding:** Do not generate any more apps with the current tooling.
|
||||
2. **Fix Critical Issues (C-01 to C-04):**
|
||||
* Rewrite `build_app_id` in `new_app.py`.
|
||||
* Update the `Dockerfile` template to include a multi-stage build example and a `chown` command.
|
||||
* Remove the hardcoded `memoryLimit` from the manifest template and update documentation accordingly.
|
||||
3. **Re-architect Tooling (M-01 to M-03):**
|
||||
* Replace the custom find-and-replace logic in `new_app.py` with **Jinja2**.
|
||||
* Refactor `lint_repo.py` to correctly parse Dockerfiles for multi-stage builds and validate `CloudronManifest.json` against a proper JSON schema.
|
||||
4. **Enhance Templates:**
|
||||
* Add commented-out examples for common addons (`postgresql`, `redis`, `sendmail`) to `CloudronManifest.json`.
|
||||
5. **Re-Scaffold and Verify:**
|
||||
* Once the tooling is fixed, delete the existing `apps/` directory.
|
||||
* Re-run the scaffolding script for all applications.
|
||||
* Verify that the generated files are correct and pass the new, more robust lint checks.
|
||||
|
||||
Only after these foundational elements are corrected should the actual work of packaging the individual applications begin. The current path leads to a portfolio of flawed, insecure, and difficult-to-maintain packages.
|
16
Makefile
Normal file
16
Makefile
Normal file
@@ -0,0 +1,16 @@
|
||||
.PHONY: scaffold lint status packager-shell
|
||||
|
||||
scaffold:
|
||||
python3 scripts/new_app.py --force
|
||||
|
||||
lint:
|
||||
python3 scripts/lint_repo.py
|
||||
|
||||
status:
|
||||
python3 scripts/generate_status.py
|
||||
|
||||
packager-shell:
|
||||
BUILD=1 scripts/run_packager.sh
|
||||
|
||||
ci-local:
|
||||
./scripts/ci_local.sh all
|
129
README.md
129
README.md
@@ -1,3 +1,128 @@
|
||||
# KNELCloudronPackages
|
||||
# KNEL Cloudron Packages
|
||||
|
||||
This repository scaffolds Cloudron packages for Known Element's portfolio. It provides:
|
||||
|
||||
- A reusable application template (`templates/cloudron-app`) matching Cloudron packaging conventions.
|
||||
- Automation helpers in `scripts/` to instantiate per-app scaffolds and run builds inside a dedicated Docker container.
|
||||
- A curated catalog (`apps/catalog.json`) that maps Known Element issue IDs to upstream projects.
|
||||
- Documentation under `docs/` to guide packaging, testing, and release workflows.
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
# Generate all app scaffolds from the catalog
|
||||
python3 scripts/new_app.py
|
||||
|
||||
# Or regenerate scaffolds via Makefile
|
||||
make scaffold
|
||||
|
||||
# Work on a single app skeleton
|
||||
python3 scripts/new_app.py --slug apache-apisix
|
||||
|
||||
# Update the status table
|
||||
make status
|
||||
|
||||
# Lint generated apps
|
||||
make lint
|
||||
|
||||
# Run the full CI harness locally
|
||||
make ci-local
|
||||
|
||||
# Build and enter the Cloudron packager container
|
||||
BUILD=1 scripts/run_packager.sh
|
||||
scripts/run_packager.sh
|
||||
```
|
||||
|
||||
Within the container, use the Cloudron CLI to build, test, and publish packages without touching the host environment:
|
||||
|
||||
```bash
|
||||
cloudron login my.example.cloudron
|
||||
cloudron build
|
||||
cloudron install --app my-example
|
||||
cloudron push
|
||||
```
|
||||
|
||||
Refer to `docs/PACKAGING_GUIDE.md` for detailed guidance.
|
||||
|
||||
See `docs/APP_STATUS.md` for the automatically generated status table.
|
||||
|
||||
## Repository layout
|
||||
|
||||
- `apps/` – generated app scaffolds and metadata
|
||||
- `docs/` – playbooks and architecture notes
|
||||
- `docs/CI_CD_GITEA.md` – instructions for running CI/CD and publishing images via the Gitea instance
|
||||
- `docker/packager/` – Docker image for Cloudron packaging workflows
|
||||
- `scripts/` – helper scripts (scaffolding, tooling entrypoints)
|
||||
- `templates/` – base Cloudron app template
|
||||
|
||||
## Application catalog
|
||||
|
||||
| Slug | Issue | Upstream |
|
||||
| --- | --- | --- |
|
||||
| apache-apisix | https://projects.knownelement.com/issues/179 | https://github.com/apache/apisix.git |
|
||||
| target-goalert | https://projects.knownelement.com/issues/204 | https://github.com/target/goalert.git |
|
||||
| consuldemocracy | https://projects.knownelement.com/issues/189 | https://github.com/consuldemocracy/consuldemocracy.git |
|
||||
| fleetdm-fleet | https://projects.knownelement.com/issues/195 | https://github.com/fleetdm/fleet.git |
|
||||
| fonoster | https://projects.knownelement.com/issues/227 | https://github.com/fonoster/fonoster.git |
|
||||
| healthchecks | https://projects.knownelement.com/issues/192 | https://github.com/healthchecks/healthchecks.git |
|
||||
| hyperswitch | https://projects.knownelement.com/issues/209 | https://github.com/juspay/hyperswitch |
|
||||
| netbox-docker | https://projects.knownelement.com/issues/201 | https://github.com/netbox-community/netbox-docker.git |
|
||||
| openboxes-docker | https://projects.knownelement.com/issues/205 | https://github.com/openboxes/openboxes-docker.git |
|
||||
| openfile | https://projects.knownelement.com/issues/316 | https://github.com/openfiletax/openfile.git |
|
||||
| sniperphish | https://projects.knownelement.com/issues/211 | https://github.com/GemGeorge/SniperPhish-Docker.git |
|
||||
| datahub | https://projects.knownelement.com/issues/309 | https://github.com/datahub-project/datahub.git |
|
||||
| easy-gate | https://projects.knownelement.com/issues/54 | https://github.com/wiredlush/easy-gate.git |
|
||||
| payroll-engine | https://projects.knownelement.com/issues/208 | https://github.com/Payroll-Engine/PayrollEngine.git |
|
||||
| huginn | https://projects.knownelement.com/issues/194 | https://github.com/huginn/huginn.git |
|
||||
| grist | https://projects.knownelement.com/issues/191 | https://github.com/gristlabs/grist-core |
|
||||
| docassemble | https://projects.knownelement.com/issues/277 | https://github.com/jhpyle/docassemble.git |
|
||||
| database-gateway | https://projects.knownelement.com/issues/273 | https://github.com/kazhuravlev/database-gateway.git |
|
||||
| rundeck | https://projects.knownelement.com/issues/217 | https://github.com/rundeck/rundeck.git |
|
||||
| slurm | https://projects.knownelement.com/issues/222 | https://github.com/SchedMD/slurm.git |
|
||||
| rathole | https://projects.knownelement.com/issues/225 | https://github.com/rathole-org/rathole.git |
|
||||
| jenkins | https://projects.knownelement.com/issues/234 | https://github.com/jenkinsci/jenkins.git |
|
||||
| runme | https://projects.knownelement.com/issues/322 | https://github.com/runmedev/runme.git |
|
||||
| seatunnel | https://projects.knownelement.com/issues/301 | https://github.com/apache/seatunnel |
|
||||
| docker-webhook | https://projects.knownelement.com/issues/271 | https://github.com/thecatlady/docker-webhook |
|
||||
| inventree | https://projects.knownelement.com/issues/173 | https://github.com/inventree/InvenTree.git |
|
||||
| tak-server | https://projects.knownelement.com/issues/180 | https://github.com/Cloud-RF/tak-server |
|
||||
| midday | https://projects.knownelement.com/issues/178 | https://github.com/midday-ai/midday.git |
|
||||
| killbill | https://projects.knownelement.com/issues/181 | https://github.com/killbill/killbill.git |
|
||||
| chirpstack | https://projects.knownelement.com/issues/184 | https://github.com/chirpstack/chirpstack.git |
|
||||
| craig | https://projects.knownelement.com/issues/185 | https://github.com/CraigChat/craig.git |
|
||||
| elabftw | https://projects.knownelement.com/issues/188 | https://github.com/elabftw/elabftw.git |
|
||||
| jamovi | https://projects.knownelement.com/issues/196 | https://github.com/jamovi/jamovi.git |
|
||||
| kibot | https://projects.knownelement.com/issues/197 | https://github.com/INTI-CMNB/KiBot.git |
|
||||
| resgrid | https://projects.knownelement.com/issues/214 | https://github.com/Resgrid/Core |
|
||||
| reviewboard | https://projects.knownelement.com/issues/216 | https://github.com/reviewboard/reviewboard.git |
|
||||
| satnogs-kaitai | https://projects.knownelement.com/issues/218 | https://gitlab.com/librespacefoundation/satnogs/docker-kaitai.git |
|
||||
| satnogs-webgui | https://projects.knownelement.com/issues/218 | https://gitlab.com/librespacefoundation/satnogs/docker-satnogs-webgui.git |
|
||||
| sdrangel | https://projects.knownelement.com/issues/219 | https://github.com/f4exb/sdrangel-docker |
|
||||
| signoz | https://projects.knownelement.com/issues/221 | https://github.com/SigNoz/signoz.git |
|
||||
| warp | https://projects.knownelement.com/issues/228 | https://github.com/sebo-b/warp.git |
|
||||
| drawio | https://projects.knownelement.com/issues/272 | https://github.com/jgraph/docker-drawio |
|
||||
| openblocks | https://projects.knownelement.com/issues/274 | https://github.com/openblocks-dev/openblocks.git |
|
||||
| wireviz-web | https://projects.knownelement.com/issues/276 | https://github.com/wireviz/wireviz-web.git |
|
||||
| autobom | https://projects.knownelement.com/issues/278 | https://github.com/opulo-inc/autobom.git |
|
||||
| plmore | https://projects.knownelement.com/issues/279 | https://github.com/PLMore/PLMore |
|
||||
| manyfold | https://projects.knownelement.com/issues/282 | https://github.com/manyfold3d/manyfold.git |
|
||||
| langfuse | https://projects.knownelement.com/issues/283 | https://github.com/langfuse/oss-llmops-stack.git |
|
||||
| puter | https://projects.knownelement.com/issues/286 | https://github.com/HeyPuter/puter.git |
|
||||
| windmill | https://projects.knownelement.com/issues/285 | https://github.com/windmill-labs/windmill.git |
|
||||
| swupdate | https://projects.knownelement.com/issues/326 | https://github.com/sbabic/swupdate.git |
|
||||
| mender-server | https://projects.knownelement.com/issues/300 | https://github.com/mendersoftware/mender-server.git |
|
||||
| wireflow | https://projects.knownelement.com/issues/50 | https://github.com/vanila-io/wireflow.git |
|
||||
| nautilus-trader | https://projects.knownelement.com/issues/226 | https://github.com/nautechsystems/nautilus_trader.git |
|
||||
| mirlo | TBD | https://github.com/funmusicplace/mirlo.git |
|
||||
|
||||
All entries are initially marked as `todo`; update individual READMEs as progress is made.
|
||||
|
||||
|
||||
## Local Harness
|
||||
|
||||
Run `./scripts/ci_local.sh` (or `make ci-local`) to execute the same lint and smoke tests that the future Gitea runner will use. Install git hooks via `./scripts/hooks/install_hooks.sh` so pre-commit, post-commit, and pre-push events invoke the harness automatically. Export `SKIP_CI_HOOKS=1` to bypass them when necessary. See `docs/LOCAL_TESTING.md` for full details.
|
||||
|
||||
## CI/CD
|
||||
|
||||
Once a runner is provisioned, enable `.gitea/workflows/ci.yml` to call the same harness remotely (it currently requires manual `workflow_dispatch`). Mirror `actions/checkout@v4` and label the runner `ubuntu-22.04`. See `docs/CI_CD_GITEA.md` for setup details.
|
||||
|
||||
KNELCloudronPackages
|
177
STARTHERE.md
Normal file
177
STARTHERE.md
Normal file
@@ -0,0 +1,177 @@
|
||||
Can you help me package up a large number of off the shelf applications for Cloudron?
|
||||
|
||||
Use web search to obtain the most up to date information to guide the process.
|
||||
|
||||
All of the packaging work needs to be done in docker containers , no host pollution of any kind. You may use docker on the host to orchestrate the workflows. You may use git to commit/push/tag as needed.
|
||||
|
||||
Presume that I’m starting with an empty directory / repository. I’ll need you to scaffold everything up for me following best common practices. Keep the repo layout clean.
|
||||
|
||||
Here is a list of software that I want to package. The format of the list is:
|
||||
|
||||
link to redmine ticket
|
||||
link to the software repository
|
||||
|
||||
#https://projects.knownelement.com/issues/179
|
||||
https://github.com/apache/apisix.git
|
||||
|
||||
#https://projects.knownelement.com/issues/204
|
||||
https://github.com/target/goalert.git
|
||||
|
||||
#https://projects.knownelement.com/issues/189
|
||||
https://github.com/consuldemocracy/consuldemocracy.git
|
||||
|
||||
#https://projects.knownelement.com/issues/195
|
||||
https://github.com/fleetdm/fleet.git
|
||||
|
||||
#https://projects.knownelement.com/issues/227
|
||||
https://github.com/fonoster/fonoster.git
|
||||
|
||||
#https://projects.knownelement.com/issues/192
|
||||
https://github.com/healthchecks/healthchecks.git
|
||||
|
||||
#https://projects.knownelement.com/issues/209
|
||||
https://github.com/juspay/hyperswitch
|
||||
|
||||
#https://projects.knownelement.com/issues/201
|
||||
https://github.com/netbox-community/netbox-docker.git
|
||||
|
||||
#https://projects.knownelement.com/issues/205
|
||||
https://github.com/openboxes/openboxes-docker.git
|
||||
|
||||
#https://projects.knownelement.com/issues/316
|
||||
https://github.com/openfiletax/openfile.git
|
||||
|
||||
#https://projects.knownelement.com/issues/211
|
||||
https://github.com/GemGeorge/SniperPhish-Docker.git
|
||||
|
||||
#https://projects.knownelement.com/issues/309
|
||||
https://github.com/datahub-project/datahub.git
|
||||
|
||||
#https://projects.knownelement.com/issues/54
|
||||
https://github.com/wiredlush/easy-gate.git
|
||||
|
||||
#https://projects.knownelement.com/issues/208
|
||||
https://github.com/Payroll-Engine/PayrollEngine.git
|
||||
|
||||
#https://projects.knownelement.com/issues/194
|
||||
https://github.com/huginn/huginn.git
|
||||
|
||||
#https://projects.knownelement.com/issues/191
|
||||
https://github.com/gristlabs/grist-core
|
||||
|
||||
#https://projects.knownelement.com/issues/277
|
||||
https://github.com/jhpyle/docassemble.git
|
||||
|
||||
#https://projects.knownelement.com/issues/273
|
||||
https://github.com/kazhuravlev/database-gateway.git
|
||||
|
||||
#https://projects.knownelement.com/issues/217
|
||||
https://github.com/rundeck/rundeck.git
|
||||
|
||||
#https://projects.knownelement.com/issues/222
|
||||
https://github.com/SchedMD/slurm.git
|
||||
https://github.com/giovtorres/slurm-docker-cluster.git
|
||||
|
||||
#https://projects.knownelement.com/issues/225
|
||||
https://github.com/rathole-org/rathole.git
|
||||
|
||||
#https://projects.knownelement.com/issues/234
|
||||
https://github.com/jenkinsci/jenkins.git
|
||||
|
||||
#https://projects.knownelement.com/issues/322
|
||||
https://github.com/runmedev/runme.git
|
||||
|
||||
#https://projects.knownelement.com/issues/301
|
||||
https://github.com/apache/seatunnel
|
||||
|
||||
#https://projects.knownelement.com/issues/271
|
||||
https://github.com/thecatlady/docker-webhook
|
||||
|
||||
#https://projects.knownelement.com/issues/173
|
||||
https://github.com/inventree/InvenTree.git
|
||||
|
||||
#https://projects.knownelement.com/issues/180
|
||||
https://github.com/Cloud-RF/tak-server
|
||||
|
||||
#https://projects.knownelement.com/issues/178
|
||||
https://github.com/midday-ai/midday.git
|
||||
|
||||
#https://projects.knownelement.com/issues/181
|
||||
https://github.com/killbill/killbill.git
|
||||
|
||||
#https://projects.knownelement.com/issues/184
|
||||
https://github.com/chirpstack/chirpstack.git
|
||||
|
||||
#https://projects.knownelement.com/issues/185
|
||||
https://github.com/CraigChat/craig.git
|
||||
|
||||
#https://projects.knownelement.com/issues/188
|
||||
https://github.com/elabftw/elabftw.git
|
||||
|
||||
#https://projects.knownelement.com/issues/196
|
||||
https://github.com/jamovi/jamovi.git
|
||||
|
||||
#https://projects.knownelement.com/issues/197
|
||||
https://github.com/INTI-CMNB/KiBot.git
|
||||
|
||||
#https://projects.knownelement.com/issues/214
|
||||
https://github.com/Resgrid/Core
|
||||
|
||||
#https://projects.knownelement.com/issues/216
|
||||
https://github.com/reviewboard/reviewboard.git
|
||||
|
||||
#https://projects.knownelement.com/issues/218
|
||||
https://gitlab.com/librespacefoundation/satnogs/docker-kaitai.git
|
||||
https://gitlab.com/librespacefoundation/satnogs/docker-satnogs-webgui.git
|
||||
|
||||
#https://projects.knownelement.com/issues/219
|
||||
https://github.com/f4exb/sdrangel-docker
|
||||
|
||||
#https://projects.knownelement.com/issues/221
|
||||
https://github.com/SigNoz/signoz.git
|
||||
|
||||
#https://projects.knownelement.com/issues/228
|
||||
https://github.com/sebo-b/warp.git
|
||||
|
||||
#https://projects.knownelement.com/issues/272
|
||||
https://github.com/jgraph/docker-drawio
|
||||
|
||||
#https://projects.knownelement.com/issues/274
|
||||
https://github.com/openblocks-dev/openblocks.git
|
||||
|
||||
#https://projects.knownelement.com/issues/276
|
||||
https://github.com/wireviz/wireviz-web.git
|
||||
|
||||
#https://projects.knownelement.com/issues/278
|
||||
https://github.com/opulo-inc/autobom.git
|
||||
|
||||
#https://projects.knownelement.com/issues/279
|
||||
https://github.com/PLMore/PLMore
|
||||
|
||||
#https://projects.knownelement.com/issues/282
|
||||
https://github.com/manyfold3d/manyfold.git
|
||||
|
||||
#https://projects.knownelement.com/issues/283
|
||||
https://github.com/langfuse/oss-llmops-stack.git
|
||||
|
||||
#https://projects.knownelement.com/issues/286
|
||||
https://github.com/HeyPuter/puter.git
|
||||
|
||||
#https://projects.knownelement.com/issues/285
|
||||
https://github.com/windmill-labs/windmill.git
|
||||
|
||||
#https://projects.knownelement.com/issues/326
|
||||
https://github.com/sbabic/swupdate.git
|
||||
|
||||
#https://projects.knownelement.com/issues/300
|
||||
https://github.com/mendersoftware/mender-server.git
|
||||
|
||||
#https://projects.knownelement.com/issues/50
|
||||
https://github.com/vanila-io/wireflow.git
|
||||
|
||||
#https://projects.knownelement.com/issues/226
|
||||
https://github.com/nautechsystems/nautilus_trader.git
|
||||
|
||||
#TBD
|
||||
https://github.com/funmusicplace/mirlo.git
|
||||
|
20
apps/apache-apisix/CloudronManifest.json
Normal file
20
apps/apache-apisix/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.apache.apisix",
|
||||
"title": "Apache APISIX",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/apache/apisix",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/179",
|
||||
"sourceUrl": "https://github.com/apache/apisix.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/apache-apisix/Dockerfile
Normal file
22
apps/apache-apisix/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/apache/apisix.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Apache APISIX"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/apache-apisix/README.md
Normal file
20
apps/apache-apisix/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Apache APISIX on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/apache/apisix.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/179
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/apache-apisix/app/.gitkeep
Normal file
0
apps/apache-apisix/app/.gitkeep
Normal file
9
apps/apache-apisix/metadata.json
Normal file
9
apps/apache-apisix/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "apache-apisix",
|
||||
"title": "Apache APISIX",
|
||||
"issue": "https://projects.knownelement.com/issues/179",
|
||||
"repo": "https://github.com/apache/apisix.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/apache-apisix/start.sh
Executable file
8
apps/apache-apisix/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Apache APISIX' && sleep infinity"
|
16
apps/apache-apisix/test/smoke.sh
Executable file
16
apps/apache-apisix/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/autobom/CloudronManifest.json
Normal file
20
apps/autobom/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.autobom",
|
||||
"title": "Autobom",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/opulo-inc/autobom",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/278",
|
||||
"sourceUrl": "https://github.com/opulo-inc/autobom.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/autobom/Dockerfile
Normal file
22
apps/autobom/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/opulo-inc/autobom.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Autobom"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/autobom/README.md
Normal file
20
apps/autobom/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Autobom on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/opulo-inc/autobom.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/278
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/autobom/app/.gitkeep
Normal file
0
apps/autobom/app/.gitkeep
Normal file
9
apps/autobom/metadata.json
Normal file
9
apps/autobom/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "autobom",
|
||||
"title": "Autobom",
|
||||
"issue": "https://projects.knownelement.com/issues/278",
|
||||
"repo": "https://github.com/opulo-inc/autobom.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/autobom/start.sh
Executable file
8
apps/autobom/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Autobom' && sleep infinity"
|
16
apps/autobom/test/smoke.sh
Executable file
16
apps/autobom/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
335
apps/catalog.json
Normal file
335
apps/catalog.json
Normal file
@@ -0,0 +1,335 @@
|
||||
[
|
||||
{
|
||||
"slug": "apache-apisix",
|
||||
"title": "Apache APISIX",
|
||||
"issue": "https://projects.knownelement.com/issues/179",
|
||||
"repo": "https://github.com/apache/apisix.git"
|
||||
},
|
||||
{
|
||||
"slug": "target-goalert",
|
||||
"title": "GoAlert",
|
||||
"issue": "https://projects.knownelement.com/issues/204",
|
||||
"repo": "https://github.com/target/goalert.git"
|
||||
},
|
||||
{
|
||||
"slug": "consuldemocracy",
|
||||
"title": "CONSUL Democracy",
|
||||
"issue": "https://projects.knownelement.com/issues/189",
|
||||
"repo": "https://github.com/consuldemocracy/consuldemocracy.git"
|
||||
},
|
||||
{
|
||||
"slug": "fleetdm-fleet",
|
||||
"title": "FleetDM Fleet",
|
||||
"issue": "https://projects.knownelement.com/issues/195",
|
||||
"repo": "https://github.com/fleetdm/fleet.git"
|
||||
},
|
||||
{
|
||||
"slug": "fonoster",
|
||||
"title": "Fonoster",
|
||||
"issue": "https://projects.knownelement.com/issues/227",
|
||||
"repo": "https://github.com/fonoster/fonoster.git"
|
||||
},
|
||||
{
|
||||
"slug": "healthchecks",
|
||||
"title": "Healthchecks",
|
||||
"issue": "https://projects.knownelement.com/issues/192",
|
||||
"repo": "https://github.com/healthchecks/healthchecks.git"
|
||||
},
|
||||
{
|
||||
"slug": "hyperswitch",
|
||||
"title": "HyperSwitch",
|
||||
"issue": "https://projects.knownelement.com/issues/209",
|
||||
"repo": "https://github.com/juspay/hyperswitch"
|
||||
},
|
||||
{
|
||||
"slug": "netbox-docker",
|
||||
"title": "NetBox Docker",
|
||||
"issue": "https://projects.knownelement.com/issues/201",
|
||||
"repo": "https://github.com/netbox-community/netbox-docker.git"
|
||||
},
|
||||
{
|
||||
"slug": "openboxes-docker",
|
||||
"title": "OpenBoxes Docker",
|
||||
"issue": "https://projects.knownelement.com/issues/205",
|
||||
"repo": "https://github.com/openboxes/openboxes-docker.git"
|
||||
},
|
||||
{
|
||||
"slug": "openfile",
|
||||
"title": "OpenFile",
|
||||
"issue": "https://projects.knownelement.com/issues/316",
|
||||
"repo": "https://github.com/openfiletax/openfile.git"
|
||||
},
|
||||
{
|
||||
"slug": "sniperphish",
|
||||
"title": "SniperPhish",
|
||||
"issue": "https://projects.knownelement.com/issues/211",
|
||||
"repo": "https://github.com/GemGeorge/SniperPhish-Docker.git"
|
||||
},
|
||||
{
|
||||
"slug": "datahub",
|
||||
"title": "DataHub",
|
||||
"issue": "https://projects.knownelement.com/issues/309",
|
||||
"repo": "https://github.com/datahub-project/datahub.git"
|
||||
},
|
||||
{
|
||||
"slug": "easy-gate",
|
||||
"title": "Easy Gate",
|
||||
"issue": "https://projects.knownelement.com/issues/54",
|
||||
"repo": "https://github.com/wiredlush/easy-gate.git"
|
||||
},
|
||||
{
|
||||
"slug": "payroll-engine",
|
||||
"title": "Payroll Engine",
|
||||
"issue": "https://projects.knownelement.com/issues/208",
|
||||
"repo": "https://github.com/Payroll-Engine/PayrollEngine.git"
|
||||
},
|
||||
{
|
||||
"slug": "huginn",
|
||||
"title": "Huginn",
|
||||
"issue": "https://projects.knownelement.com/issues/194",
|
||||
"repo": "https://github.com/huginn/huginn.git"
|
||||
},
|
||||
{
|
||||
"slug": "grist",
|
||||
"title": "Grist",
|
||||
"issue": "https://projects.knownelement.com/issues/191",
|
||||
"repo": "https://github.com/gristlabs/grist-core"
|
||||
},
|
||||
{
|
||||
"slug": "docassemble",
|
||||
"title": "Docassemble",
|
||||
"issue": "https://projects.knownelement.com/issues/277",
|
||||
"repo": "https://github.com/jhpyle/docassemble.git"
|
||||
},
|
||||
{
|
||||
"slug": "database-gateway",
|
||||
"title": "Database Gateway",
|
||||
"issue": "https://projects.knownelement.com/issues/273",
|
||||
"repo": "https://github.com/kazhuravlev/database-gateway.git"
|
||||
},
|
||||
{
|
||||
"slug": "rundeck",
|
||||
"title": "Rundeck",
|
||||
"issue": "https://projects.knownelement.com/issues/217",
|
||||
"repo": "https://github.com/rundeck/rundeck.git"
|
||||
},
|
||||
{
|
||||
"slug": "slurm",
|
||||
"title": "Slurm",
|
||||
"issue": "https://projects.knownelement.com/issues/222",
|
||||
"repo": "https://github.com/SchedMD/slurm.git",
|
||||
"additionalRepos": [
|
||||
"https://github.com/giovtorres/slurm-docker-cluster.git"
|
||||
]
|
||||
},
|
||||
{
|
||||
"slug": "rathole",
|
||||
"title": "rathole",
|
||||
"issue": "https://projects.knownelement.com/issues/225",
|
||||
"repo": "https://github.com/rathole-org/rathole.git"
|
||||
},
|
||||
{
|
||||
"slug": "jenkins",
|
||||
"title": "Jenkins",
|
||||
"issue": "https://projects.knownelement.com/issues/234",
|
||||
"repo": "https://github.com/jenkinsci/jenkins.git"
|
||||
},
|
||||
{
|
||||
"slug": "runme",
|
||||
"title": "Runme",
|
||||
"issue": "https://projects.knownelement.com/issues/322",
|
||||
"repo": "https://github.com/runmedev/runme.git"
|
||||
},
|
||||
{
|
||||
"slug": "seatunnel",
|
||||
"title": "SeaTunnel",
|
||||
"issue": "https://projects.knownelement.com/issues/301",
|
||||
"repo": "https://github.com/apache/seatunnel"
|
||||
},
|
||||
{
|
||||
"slug": "docker-webhook",
|
||||
"title": "docker-webhook",
|
||||
"issue": "https://projects.knownelement.com/issues/271",
|
||||
"repo": "https://github.com/thecatlady/docker-webhook"
|
||||
},
|
||||
{
|
||||
"slug": "inventree",
|
||||
"title": "InvenTree",
|
||||
"issue": "https://projects.knownelement.com/issues/173",
|
||||
"repo": "https://github.com/inventree/InvenTree.git"
|
||||
},
|
||||
{
|
||||
"slug": "tak-server",
|
||||
"title": "TAK Server",
|
||||
"issue": "https://projects.knownelement.com/issues/180",
|
||||
"repo": "https://github.com/Cloud-RF/tak-server"
|
||||
},
|
||||
{
|
||||
"slug": "midday",
|
||||
"title": "Midday",
|
||||
"issue": "https://projects.knownelement.com/issues/178",
|
||||
"repo": "https://github.com/midday-ai/midday.git"
|
||||
},
|
||||
{
|
||||
"slug": "killbill",
|
||||
"title": "Kill Bill",
|
||||
"issue": "https://projects.knownelement.com/issues/181",
|
||||
"repo": "https://github.com/killbill/killbill.git"
|
||||
},
|
||||
{
|
||||
"slug": "chirpstack",
|
||||
"title": "ChirpStack",
|
||||
"issue": "https://projects.knownelement.com/issues/184",
|
||||
"repo": "https://github.com/chirpstack/chirpstack.git"
|
||||
},
|
||||
{
|
||||
"slug": "craig",
|
||||
"title": "Craig (FOSS Discord Recorder)",
|
||||
"issue": "https://projects.knownelement.com/issues/185",
|
||||
"repo": "https://github.com/CraigChat/craig.git"
|
||||
},
|
||||
{
|
||||
"slug": "elabftw",
|
||||
"title": "eLabFTW",
|
||||
"issue": "https://projects.knownelement.com/issues/188",
|
||||
"repo": "https://github.com/elabftw/elabftw.git"
|
||||
},
|
||||
{
|
||||
"slug": "jamovi",
|
||||
"title": "jamovi",
|
||||
"issue": "https://projects.knownelement.com/issues/196",
|
||||
"repo": "https://github.com/jamovi/jamovi.git"
|
||||
},
|
||||
{
|
||||
"slug": "kibot",
|
||||
"title": "KiBot",
|
||||
"issue": "https://projects.knownelement.com/issues/197",
|
||||
"repo": "https://github.com/INTI-CMNB/KiBot.git"
|
||||
},
|
||||
{
|
||||
"slug": "resgrid",
|
||||
"title": "Resgrid Core",
|
||||
"issue": "https://projects.knownelement.com/issues/214",
|
||||
"repo": "https://github.com/Resgrid/Core"
|
||||
},
|
||||
{
|
||||
"slug": "reviewboard",
|
||||
"title": "Review Board",
|
||||
"issue": "https://projects.knownelement.com/issues/216",
|
||||
"repo": "https://github.com/reviewboard/reviewboard.git"
|
||||
},
|
||||
{
|
||||
"slug": "satnogs-kaitai",
|
||||
"title": "SatNOGS Kaitai",
|
||||
"issue": "https://projects.knownelement.com/issues/218",
|
||||
"repo": "https://gitlab.com/librespacefoundation/satnogs/docker-kaitai.git"
|
||||
},
|
||||
{
|
||||
"slug": "satnogs-webgui",
|
||||
"title": "SatNOGS WebGUI",
|
||||
"issue": "https://projects.knownelement.com/issues/218",
|
||||
"repo": "https://gitlab.com/librespacefoundation/satnogs/docker-satnogs-webgui.git"
|
||||
},
|
||||
{
|
||||
"slug": "sdrangel",
|
||||
"title": "SDRAngel",
|
||||
"issue": "https://projects.knownelement.com/issues/219",
|
||||
"repo": "https://github.com/f4exb/sdrangel-docker"
|
||||
},
|
||||
{
|
||||
"slug": "signoz",
|
||||
"title": "SigNoz",
|
||||
"issue": "https://projects.knownelement.com/issues/221",
|
||||
"repo": "https://github.com/SigNoz/signoz.git"
|
||||
},
|
||||
{
|
||||
"slug": "warp",
|
||||
"title": "Warp",
|
||||
"issue": "https://projects.knownelement.com/issues/228",
|
||||
"repo": "https://github.com/sebo-b/warp.git"
|
||||
},
|
||||
{
|
||||
"slug": "drawio",
|
||||
"title": "draw.io",
|
||||
"issue": "https://projects.knownelement.com/issues/272",
|
||||
"repo": "https://github.com/jgraph/docker-drawio"
|
||||
},
|
||||
{
|
||||
"slug": "openblocks",
|
||||
"title": "OpenBlocks",
|
||||
"issue": "https://projects.knownelement.com/issues/274",
|
||||
"repo": "https://github.com/openblocks-dev/openblocks.git"
|
||||
},
|
||||
{
|
||||
"slug": "wireviz-web",
|
||||
"title": "Wireviz Web",
|
||||
"issue": "https://projects.knownelement.com/issues/276",
|
||||
"repo": "https://github.com/wireviz/wireviz-web.git"
|
||||
},
|
||||
{
|
||||
"slug": "autobom",
|
||||
"title": "Autobom",
|
||||
"issue": "https://projects.knownelement.com/issues/278",
|
||||
"repo": "https://github.com/opulo-inc/autobom.git"
|
||||
},
|
||||
{
|
||||
"slug": "plmore",
|
||||
"title": "PLMore",
|
||||
"issue": "https://projects.knownelement.com/issues/279",
|
||||
"repo": "https://github.com/PLMore/PLMore"
|
||||
},
|
||||
{
|
||||
"slug": "manyfold",
|
||||
"title": "Manyfold",
|
||||
"issue": "https://projects.knownelement.com/issues/282",
|
||||
"repo": "https://github.com/manyfold3d/manyfold.git"
|
||||
},
|
||||
{
|
||||
"slug": "langfuse",
|
||||
"title": "Langfuse OSS LLMOps Stack",
|
||||
"issue": "https://projects.knownelement.com/issues/283",
|
||||
"repo": "https://github.com/langfuse/oss-llmops-stack.git"
|
||||
},
|
||||
{
|
||||
"slug": "puter",
|
||||
"title": "Puter",
|
||||
"issue": "https://projects.knownelement.com/issues/286",
|
||||
"repo": "https://github.com/HeyPuter/puter.git"
|
||||
},
|
||||
{
|
||||
"slug": "windmill",
|
||||
"title": "Windmill",
|
||||
"issue": "https://projects.knownelement.com/issues/285",
|
||||
"repo": "https://github.com/windmill-labs/windmill.git"
|
||||
},
|
||||
{
|
||||
"slug": "swupdate",
|
||||
"title": "swupdate",
|
||||
"issue": "https://projects.knownelement.com/issues/326",
|
||||
"repo": "https://github.com/sbabic/swupdate.git"
|
||||
},
|
||||
{
|
||||
"slug": "mender-server",
|
||||
"title": "Mender Server",
|
||||
"issue": "https://projects.knownelement.com/issues/300",
|
||||
"repo": "https://github.com/mendersoftware/mender-server.git"
|
||||
},
|
||||
{
|
||||
"slug": "wireflow",
|
||||
"title": "Wireflow",
|
||||
"issue": "https://projects.knownelement.com/issues/50",
|
||||
"repo": "https://github.com/vanila-io/wireflow.git"
|
||||
},
|
||||
{
|
||||
"slug": "nautilus-trader",
|
||||
"title": "Nautilus Trader",
|
||||
"issue": "https://projects.knownelement.com/issues/226",
|
||||
"repo": "https://github.com/nautechsystems/nautilus_trader.git"
|
||||
},
|
||||
{
|
||||
"slug": "mirlo",
|
||||
"title": "Mirlo",
|
||||
"issue": "https://projects.knownelement.com/issues/TBD",
|
||||
"repo": "https://github.com/funmusicplace/mirlo.git"
|
||||
}
|
||||
]
|
20
apps/chirpstack/CloudronManifest.json
Normal file
20
apps/chirpstack/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.chirpstack",
|
||||
"title": "ChirpStack",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/chirpstack/chirpstack",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/184",
|
||||
"sourceUrl": "https://github.com/chirpstack/chirpstack.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/chirpstack/Dockerfile
Normal file
22
apps/chirpstack/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/chirpstack/chirpstack.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for ChirpStack"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/chirpstack/README.md
Normal file
20
apps/chirpstack/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# ChirpStack on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/chirpstack/chirpstack.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/184
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/chirpstack/app/.gitkeep
Normal file
0
apps/chirpstack/app/.gitkeep
Normal file
9
apps/chirpstack/metadata.json
Normal file
9
apps/chirpstack/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "chirpstack",
|
||||
"title": "ChirpStack",
|
||||
"issue": "https://projects.knownelement.com/issues/184",
|
||||
"repo": "https://github.com/chirpstack/chirpstack.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/chirpstack/start.sh
Executable file
8
apps/chirpstack/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for ChirpStack' && sleep infinity"
|
16
apps/chirpstack/test/smoke.sh
Executable file
16
apps/chirpstack/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/consuldemocracy/CloudronManifest.json
Normal file
20
apps/consuldemocracy/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.consuldemocracy",
|
||||
"title": "CONSUL Democracy",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/consuldemocracy/consuldemocracy",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/189",
|
||||
"sourceUrl": "https://github.com/consuldemocracy/consuldemocracy.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/consuldemocracy/Dockerfile
Normal file
22
apps/consuldemocracy/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/consuldemocracy/consuldemocracy.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for CONSUL Democracy"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/consuldemocracy/README.md
Normal file
20
apps/consuldemocracy/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# CONSUL Democracy on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/consuldemocracy/consuldemocracy.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/189
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/consuldemocracy/app/.gitkeep
Normal file
0
apps/consuldemocracy/app/.gitkeep
Normal file
9
apps/consuldemocracy/metadata.json
Normal file
9
apps/consuldemocracy/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "consuldemocracy",
|
||||
"title": "CONSUL Democracy",
|
||||
"issue": "https://projects.knownelement.com/issues/189",
|
||||
"repo": "https://github.com/consuldemocracy/consuldemocracy.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/consuldemocracy/start.sh
Executable file
8
apps/consuldemocracy/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for CONSUL Democracy' && sleep infinity"
|
16
apps/consuldemocracy/test/smoke.sh
Executable file
16
apps/consuldemocracy/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/craig/CloudronManifest.json
Normal file
20
apps/craig/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.craig",
|
||||
"title": "Craig (FOSS Discord Recorder)",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/CraigChat/cra",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/185",
|
||||
"sourceUrl": "https://github.com/CraigChat/craig.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/craig/Dockerfile
Normal file
22
apps/craig/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/CraigChat/craig.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Craig (FOSS Discord Recorder)"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/craig/README.md
Normal file
20
apps/craig/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Craig (FOSS Discord Recorder) on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/CraigChat/craig.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/185
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/craig/app/.gitkeep
Normal file
0
apps/craig/app/.gitkeep
Normal file
9
apps/craig/metadata.json
Normal file
9
apps/craig/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "craig",
|
||||
"title": "Craig (FOSS Discord Recorder)",
|
||||
"issue": "https://projects.knownelement.com/issues/185",
|
||||
"repo": "https://github.com/CraigChat/craig.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/craig/start.sh
Executable file
8
apps/craig/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Craig (FOSS Discord Recorder)' && sleep infinity"
|
16
apps/craig/test/smoke.sh
Executable file
16
apps/craig/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/database-gateway/CloudronManifest.json
Normal file
20
apps/database-gateway/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.database.gateway",
|
||||
"title": "Database Gateway",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/kazhuravlev/database-gateway",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/273",
|
||||
"sourceUrl": "https://github.com/kazhuravlev/database-gateway.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/database-gateway/Dockerfile
Normal file
22
apps/database-gateway/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/kazhuravlev/database-gateway.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Database Gateway"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/database-gateway/README.md
Normal file
20
apps/database-gateway/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Database Gateway on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/kazhuravlev/database-gateway.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/273
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/database-gateway/app/.gitkeep
Normal file
0
apps/database-gateway/app/.gitkeep
Normal file
9
apps/database-gateway/metadata.json
Normal file
9
apps/database-gateway/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "database-gateway",
|
||||
"title": "Database Gateway",
|
||||
"issue": "https://projects.knownelement.com/issues/273",
|
||||
"repo": "https://github.com/kazhuravlev/database-gateway.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/database-gateway/start.sh
Executable file
8
apps/database-gateway/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Database Gateway' && sleep infinity"
|
16
apps/database-gateway/test/smoke.sh
Executable file
16
apps/database-gateway/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/datahub/CloudronManifest.json
Normal file
20
apps/datahub/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.datahub",
|
||||
"title": "DataHub",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/datahub-project/datahub",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/309",
|
||||
"sourceUrl": "https://github.com/datahub-project/datahub.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/datahub/Dockerfile
Normal file
22
apps/datahub/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/datahub-project/datahub.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for DataHub"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/datahub/README.md
Normal file
20
apps/datahub/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# DataHub on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/datahub-project/datahub.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/309
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/datahub/app/.gitkeep
Normal file
0
apps/datahub/app/.gitkeep
Normal file
9
apps/datahub/metadata.json
Normal file
9
apps/datahub/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "datahub",
|
||||
"title": "DataHub",
|
||||
"issue": "https://projects.knownelement.com/issues/309",
|
||||
"repo": "https://github.com/datahub-project/datahub.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/datahub/start.sh
Executable file
8
apps/datahub/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for DataHub' && sleep infinity"
|
16
apps/datahub/test/smoke.sh
Executable file
16
apps/datahub/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/docassemble/CloudronManifest.json
Normal file
20
apps/docassemble/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.docassemble",
|
||||
"title": "Docassemble",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/jhpyle/docassemble",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/277",
|
||||
"sourceUrl": "https://github.com/jhpyle/docassemble.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/docassemble/Dockerfile
Normal file
22
apps/docassemble/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/jhpyle/docassemble.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Docassemble"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/docassemble/README.md
Normal file
20
apps/docassemble/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Docassemble on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/jhpyle/docassemble.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/277
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/docassemble/app/.gitkeep
Normal file
0
apps/docassemble/app/.gitkeep
Normal file
9
apps/docassemble/metadata.json
Normal file
9
apps/docassemble/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "docassemble",
|
||||
"title": "Docassemble",
|
||||
"issue": "https://projects.knownelement.com/issues/277",
|
||||
"repo": "https://github.com/jhpyle/docassemble.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/docassemble/start.sh
Executable file
8
apps/docassemble/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Docassemble' && sleep infinity"
|
16
apps/docassemble/test/smoke.sh
Executable file
16
apps/docassemble/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/docker-webhook/CloudronManifest.json
Normal file
20
apps/docker-webhook/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.docker.webhook",
|
||||
"title": "docker-webhook",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/thecatlady/docker-webhook",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/271",
|
||||
"sourceUrl": "https://github.com/thecatlady/docker-webhook",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/docker-webhook/Dockerfile
Normal file
22
apps/docker-webhook/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/thecatlady/docker-webhook"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for docker-webhook"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/docker-webhook/README.md
Normal file
20
apps/docker-webhook/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# docker-webhook on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/thecatlady/docker-webhook
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/271
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/docker-webhook/app/.gitkeep
Normal file
0
apps/docker-webhook/app/.gitkeep
Normal file
9
apps/docker-webhook/metadata.json
Normal file
9
apps/docker-webhook/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "docker-webhook",
|
||||
"title": "docker-webhook",
|
||||
"issue": "https://projects.knownelement.com/issues/271",
|
||||
"repo": "https://github.com/thecatlady/docker-webhook",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/docker-webhook/start.sh
Executable file
8
apps/docker-webhook/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for docker-webhook' && sleep infinity"
|
16
apps/docker-webhook/test/smoke.sh
Executable file
16
apps/docker-webhook/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/drawio/CloudronManifest.json
Normal file
20
apps/drawio/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.drawio",
|
||||
"title": "draw.io",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/jgraph/docker-drawio",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/272",
|
||||
"sourceUrl": "https://github.com/jgraph/docker-drawio",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/drawio/Dockerfile
Normal file
22
apps/drawio/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/jgraph/docker-drawio"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for draw.io"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/drawio/README.md
Normal file
20
apps/drawio/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# draw.io on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/jgraph/docker-drawio
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/272
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/drawio/app/.gitkeep
Normal file
0
apps/drawio/app/.gitkeep
Normal file
9
apps/drawio/metadata.json
Normal file
9
apps/drawio/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "drawio",
|
||||
"title": "draw.io",
|
||||
"issue": "https://projects.knownelement.com/issues/272",
|
||||
"repo": "https://github.com/jgraph/docker-drawio",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/drawio/start.sh
Executable file
8
apps/drawio/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for draw.io' && sleep infinity"
|
16
apps/drawio/test/smoke.sh
Executable file
16
apps/drawio/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/easy-gate/CloudronManifest.json
Normal file
20
apps/easy-gate/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.easy.gate",
|
||||
"title": "Easy Gate",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/wiredlush/easy-gate",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/54",
|
||||
"sourceUrl": "https://github.com/wiredlush/easy-gate.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/easy-gate/Dockerfile
Normal file
22
apps/easy-gate/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/wiredlush/easy-gate.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Easy Gate"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/easy-gate/README.md
Normal file
20
apps/easy-gate/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Easy Gate on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/wiredlush/easy-gate.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/54
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/easy-gate/app/.gitkeep
Normal file
0
apps/easy-gate/app/.gitkeep
Normal file
9
apps/easy-gate/metadata.json
Normal file
9
apps/easy-gate/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "easy-gate",
|
||||
"title": "Easy Gate",
|
||||
"issue": "https://projects.knownelement.com/issues/54",
|
||||
"repo": "https://github.com/wiredlush/easy-gate.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/easy-gate/start.sh
Executable file
8
apps/easy-gate/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Easy Gate' && sleep infinity"
|
16
apps/easy-gate/test/smoke.sh
Executable file
16
apps/easy-gate/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/elabftw/CloudronManifest.json
Normal file
20
apps/elabftw/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.elabftw",
|
||||
"title": "eLabFTW",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/elabftw/elabftw",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/188",
|
||||
"sourceUrl": "https://github.com/elabftw/elabftw.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/elabftw/Dockerfile
Normal file
22
apps/elabftw/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/elabftw/elabftw.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for eLabFTW"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/elabftw/README.md
Normal file
20
apps/elabftw/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# eLabFTW on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/elabftw/elabftw.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/188
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/elabftw/app/.gitkeep
Normal file
0
apps/elabftw/app/.gitkeep
Normal file
9
apps/elabftw/metadata.json
Normal file
9
apps/elabftw/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "elabftw",
|
||||
"title": "eLabFTW",
|
||||
"issue": "https://projects.knownelement.com/issues/188",
|
||||
"repo": "https://github.com/elabftw/elabftw.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/elabftw/start.sh
Executable file
8
apps/elabftw/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for eLabFTW' && sleep infinity"
|
16
apps/elabftw/test/smoke.sh
Executable file
16
apps/elabftw/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/fleetdm-fleet/CloudronManifest.json
Normal file
20
apps/fleetdm-fleet/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.fleetdm.fleet",
|
||||
"title": "FleetDM Fleet",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/fleetdm/flee",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/195",
|
||||
"sourceUrl": "https://github.com/fleetdm/fleet.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/fleetdm-fleet/Dockerfile
Normal file
22
apps/fleetdm-fleet/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/fleetdm/fleet.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for FleetDM Fleet"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
20
apps/fleetdm-fleet/README.md
Normal file
20
apps/fleetdm-fleet/README.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# FleetDM Fleet on Cloudron
|
||||
|
||||
- **Upstream repository**: https://github.com/fleetdm/fleet.git
|
||||
- **Implementation issue**: https://projects.knownelement.com/issues/195
|
||||
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
## Packaging Checklist
|
||||
|
||||
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
|
||||
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
|
||||
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
|
||||
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
|
||||
5. Add integration and smoke tests under `test/` to validate the package.
|
||||
6. Document manual configuration steps, migration requirements, and known gaps in this README.
|
||||
|
||||
## Notes
|
||||
|
||||
- Replace the placeholder long-running process in `start.sh`.
|
||||
- Populate the `app/` directory with the application build artefacts or git submodules.
|
||||
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.
|
0
apps/fleetdm-fleet/app/.gitkeep
Normal file
0
apps/fleetdm-fleet/app/.gitkeep
Normal file
9
apps/fleetdm-fleet/metadata.json
Normal file
9
apps/fleetdm-fleet/metadata.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"slug": "fleetdm-fleet",
|
||||
"title": "FleetDM Fleet",
|
||||
"issue": "https://projects.knownelement.com/issues/195",
|
||||
"repo": "https://github.com/fleetdm/fleet.git",
|
||||
"additionalRepos": [],
|
||||
"created": "2025-10-02T16:46:49Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
8
apps/fleetdm-fleet/start.sh
Executable file
8
apps/fleetdm-fleet/start.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Cloudron injects configuration via environment variables and files under /run
|
||||
# Use this script to render config files and launch the upstream service.
|
||||
|
||||
# TODO: Replace the command below with the correct process supervisor.
|
||||
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for FleetDM Fleet' && sleep infinity"
|
16
apps/fleetdm-fleet/test/smoke.sh
Executable file
16
apps/fleetdm-fleet/test/smoke.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Basic container reachability check executed inside the packaging container.
|
||||
# Replace curl target with an endpoint exposed by the app once the package is functional.
|
||||
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
|
||||
|
||||
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
|
||||
|
||||
if [[ "${http_code}" != "200" ]]; then
|
||||
echo "Unexpected HTTP status: ${http_code}" >&2
|
||||
cat /tmp/smoke.log >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Smoke test passed"
|
20
apps/fonoster/CloudronManifest.json
Normal file
20
apps/fonoster/CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifestVersion": 2,
|
||||
"id": "com.knel.fonoster",
|
||||
"title": "Fonoster",
|
||||
"author": "Known Element Packaging Team",
|
||||
"tagline": "TODO: Short one-line pitch",
|
||||
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
|
||||
"changelog": "Initial scaffold",
|
||||
"website": "https://github.com/fonoster/fonoster",
|
||||
"supportUrl": "https://projects.knownelement.com/issues/227",
|
||||
"sourceUrl": "https://github.com/fonoster/fonoster.git",
|
||||
"version": "0.1.0",
|
||||
"tags": ["custom", "known-element"],
|
||||
"healthCheckPath": "/",
|
||||
"memoryLimit": 536870912,
|
||||
"httpPort": 3000,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
}
|
||||
}
|
22
apps/fonoster/Dockerfile
Normal file
22
apps/fonoster/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
FROM cloudron/base:5.0.0
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/fonoster/fonoster.git"
|
||||
LABEL org.opencontainers.image.description="Cloudron package for Fonoster"
|
||||
|
||||
ARG APP_VERSION
|
||||
ENV APP_VERSION=${APP_VERSION:-latest}
|
||||
|
||||
# Copy application source into image at build time
|
||||
# Replace this with a multi-stage build if upstream provides Docker images.
|
||||
COPY ./app /app/code
|
||||
|
||||
# Copy start script and make it executable
|
||||
COPY ./start.sh /app/pkg/start.sh
|
||||
RUN chmod +x /app/pkg/start.sh
|
||||
|
||||
# Cloudron expects all processes to run as cloudron user
|
||||
USER cloudron
|
||||
WORKDIR /app/code
|
||||
|
||||
CMD ["/app/pkg/start.sh"]
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user