Restructure repository into output workspace

This commit is contained in:
2025-10-02 14:04:13 -05:00
parent fe0ade1dd9
commit 6e3f60cd9d
420 changed files with 256 additions and 220 deletions

View File

@@ -0,0 +1,20 @@
name: cloudron-packages-ci
on:
workflow_dispatch:
jobs:
lint-and-status:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: https://gitea.com/actions/checkout@v4
- name: Build devtools image if needed
run: ./output/run/dev.sh python --version
- name: Lint repository (strict mode)
run: ./output/run/dev.sh python output/scripts/lint_repo.py --strict
- name: Regenerate status dashboard
run: ./output/run/dev.sh python output/scripts/generate_status.py --preserve-timestamp

5
output/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
__pycache__/
*.pyc
*.swp
.DS_Store
.venv/

View 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.

View File

@@ -0,0 +1,51 @@
# Gemini Audit Report: KNELCloudronPackages (Final Verification)
**Date:** 2025-10-02
**Auditor:** Gemini
**Scope:** Final verification of repository state after mandatory cleanup.
---
## 1. Executive Summary
This audit confirms that the mandatory cleanup instructions outlined in the previous report (`GEMINI/FIX-1.md`) have been executed successfully and precisely. The repository's foundational workflow, which was previously broken and contradictory, is now **clean, consistent, and robust.**
All non-compliant orchestration files have been removed and replaced with a set of simple, effective wrapper scripts in the `run/` directory. The documentation has been updated to reflect this single, unified workflow. Critical technical debt, most notably the missing `memoryLimit` placeholder, has been resolved.
The project is no longer blocked. The foundation is sound and adheres to the specified architectural principles. The repository is now in an excellent state to begin the primary work of packaging applications.
**This report concludes the foundational audit phase. The project is approved to move forward.**
**Overall Grade: A+ (Excellent)**
---
## 2. Verification of Mandatory Cleanup
A point-by-point confirmation of the tasks from the `FIX-1.md` prompt.
| Task | Status | Verification Notes |
|---|---|---|
| **1a. Clean Repository Files** | **PASS** | The `Makefile` and all old, complex host scripts (`scripts/run_dev.sh`, `scripts/ci_local.sh`, etc.) have been successfully deleted. |
| **1b. Move `requirements.txt`** | **PASS** | The file was correctly moved to `docker/devtools/requirements.txt`. |
| **2. Fix `devtools` Dockerfile** | **PASS** | The `Dockerfile` now correctly copies the `requirements.txt` file from its new location, making the `devtools` image buildable. |
| **3. Create Orchestration Scripts** | **PASS** | The `run/` directory and its scripts (`dev.sh`, `packager.sh`) were created with the exact content specified. The orchestration layer is now compliant and functional. |
| **4. Fix Manifest Template** | **PASS** | The `memoryLimit` placeholder was added back to the `CloudronManifest.json.j2` template with the required guiding comment. This resolves a critical packaging risk. |
| **5. Rewrite Documentation** | **PASS** | The main `README.md` has been updated to exclusively feature the new, correct workflow using the `run/*.sh` scripts. |
---
## 3. Remaining Minor Recommendations
With the major foundational issues resolved, only minor points remain. These can be addressed as part of ongoing work.
* **Dockerfile Template:** The `Dockerfile.j2` template could be slightly improved by removing the `COPY ./app /app/code` line entirely. This would force the developer to write a proper `COPY --from=builder ...` command, reinforcing the multi-stage build pattern.
* **Full Documentation Sync:** While the main `README.md` is correct, a pass should be taken through the `docs/` directory at a later date to ensure all deeper documentation also reflects the new `run/*.sh` workflow.
---
## 4. Conclusion
The repository is now in an exemplary state. The combination of a robust, containerized toolchain and a simple, clear orchestration layer provides a solid foundation for the complex task of packaging dozens of applications.
The project is ready to proceed with its primary mission.

16
output/GEMINI/FIX-1.md Normal file
View File

