Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 8 additions & 18 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
@@ -1,38 +1,27 @@
name: Template Bug Report
description: Report a bug in one of our open source templates (Adguard, Appwrite, etc.)
description: Report a bug in one of our open source templates (Supabase, Appwrite, etc.)
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Before opening a new issue, please search existing issues to see if this bug has already been reported.

This template is specifically for bugs in our open source templates like Adguard, Appwrite, and others.
This template is specifically for bugs in our open source templates like Supabase, Appwrite, and others.

- type: input
attributes:
label: Service/Template Name
description: Which service or template is experiencing the bug?
placeholder: "e.g: nginx, redis, adguard, etc."
validations:
required: true

- type: dropdown
attributes:
label: Structure Type
description: Which structure format is this service using?
options:
- "Flat file (compose-files/service-name.yml)"
- "Folder structure (compose-files/services/service-name/)"
- "Not sure"
label: Template Name
description: Which template is experiencing the bug?
placeholder: "e.g: Supabase, Appwrite, Plausible, etc."
validations:
required: true

- type: textarea
attributes:
label: Relevant Logs of the Error
description: |
**IMPORTANT:** Go to the logs tab in your Compose Logs and take a screenshot of the error.
**IMPORTANT:** Please provide clear error logs from your deployment environment.
Please be clear and include the full error message. You can also paste text logs here.
placeholder: |
Please attach a clear screenshot of the error logs from the logs tab.
Expand Down Expand Up @@ -69,7 +58,8 @@ body:
render: bash
placeholder: |
Operating System: Ubuntu 20.04
Compose version: 2.40.3
Docker Version: [e.g., 24.0.0]
Docker Compose Version: [e.g., 2.20.0]
VPS Provider: DigitalOcean, Hetzner, etc.
Template Version: [if known]
Browser: Chrome, Firefox, etc. [if relevant]
Expand Down
11 changes: 0 additions & 11 deletions .github/ISSUE_TEMPLATE/config.yml

This file was deleted.

