Restructure repository into output workspace
This commit is contained in:
20
output/.gitea/workflows/ci.yml
Normal file
20
output/.gitea/workflows/ci.yml
Normal 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
5
output/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.venv/
|
74
output/GEMINI/AUDIT-SNAPSHOT1.md
Normal file
74
output/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.
|
51
output/GEMINI/AUDIT-SNAPSHOT2.md
Normal file
51
output/GEMINI/AUDIT-SNAPSHOT2.md
Normal 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
16
output/GEMINI/FIX-1.md
Normal 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.
|
27
output/apps/apache-apisix/CloudronManifest.json
Normal file
27
output/apps/apache-apisix/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/apache-apisix/Dockerfile
Normal file
39
output/apps/apache-apisix/Dockerfile
Normal 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"]
|
20
output/apps/apache-apisix/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/apache-apisix/app/.gitkeep
Normal file
0
output/apps/apache-apisix/app/.gitkeep
Normal file
9
output/apps/apache-apisix/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/apache-apisix/start.sh
Executable file
9
output/apps/apache-apisix/start.sh
Executable 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
|
14
output/apps/apache-apisix/test/smoke.sh
Executable file
14
output/apps/apache-apisix/test/smoke.sh
Executable 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"
|
27
output/apps/autobom/CloudronManifest.json
Normal file
27
output/apps/autobom/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/autobom/Dockerfile
Normal file
39
output/apps/autobom/Dockerfile
Normal 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"]
|
20
output/apps/autobom/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/autobom/app/.gitkeep
Normal file
0
output/apps/autobom/app/.gitkeep
Normal file
9
output/apps/autobom/metadata.json
Normal file
9
output/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-02T17:19:01Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/autobom/start.sh
Executable file
9
output/apps/autobom/start.sh
Executable 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
|
14
output/apps/autobom/test/smoke.sh
Executable file
14
output/apps/autobom/test/smoke.sh
Executable 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
335
output/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"
|
||||
}
|
||||
]
|
27
output/apps/chirpstack/CloudronManifest.json
Normal file
27
output/apps/chirpstack/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/chirpstack/Dockerfile
Normal file
39
output/apps/chirpstack/Dockerfile
Normal 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"]
|
20
output/apps/chirpstack/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/chirpstack/app/.gitkeep
Normal file
0
output/apps/chirpstack/app/.gitkeep
Normal file
9
output/apps/chirpstack/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/chirpstack/start.sh
Executable file
9
output/apps/chirpstack/start.sh
Executable 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
|
14
output/apps/chirpstack/test/smoke.sh
Executable file
14
output/apps/chirpstack/test/smoke.sh
Executable 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"
|
27
output/apps/consuldemocracy/CloudronManifest.json
Normal file
27
output/apps/consuldemocracy/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/consuldemocracy/Dockerfile
Normal file
39
output/apps/consuldemocracy/Dockerfile
Normal 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"]
|
20
output/apps/consuldemocracy/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/consuldemocracy/app/.gitkeep
Normal file
0
output/apps/consuldemocracy/app/.gitkeep
Normal file
9
output/apps/consuldemocracy/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/consuldemocracy/start.sh
Executable file
9
output/apps/consuldemocracy/start.sh
Executable 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
|
14
output/apps/consuldemocracy/test/smoke.sh
Executable file
14
output/apps/consuldemocracy/test/smoke.sh
Executable 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"
|
27
output/apps/craig/CloudronManifest.json
Normal file
27
output/apps/craig/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/craig/Dockerfile
Normal file
39
output/apps/craig/Dockerfile
Normal 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"]
|
20
output/apps/craig/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/craig/app/.gitkeep
Normal file
0
output/apps/craig/app/.gitkeep
Normal file
9
output/apps/craig/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/craig/start.sh
Executable file
9
output/apps/craig/start.sh
Executable 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
14
output/apps/craig/test/smoke.sh
Executable 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)"
|
27
output/apps/database-gateway/CloudronManifest.json
Normal file
27
output/apps/database-gateway/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/database-gateway/Dockerfile
Normal file
39
output/apps/database-gateway/Dockerfile
Normal 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"]
|
20
output/apps/database-gateway/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/database-gateway/app/.gitkeep
Normal file
0
output/apps/database-gateway/app/.gitkeep
Normal file
9
output/apps/database-gateway/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/database-gateway/start.sh
Executable file
9
output/apps/database-gateway/start.sh
Executable 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
|
14
output/apps/database-gateway/test/smoke.sh
Executable file
14
output/apps/database-gateway/test/smoke.sh
Executable 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"
|
27
output/apps/datahub/CloudronManifest.json
Normal file
27
output/apps/datahub/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/datahub/Dockerfile
Normal file
39
output/apps/datahub/Dockerfile
Normal 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"]
|
20
output/apps/datahub/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/datahub/app/.gitkeep
Normal file
0
output/apps/datahub/app/.gitkeep
Normal file
9
output/apps/datahub/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/datahub/start.sh
Executable file
9
output/apps/datahub/start.sh
Executable 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
|
14
output/apps/datahub/test/smoke.sh
Executable file
14
output/apps/datahub/test/smoke.sh
Executable 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"
|
27
output/apps/docassemble/CloudronManifest.json
Normal file
27
output/apps/docassemble/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/docassemble/Dockerfile
Normal file
39
output/apps/docassemble/Dockerfile
Normal 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"]
|
20
output/apps/docassemble/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/docassemble/app/.gitkeep
Normal file
0
output/apps/docassemble/app/.gitkeep
Normal file
9
output/apps/docassemble/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/docassemble/start.sh
Executable file
9
output/apps/docassemble/start.sh
Executable 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
|
14
output/apps/docassemble/test/smoke.sh
Executable file
14
output/apps/docassemble/test/smoke.sh
Executable 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"
|
27
output/apps/docker-webhook/CloudronManifest.json
Normal file
27
output/apps/docker-webhook/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/docker-webhook/Dockerfile
Normal file
39
output/apps/docker-webhook/Dockerfile
Normal 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"]
|
20
output/apps/docker-webhook/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/docker-webhook/app/.gitkeep
Normal file
0
output/apps/docker-webhook/app/.gitkeep
Normal file
9
output/apps/docker-webhook/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/docker-webhook/start.sh
Executable file
9
output/apps/docker-webhook/start.sh
Executable 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
|
14
output/apps/docker-webhook/test/smoke.sh
Executable file
14
output/apps/docker-webhook/test/smoke.sh
Executable 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"
|
27
output/apps/drawio/CloudronManifest.json
Normal file
27
output/apps/drawio/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/drawio/Dockerfile
Normal file
39
output/apps/drawio/Dockerfile
Normal 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"]
|
20
output/apps/drawio/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/drawio/app/.gitkeep
Normal file
0
output/apps/drawio/app/.gitkeep
Normal file
9
output/apps/drawio/metadata.json
Normal file
9
output/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-02T17:19:01Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/drawio/start.sh
Executable file
9
output/apps/drawio/start.sh
Executable 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
|
14
output/apps/drawio/test/smoke.sh
Executable file
14
output/apps/drawio/test/smoke.sh
Executable 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"
|
27
output/apps/easy-gate/CloudronManifest.json
Normal file
27
output/apps/easy-gate/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/easy-gate/Dockerfile
Normal file
39
output/apps/easy-gate/Dockerfile
Normal 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"]
|
20
output/apps/easy-gate/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/easy-gate/app/.gitkeep
Normal file
0
output/apps/easy-gate/app/.gitkeep
Normal file
9
output/apps/easy-gate/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/easy-gate/start.sh
Executable file
9
output/apps/easy-gate/start.sh
Executable 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
|
14
output/apps/easy-gate/test/smoke.sh
Executable file
14
output/apps/easy-gate/test/smoke.sh
Executable 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"
|
27
output/apps/elabftw/CloudronManifest.json
Normal file
27
output/apps/elabftw/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/elabftw/Dockerfile
Normal file
39
output/apps/elabftw/Dockerfile
Normal 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"]
|
20
output/apps/elabftw/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/elabftw/app/.gitkeep
Normal file
0
output/apps/elabftw/app/.gitkeep
Normal file
9
output/apps/elabftw/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/elabftw/start.sh
Executable file
9
output/apps/elabftw/start.sh
Executable 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
|
14
output/apps/elabftw/test/smoke.sh
Executable file
14
output/apps/elabftw/test/smoke.sh
Executable 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"
|
27
output/apps/fleetdm-fleet/CloudronManifest.json
Normal file
27
output/apps/fleetdm-fleet/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/fleetdm-fleet/Dockerfile
Normal file
39
output/apps/fleetdm-fleet/Dockerfile
Normal 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"]
|
20
output/apps/fleetdm-fleet/README.md
Normal file
20
output/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
|
||||
- **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.
|
0
output/apps/fleetdm-fleet/app/.gitkeep
Normal file
0
output/apps/fleetdm-fleet/app/.gitkeep
Normal file
9
output/apps/fleetdm-fleet/metadata.json
Normal file
9
output/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-02T17:19:00Z",
|
||||
"notes": "TODO: capture packaging notes"
|
||||
}
|
9
output/apps/fleetdm-fleet/start.sh
Executable file
9
output/apps/fleetdm-fleet/start.sh
Executable 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
|
14
output/apps/fleetdm-fleet/test/smoke.sh
Executable file
14
output/apps/fleetdm-fleet/test/smoke.sh
Executable 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"
|
27
output/apps/fonoster/CloudronManifest.json
Normal file
27
output/apps/fonoster/CloudronManifest.json
Normal 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": {}
|
||||
}
|
||||
}
|
39
output/apps/fonoster/Dockerfile
Normal file
39
output/apps/fonoster/Dockerfile
Normal 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"]
|
20
output/apps/fonoster/README.md
Normal file
20
output/apps/fonoster/README.md
Normal 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
Reference in New Issue
Block a user