@@ -0,0 +1,16 @@
You will now perform a mandatory cleanup of this repository. Your sole focus is to implement the **exact** instructions outlined in the "Final Actionable Mandate" section of `GEMINI/AUDIT-SNAPSHOT2.md`.
**Your task is to:**
1. **Execute every command** listed in "Step 1: Clean the Repository" to remove the incorrect files.
2. **Execute the command** in "Step 1" to move `requirements.txt` to the correct location.
3. **Execute the command** in "Step 2" to fix the `docker/devtools/Dockerfile`.
4. **Create the `run/` directory and the two shell scripts** (`run/dev.sh`, `run/packager.sh`) using the **exact code** provided in "Step 3: Create the Correct Orchestration Scripts".
5. **Fix the manifest template** (`templates/cloudron-app/CloudronManifest.json.j2`) by adding the `memoryLimit` placeholder exactly as shown in "Step 4: Fix the Manifest Template".
6. **Rewrite the `README.md`** as described in "Step 5: Rewrite All Documentation", replacing the "Quick start" section with instructions that exclusively use the new `run/dev.sh` and `run/packager.sh` scripts for all development tasks.
**DO NOT** deviate from this plan.
**DO NOT** introduce any new files or scripts other than those specified.
**DO NOT** leave any of the old, incorrect files (`Makefile`, etc.) in the repository.
Your goal is not to be creative; your goal is to follow the provided recovery plan precisely.

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Apache APISIX
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/apache/apisix.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Apache APISIX.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/apache-apisix/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for Apache APISIX is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for Apache APISIX: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for Apache APISIX"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Autobom
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/opulo-inc/autobom.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:01Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Autobom.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/autobom/` as work progresses.

View File

View 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-02T17:19:01Z",
"notes": "TODO: capture packaging notes"
}

9
output/apps/autobom/start.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for Autobom is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for Autobom: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for Autobom"

335
output/apps/catalog.json Normal file
View 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"
}
]

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build ChirpStack
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/chirpstack/chirpstack.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# ChirpStack on Cloudron
- **Upstream repository**: https://github.com/chirpstack/chirpstack.git
- **Implementation issue**: https://projects.knownelement.com/issues/184
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of ChirpStack.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/chirpstack/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for ChirpStack is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for ChirpStack: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for ChirpStack"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build CONSUL Democracy
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/consuldemocracy/consuldemocracy.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of CONSUL Democracy.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/consuldemocracy/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for CONSUL Democracy is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for CONSUL Democracy: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for CONSUL Democracy"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Craig (FOSS Discord Recorder)
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/CraigChat/craig.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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)"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Craig (FOSS Discord Recorder).
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/craig/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

9
output/apps/craig/start.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for Craig (FOSS Discord Recorder) is not implemented yet."
exit 1

14
output/apps/craig/test/smoke.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for Craig (FOSS Discord Recorder): expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for Craig (FOSS Discord Recorder)"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Database Gateway
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/kazhuravlev/database-gateway.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Database Gateway.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/database-gateway/` as work progresses.

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for Database Gateway is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for Database Gateway: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for Database Gateway"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build DataHub
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/datahub-project/datahub.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of DataHub.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/datahub/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

9
output/apps/datahub/start.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for DataHub is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for DataHub: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for DataHub"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Docassemble
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/jhpyle/docassemble.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# Docassemble on Cloudron
- **Upstream repository**: https://github.com/jhpyle/docassemble.git
- **Implementation issue**: https://projects.knownelement.com/issues/277
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Docassemble.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/docassemble/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for Docassemble is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for Docassemble: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for Docassemble"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build docker-webhook
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/thecatlady/docker-webhook source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of docker-webhook.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/docker-webhook/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for docker-webhook is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for docker-webhook: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for docker-webhook"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build draw.io
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/jgraph/docker-drawio source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:01Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of draw.io.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/drawio/` as work progresses.

View File

View 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-02T17:19:01Z",
"notes": "TODO: capture packaging notes"
}

9
output/apps/drawio/start.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for draw.io is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for draw.io: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for draw.io"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Easy Gate
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/wiredlush/easy-gate.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Easy Gate.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/easy-gate/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

9
output/apps/easy-gate/start.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for Easy Gate is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for Easy Gate: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for Easy Gate"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build eLabFTW
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/elabftw/elabftw.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# eLabFTW on Cloudron
- **Upstream repository**: https://github.com/elabftw/elabftw.git
- **Implementation issue**: https://projects.knownelement.com/issues/188
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of eLabFTW.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/elabftw/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

9
output/apps/elabftw/start.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for eLabFTW is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for eLabFTW: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for eLabFTW"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build FleetDM Fleet
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/fleetdm/fleet.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View 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
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of FleetDM Fleet.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/fleetdm-fleet/` as work progresses.