128 changes: 20 additions & 108 deletions .github/ISSUE_TEMPLATE/feature-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,136 +2,48 @@ name: New Template Request
description: Suggest a new template for the project
labels: ["template"]
body:
- type: markdown
attributes:
value: |
Before submitting, please review the [README.md](https://github.com/hhftechnology/Marketplace/blob/main/README.md) to understand the repository structure and submission guidelines.

- type: input
attributes:
label: Service Name
description: Provide a clear and descriptive name for the service/template
placeholder: "e.g: nginx, redis, postgres, etc."
label: Template Name
description: Provide a clear and descriptive name for the template
placeholder: "e.g: Supabase, Appwrite, etc."
validations:
required: true

- type: dropdown
- type: input
attributes:
label: Structure Preference
description: Choose the structure format for this service
options:
- "Flat file (compose-files/service-name.yml)"
- "Folder structure (compose-files/services/service-name/)"
- "No preference"
label: Template URL
description: Link to the repository or resource where the template is located
placeholder: "https://github.com/username/repo"
validations:
required: true

- type: textarea
attributes:
label: Docker Compose Configuration
description: |
Paste your complete `docker-compose.yml` configuration here.

**Guidelines:**
- Include inline comments (ScaleTail style) for clarity
- Use `${VARIABLE_NAME}` syntax for configurable values
- Use descriptive volume placeholders (e.g., `/WORK_DIR` instead of absolute paths)
- Set timezone to `Etc/UTC` by default
placeholder: |
```yaml
services:
service-name:
image: service:latest
container_name: service-name
restart: unless-stopped
ports:
- "${PORT:-8080}:8080" # Service port
environment:
- SERVICE_VAR=${SERVICE_VAR}
```
validations:
required: true

- type: textarea
attributes:
label: Template Metadata (Optional - Folder Structure Only)
description: |
If using folder structure and the service needs template variables, domain configuration, or custom mounts, provide the `template.toml` content here.

See examples in `compose-files/services/nginx/template.toml` or `compose-files/services/redis/template.toml`
placeholder: |
```toml
[variables]
main_domain = "${domain}"
service_port = "80"

[config]
[[config.domains]]
serviceName = "service-name"
port = 80
host = "${main_domain}"
path = "/"
```
validations:
required: false

- type: textarea
attributes:
label: Environment Variables Example (Optional - Folder Structure Only)
description: |
If using folder structure and the service has environment variables, provide the `.env.example` content here.

See examples in the service folders for the format.
placeholder: |
```bash
# Service Configuration
SERVICE=service-name
IMAGE_URL=service:latest
SERVICEPORT=8080

# Template Variables
MAIN_DOMAIN=example.com
```
validations:
required: false

- type: textarea
- type: input
attributes:
label: Service Documentation (Optional - Folder Structure Only)
description: |
If using folder structure, provide a README.md content with setup instructions, features, and usage notes.
placeholder: |
# Service Name

Brief description of the service.

## Features
- Feature 1
- Feature 2

## Configuration
Setup instructions...
label: Docker Compose Link
description: Link to docker-compose.yml file or Docker documentation (optional) but would be helpful
placeholder: "https://github.com/username/repo/blob/main/docker-compose.yml"
validations:
required: false

- type: textarea
attributes:
label: Resources and References
description: List the resources, links, or any other information that would be helpful
label: Resources
description: List the resources, links, or any other information that would be helpful to know about the template
placeholder: |
- Link to official documentation
- Link to Docker Hub page
- Link to GitHub repository
- Link to website
- Link to the template
- Link to the documentation
- Link to the repository
- Link to the website
validations:
required: false

- type: textarea
attributes:
label: Service Description
description: Provide a detailed description of what this service does and when to use it
label: Template Description
description: Provide a detailed description of what this template does and when to use it
placeholder: |
This service is perfect for [use case]...
This template is perfect for creating modern web applications with React and TypeScript...
validations:
required: false

Expand Down
57 changes: 5 additions & 52 deletions .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,16 @@
## What is this PR about?

<!-- Describe what this PR adds or changes -->
- [ ] New service/template
- [ ] Update to existing service
- [ ] Bug fix
- [ ] Documentation update
- [ ] Other (please describe)

**Service Name:** [e.g., nginx, redis, postgres]

**Structure Type:**
- [ ] Flat file (`compose-files/service-name.yml`)
- [ ] Folder structure (`compose-files/services/service-name/`)
New PR of [Template Name]

## Checklist

Before submitting this PR, please make sure that:

### General Requirements
- [ ] I have read the [README.md](https://github.com/hhftechnology/Marketplace/blob/main/README.md) and followed the submission guidelines
- [ ] I have tested the template/service in my instance
- [ ] The Docker image(s) are publicly accessible (no private registries)
- [ ] I have used `${VARIABLE_NAME}` syntax for configurable values
- [ ] I have used descriptive volume placeholders (e.g., `/WORK_DIR` instead of absolute paths)
- [ ] Timezone is set to `Etc/UTC` (if applicable)

### Docker Compose File
- [ ] Includes inline comments (ScaleTail style) for clarity
- [ ] Minimized unnecessary ports, environment variables, or configurations
- [ ] Uses `latest` tag where possible (or specific version if required)
- [ ] Multi-service support is properly configured (if applicable)

### Folder Structure (If Applicable)
- [ ] `docker-compose.yml` is included and properly formatted
- [ ] `template.toml` is included (if template variables/domain config needed)
- [ ] `.env.example` is included (if environment variables are needed)
- [ ] `README.md` is included (if detailed setup instructions are needed)

### Testing
- [ ] I have tested the service deployment
- [ ] I have verified all environment variables work correctly
- [ ] I have checked that volumes and ports are correctly configured
- [ ] I have verified the service starts and runs without errors

## Files Changed

<!-- List the files you've added or modified -->
- `compose-files/[service-name].yml` (flat file structure)
- OR
- `compose-files/services/[service-name]/docker-compose.yml`
- `compose-files/services/[service-name]/template.toml` (if applicable)
- `compose-files/services/[service-name]/.env.example` (if applicable)
- `compose-files/services/[service-name]/README.md` (if applicable)

## Additional Notes

<!-- Any additional context, screenshots, or information that would help reviewers -->
- [ ] I have read the suggestions in the README.md file https://github.com/hhftechnology/Marketplace?tab=readme-ov-file#general-suggestions-when-creating-a-template
- [ ] I have tested the template in my instance, so the maintainers don't spend time trying to figure out what's wrong.
- [ ] I have added tests that demonstrate that my correction works or that my new feature works.

## Issues Related (if applicable)
## Issues related (if applicable)

Close automatically the related issues using the keywords: `closes #ISSUE_NUMBER`, `fixes #ISSUE_NUMBER`, `resolves #ISSUE_NUMBER`

Expand Down
64 changes: 64 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Marketplace Repository - Copilot Instructions

## Project Overview

This repository maintains Docker Compose templates for deploying open-source applications. The core structure revolves around the `compose-files/` directory, where each subdirectory represents a deployable service (e.g., `compose-files/nginx/` for Nginx web server).

Key components:

- **Compose Files**: Self-contained templates with `docker-compose.yml` (service definitions).
- **meta.json**: Centralized index of all templates. Entries include `id`, `name`, `version`, `description`, `logo`, `links`, and `tags`.
- **Scripts**: Node.js tools in root and `build-scripts/` for maintaining `meta.json` (deduplication, sorting, validation).

Data flow: New templates added to `compose-files/` → Metadata updated in `meta.json` → Processing scripts ensure consistency → Templates ready for deployment.

The "why": Enables rapid, standardized deployment of 300+ OSS apps without manual config. Structure prioritizes simplicity—each template is independent, no shared state or complex interdependencies.

## Key Files and Directories

- `meta.json`: Array of template objects. Always process after edits using `node dedupe-and-sort-meta.js` to remove duplicates (by `id`) and sort alphabetically.
- `compose-files/<service>/`:
- `docker-compose.yml`: Standard Docker Compose v3.8. May include ports, volumes, and environment variables as needed.
- `logo.svg/png`: Service icon, referenced in `meta.json`.
- `dedupe-and-sort-meta.js`: Standalone script—reads `meta.json`, removes duplicate `id`s (keeps first), sorts by `id` (case-insensitive), creates timestamped backup.
- `build-scripts/process-meta.js`: Advanced processor with CLI options (`--verbose`, `--no-backup`, `--input`/`--output`), JSON schema validation (required: `id`, `name`, `version`, `description`, `links.github`, `logo`, `tags` array).

Exemplary template: `compose-files/nginx/`—`docker-compose.yml` defines Nginx service; meta entry tags as ["proxy", "web-server"].

## Development Workflow

1. **Add/Update Template**:

- Create `compose-files/<id>/` (e.g., `nginx`).
- Implement `docker-compose.yml` (single or multiple services; use volumes for persistence).
- Add/update `meta.json` entry with exact `id` matching folder.
- Run `node dedupe-and-sort-meta.js --backup` to validate/sort.
- Commit and push changes.

2. **Local Development**:

- Meta processing: `node build-scripts/process-meta.js --verbose` or `node dedupe-and-sort-meta.js --backup`.
- Test template: Use `docker-compose up` in the service directory to test locally.

3. **CI/CD**:
- `.github/workflows/validate-meta.yml`: Runs validation on push/PR—fails on duplicates, invalid JSON, missing fields.
- Integrate processing: Add `node build-scripts/process-meta.js` to build steps; use `--no-backup` in CI.

No tests in repo—focus on manual validation via scripts and Docker Compose testing. Debug: Check console output from processing scripts for warnings (e.g., missing `id`).

## Conventions and Patterns

- **Template IDs**: Lowercase, kebab-case (e.g., `active-pieces`); unique across repo—enforced by dedupe script.
- **Docker Compose**: Standard Docker Compose v3.8 format. Include `restart: unless-stopped`, persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services typically named after folder (e.g., `nginx` service).
- **Meta.json**: Entries as JSON objects; tags array of lowercase strings (e.g., ["monitoring", "database"]); links object with `github`, `website`, `docs`.
- **Versions**: Use `latest` tag or pin to specific versions in `docker-compose.yml` (e.g., `nginx:1.25-alpine`); match in `meta.json.version`.
- **Logos**: SVG preferred; size ~128x128; file name in `meta.json.logo` (e.g., "nginx.svg").

Cross-component: No runtime communication—templates independent. Each template can be deployed standalone using Docker Compose.

## Integration Points

- **Docker Compose**: Templates can be deployed directly using `docker-compose up`. Test deploys validate env interpolation and service configuration.
- **External Deps**: Docker Compose (v3.8+). No runtime deps beyond Node.js for meta processing scripts.

When editing, always re-run meta processing and validate template deployment.
Loading
Loading