diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 157e409c8a..7fd2c358e3 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,45 +1,51 @@ - + -### Changes - - +## Changes + + - -### Issues - +## Issues + + + +- Fixes + +## Category + +- [ ] Bug fix +- [ ] Improvement +- [ ] New feature +- [ ] Adding new one click service +- [ ] Fixing or updating existing one click service + +## Preview + + + +## AI Assistance -- fixes: + -### Category - -- [x] Bug fix -- [x] New feature -- [x] Adding new one click service -- [x] Fixing or updating existing one click service +- [ ] AI was NOT used to create this PR +- [ ] AI was used (please describe below) -### Screenshots or Video (if applicable) - - +**If AI was used:** -### AI Usage - - +- Tools used: +- How extensively: -- [x] AI is used in the process of creating this PR -- [x] AI is NOT used in the process of creating this PR +## Testing -### Steps to Test - - + -- Step 1 – what to do first -- Step 2 – next action +## Contributor Agreement -### Contributor Agreement - + > [!IMPORTANT] > -> - [x] I have read and understood the [contributor guidelines](https://github.com/coollabsio/coolify/blob/v4.x/CONTRIBUTING.md). If I have failed to follow any guideline, I understand that this PR may be closed without review. -> - [x] I have tested the changes thoroughly and am confident that they will work as expected without issues when the maintainer tests them +> - [ ] I have read and understood the [contributor guidelines](https://github.com/coollabsio/coolify/blob/v4.x/CONTRIBUTING.md). If I have failed to follow any guideline, I understand that this PR may be closed without review. +> - [ ] I have searched [existing issues](https://github.com/coollabsio/coolify/issues) and [pull requests](https://github.com/coollabsio/coolify/pulls) (including closed ones) to ensure this isn't a duplicate. +> - [ ] I have tested all the changes thoroughly with a local development instance of Coolify and I am confident that they will work as expected when a maintainer tests them. diff --git a/.github/workflows/pr-quality.yaml b/.github/workflows/pr-quality.yaml index d264ad4700..594724fdbc 100644 --- a/.github/workflows/pr-quality.yaml +++ b/.github/workflows/pr-quality.yaml @@ -16,7 +16,7 @@ jobs: - uses: peakoss/anti-slop@v0 with: # General Settings - max-failures: 3 + max-failures: 4 # PR Branch Checks allowed-target-branches: "next" @@ -26,7 +26,6 @@ jobs: main master v4.x - next # PR Quality Checks max-negative-reactions: 0 @@ -37,16 +36,24 @@ jobs: # PR Description Checks require-description: true - max-description-length: 0 + max-description-length: 2500 max-emoji-count: 2 - require-pr-template: true + max-code-references: 5 require-linked-issue: false blocked-terms: "STRAWBERRY" blocked-issue-numbers: 8154 + # PR Template Checks + require-pr-template: true + strict-pr-template-sections: "Contributor Agreement" + optional-pr-template-sections: "Issues,Preview" + max-additional-pr-template-sections: 2 + # Commit Message Checks + max-commit-message-length: 500 require-conventional-commits: false - blocked-commit-authors: "claude,copilot" + require-commit-author-match: true + blocked-commit-authors: "" # File Checks allowed-file-extensions: "" @@ -59,38 +66,43 @@ jobs: templates/service-templates-latest.json templates/service-templates.json require-final-newline: true + max-added-comments: 10 - # User Health Checks + # User Checks + detect-spam-usernames: true + min-account-age: 30 + max-daily-forks: 7 + min-profile-completeness: 4 + + # Merge Checks min-repo-merged-prs: 0 min-repo-merge-ratio: 0 min-global-merge-ratio: 30 global-merge-ratio-exclude-own: false - min-account-age: 10 # Exemptions - exempt-author-association: "OWNER,MEMBER,COLLABORATOR" - exempt-users: "" + exempt-draft-prs: false exempt-bots: | actions-user dependabot[bot] renovate[bot] github-actions[bot] - exempt-draft-prs: false + exempt-users: "" + exempt-author-association: "OWNER,MEMBER,COLLABORATOR" exempt-label: "quality/exempt" exempt-pr-label: "" - exempt-milestones: "" - exempt-pr-milestones: "" exempt-all-milestones: false exempt-all-pr-milestones: false + exempt-milestones: "" + exempt-pr-milestones: "" # PR Success Actions success-add-pr-labels: "quality/verified" # PR Failure Actions - close-pr: true - lock-pr: false - delete-branch: false - failure-pr-message: "This PR did not pass quality checks so it will be closed. If you believe this is a mistake please let us know." failure-remove-pr-labels: "" failure-remove-all-pr-labels: true failure-add-pr-labels: "quality/rejected" + failure-pr-message: "This PR did not pass quality checks so it will be closed. If you believe this is a mistake please let us know." + close-pr: true + lock-pr: false diff --git a/public/svgs/espocrm.svg b/public/svgs/espocrm.svg new file mode 100644 index 0000000000..79d96f8c31 --- /dev/null +++ b/public/svgs/espocrm.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/espocrm.yaml b/templates/compose/espocrm.yaml new file mode 100644 index 0000000000..6fec260c45 --- /dev/null +++ b/templates/compose/espocrm.yaml @@ -0,0 +1,75 @@ +# documentation: https://docs.espocrm.com +# slogan: EspoCRM is a free and open-source CRM platform. +# category: cms +# tags: crm, self-hosted, open-source, workflow, automation, project management +# logo: svgs/espocrm.svg +# port: 80 + +services: + espocrm: + image: espocrm/espocrm:9 + environment: + - SERVICE_URL_ESPOCRM + - ESPOCRM_ADMIN_USERNAME=${ESPOCRM_ADMIN_USERNAME:-admin} + - ESPOCRM_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - ESPOCRM_DATABASE_PLATFORM=Mysql + - ESPOCRM_DATABASE_HOST=espocrm-db + - ESPOCRM_DATABASE_NAME=${MARIADB_DATABASE:-espocrm} + - ESPOCRM_DATABASE_USER=${SERVICE_USER_MARIADB} + - ESPOCRM_DATABASE_PASSWORD=${SERVICE_PASSWORD_MARIADB} + - ESPOCRM_SITE_URL=${SERVICE_URL_ESPOCRM} + volumes: + - espocrm:/var/www/html + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:80"] + interval: 2s + start_period: 60s + timeout: 10s + retries: 15 + depends_on: + espocrm-db: + condition: service_healthy + + espocrm-daemon: + image: espocrm/espocrm:9 + container_name: espocrm-daemon + volumes: + - espocrm:/var/www/html + restart: always + entrypoint: docker-daemon.sh + depends_on: + espocrm: + condition: service_healthy + + espocrm-websocket: + image: espocrm/espocrm:9 + container_name: espocrm-websocket + environment: + - SERVICE_URL_ESPOCRM_WEBSOCKET_8080 + - ESPOCRM_CONFIG_USE_WEB_SOCKET=true + - ESPOCRM_CONFIG_WEB_SOCKET_URL=$SERVICE_URL_ESPOCRM_WEBSOCKET + - ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBSCRIBER_DSN=tcp://*:7777 + - ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBMISSION_DSN=tcp://espocrm-websocket:7777 + volumes: + - espocrm:/var/www/html + restart: always + entrypoint: docker-websocket.sh + depends_on: + espocrm: + condition: service_healthy + + espocrm-db: + image: mariadb:11.8 + environment: + - MARIADB_DATABASE=${MARIADB_DATABASE:-espocrm} + - MARIADB_USER=${SERVICE_USER_MARIADB} + - MARIADB_PASSWORD=${SERVICE_PASSWORD_MARIADB} + - MARIADB_ROOT_PASSWORD=${SERVICE_PASSWORD_ROOT} + volumes: + - espocrm-db:/var/lib/mysql + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 20s + start_period: 10s + timeout: 10s + retries: 3