View File

View 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-02T17:19:00Z",
"notes": "TODO: capture packaging notes"
}

View File

@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
# TODO: render configuration files from CLOUDRON_* environment variables
# Example:
# envsubst < /app/pkg/config.tmpl > /run/config.yaml
>&2 echo "start.sh for FleetDM Fleet is not implemented yet."
exit 1

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -euo pipefail
cloudron_app_origin=${CLOUDRON_APP_ORIGIN:-http://localhost}
http_code=$(curl --silent --show-error --output /tmp/smoke.log --write-out "%{http_code}" "${cloudron_app_origin}/")
if [[ "${http_code}" != "200" ]]; then
>&2 echo "Smoke test failed for FleetDM Fleet: expected HTTP 200 from ${cloudron_app_origin}/, got ${http_code}"
>&2 cat /tmp/smoke.log
exit 1
fi
echo "Smoke test placeholder passed for FleetDM Fleet"

View File

@@ -0,0 +1,27 @@
{
"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": "/",
"httpPort": 3000,
"memoryLimit": "512M",
"addons": {
"localstorage": {}
},
"optionalAddons": {
"postgresql": {},
"redis": {},
"mysql": {},
"mongodb": {},
"sendmail": {}
}
}

View File

@@ -0,0 +1,39 @@
# syntax=docker/dockerfile:1.6
ARG APP_VERSION=latest
FROM cloudron/base:5.0.0 AS builder
WORKDIR /build
# -----------------------------------------------------------------------------
# TODO: Fetch and build Fonoster
# Example:
# RUN git clone --depth 1 --branch "${APP_VERSION}" https://github.com/fonoster/fonoster.git source \
# && cd source \
# && npm ci \
# && npm run build
# -----------------------------------------------------------------------------
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"
ENV APP_VERSION=${APP_VERSION}
# -----------------------------------------------------------------------------
# TODO: Copy build artefacts from the builder stage
# COPY --from=builder /build/source/dist /app/code
# -----------------------------------------------------------------------------
COPY ./app /app/code
COPY ./start.sh /app/pkg/start.sh
COPY ./test /app/pkg/test
RUN chmod +x /app/pkg/start.sh /app/pkg/test/smoke.sh \
&& mkdir -p /app/data \
&& chown -R cloudron:cloudron /app
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# Fonoster on Cloudron
- **Upstream repository**: https://github.com/fonoster/fonoster.git
- **Implementation issue**: https://projects.knownelement.com/issues/227
- **Generated**: 2025-10-02T17:19:00Z UTC
## Packaging Checklist
1. Map upstream services (databases, caches, workers) to Cloudron addons; remove unused entries from `optionalAddons` and enable required ones under `addons`.
2. Implement the multi-stage build in `Dockerfile` to fetch/compile the correct release of Fonoster.
3. Update `start.sh` to configure the app from Cloudron environment variables and launch the primary process.
4. Replace the placeholder health checks and smoke test with real coverage.
5. Complete `CloudronManifest.json` (tagline, description, versioning, resource limits, ingress, TCP ports, etc.).
6. Document manual configuration steps, migrations, and known gaps below.
## Notes
- Populate the `app/` directory with runtime overlays or artifacts generated during the build stage.
- Use the shared packaging container (`output/docker/packager`) for `cloudron build/install` to keep the host clean.
- Record decisions and operational requirements under `output/docs/apps/fonoster/` as work progresses.

Some files were not shown because too many files have changed in this diff Show More