diff --git a/templates/compose/forgejo-with-mariadb.yaml b/templates/compose/forgejo-with-mariadb.yaml index d3fced6cae..6e28a0d19c 100644 --- a/templates/compose/forgejo-with-mariadb.yaml +++ b/templates/compose/forgejo-with-mariadb.yaml @@ -13,11 +13,14 @@ services: - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=mysql - FORGEJO__database__HOST=mariadb - - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__NAME=${MYSQL_DATABASE:-forgejo} - FORGEJO__database__USER=$SERVICE_USER_MYSQL - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL volumes: @@ -25,7 +28,7 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 depends_on: mariadb: condition: service_healthy @@ -42,7 +45,7 @@ services: environment: - MYSQL_USER=${SERVICE_USER_MYSQL} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_DATABASE=${MYSQL_DATABASE:-forgejo} - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] diff --git a/templates/compose/forgejo-with-mysql.yaml b/templates/compose/forgejo-with-mysql.yaml index 0863141363..5c37a88ddb 100644 --- a/templates/compose/forgejo-with-mysql.yaml +++ b/templates/compose/forgejo-with-mysql.yaml @@ -13,11 +13,14 @@ services: - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=mysql - FORGEJO__database__HOST=mysql - - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__NAME=${MYSQL_DATABASE:-forgejo} - FORGEJO__database__USER=$SERVICE_USER_MYSQL - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL volumes: @@ -25,7 +28,7 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 depends_on: mysql: condition: service_healthy @@ -42,7 +45,7 @@ services: environment: - MYSQL_USER=${SERVICE_USER_MYSQL} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_DATABASE=${MYSQL_DATABASE:-forgejo} - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] diff --git a/templates/compose/forgejo-with-postgresql.yaml b/templates/compose/forgejo-with-postgresql.yaml index dd1abf1eb7..ef7c8107de 100644 --- a/templates/compose/forgejo-with-postgresql.yaml +++ b/templates/compose/forgejo-with-postgresql.yaml @@ -13,11 +13,14 @@ services: - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - USER_UID=1000 - USER_GID=1000 - FORGEJO__database__DB_TYPE=postgres - FORGEJO__database__HOST=postgresql - - FORGEJO__database__NAME=${POSTGRESQL_DATABASE-forgejo} + - FORGEJO__database__NAME=${POSTGRESQL_DATABASE:-forgejo} - FORGEJO__database__USER=$SERVICE_USER_POSTGRESQL - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_POSTGRESQL volumes: @@ -25,7 +28,7 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 depends_on: postgresql: condition: service_healthy @@ -42,7 +45,7 @@ services: environment: - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} - - POSTGRES_DB=${POSTGRESQL_DATABASE} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-forgejo} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s diff --git a/templates/compose/forgejo-with-runner-with-mariadb.yaml b/templates/compose/forgejo-with-runner-with-mariadb.yaml index 71f35c3429..839c7687b5 100644 --- a/templates/compose/forgejo-with-runner-with-mariadb.yaml +++ b/templates/compose/forgejo-with-runner-with-mariadb.yaml @@ -1,4 +1,3 @@ -# ignore: true # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. # category: git @@ -13,15 +12,22 @@ services: - SERVICE_URL_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - - USER_UID=1000 - - USER_GID=1000 + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS:-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - FORGEJO__database__DB_TYPE=mysql - FORGEJO__database__HOST=mariadb - - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__NAME=${MYSQL_DATABASE:-forgejo} - FORGEJO__database__USER=$SERVICE_USER_MYSQL - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} + - USER_UID=1000 + - USER_GID=1000 + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} + - FORGEJO__security__INSTALL_LOCK=true + - FORGEJO_ADMIN_USER=${SERVICE_USER_ADMIN} + - FORGEJO_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - FORGEJO_ADMIN_EMAIL=${FORGEJO_ADMIN_EMAIL:-admin@example.com} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions @@ -30,21 +36,23 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 depends_on: mariadb: condition: service_healthy + # Healthy only after the runner is registered, so the runner starts after it. healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] - interval: 2s + test: ["CMD-SHELL", "curl -fs http://127.0.0.1:3000 > /dev/null && test -f /tmp/runner-registered"] + interval: 5s timeout: 10s - retries: 15 + retries: 30 command: >- bash -c ' - /bin/s6-svscan /etc/s6 & - sleep 10 ; - su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; - sleep infinity + /usr/bin/s6-svscan /etc/s6 & + until su -c "forgejo forgejo-cli actions register --keep-labels --secret $${RUNNER_SHARED_SECRET:0:40}" git ; do sleep 5 ; done ; + su -c "forgejo admin user create --admin --username \"$$FORGEJO_ADMIN_USER\" --password \"$$FORGEJO_ADMIN_PASSWORD\" --email \"$$FORGEJO_ADMIN_EMAIL\" --must-change-password=false" git || true ; + touch /tmp/runner-registered ; + wait ' mariadb: @@ -54,7 +62,7 @@ services: environment: - MYSQL_USER=${SERVICE_USER_MYSQL} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_DATABASE=${MYSQL_DATABASE:-forgejo} - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] @@ -67,56 +75,48 @@ services: hostname: docker privileged: true healthcheck: - test: ["CMD", "pgrep", "dockerd"] + test: ["CMD", "docker", "-H", "unix:///var/run/docker.sock", "info"] interval: 10s timeout: 30s retries: 10 environment: - DOCKER_TLS_CERTDIR: /certs - DOCKER_HOST: docker-in-docker + - DOCKER_TLS_CERTDIR=/certs + - DOCKER_HOST=docker-in-docker volumes: - forgejo-did-certs:/certs runner-register: - image: code.forgejo.org/forgejo/runner:3.5.0 + image: data.forgejo.org/forgejo/runner:13.2.0 restart: 'no' - links: - - docker-in-docker - - forgejo + exclude_from_hc: true environment: - - DOCKER_HOST=tcp://docker-in-docker:2376 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} volumes: - forgejo-runner-data:/data - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro - healthcheck: - disable: true user: 0:0 command: >- bash -ec ' - while : ; do - forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; - sleep 1 ; - done ; - sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + secret=$${RUNNER_SHARED_SECRET:0:40} ; + uuid=$$(printf %s "$${secret:0:16}" | od -An -tx1 | tr -d " \n" | sed -E "s/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/") ; forgejo-runner generate-config > config.yml ; + sed -i -e "s| labels: \[\]| labels: [\"docker:docker://node:22-bookworm\", \"ubuntu-latest:docker://catthehacker/ubuntu:act-22.04\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" config.yml ; sed -i -e "s|network: .*|network: host|" config.yml ; sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; - chown -R 1000:1000 /data ; - exit 0 + sed -i -e "s| connections:| connections:\n default:\n url: http://forgejo:3000\n uuid: $$uuid\n token: $$secret|" config.yml ; + chown -R 1000:1000 /data ' runner: - image: code.forgejo.org/forgejo/runner:3.5.0 - links: - - docker-in-docker - - forgejo + image: data.forgejo.org/forgejo/runner:13.2.0 depends_on: + forgejo: + condition: service_healthy docker-in-docker: - condition: service_started + condition: service_healthy + runner-register: + condition: service_completed_successfully environment: - DOCKER_HOST=tcp://docker:2376 - DOCKER_CERT_PATH=/certs/client @@ -125,14 +125,9 @@ services: volumes: - forgejo-runner-data:/data - forgejo-did-certs:/certs - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro healthcheck: test: ["CMD", "pgrep", "forgejo-runner"] interval: 10s timeout: 30s retries: 10 - command: >- - bash -c ' - while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done - ' + command: forgejo-runner --config config.yml daemon diff --git a/templates/compose/forgejo-with-runner-with-mysql.yaml b/templates/compose/forgejo-with-runner-with-mysql.yaml index 7e5b62a9d2..70be0d20c3 100644 --- a/templates/compose/forgejo-with-runner-with-mysql.yaml +++ b/templates/compose/forgejo-with-runner-with-mysql.yaml @@ -1,4 +1,3 @@ -# ignore: true # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. # category: git @@ -13,15 +12,22 @@ services: - SERVICE_URL_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - - USER_UID=1000 - - USER_GID=1000 + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS:-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - FORGEJO__database__DB_TYPE=mysql - FORGEJO__database__HOST=mysql - - FORGEJO__database__NAME=${MYSQL_DATABASE-forgejo} + - FORGEJO__database__NAME=${MYSQL_DATABASE:-forgejo} - FORGEJO__database__USER=$SERVICE_USER_MYSQL - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_MYSQL - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} + - USER_UID=1000 + - USER_GID=1000 + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} + - FORGEJO__security__INSTALL_LOCK=true + - FORGEJO_ADMIN_USER=${SERVICE_USER_ADMIN} + - FORGEJO_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - FORGEJO_ADMIN_EMAIL=${FORGEJO_ADMIN_EMAIL:-admin@example.com} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions @@ -30,21 +36,23 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 depends_on: mysql: condition: service_healthy + # Healthy only after the runner is registered, so the runner starts after it. healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] - interval: 2s + test: ["CMD-SHELL", "curl -fs http://127.0.0.1:3000 > /dev/null && test -f /tmp/runner-registered"] + interval: 5s timeout: 10s - retries: 15 + retries: 30 command: >- bash -c ' - /bin/s6-svscan /etc/s6 & - sleep 10 ; - su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; - sleep infinity + /usr/bin/s6-svscan /etc/s6 & + until su -c "forgejo forgejo-cli actions register --keep-labels --secret $${RUNNER_SHARED_SECRET:0:40}" git ; do sleep 5 ; done ; + su -c "forgejo admin user create --admin --username \"$$FORGEJO_ADMIN_USER\" --password \"$$FORGEJO_ADMIN_PASSWORD\" --email \"$$FORGEJO_ADMIN_EMAIL\" --must-change-password=false" git || true ; + touch /tmp/runner-registered ; + wait ' mysql: @@ -54,7 +62,7 @@ services: environment: - MYSQL_USER=${SERVICE_USER_MYSQL} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_DATABASE=${MYSQL_DATABASE:-forgejo} - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"] @@ -67,56 +75,48 @@ services: hostname: docker privileged: true healthcheck: - test: ["CMD", "pgrep", "dockerd"] + test: ["CMD", "docker", "-H", "unix:///var/run/docker.sock", "info"] interval: 10s timeout: 30s retries: 10 environment: - DOCKER_TLS_CERTDIR: /certs - DOCKER_HOST: docker-in-docker + - DOCKER_TLS_CERTDIR=/certs + - DOCKER_HOST=docker-in-docker volumes: - forgejo-did-certs:/certs runner-register: - image: code.forgejo.org/forgejo/runner:3.5.0 + image: data.forgejo.org/forgejo/runner:13.2.0 restart: 'no' - links: - - docker-in-docker - - forgejo + exclude_from_hc: true environment: - - DOCKER_HOST=tcp://docker-in-docker:2376 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} volumes: - forgejo-runner-data:/data - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro - healthcheck: - disable: true user: 0:0 command: >- bash -ec ' - while : ; do - forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; - sleep 1 ; - done ; - sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + secret=$${RUNNER_SHARED_SECRET:0:40} ; + uuid=$$(printf %s "$${secret:0:16}" | od -An -tx1 | tr -d " \n" | sed -E "s/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/") ; forgejo-runner generate-config > config.yml ; + sed -i -e "s| labels: \[\]| labels: [\"docker:docker://node:22-bookworm\", \"ubuntu-latest:docker://catthehacker/ubuntu:act-22.04\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" config.yml ; sed -i -e "s|network: .*|network: host|" config.yml ; sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; - chown -R 1000:1000 /data ; - exit 0 + sed -i -e "s| connections:| connections:\n default:\n url: http://forgejo:3000\n uuid: $$uuid\n token: $$secret|" config.yml ; + chown -R 1000:1000 /data ' runner: - image: code.forgejo.org/forgejo/runner:3.5.0 - links: - - docker-in-docker - - forgejo + image: data.forgejo.org/forgejo/runner:13.2.0 depends_on: + forgejo: + condition: service_healthy docker-in-docker: - condition: service_started + condition: service_healthy + runner-register: + condition: service_completed_successfully environment: - DOCKER_HOST=tcp://docker:2376 - DOCKER_CERT_PATH=/certs/client @@ -125,14 +125,9 @@ services: volumes: - forgejo-runner-data:/data - forgejo-did-certs:/certs - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro healthcheck: test: ["CMD", "pgrep", "forgejo-runner"] interval: 10s timeout: 30s retries: 10 - command: >- - bash -c ' - while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done - ' + command: forgejo-runner --config config.yml daemon diff --git a/templates/compose/forgejo-with-runner-with-postgresql.yaml b/templates/compose/forgejo-with-runner-with-postgresql.yaml index 1f58b2f296..3ffee45dfc 100644 --- a/templates/compose/forgejo-with-runner-with-postgresql.yaml +++ b/templates/compose/forgejo-with-runner-with-postgresql.yaml @@ -1,8 +1,7 @@ -# ignore: true # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. # category: git -# tags: version control, collaboration, code, hosting, lightweight, runner, postresql, actions, cicd, ci +# tags: version control, collaboration, code, hosting, lightweight, runner, postgresql, actions, cicd, ci # logo: svgs/forgejo.svg # port: 3000 @@ -13,15 +12,22 @@ services: - SERVICE_URL_FORGEJO_3000 - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} - - USER_UID=1000 - - USER_GID=1000 + - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS:-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - FORGEJO__database__DB_TYPE=postgres - FORGEJO__database__HOST=postgresql - - FORGEJO__database__NAME=${POSTGRESQL_DATABASE-forgejo} + - FORGEJO__database__NAME=${POSTGRESQL_DATABASE:-forgejo} - FORGEJO__database__USER=$SERVICE_USER_POSTGRESQL - FORGEJO__database__PASSWD=$SERVICE_PASSWORD_POSTGRESQL - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} + - USER_UID=1000 + - USER_GID=1000 + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} + - FORGEJO__security__INSTALL_LOCK=true + - FORGEJO_ADMIN_USER=${SERVICE_USER_ADMIN} + - FORGEJO_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - FORGEJO_ADMIN_EMAIL=${FORGEJO_ADMIN_EMAIL:-admin@example.com} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions @@ -30,21 +36,23 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 depends_on: postgresql: condition: service_healthy + # Healthy only after the runner is registered, so the runner starts after it. healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] - interval: 2s + test: ["CMD-SHELL", "curl -fs http://127.0.0.1:3000 > /dev/null && test -f /tmp/runner-registered"] + interval: 5s timeout: 10s - retries: 15 + retries: 30 command: >- bash -c ' - /bin/s6-svscan /etc/s6 & - sleep 10 ; - su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; - sleep infinity + /usr/bin/s6-svscan /etc/s6 & + until su -c "forgejo forgejo-cli actions register --keep-labels --secret $${RUNNER_SHARED_SECRET:0:40}" git ; do sleep 5 ; done ; + su -c "forgejo admin user create --admin --username \"$$FORGEJO_ADMIN_USER\" --password \"$$FORGEJO_ADMIN_PASSWORD\" --email \"$$FORGEJO_ADMIN_EMAIL\" --must-change-password=false" git || true ; + touch /tmp/runner-registered ; + wait ' postgresql: @@ -54,7 +62,7 @@ services: environment: - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} - - POSTGRES_DB=${POSTGRESQL_DATABASE} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-forgejo} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s @@ -66,56 +74,48 @@ services: hostname: docker privileged: true healthcheck: - test: ["CMD", "pgrep", "dockerd"] + test: ["CMD", "docker", "-H", "unix:///var/run/docker.sock", "info"] interval: 10s timeout: 30s retries: 10 environment: - DOCKER_TLS_CERTDIR: /certs - DOCKER_HOST: docker-in-docker + - DOCKER_TLS_CERTDIR=/certs + - DOCKER_HOST=docker-in-docker volumes: - forgejo-did-certs:/certs runner-register: - image: code.forgejo.org/forgejo/runner:3.5.0 + image: data.forgejo.org/forgejo/runner:13.2.0 restart: 'no' - links: - - docker-in-docker - - forgejo + exclude_from_hc: true environment: - - DOCKER_HOST=tcp://docker-in-docker:2376 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} volumes: - forgejo-runner-data:/data - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro - healthcheck: - disable: true user: 0:0 command: >- bash -ec ' - while : ; do - forgejo-runner create-runner-file --connect --instance http://forgejo:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; - sleep 1 ; - done ; - sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + secret=$${RUNNER_SHARED_SECRET:0:40} ; + uuid=$$(printf %s "$${secret:0:16}" | od -An -tx1 | tr -d " \n" | sed -E "s/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/") ; forgejo-runner generate-config > config.yml ; + sed -i -e "s| labels: \[\]| labels: [\"docker:docker://node:22-bookworm\", \"ubuntu-latest:docker://catthehacker/ubuntu:act-22.04\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" config.yml ; sed -i -e "s|network: .*|network: host|" config.yml ; sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; - chown -R 1000:1000 /data ; - exit 0 + sed -i -e "s| connections:| connections:\n default:\n url: http://forgejo:3000\n uuid: $$uuid\n token: $$secret|" config.yml ; + chown -R 1000:1000 /data ' runner: - image: code.forgejo.org/forgejo/runner:3.5.0 - links: - - docker-in-docker - - forgejo + image: data.forgejo.org/forgejo/runner:13.2.0 depends_on: + forgejo: + condition: service_healthy docker-in-docker: - condition: service_started + condition: service_healthy + runner-register: + condition: service_completed_successfully environment: - DOCKER_HOST=tcp://docker:2376 - DOCKER_CERT_PATH=/certs/client @@ -124,14 +124,9 @@ services: volumes: - forgejo-runner-data:/data - forgejo-did-certs:/certs - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro healthcheck: test: ["CMD", "pgrep", "forgejo-runner"] interval: 10s timeout: 30s retries: 10 - command: >- - bash -c ' - while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done - ' + command: forgejo-runner --config config.yml daemon diff --git a/templates/compose/forgejo-with-runner.yaml b/templates/compose/forgejo-with-runner.yaml index d1f0e45826..8ec666f284 100644 --- a/templates/compose/forgejo-with-runner.yaml +++ b/templates/compose/forgejo-with-runner.yaml @@ -1,4 +1,3 @@ -# ignore: true # documentation: https://forgejo.org/docs # slogan: Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job. # category: git @@ -14,9 +13,16 @@ services: - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS:-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - USER_UID=1000 - USER_GID=1000 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET-0000000000000000000000000000000000000000} + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} + - FORGEJO__security__INSTALL_LOCK=true + - FORGEJO_ADMIN_USER=${SERVICE_USER_ADMIN} + - FORGEJO_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - FORGEJO_ADMIN_EMAIL=${FORGEJO_ADMIN_EMAIL:-admin@example.com} - FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true - FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false - FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.actions @@ -25,18 +31,20 @@ services: - forgejo-timezone:/etc/timezone:ro - forgejo-localtime:/etc/localtime:ro ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 + # Healthy only after the runner is registered, so the runner starts after it. healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"] - interval: 2s + test: ["CMD-SHELL", "curl -fs http://127.0.0.1:3000 > /dev/null && test -f /tmp/runner-registered"] + interval: 5s timeout: 10s - retries: 15 + retries: 30 command: >- bash -c ' - /bin/s6-svscan /etc/s6 & - sleep 10 ; - su -c "forgejo forgejo-cli actions register --secret ${RUNNER_SHARED_SECRET}" git ; - sleep infinity + /usr/bin/s6-svscan /etc/s6 & + until su -c "forgejo forgejo-cli actions register --keep-labels --secret $${RUNNER_SHARED_SECRET:0:40}" git ; do sleep 5 ; done ; + su -c "forgejo admin user create --admin --username \"$$FORGEJO_ADMIN_USER\" --password \"$$FORGEJO_ADMIN_PASSWORD\" --email \"$$FORGEJO_ADMIN_EMAIL\" --must-change-password=false" git || true ; + touch /tmp/runner-registered ; + wait ' docker-in-docker: @@ -44,56 +52,48 @@ services: hostname: docker privileged: true healthcheck: - test: ["CMD", "pgrep", "dockerd"] + test: ["CMD", "docker", "-H", "unix:///var/run/docker.sock", "info"] interval: 10s timeout: 30s retries: 10 environment: - DOCKER_TLS_CERTDIR=/certs - DOCKER_HOST=docker-in-docker + - DOCKER_TLS_CERTDIR=/certs + - DOCKER_HOST=docker-in-docker volumes: - forgejo-did-certs:/certs runner-register: - image: code.forgejo.org/forgejo/runner:3.5.0 + image: data.forgejo.org/forgejo/runner:13.2.0 restart: 'no' - links: - - docker-in-docker - - forgejo + exclude_from_hc: true environment: - - DOCKER_HOST=tcp://docker-in-docker:2376 - - RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} + - RUNNER_SHARED_SECRET=${SERVICE_HEX_64_RUNNER} volumes: - forgejo-runner-data:/data - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro - healthcheck: - disable: true user: 0:0 command: >- bash -ec ' - while : ; do - forgejo-runner create-runner-file --connect --instance ${SERVICE_URL_FORGEJO}:3000 --name runner --secret ${RUNNER_SHARED_SECRET} && break ; - sleep 1 ; - done ; - sed -i -e "s|\"labels\": null|\"labels\": [\"docker:docker://node:20-bookworm\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" .runner ; + secret=$${RUNNER_SHARED_SECRET:0:40} ; + uuid=$$(printf %s "$${secret:0:16}" | od -An -tx1 | tr -d " \n" | sed -E "s/(.{8})(.{4})(.{4})(.{4})(.{12})/\1-\2-\3-\4-\5/") ; forgejo-runner generate-config > config.yml ; + sed -i -e "s| labels: \[\]| labels: [\"docker:docker://node:22-bookworm\", \"ubuntu-latest:docker://catthehacker/ubuntu:act-22.04\", \"ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04\"]|" config.yml ; sed -i -e "s|network: .*|network: host|" config.yml ; sed -i -e "s|^ envs:$$| envs:\n DOCKER_HOST: tcp://docker:2376\n DOCKER_TLS_VERIFY: 1\n DOCKER_CERT_PATH: /certs/client|" config.yml ; sed -i -e "s|^ options:| options: -v /certs/client:/certs/client|" config.yml ; sed -i -e "s| valid_volumes: \[\]$$| valid_volumes:\n - /certs/client|" config.yml ; - chown -R 1000:1000 /data ; - exit 0 + sed -i -e "s| connections:| connections:\n default:\n url: http://forgejo:3000\n uuid: $$uuid\n token: $$secret|" config.yml ; + chown -R 1000:1000 /data ' runner: - image: code.forgejo.org/forgejo/runner:3.5.0 - links: - - docker-in-docker - - forgejo + image: data.forgejo.org/forgejo/runner:13.2.0 depends_on: + forgejo: + condition: service_healthy docker-in-docker: - condition: service_started + condition: service_healthy + runner-register: + condition: service_completed_successfully environment: - DOCKER_HOST=tcp://docker:2376 - DOCKER_CERT_PATH=/certs/client @@ -102,14 +102,9 @@ services: volumes: - forgejo-runner-data:/data - forgejo-did-certs:/certs - - forgejo-timezone:/etc/timezone:ro - - forgejo-localtime:/etc/localtime:ro healthcheck: test: ["CMD", "pgrep", "forgejo-runner"] interval: 10s timeout: 30s retries: 10 - command: >- - bash -c ' - while : ; do test -w .runner && forgejo-runner --config config.yml daemon ; sleep 1 ; done - ' + command: forgejo-runner --config config.yml daemon diff --git a/templates/compose/forgejo.yaml b/templates/compose/forgejo.yaml index 9d84b2aaef..4752a68a8f 100644 --- a/templates/compose/forgejo.yaml +++ b/templates/compose/forgejo.yaml @@ -13,10 +13,13 @@ services: - FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO} - FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS} - FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false} + - FORGEJO__server__DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_DOMAIN=${SERVICE_FQDN_FORGEJO} + - FORGEJO__server__SSH_PORT=${FORGEJO_SSH_PORT:-22222} - USER_UID=1000 - USER_GID=1000 ports: - - 22222:22 + - ${FORGEJO_SSH_PORT:-22222}:22 volumes: - forgejo-data:/data - forgejo-timezone:/etc/timezone:ro diff --git a/templates/service-templates-latest.json b/templates/service-templates-latest.json index db384057b5..c01c15f46d 100644 --- a/templates/service-templates-latest.json +++ b/templates/service-templates-latest.json @@ -1684,7 +1684,7 @@ "forgejo-with-mariadb": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19EQl9UWVBFPW15c3FsCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0hPU1Q9bWFyaWFkYgogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke01ZU1FMX0RBVEFCQVNFLWZvcmdlam99JwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBwb3J0czoKICAgICAgLSAnMjIyMjI6MjInCiAgICBkZXBlbmRzX29uOgogICAgICBtYXJpYWRiOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIG1hcmlhZGI6CiAgICBpbWFnZTogJ21hcmlhZGI6MTEnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLW1hcmlhZGItZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRX0nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gaGVhbHRoY2hlY2suc2gKICAgICAgICAtICctLWNvbm5lY3QnCiAgICAgICAgLSAnLS1pbm5vZGJfaW5pdGlhbGl6ZWQnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19EQl9UWVBFPW15c3FsCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0hPU1Q9bWFyaWFkYgogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke01ZU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX01ZU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9NWVNRTAogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgbWFyaWFkYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBtYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjExJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1tYXJpYWRiLWRhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX0RBVEFCQVNFPSR7TVlTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTFJPT1R9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGhlYWx0aGNoZWNrLnNoCiAgICAgICAgLSAnLS1jb25uZWN0JwogICAgICAgIC0gJy0taW5ub2RiX2luaXRpYWxpemVkJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "version control", "collaboration", @@ -1702,7 +1702,7 @@ "forgejo-with-mysql": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19EQl9UWVBFPW15c3FsCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0hPU1Q9bXlzcWwKICAgICAgLSAnRk9SR0VKT19fZGF0YWJhc2VfX05BTUU9JHtNWVNRTF9EQVRBQkFTRS1mb3JnZWpvfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX01ZU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9NWVNRTAogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJzIyMjIyOjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgbXlzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1CiAgbXlzcWw6CiAgICBpbWFnZTogJ215c3FsOjgnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLW15c3FsLWRhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX0RBVEFCQVNFPSR7TVlTUUxfREFUQUJBU0V9JwogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTFJPT1R9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG15c3FsYWRtaW4KICAgICAgICAtIHBpbmcKICAgICAgICAtICctaCcKICAgICAgICAtIDEyNy4wLjAuMQogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19EQl9UWVBFPW15c3FsCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0hPU1Q9bXlzcWwKICAgICAgLSAnRk9SR0VKT19fZGF0YWJhc2VfX05BTUU9JHtNWVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9NWVNRTAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19QQVNTV0Q9JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUwKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfToyMicKICAgIGRlcGVuZHNfb246CiAgICAgIG15c3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIG15c3FsOgogICAgaW1hZ2U6ICdteXNxbDo4JwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1teXNxbC1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSAxMjcuMC4wLjEKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "version control", "collaboration", @@ -1720,7 +1720,7 @@ "forgejo-with-postgresql": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19EQl9UWVBFPXBvc3RncmVzCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0hPU1Q9cG9zdGdyZXNxbAogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke1BPU1RHUkVTUUxfREFUQUJBU0UtZm9yZ2Vqb30nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBwb3J0czoKICAgICAgLSAnMjIyMjI6MjInCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNRTF9EQVRBQkFTRX0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19EQl9UWVBFPXBvc3RncmVzCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0hPU1Q9cG9zdGdyZXNxbAogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke1BPU1RHUkVTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVNRTAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19QQVNTV0Q9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTAogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXBvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "version control", "collaboration", @@ -1735,10 +1735,97 @@ "template_last_updated_at": "2026-08-10T11:35:20+02:00", "port": "3000" }, + "forgejo-with-runner-with-mariadb": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTOi1mYWxzZX0nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX1BPUlQ9JHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn0nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1tYXJpYWRiCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7TVlTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSAnUlVOTkVSX1NIQVJFRF9TRUNSRVQ9JHtTRVJWSUNFX0hFWF82NF9SVU5ORVJ9JwogICAgICAtIEZPUkdFSk9fX3NlY3VyaXR5X19JTlNUQUxMX0xPQ0s9dHJ1ZQogICAgICAtICdGT1JHRUpPX0FETUlOX1VTRVI9JHtTRVJWSUNFX1VTRVJfQURNSU59JwogICAgICAtICdGT1JHRUpPX0FETUlOX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fRU1BSUw9JHtGT1JHRUpPX0FETUlOX0VNQUlMOi1hZG1pbkBleGFtcGxlLmNvbX0nCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fRU5BQkxFX1BVU0hfQ1JFQVRFX1VTRVI9dHJ1ZQogICAgICAtIEZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUFVTSF9DUkVBVEVfUFJJVkFURT1mYWxzZQogICAgICAtICdGT1JHRUpPX19yZXBvc2l0b3J5X19ERUZBVUxUX1JFUE9fVU5JVFM9cmVwby5jb2RlLHJlcG8uYWN0aW9ucycKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfToyMicKICAgIGRlcGVuZHNfb246CiAgICAgIG1hcmlhZGI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnY3VybCAtZnMgaHR0cDovLzEyNy4wLjAuMTozMDAwID4gL2Rldi9udWxsICYmIHRlc3QgLWYgL3RtcC9ydW5uZXItcmVnaXN0ZXJlZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzMAogICAgY29tbWFuZDogJ2Jhc2ggLWMgJycgL3Vzci9iaW4vczYtc3ZzY2FuIC9ldGMvczYgJiB1bnRpbCBzdSAtYyAiZm9yZ2VqbyBmb3JnZWpvLWNsaSBhY3Rpb25zIHJlZ2lzdGVyIC0ta2VlcC1sYWJlbHMgLS1zZWNyZXQgJCR7UlVOTkVSX1NIQVJFRF9TRUNSRVQ6MDo0MH0iIGdpdCA7IGRvIHNsZWVwIDUgOyBkb25lIDsgc3UgLWMgImZvcmdlam8gYWRtaW4gdXNlciBjcmVhdGUgLS1hZG1pbiAtLXVzZXJuYW1lIFwiJCRGT1JHRUpPX0FETUlOX1VTRVJcIiAtLXBhc3N3b3JkIFwiJCRGT1JHRUpPX0FETUlOX1BBU1NXT1JEXCIgLS1lbWFpbCBcIiQkRk9SR0VKT19BRE1JTl9FTUFJTFwiIC0tbXVzdC1jaGFuZ2UtcGFzc3dvcmQ9ZmFsc2UiIGdpdCB8fCB0cnVlIDsgdG91Y2ggL3RtcC9ydW5uZXItcmVnaXN0ZXJlZCA7IHdhaXQgJycnCiAgbWFyaWFkYjoKICAgIGltYWdlOiAnbWFyaWFkYjoxMScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tbWFyaWFkYi1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBoZWFsdGhjaGVjay5zaAogICAgICAgIC0gJy0tY29ubmVjdCcKICAgICAgICAtICctLWlubm9kYl9pbml0aWFsaXplZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIGRvY2tlci1pbi1kb2NrZXI6CiAgICBpbWFnZTogJ2RvY2tlcjpkaW5kJwogICAgaG9zdG5hbWU6IGRvY2tlcgogICAgcHJpdmlsZWdlZDogdHJ1ZQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGRvY2tlcgogICAgICAgIC0gJy1IJwogICAgICAgIC0gJ3VuaXg6Ly8vdmFyL3J1bi9kb2NrZXIuc29jaycKICAgICAgICAtIGluZm8KICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzMHMKICAgICAgcmV0cmllczogMTAKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9UTFNfQ0VSVERJUj0vY2VydHMKICAgICAgLSBET0NLRVJfSE9TVD1kb2NrZXItaW4tZG9ja2VyCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRpZC1jZXJ0czovY2VydHMnCiAgcnVubmVyLXJlZ2lzdGVyOgogICAgaW1hZ2U6ICdkYXRhLmZvcmdlam8ub3JnL2Zvcmdlam8vcnVubmVyOjEzLjIuMCcKICAgIHJlc3RhcnQ6ICdubycKICAgIGV4Y2x1ZGVfZnJvbV9oYzogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1JVTk5FUl9TSEFSRURfU0VDUkVUPSR7U0VSVklDRV9IRVhfNjRfUlVOTkVSfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcnVubmVyLWRhdGE6L2RhdGEnCiAgICB1c2VyOiAnMDowJwogICAgY29tbWFuZDogJ2Jhc2ggLWVjICcnIHNlY3JldD0kJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSA7IHV1aWQ9JCQocHJpbnRmICVzICIkJHtzZWNyZXQ6MDoxNn0iIHwgb2QgLUFuIC10eDEgfCB0ciAtZCAiIFxuIiB8IHNlZCAtRSAicy8oLns4fSkoLns0fSkoLns0fSkoLns0fSkoLnsxMn0pL1wxLVwyLVwzLVw0LVw1LyIpIDsgZm9yZ2Vqby1ydW5uZXIgZ2VuZXJhdGUtY29uZmlnID4gY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIGxhYmVsczogXFtcXXwgIGxhYmVsczogW1wiZG9ja2VyOmRvY2tlcjovL25vZGU6MjItYm9va3dvcm1cIiwgXCJ1YnVudHUtbGF0ZXN0OmRvY2tlcjovL2NhdHRoZWhhY2tlci91YnVudHU6YWN0LTIyLjA0XCIsIFwidWJ1bnR1LTIyLjA0OmRvY2tlcjovL2NhdHRoZWhhY2tlci91YnVudHU6YWN0LTIyLjA0XCJdfCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xuZXR3b3JrOiAuKnxuZXR3b3JrOiBob3N0fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xeICBlbnZzOiQkfCAgZW52czpcbiAgICBET0NLRVJfSE9TVDogdGNwOi8vZG9ja2VyOjIzNzZcbiAgICBET0NLRVJfVExTX1ZFUklGWTogMVxuICAgIERPQ0tFUl9DRVJUX1BBVEg6IC9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfF4gIG9wdGlvbnM6fCAgb3B0aW9uczogLXYgL2NlcnRzL2NsaWVudDovY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIHZhbGlkX3ZvbHVtZXM6IFxbXF0kJHwgIHZhbGlkX3ZvbHVtZXM6XG4gICAgLSAvY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIGNvbm5lY3Rpb25zOnwgIGNvbm5lY3Rpb25zOlxuICAgIGRlZmF1bHQ6XG4gICAgICB1cmw6IGh0dHA6Ly9mb3JnZWpvOjMwMDBcbiAgICAgIHV1aWQ6ICQkdXVpZFxuICAgICAgdG9rZW46ICQkc2VjcmV0fCIgY29uZmlnLnltbCA7IGNob3duIC1SIDEwMDA6MTAwMCAvZGF0YSAnJycKICBydW5uZXI6CiAgICBpbWFnZTogJ2RhdGEuZm9yZ2Vqby5vcmcvZm9yZ2Vqby9ydW5uZXI6MTMuMi4wJwogICAgZGVwZW5kc19vbjoKICAgICAgZm9yZ2VqbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBkb2NrZXItaW4tZG9ja2VyOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJ1bm5lci1yZWdpc3RlcjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ0RPQ0tFUl9IT1NUPXRjcDovL2RvY2tlcjoyMzc2JwogICAgICAtIERPQ0tFUl9DRVJUX1BBVEg9L2NlcnRzL2NsaWVudAogICAgICAtIERPQ0tFUl9UTFNfVkVSSUZZPTEKICAgIHVzZXI6ICcxMDAwOjEwMDAnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXJ1bm5lci1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLWRpZC1jZXJ0czovY2VydHMnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcGdyZXAKICAgICAgICAtIGZvcmdlam8tcnVubmVyCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMzBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBjb21tYW5kOiAnZm9yZ2Vqby1ydW5uZXIgLS1jb25maWcgY29uZmlnLnltbCBkYWVtb24nCg==", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "mariadb", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, + "forgejo-with-runner-with-mysql": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTOi1mYWxzZX0nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX1BPUlQ9JHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn0nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1teXNxbAogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke01ZU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX01ZU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9NWVNRTAogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gJ1JVTk5FUl9TSEFSRURfU0VDUkVUPSR7U0VSVklDRV9IRVhfNjRfUlVOTkVSfScKICAgICAgLSBGT1JHRUpPX19zZWN1cml0eV9fSU5TVEFMTF9MT0NLPXRydWUKICAgICAgLSAnRk9SR0VKT19BRE1JTl9VU0VSPSR7U0VSVklDRV9VU0VSX0FETUlOfScKICAgICAgLSAnRk9SR0VKT19BRE1JTl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfQURNSU59JwogICAgICAtICdGT1JHRUpPX0FETUlOX0VNQUlMPSR7Rk9SR0VKT19BRE1JTl9FTUFJTDotYWRtaW5AZXhhbXBsZS5jb219JwogICAgICAtIEZPUkdFSk9fX3JlcG9zaXRvcnlfX0VOQUJMRV9QVVNIX0NSRUFURV9VU0VSPXRydWUKICAgICAgLSBGT1JHRUpPX19yZXBvc2l0b3J5X19ERUZBVUxUX1BVU0hfQ1JFQVRFX1BSSVZBVEU9ZmFsc2UKICAgICAgLSAnRk9SR0VKT19fcmVwb3NpdG9yeV9fREVGQVVMVF9SRVBPX1VOSVRTPXJlcG8uY29kZSxyZXBvLmFjdGlvbnMnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBwb3J0czoKICAgICAgLSAnJHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn06MjInCiAgICBkZXBlbmRzX29uOgogICAgICBteXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdjdXJsIC1mcyBodHRwOi8vMTI3LjAuMC4xOjMwMDAgPiAvZGV2L251bGwgJiYgdGVzdCAtZiAvdG1wL3J1bm5lci1yZWdpc3RlcmVkJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMwCiAgICBjb21tYW5kOiAnYmFzaCAtYyAnJyAvdXNyL2Jpbi9zNi1zdnNjYW4gL2V0Yy9zNiAmIHVudGlsIHN1IC1jICJmb3JnZWpvIGZvcmdlam8tY2xpIGFjdGlvbnMgcmVnaXN0ZXIgLS1rZWVwLWxhYmVscyAtLXNlY3JldCAkJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSIgZ2l0IDsgZG8gc2xlZXAgNSA7IGRvbmUgOyBzdSAtYyAiZm9yZ2VqbyBhZG1pbiB1c2VyIGNyZWF0ZSAtLWFkbWluIC0tdXNlcm5hbWUgXCIkJEZPUkdFSk9fQURNSU5fVVNFUlwiIC0tcGFzc3dvcmQgXCIkJEZPUkdFSk9fQURNSU5fUEFTU1dPUkRcIiAtLWVtYWlsIFwiJCRGT1JHRUpPX0FETUlOX0VNQUlMXCIgLS1tdXN0LWNoYW5nZS1wYXNzd29yZD1mYWxzZSIgZ2l0IHx8IHRydWUgOyB0b3VjaCAvdG1wL3J1bm5lci1yZWdpc3RlcmVkIDsgd2FpdCAnJycKICBteXNxbDoKICAgIGltYWdlOiAnbXlzcWw6OCcKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tbXlzcWwtZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gbXlzcWxhZG1pbgogICAgICAgIC0gcGluZwogICAgICAgIC0gJy1oJwogICAgICAgIC0gMTI3LjAuMC4xCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICBkb2NrZXItaW4tZG9ja2VyOgogICAgaW1hZ2U6ICdkb2NrZXI6ZGluZCcKICAgIGhvc3RuYW1lOiBkb2NrZXIKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBkb2NrZXIKICAgICAgICAtICctSCcKICAgICAgICAtICd1bml4Oi8vL3Zhci9ydW4vZG9ja2VyLnNvY2snCiAgICAgICAgLSBpbmZvCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMzBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBET0NLRVJfVExTX0NFUlRESVI9L2NlcnRzCiAgICAgIC0gRE9DS0VSX0hPU1Q9ZG9ja2VyLWluLWRvY2tlcgogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kaWQtY2VydHM6L2NlcnRzJwogIHJ1bm5lci1yZWdpc3RlcjoKICAgIGltYWdlOiAnZGF0YS5mb3JnZWpvLm9yZy9mb3JnZWpvL3J1bm5lcjoxMy4yLjAnCiAgICByZXN0YXJ0OiAnbm8nCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICAtICdSVU5ORVJfU0hBUkVEX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzY0X1JVTk5FUn0nCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXJ1bm5lci1kYXRhOi9kYXRhJwogICAgdXNlcjogJzA6MCcKICAgIGNvbW1hbmQ6ICdiYXNoIC1lYyAnJyBzZWNyZXQ9JCR7UlVOTkVSX1NIQVJFRF9TRUNSRVQ6MDo0MH0gOyB1dWlkPSQkKHByaW50ZiAlcyAiJCR7c2VjcmV0OjA6MTZ9IiB8IG9kIC1BbiAtdHgxIHwgdHIgLWQgIiBcbiIgfCBzZWQgLUUgInMvKC57OH0pKC57NH0pKC57NH0pKC57NH0pKC57MTJ9KS9cMS1cMi1cMy1cNC1cNS8iKSA7IGZvcmdlam8tcnVubmVyIGdlbmVyYXRlLWNvbmZpZyA+IGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICBsYWJlbHM6IFxbXF18ICBsYWJlbHM6IFtcImRvY2tlcjpkb2NrZXI6Ly9ub2RlOjIyLWJvb2t3b3JtXCIsIFwidWJ1bnR1LWxhdGVzdDpkb2NrZXI6Ly9jYXR0aGVoYWNrZXIvdWJ1bnR1OmFjdC0yMi4wNFwiLCBcInVidW50dS0yMi4wNDpkb2NrZXI6Ly9jYXR0aGVoYWNrZXIvdWJ1bnR1OmFjdC0yMi4wNFwiXXwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8bmV0d29yazogLip8bmV0d29yazogaG9zdHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8XiAgZW52czokJHwgIGVudnM6XG4gICAgRE9DS0VSX0hPU1Q6IHRjcDovL2RvY2tlcjoyMzc2XG4gICAgRE9DS0VSX1RMU19WRVJJRlk6IDFcbiAgICBET0NLRVJfQ0VSVF9QQVRIOiAvY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xeICBvcHRpb25zOnwgIG9wdGlvbnM6IC12IC9jZXJ0cy9jbGllbnQ6L2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICB2YWxpZF92b2x1bWVzOiBcW1xdJCR8ICB2YWxpZF92b2x1bWVzOlxuICAgIC0gL2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICBjb25uZWN0aW9uczp8ICBjb25uZWN0aW9uczpcbiAgICBkZWZhdWx0OlxuICAgICAgdXJsOiBodHRwOi8vZm9yZ2VqbzozMDAwXG4gICAgICB1dWlkOiAkJHV1aWRcbiAgICAgIHRva2VuOiAkJHNlY3JldHwiIGNvbmZpZy55bWwgOyBjaG93biAtUiAxMDAwOjEwMDAgL2RhdGEgJycnCiAgcnVubmVyOgogICAgaW1hZ2U6ICdkYXRhLmZvcmdlam8ub3JnL2Zvcmdlam8vcnVubmVyOjEzLjIuMCcKICAgIGRlcGVuZHNfb246CiAgICAgIGZvcmdlam86CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgZG9ja2VyLWluLWRvY2tlcjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBydW5uZXItcmVnaXN0ZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIGVudmlyb25tZW50OgogICAgICAtICdET0NLRVJfSE9TVD10Y3A6Ly9kb2NrZXI6MjM3NicKICAgICAgLSBET0NLRVJfQ0VSVF9QQVRIPS9jZXJ0cy9jbGllbnQKICAgICAgLSBET0NLRVJfVExTX1ZFUklGWT0xCiAgICB1c2VyOiAnMTAwMDoxMDAwJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1ydW5uZXItZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby1kaWQtY2VydHM6L2NlcnRzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHBncmVwCiAgICAgICAgLSBmb3JnZWpvLXJ1bm5lcgogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDMwcwogICAgICByZXRyaWVzOiAxMAogICAgY29tbWFuZDogJ2Zvcmdlam8tcnVubmVyIC0tY29uZmlnIGNvbmZpZy55bWwgZGFlbW9uJwo=", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "mysql", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, + "forgejo-with-runner-with-postgresql": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTOi1mYWxzZX0nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX1BPUlQ9JHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn0nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9cG9zdGdyZXMKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7UE9TVEdSRVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSAnUlVOTkVSX1NIQVJFRF9TRUNSRVQ9JHtTRVJWSUNFX0hFWF82NF9SVU5ORVJ9JwogICAgICAtIEZPUkdFSk9fX3NlY3VyaXR5X19JTlNUQUxMX0xPQ0s9dHJ1ZQogICAgICAtICdGT1JHRUpPX0FETUlOX1VTRVI9JHtTRVJWSUNFX1VTRVJfQURNSU59JwogICAgICAtICdGT1JHRUpPX0FETUlOX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fRU1BSUw9JHtGT1JHRUpPX0FETUlOX0VNQUlMOi1hZG1pbkBleGFtcGxlLmNvbX0nCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fRU5BQkxFX1BVU0hfQ1JFQVRFX1VTRVI9dHJ1ZQogICAgICAtIEZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUFVTSF9DUkVBVEVfUFJJVkFURT1mYWxzZQogICAgICAtICdGT1JHRUpPX19yZXBvc2l0b3J5X19ERUZBVUxUX1JFUE9fVU5JVFM9cmVwby5jb2RlLHJlcG8uYWN0aW9ucycKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfToyMicKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnY3VybCAtZnMgaHR0cDovLzEyNy4wLjAuMTozMDAwID4gL2Rldi9udWxsICYmIHRlc3QgLWYgL3RtcC9ydW5uZXItcmVnaXN0ZXJlZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzMAogICAgY29tbWFuZDogJ2Jhc2ggLWMgJycgL3Vzci9iaW4vczYtc3ZzY2FuIC9ldGMvczYgJiB1bnRpbCBzdSAtYyAiZm9yZ2VqbyBmb3JnZWpvLWNsaSBhY3Rpb25zIHJlZ2lzdGVyIC0ta2VlcC1sYWJlbHMgLS1zZWNyZXQgJCR7UlVOTkVSX1NIQVJFRF9TRUNSRVQ6MDo0MH0iIGdpdCA7IGRvIHNsZWVwIDUgOyBkb25lIDsgc3UgLWMgImZvcmdlam8gYWRtaW4gdXNlciBjcmVhdGUgLS1hZG1pbiAtLXVzZXJuYW1lIFwiJCRGT1JHRUpPX0FETUlOX1VTRVJcIiAtLXBhc3N3b3JkIFwiJCRGT1JHRUpPX0FETUlOX1BBU1NXT1JEXCIgLS1lbWFpbCBcIiQkRk9SR0VKT19BRE1JTl9FTUFJTFwiIC0tbXVzdC1jaGFuZ2UtcGFzc3dvcmQ9ZmFsc2UiIGdpdCB8fCB0cnVlIDsgdG91Y2ggL3RtcC9ydW5uZXItcmVnaXN0ZXJlZCA7IHdhaXQgJycnCiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1wb3N0Z3Jlc3FsLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICBkb2NrZXItaW4tZG9ja2VyOgogICAgaW1hZ2U6ICdkb2NrZXI6ZGluZCcKICAgIGhvc3RuYW1lOiBkb2NrZXIKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBkb2NrZXIKICAgICAgICAtICctSCcKICAgICAgICAtICd1bml4Oi8vL3Zhci9ydW4vZG9ja2VyLnNvY2snCiAgICAgICAgLSBpbmZvCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMzBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBET0NLRVJfVExTX0NFUlRESVI9L2NlcnRzCiAgICAgIC0gRE9DS0VSX0hPU1Q9ZG9ja2VyLWluLWRvY2tlcgogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kaWQtY2VydHM6L2NlcnRzJwogIHJ1bm5lci1yZWdpc3RlcjoKICAgIGltYWdlOiAnZGF0YS5mb3JnZWpvLm9yZy9mb3JnZWpvL3J1bm5lcjoxMy4yLjAnCiAgICByZXN0YXJ0OiAnbm8nCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICAtICdSVU5ORVJfU0hBUkVEX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzY0X1JVTk5FUn0nCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXJ1bm5lci1kYXRhOi9kYXRhJwogICAgdXNlcjogJzA6MCcKICAgIGNvbW1hbmQ6ICdiYXNoIC1lYyAnJyBzZWNyZXQ9JCR7UlVOTkVSX1NIQVJFRF9TRUNSRVQ6MDo0MH0gOyB1dWlkPSQkKHByaW50ZiAlcyAiJCR7c2VjcmV0OjA6MTZ9IiB8IG9kIC1BbiAtdHgxIHwgdHIgLWQgIiBcbiIgfCBzZWQgLUUgInMvKC57OH0pKC57NH0pKC57NH0pKC57NH0pKC57MTJ9KS9cMS1cMi1cMy1cNC1cNS8iKSA7IGZvcmdlam8tcnVubmVyIGdlbmVyYXRlLWNvbmZpZyA+IGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICBsYWJlbHM6IFxbXF18ICBsYWJlbHM6IFtcImRvY2tlcjpkb2NrZXI6Ly9ub2RlOjIyLWJvb2t3b3JtXCIsIFwidWJ1bnR1LWxhdGVzdDpkb2NrZXI6Ly9jYXR0aGVoYWNrZXIvdWJ1bnR1OmFjdC0yMi4wNFwiLCBcInVidW50dS0yMi4wNDpkb2NrZXI6Ly9jYXR0aGVoYWNrZXIvdWJ1bnR1OmFjdC0yMi4wNFwiXXwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8bmV0d29yazogLip8bmV0d29yazogaG9zdHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8XiAgZW52czokJHwgIGVudnM6XG4gICAgRE9DS0VSX0hPU1Q6IHRjcDovL2RvY2tlcjoyMzc2XG4gICAgRE9DS0VSX1RMU19WRVJJRlk6IDFcbiAgICBET0NLRVJfQ0VSVF9QQVRIOiAvY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xeICBvcHRpb25zOnwgIG9wdGlvbnM6IC12IC9jZXJ0cy9jbGllbnQ6L2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICB2YWxpZF92b2x1bWVzOiBcW1xdJCR8ICB2YWxpZF92b2x1bWVzOlxuICAgIC0gL2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICBjb25uZWN0aW9uczp8ICBjb25uZWN0aW9uczpcbiAgICBkZWZhdWx0OlxuICAgICAgdXJsOiBodHRwOi8vZm9yZ2VqbzozMDAwXG4gICAgICB1dWlkOiAkJHV1aWRcbiAgICAgIHRva2VuOiAkJHNlY3JldHwiIGNvbmZpZy55bWwgOyBjaG93biAtUiAxMDAwOjEwMDAgL2RhdGEgJycnCiAgcnVubmVyOgogICAgaW1hZ2U6ICdkYXRhLmZvcmdlam8ub3JnL2Zvcmdlam8vcnVubmVyOjEzLjIuMCcKICAgIGRlcGVuZHNfb246CiAgICAgIGZvcmdlam86CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgZG9ja2VyLWluLWRvY2tlcjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBydW5uZXItcmVnaXN0ZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIGVudmlyb25tZW50OgogICAgICAtICdET0NLRVJfSE9TVD10Y3A6Ly9kb2NrZXI6MjM3NicKICAgICAgLSBET0NLRVJfQ0VSVF9QQVRIPS9jZXJ0cy9jbGllbnQKICAgICAgLSBET0NLRVJfVExTX1ZFUklGWT0xCiAgICB1c2VyOiAnMTAwMDoxMDAwJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1ydW5uZXItZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby1kaWQtY2VydHM6L2NlcnRzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHBncmVwCiAgICAgICAgLSBmb3JnZWpvLXJ1bm5lcgogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDMwcwogICAgICByZXRyaWVzOiAxMAogICAgY29tbWFuZDogJ2Zvcmdlam8tcnVubmVyIC0tY29uZmlnIGNvbmZpZy55bWwgZGFlbW9uJwo=", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "postgresql", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, + "forgejo-with-runner": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTOi1mYWxzZX0nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX1BPUlQ9JHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn0nCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSAnUlVOTkVSX1NIQVJFRF9TRUNSRVQ9JHtTRVJWSUNFX0hFWF82NF9SVU5ORVJ9JwogICAgICAtIEZPUkdFSk9fX3NlY3VyaXR5X19JTlNUQUxMX0xPQ0s9dHJ1ZQogICAgICAtICdGT1JHRUpPX0FETUlOX1VTRVI9JHtTRVJWSUNFX1VTRVJfQURNSU59JwogICAgICAtICdGT1JHRUpPX0FETUlOX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fRU1BSUw9JHtGT1JHRUpPX0FETUlOX0VNQUlMOi1hZG1pbkBleGFtcGxlLmNvbX0nCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fRU5BQkxFX1BVU0hfQ1JFQVRFX1VTRVI9dHJ1ZQogICAgICAtIEZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUFVTSF9DUkVBVEVfUFJJVkFURT1mYWxzZQogICAgICAtICdGT1JHRUpPX19yZXBvc2l0b3J5X19ERUZBVUxUX1JFUE9fVU5JVFM9cmVwby5jb2RlLHJlcG8uYWN0aW9ucycKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfToyMicKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnY3VybCAtZnMgaHR0cDovLzEyNy4wLjAuMTozMDAwID4gL2Rldi9udWxsICYmIHRlc3QgLWYgL3RtcC9ydW5uZXItcmVnaXN0ZXJlZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzMAogICAgY29tbWFuZDogJ2Jhc2ggLWMgJycgL3Vzci9iaW4vczYtc3ZzY2FuIC9ldGMvczYgJiB1bnRpbCBzdSAtYyAiZm9yZ2VqbyBmb3JnZWpvLWNsaSBhY3Rpb25zIHJlZ2lzdGVyIC0ta2VlcC1sYWJlbHMgLS1zZWNyZXQgJCR7UlVOTkVSX1NIQVJFRF9TRUNSRVQ6MDo0MH0iIGdpdCA7IGRvIHNsZWVwIDUgOyBkb25lIDsgc3UgLWMgImZvcmdlam8gYWRtaW4gdXNlciBjcmVhdGUgLS1hZG1pbiAtLXVzZXJuYW1lIFwiJCRGT1JHRUpPX0FETUlOX1VTRVJcIiAtLXBhc3N3b3JkIFwiJCRGT1JHRUpPX0FETUlOX1BBU1NXT1JEXCIgLS1lbWFpbCBcIiQkRk9SR0VKT19BRE1JTl9FTUFJTFwiIC0tbXVzdC1jaGFuZ2UtcGFzc3dvcmQ9ZmFsc2UiIGdpdCB8fCB0cnVlIDsgdG91Y2ggL3RtcC9ydW5uZXItcmVnaXN0ZXJlZCA7IHdhaXQgJycnCiAgZG9ja2VyLWluLWRvY2tlcjoKICAgIGltYWdlOiAnZG9ja2VyOmRpbmQnCiAgICBob3N0bmFtZTogZG9ja2VyCiAgICBwcml2aWxlZ2VkOiB0cnVlCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gZG9ja2VyCiAgICAgICAgLSAnLUgnCiAgICAgICAgLSAndW5peDovLy92YXIvcnVuL2RvY2tlci5zb2NrJwogICAgICAgIC0gaW5mbwogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDMwcwogICAgICByZXRyaWVzOiAxMAogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gRE9DS0VSX1RMU19DRVJURElSPS9jZXJ0cwogICAgICAtIERPQ0tFUl9IT1NUPWRvY2tlci1pbi1kb2NrZXIKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGlkLWNlcnRzOi9jZXJ0cycKICBydW5uZXItcmVnaXN0ZXI6CiAgICBpbWFnZTogJ2RhdGEuZm9yZ2Vqby5vcmcvZm9yZ2Vqby9ydW5uZXI6MTMuMi4wJwogICAgcmVzdGFydDogJ25vJwogICAgZXhjbHVkZV9mcm9tX2hjOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUlVOTkVSX1NIQVJFRF9TRUNSRVQ9JHtTRVJWSUNFX0hFWF82NF9SVU5ORVJ9JwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1ydW5uZXItZGF0YTovZGF0YScKICAgIHVzZXI6ICcwOjAnCiAgICBjb21tYW5kOiAnYmFzaCAtZWMgJycgc2VjcmV0PSQke1JVTk5FUl9TSEFSRURfU0VDUkVUOjA6NDB9IDsgdXVpZD0kJChwcmludGYgJXMgIiQke3NlY3JldDowOjE2fSIgfCBvZCAtQW4gLXR4MSB8IHRyIC1kICIgXG4iIHwgc2VkIC1FICJzLyguezh9KSguezR9KSguezR9KSguezR9KSguezEyfSkvXDEtXDItXDMtXDQtXDUvIikgOyBmb3JnZWpvLXJ1bm5lciBnZW5lcmF0ZS1jb25maWcgPiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfCAgbGFiZWxzOiBcW1xdfCAgbGFiZWxzOiBbXCJkb2NrZXI6ZG9ja2VyOi8vbm9kZToyMi1ib29rd29ybVwiLCBcInVidW50dS1sYXRlc3Q6ZG9ja2VyOi8vY2F0dGhlaGFja2VyL3VidW50dTphY3QtMjIuMDRcIiwgXCJ1YnVudHUtMjIuMDQ6ZG9ja2VyOi8vY2F0dGhlaGFja2VyL3VidW50dTphY3QtMjIuMDRcIl18IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfG5ldHdvcms6IC4qfG5ldHdvcms6IGhvc3R8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfF4gIGVudnM6JCR8ICBlbnZzOlxuICAgIERPQ0tFUl9IT1NUOiB0Y3A6Ly9kb2NrZXI6MjM3NlxuICAgIERPQ0tFUl9UTFNfVkVSSUZZOiAxXG4gICAgRE9DS0VSX0NFUlRfUEFUSDogL2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8XiAgb3B0aW9uczp8ICBvcHRpb25zOiAtdiAvY2VydHMvY2xpZW50Oi9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfCAgdmFsaWRfdm9sdW1lczogXFtcXSQkfCAgdmFsaWRfdm9sdW1lczpcbiAgICAtIC9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfCAgY29ubmVjdGlvbnM6fCAgY29ubmVjdGlvbnM6XG4gICAgZGVmYXVsdDpcbiAgICAgIHVybDogaHR0cDovL2Zvcmdlam86MzAwMFxuICAgICAgdXVpZDogJCR1dWlkXG4gICAgICB0b2tlbjogJCRzZWNyZXR8IiBjb25maWcueW1sIDsgY2hvd24gLVIgMTAwMDoxMDAwIC9kYXRhICcnJwogIHJ1bm5lcjoKICAgIGltYWdlOiAnZGF0YS5mb3JnZWpvLm9yZy9mb3JnZWpvL3J1bm5lcjoxMy4yLjAnCiAgICBkZXBlbmRzX29uOgogICAgICBmb3JnZWpvOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIGRvY2tlci1pbi1kb2NrZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcnVubmVyLXJlZ2lzdGVyOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnRE9DS0VSX0hPU1Q9dGNwOi8vZG9ja2VyOjIzNzYnCiAgICAgIC0gRE9DS0VSX0NFUlRfUEFUSD0vY2VydHMvY2xpZW50CiAgICAgIC0gRE9DS0VSX1RMU19WRVJJRlk9MQogICAgdXNlcjogJzEwMDA6MTAwMCcKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcnVubmVyLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tZGlkLWNlcnRzOi9jZXJ0cycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBwZ3JlcAogICAgICAgIC0gZm9yZ2Vqby1ydW5uZXIKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzMHMKICAgICAgcmV0cmllczogMTAKICAgIGNvbW1hbmQ6ICdmb3JnZWpvLXJ1bm5lciAtLWNvbmZpZyBjb25maWcueW1sIGRhZW1vbicK", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, "forgejo": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgcG9ydHM6CiAgICAgIC0gJzIyMjIyOjIyJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0ZPUkdFSk9fMzAwMAogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1JPT1RfVVJMPSR7U0VSVklDRV9VUkxfRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XRURfRE9NQUlOU30nCiAgICAgIC0gJ0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M9JHtGT1JHRUpPX19taWdyYXRpb25zX19BTExPV19MT0NBTE5FVFdPUktTLWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "version control", "collaboration", diff --git a/templates/service-templates.json b/templates/service-templates.json index bde26e3875..72aaa96e09 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -1684,7 +1684,7 @@ "forgejo-with-mariadb": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1tYXJpYWRiCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7TVlTUUxfREFUQUJBU0UtZm9yZ2Vqb30nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9NWVNRTAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19QQVNTV0Q9JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUwKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcyMjIyMjoyMicKICAgIGRlcGVuZHNfb246CiAgICAgIG1hcmlhZGI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1CiAgbWFyaWFkYjoKICAgIGltYWdlOiAnbWFyaWFkYjoxMScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tbWFyaWFkYi1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBoZWFsdGhjaGVjay5zaAogICAgICAgIC0gJy0tY29ubmVjdCcKICAgICAgICAtICctLWlubm9kYl9pbml0aWFsaXplZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9QT1JUPSR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1tYXJpYWRiCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7TVlTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBwb3J0czoKICAgICAgLSAnJHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn06MjInCiAgICBkZXBlbmRzX29uOgogICAgICBtYXJpYWRiOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIG1hcmlhZGI6CiAgICBpbWFnZTogJ21hcmlhZGI6MTEnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLW1hcmlhZGItZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gaGVhbHRoY2hlY2suc2gKICAgICAgICAtICctLWNvbm5lY3QnCiAgICAgICAgLSAnLS1pbm5vZGJfaW5pdGlhbGl6ZWQnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", "tags": [ "version control", "collaboration", @@ -1702,7 +1702,7 @@ "forgejo-with-mysql": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1teXNxbAogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke01ZU1FMX0RBVEFCQVNFLWZvcmdlam99JwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBwb3J0czoKICAgICAgLSAnMjIyMjI6MjInCiAgICBkZXBlbmRzX29uOgogICAgICBteXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBteXNxbDoKICAgIGltYWdlOiAnbXlzcWw6OCcKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tbXlzcWwtZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRX0nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gbXlzcWxhZG1pbgogICAgICAgIC0gcGluZwogICAgICAgIC0gJy1oJwogICAgICAgIC0gMTI3LjAuMC4xCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9QT1JUPSR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1teXNxbAogICAgICAtICdGT1JHRUpPX19kYXRhYmFzZV9fTkFNRT0ke01ZU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX01ZU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9NWVNRTAogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgbXlzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1CiAgbXlzcWw6CiAgICBpbWFnZTogJ215c3FsOjgnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLW15c3FsLWRhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX0RBVEFCQVNFPSR7TVlTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTFJPT1R9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG15c3FsYWRtaW4KICAgICAgICAtIHBpbmcKICAgICAgICAtICctaCcKICAgICAgICAtIDEyNy4wLjAuMQogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "version control", "collaboration", @@ -1720,7 +1720,7 @@ "forgejo-with-postgresql": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9cG9zdGdyZXMKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7UE9TVEdSRVNRTF9EQVRBQkFTRS1mb3JnZWpvfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUwKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcyMjIyMjoyMicKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1CiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1wb3N0Z3Jlc3FsLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU1FMX0RBVEFCQVNFfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9QT1JUPSR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX0RCX1RZUEU9cG9zdGdyZXMKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7UE9TVEdSRVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBwb3J0czoKICAgICAgLSAnJHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn06MjInCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "version control", "collaboration", @@ -1735,10 +1735,97 @@ "template_last_updated_at": "2026-08-10T11:35:20+02:00", "port": "3000" }, + "forgejo-with-runner-with-mariadb": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M6LWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fREJfVFlQRT1teXNxbAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19IT1NUPW1hcmlhZGIKICAgICAgLSAnRk9SR0VKT19fZGF0YWJhc2VfX05BTUU9JHtNWVNRTF9EQVRBQkFTRTotZm9yZ2Vqb30nCiAgICAgIC0gRk9SR0VKT19fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9NWVNRTAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19QQVNTV0Q9JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUwKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtICdSVU5ORVJfU0hBUkVEX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzY0X1JVTk5FUn0nCiAgICAgIC0gRk9SR0VKT19fc2VjdXJpdHlfX0lOU1RBTExfTE9DSz10cnVlCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fVVNFUj0ke1NFUlZJQ0VfVVNFUl9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX0FETUlOfScKICAgICAgLSAnRk9SR0VKT19BRE1JTl9FTUFJTD0ke0ZPUkdFSk9fQURNSU5fRU1BSUw6LWFkbWluQGV4YW1wbGUuY29tfScKICAgICAgLSBGT1JHRUpPX19yZXBvc2l0b3J5X19FTkFCTEVfUFVTSF9DUkVBVEVfVVNFUj10cnVlCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fREVGQVVMVF9QVVNIX0NSRUFURV9QUklWQVRFPWZhbHNlCiAgICAgIC0gJ0ZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUkVQT19VTklUUz1yZXBvLmNvZGUscmVwby5hY3Rpb25zJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgbWFyaWFkYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdjdXJsIC1mcyBodHRwOi8vMTI3LjAuMC4xOjMwMDAgPiAvZGV2L251bGwgJiYgdGVzdCAtZiAvdG1wL3J1bm5lci1yZWdpc3RlcmVkJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMwCiAgICBjb21tYW5kOiAnYmFzaCAtYyAnJyAvdXNyL2Jpbi9zNi1zdnNjYW4gL2V0Yy9zNiAmIHVudGlsIHN1IC1jICJmb3JnZWpvIGZvcmdlam8tY2xpIGFjdGlvbnMgcmVnaXN0ZXIgLS1rZWVwLWxhYmVscyAtLXNlY3JldCAkJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSIgZ2l0IDsgZG8gc2xlZXAgNSA7IGRvbmUgOyBzdSAtYyAiZm9yZ2VqbyBhZG1pbiB1c2VyIGNyZWF0ZSAtLWFkbWluIC0tdXNlcm5hbWUgXCIkJEZPUkdFSk9fQURNSU5fVVNFUlwiIC0tcGFzc3dvcmQgXCIkJEZPUkdFSk9fQURNSU5fUEFTU1dPUkRcIiAtLWVtYWlsIFwiJCRGT1JHRUpPX0FETUlOX0VNQUlMXCIgLS1tdXN0LWNoYW5nZS1wYXNzd29yZD1mYWxzZSIgZ2l0IHx8IHRydWUgOyB0b3VjaCAvdG1wL3J1bm5lci1yZWdpc3RlcmVkIDsgd2FpdCAnJycKICBtYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjExJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1tYXJpYWRiLWRhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX0RBVEFCQVNFPSR7TVlTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTFJPT1R9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGhlYWx0aGNoZWNrLnNoCiAgICAgICAgLSAnLS1jb25uZWN0JwogICAgICAgIC0gJy0taW5ub2RiX2luaXRpYWxpemVkJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgZG9ja2VyLWluLWRvY2tlcjoKICAgIGltYWdlOiAnZG9ja2VyOmRpbmQnCiAgICBob3N0bmFtZTogZG9ja2VyCiAgICBwcml2aWxlZ2VkOiB0cnVlCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gZG9ja2VyCiAgICAgICAgLSAnLUgnCiAgICAgICAgLSAndW5peDovLy92YXIvcnVuL2RvY2tlci5zb2NrJwogICAgICAgIC0gaW5mbwogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDMwcwogICAgICByZXRyaWVzOiAxMAogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gRE9DS0VSX1RMU19DRVJURElSPS9jZXJ0cwogICAgICAtIERPQ0tFUl9IT1NUPWRvY2tlci1pbi1kb2NrZXIKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGlkLWNlcnRzOi9jZXJ0cycKICBydW5uZXItcmVnaXN0ZXI6CiAgICBpbWFnZTogJ2RhdGEuZm9yZ2Vqby5vcmcvZm9yZ2Vqby9ydW5uZXI6MTMuMi4wJwogICAgcmVzdGFydDogJ25vJwogICAgZXhjbHVkZV9mcm9tX2hjOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUlVOTkVSX1NIQVJFRF9TRUNSRVQ9JHtTRVJWSUNFX0hFWF82NF9SVU5ORVJ9JwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1ydW5uZXItZGF0YTovZGF0YScKICAgIHVzZXI6ICcwOjAnCiAgICBjb21tYW5kOiAnYmFzaCAtZWMgJycgc2VjcmV0PSQke1JVTk5FUl9TSEFSRURfU0VDUkVUOjA6NDB9IDsgdXVpZD0kJChwcmludGYgJXMgIiQke3NlY3JldDowOjE2fSIgfCBvZCAtQW4gLXR4MSB8IHRyIC1kICIgXG4iIHwgc2VkIC1FICJzLyguezh9KSguezR9KSguezR9KSguezR9KSguezEyfSkvXDEtXDItXDMtXDQtXDUvIikgOyBmb3JnZWpvLXJ1bm5lciBnZW5lcmF0ZS1jb25maWcgPiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfCAgbGFiZWxzOiBcW1xdfCAgbGFiZWxzOiBbXCJkb2NrZXI6ZG9ja2VyOi8vbm9kZToyMi1ib29rd29ybVwiLCBcInVidW50dS1sYXRlc3Q6ZG9ja2VyOi8vY2F0dGhlaGFja2VyL3VidW50dTphY3QtMjIuMDRcIiwgXCJ1YnVudHUtMjIuMDQ6ZG9ja2VyOi8vY2F0dGhlaGFja2VyL3VidW50dTphY3QtMjIuMDRcIl18IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfG5ldHdvcms6IC4qfG5ldHdvcms6IGhvc3R8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfF4gIGVudnM6JCR8ICBlbnZzOlxuICAgIERPQ0tFUl9IT1NUOiB0Y3A6Ly9kb2NrZXI6MjM3NlxuICAgIERPQ0tFUl9UTFNfVkVSSUZZOiAxXG4gICAgRE9DS0VSX0NFUlRfUEFUSDogL2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8XiAgb3B0aW9uczp8ICBvcHRpb25zOiAtdiAvY2VydHMvY2xpZW50Oi9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfCAgdmFsaWRfdm9sdW1lczogXFtcXSQkfCAgdmFsaWRfdm9sdW1lczpcbiAgICAtIC9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfCAgY29ubmVjdGlvbnM6fCAgY29ubmVjdGlvbnM6XG4gICAgZGVmYXVsdDpcbiAgICAgIHVybDogaHR0cDovL2Zvcmdlam86MzAwMFxuICAgICAgdXVpZDogJCR1dWlkXG4gICAgICB0b2tlbjogJCRzZWNyZXR8IiBjb25maWcueW1sIDsgY2hvd24gLVIgMTAwMDoxMDAwIC9kYXRhICcnJwogIHJ1bm5lcjoKICAgIGltYWdlOiAnZGF0YS5mb3JnZWpvLm9yZy9mb3JnZWpvL3J1bm5lcjoxMy4yLjAnCiAgICBkZXBlbmRzX29uOgogICAgICBmb3JnZWpvOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIGRvY2tlci1pbi1kb2NrZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcnVubmVyLXJlZ2lzdGVyOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnRE9DS0VSX0hPU1Q9dGNwOi8vZG9ja2VyOjIzNzYnCiAgICAgIC0gRE9DS0VSX0NFUlRfUEFUSD0vY2VydHMvY2xpZW50CiAgICAgIC0gRE9DS0VSX1RMU19WRVJJRlk9MQogICAgdXNlcjogJzEwMDA6MTAwMCcKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcnVubmVyLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tZGlkLWNlcnRzOi9jZXJ0cycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBwZ3JlcAogICAgICAgIC0gZm9yZ2Vqby1ydW5uZXIKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzMHMKICAgICAgcmV0cmllczogMTAKICAgIGNvbW1hbmQ6ICdmb3JnZWpvLXJ1bm5lciAtLWNvbmZpZyBjb25maWcueW1sIGRhZW1vbicK", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "mariadb", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, + "forgejo-with-runner-with-mysql": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M6LWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fREJfVFlQRT1teXNxbAogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19IT1NUPW15c3FsCiAgICAgIC0gJ0ZPUkdFSk9fX2RhdGFiYXNlX19OQU1FPSR7TVlTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSAnUlVOTkVSX1NIQVJFRF9TRUNSRVQ9JHtTRVJWSUNFX0hFWF82NF9SVU5ORVJ9JwogICAgICAtIEZPUkdFSk9fX3NlY3VyaXR5X19JTlNUQUxMX0xPQ0s9dHJ1ZQogICAgICAtICdGT1JHRUpPX0FETUlOX1VTRVI9JHtTRVJWSUNFX1VTRVJfQURNSU59JwogICAgICAtICdGT1JHRUpPX0FETUlOX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fRU1BSUw9JHtGT1JHRUpPX0FETUlOX0VNQUlMOi1hZG1pbkBleGFtcGxlLmNvbX0nCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fRU5BQkxFX1BVU0hfQ1JFQVRFX1VTRVI9dHJ1ZQogICAgICAtIEZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUFVTSF9DUkVBVEVfUFJJVkFURT1mYWxzZQogICAgICAtICdGT1JHRUpPX19yZXBvc2l0b3J5X19ERUZBVUxUX1JFUE9fVU5JVFM9cmVwby5jb2RlLHJlcG8uYWN0aW9ucycKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby10aW1lem9uZTovZXRjL3RpbWV6b25lOnJvJwogICAgICAtICdmb3JnZWpvLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfToyMicKICAgIGRlcGVuZHNfb246CiAgICAgIG15c3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ2N1cmwgLWZzIGh0dHA6Ly8xMjcuMC4wLjE6MzAwMCA+IC9kZXYvbnVsbCAmJiB0ZXN0IC1mIC90bXAvcnVubmVyLXJlZ2lzdGVyZWQnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMzAKICAgIGNvbW1hbmQ6ICdiYXNoIC1jICcnIC91c3IvYmluL3M2LXN2c2NhbiAvZXRjL3M2ICYgdW50aWwgc3UgLWMgImZvcmdlam8gZm9yZ2Vqby1jbGkgYWN0aW9ucyByZWdpc3RlciAtLWtlZXAtbGFiZWxzIC0tc2VjcmV0ICQke1JVTk5FUl9TSEFSRURfU0VDUkVUOjA6NDB9IiBnaXQgOyBkbyBzbGVlcCA1IDsgZG9uZSA7IHN1IC1jICJmb3JnZWpvIGFkbWluIHVzZXIgY3JlYXRlIC0tYWRtaW4gLS11c2VybmFtZSBcIiQkRk9SR0VKT19BRE1JTl9VU0VSXCIgLS1wYXNzd29yZCBcIiQkRk9SR0VKT19BRE1JTl9QQVNTV09SRFwiIC0tZW1haWwgXCIkJEZPUkdFSk9fQURNSU5fRU1BSUxcIiAtLW11c3QtY2hhbmdlLXBhc3N3b3JkPWZhbHNlIiBnaXQgfHwgdHJ1ZSA7IHRvdWNoIC90bXAvcnVubmVyLXJlZ2lzdGVyZWQgOyB3YWl0ICcnJwogIG15c3FsOgogICAgaW1hZ2U6ICdteXNxbDo4JwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1teXNxbC1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSAxMjcuMC4wLjEKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIGRvY2tlci1pbi1kb2NrZXI6CiAgICBpbWFnZTogJ2RvY2tlcjpkaW5kJwogICAgaG9zdG5hbWU6IGRvY2tlcgogICAgcHJpdmlsZWdlZDogdHJ1ZQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGRvY2tlcgogICAgICAgIC0gJy1IJwogICAgICAgIC0gJ3VuaXg6Ly8vdmFyL3J1bi9kb2NrZXIuc29jaycKICAgICAgICAtIGluZm8KICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzMHMKICAgICAgcmV0cmllczogMTAKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9UTFNfQ0VSVERJUj0vY2VydHMKICAgICAgLSBET0NLRVJfSE9TVD1kb2NrZXItaW4tZG9ja2VyCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRpZC1jZXJ0czovY2VydHMnCiAgcnVubmVyLXJlZ2lzdGVyOgogICAgaW1hZ2U6ICdkYXRhLmZvcmdlam8ub3JnL2Zvcmdlam8vcnVubmVyOjEzLjIuMCcKICAgIHJlc3RhcnQ6ICdubycKICAgIGV4Y2x1ZGVfZnJvbV9oYzogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1JVTk5FUl9TSEFSRURfU0VDUkVUPSR7U0VSVklDRV9IRVhfNjRfUlVOTkVSfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcnVubmVyLWRhdGE6L2RhdGEnCiAgICB1c2VyOiAnMDowJwogICAgY29tbWFuZDogJ2Jhc2ggLWVjICcnIHNlY3JldD0kJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSA7IHV1aWQ9JCQocHJpbnRmICVzICIkJHtzZWNyZXQ6MDoxNn0iIHwgb2QgLUFuIC10eDEgfCB0ciAtZCAiIFxuIiB8IHNlZCAtRSAicy8oLns4fSkoLns0fSkoLns0fSkoLns0fSkoLnsxMn0pL1wxLVwyLVwzLVw0LVw1LyIpIDsgZm9yZ2Vqby1ydW5uZXIgZ2VuZXJhdGUtY29uZmlnID4gY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIGxhYmVsczogXFtcXXwgIGxhYmVsczogW1wiZG9ja2VyOmRvY2tlcjovL25vZGU6MjItYm9va3dvcm1cIiwgXCJ1YnVudHUtbGF0ZXN0OmRvY2tlcjovL2NhdHRoZWhhY2tlci91YnVudHU6YWN0LTIyLjA0XCIsIFwidWJ1bnR1LTIyLjA0OmRvY2tlcjovL2NhdHRoZWhhY2tlci91YnVudHU6YWN0LTIyLjA0XCJdfCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xuZXR3b3JrOiAuKnxuZXR3b3JrOiBob3N0fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xeICBlbnZzOiQkfCAgZW52czpcbiAgICBET0NLRVJfSE9TVDogdGNwOi8vZG9ja2VyOjIzNzZcbiAgICBET0NLRVJfVExTX1ZFUklGWTogMVxuICAgIERPQ0tFUl9DRVJUX1BBVEg6IC9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfF4gIG9wdGlvbnM6fCAgb3B0aW9uczogLXYgL2NlcnRzL2NsaWVudDovY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIHZhbGlkX3ZvbHVtZXM6IFxbXF0kJHwgIHZhbGlkX3ZvbHVtZXM6XG4gICAgLSAvY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIGNvbm5lY3Rpb25zOnwgIGNvbm5lY3Rpb25zOlxuICAgIGRlZmF1bHQ6XG4gICAgICB1cmw6IGh0dHA6Ly9mb3JnZWpvOjMwMDBcbiAgICAgIHV1aWQ6ICQkdXVpZFxuICAgICAgdG9rZW46ICQkc2VjcmV0fCIgY29uZmlnLnltbCA7IGNob3duIC1SIDEwMDA6MTAwMCAvZGF0YSAnJycKICBydW5uZXI6CiAgICBpbWFnZTogJ2RhdGEuZm9yZ2Vqby5vcmcvZm9yZ2Vqby9ydW5uZXI6MTMuMi4wJwogICAgZGVwZW5kc19vbjoKICAgICAgZm9yZ2VqbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBkb2NrZXItaW4tZG9ja2VyOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJ1bm5lci1yZWdpc3RlcjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ0RPQ0tFUl9IT1NUPXRjcDovL2RvY2tlcjoyMzc2JwogICAgICAtIERPQ0tFUl9DRVJUX1BBVEg9L2NlcnRzL2NsaWVudAogICAgICAtIERPQ0tFUl9UTFNfVkVSSUZZPTEKICAgIHVzZXI6ICcxMDAwOjEwMDAnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXJ1bm5lci1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLWRpZC1jZXJ0czovY2VydHMnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcGdyZXAKICAgICAgICAtIGZvcmdlam8tcnVubmVyCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMzBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBjb21tYW5kOiAnZm9yZ2Vqby1ydW5uZXIgLS1jb25maWcgY29uZmlnLnltbCBkYWVtb24nCg==", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "mysql", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, + "forgejo-with-runner-with-postgresql": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M6LWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fREJfVFlQRT1wb3N0Z3JlcwogICAgICAtIEZPUkdFSk9fX2RhdGFiYXNlX19IT1NUPXBvc3RncmVzcWwKICAgICAgLSAnRk9SR0VKT19fZGF0YWJhc2VfX05BTUU9JHtQT1NUR1JFU1FMX0RBVEFCQVNFOi1mb3JnZWpvfScKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTUUwKICAgICAgLSBGT1JHRUpPX19kYXRhYmFzZV9fUEFTU1dEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUwKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtICdSVU5ORVJfU0hBUkVEX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzY0X1JVTk5FUn0nCiAgICAgIC0gRk9SR0VKT19fc2VjdXJpdHlfX0lOU1RBTExfTE9DSz10cnVlCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fVVNFUj0ke1NFUlZJQ0VfVVNFUl9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX0FETUlOfScKICAgICAgLSAnRk9SR0VKT19BRE1JTl9FTUFJTD0ke0ZPUkdFSk9fQURNSU5fRU1BSUw6LWFkbWluQGV4YW1wbGUuY29tfScKICAgICAgLSBGT1JHRUpPX19yZXBvc2l0b3J5X19FTkFCTEVfUFVTSF9DUkVBVEVfVVNFUj10cnVlCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fREVGQVVMVF9QVVNIX0NSRUFURV9QUklWQVRFPWZhbHNlCiAgICAgIC0gJ0ZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUkVQT19VTklUUz1yZXBvLmNvZGUscmVwby5hY3Rpb25zJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdjdXJsIC1mcyBodHRwOi8vMTI3LjAuMC4xOjMwMDAgPiAvZGV2L251bGwgJiYgdGVzdCAtZiAvdG1wL3J1bm5lci1yZWdpc3RlcmVkJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMwCiAgICBjb21tYW5kOiAnYmFzaCAtYyAnJyAvdXNyL2Jpbi9zNi1zdnNjYW4gL2V0Yy9zNiAmIHVudGlsIHN1IC1jICJmb3JnZWpvIGZvcmdlam8tY2xpIGFjdGlvbnMgcmVnaXN0ZXIgLS1rZWVwLWxhYmVscyAtLXNlY3JldCAkJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSIgZ2l0IDsgZG8gc2xlZXAgNSA7IGRvbmUgOyBzdSAtYyAiZm9yZ2VqbyBhZG1pbiB1c2VyIGNyZWF0ZSAtLWFkbWluIC0tdXNlcm5hbWUgXCIkJEZPUkdFSk9fQURNSU5fVVNFUlwiIC0tcGFzc3dvcmQgXCIkJEZPUkdFSk9fQURNSU5fUEFTU1dPUkRcIiAtLWVtYWlsIFwiJCRGT1JHRUpPX0FETUlOX0VNQUlMXCIgLS1tdXN0LWNoYW5nZS1wYXNzd29yZD1mYWxzZSIgZ2l0IHx8IHRydWUgOyB0b3VjaCAvdG1wL3J1bm5lci1yZWdpc3RlcmVkIDsgd2FpdCAnJycKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXBvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTUUxfREFUQUJBU0U6LWZvcmdlam99JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIGRvY2tlci1pbi1kb2NrZXI6CiAgICBpbWFnZTogJ2RvY2tlcjpkaW5kJwogICAgaG9zdG5hbWU6IGRvY2tlcgogICAgcHJpdmlsZWdlZDogdHJ1ZQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGRvY2tlcgogICAgICAgIC0gJy1IJwogICAgICAgIC0gJ3VuaXg6Ly8vdmFyL3J1bi9kb2NrZXIuc29jaycKICAgICAgICAtIGluZm8KICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAzMHMKICAgICAgcmV0cmllczogMTAKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9UTFNfQ0VSVERJUj0vY2VydHMKICAgICAgLSBET0NLRVJfSE9TVD1kb2NrZXItaW4tZG9ja2VyCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRpZC1jZXJ0czovY2VydHMnCiAgcnVubmVyLXJlZ2lzdGVyOgogICAgaW1hZ2U6ICdkYXRhLmZvcmdlam8ub3JnL2Zvcmdlam8vcnVubmVyOjEzLjIuMCcKICAgIHJlc3RhcnQ6ICdubycKICAgIGV4Y2x1ZGVfZnJvbV9oYzogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1JVTk5FUl9TSEFSRURfU0VDUkVUPSR7U0VSVklDRV9IRVhfNjRfUlVOTkVSfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Zvcmdlam8tcnVubmVyLWRhdGE6L2RhdGEnCiAgICB1c2VyOiAnMDowJwogICAgY29tbWFuZDogJ2Jhc2ggLWVjICcnIHNlY3JldD0kJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSA7IHV1aWQ9JCQocHJpbnRmICVzICIkJHtzZWNyZXQ6MDoxNn0iIHwgb2QgLUFuIC10eDEgfCB0ciAtZCAiIFxuIiB8IHNlZCAtRSAicy8oLns4fSkoLns0fSkoLns0fSkoLns0fSkoLnsxMn0pL1wxLVwyLVwzLVw0LVw1LyIpIDsgZm9yZ2Vqby1ydW5uZXIgZ2VuZXJhdGUtY29uZmlnID4gY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIGxhYmVsczogXFtcXXwgIGxhYmVsczogW1wiZG9ja2VyOmRvY2tlcjovL25vZGU6MjItYm9va3dvcm1cIiwgXCJ1YnVudHUtbGF0ZXN0OmRvY2tlcjovL2NhdHRoZWhhY2tlci91YnVudHU6YWN0LTIyLjA0XCIsIFwidWJ1bnR1LTIyLjA0OmRvY2tlcjovL2NhdHRoZWhhY2tlci91YnVudHU6YWN0LTIyLjA0XCJdfCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xuZXR3b3JrOiAuKnxuZXR3b3JrOiBob3N0fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xeICBlbnZzOiQkfCAgZW52czpcbiAgICBET0NLRVJfSE9TVDogdGNwOi8vZG9ja2VyOjIzNzZcbiAgICBET0NLRVJfVExTX1ZFUklGWTogMVxuICAgIERPQ0tFUl9DRVJUX1BBVEg6IC9jZXJ0cy9jbGllbnR8IiBjb25maWcueW1sIDsgc2VkIC1pIC1lICJzfF4gIG9wdGlvbnM6fCAgb3B0aW9uczogLXYgL2NlcnRzL2NsaWVudDovY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIHZhbGlkX3ZvbHVtZXM6IFxbXF0kJHwgIHZhbGlkX3ZvbHVtZXM6XG4gICAgLSAvY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3wgIGNvbm5lY3Rpb25zOnwgIGNvbm5lY3Rpb25zOlxuICAgIGRlZmF1bHQ6XG4gICAgICB1cmw6IGh0dHA6Ly9mb3JnZWpvOjMwMDBcbiAgICAgIHV1aWQ6ICQkdXVpZFxuICAgICAgdG9rZW46ICQkc2VjcmV0fCIgY29uZmlnLnltbCA7IGNob3duIC1SIDEwMDA6MTAwMCAvZGF0YSAnJycKICBydW5uZXI6CiAgICBpbWFnZTogJ2RhdGEuZm9yZ2Vqby5vcmcvZm9yZ2Vqby9ydW5uZXI6MTMuMi4wJwogICAgZGVwZW5kc19vbjoKICAgICAgZm9yZ2VqbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBkb2NrZXItaW4tZG9ja2VyOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJ1bm5lci1yZWdpc3RlcjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ0RPQ0tFUl9IT1NUPXRjcDovL2RvY2tlcjoyMzc2JwogICAgICAtIERPQ0tFUl9DRVJUX1BBVEg9L2NlcnRzL2NsaWVudAogICAgICAtIERPQ0tFUl9UTFNfVkVSSUZZPTEKICAgIHVzZXI6ICcxMDAwOjEwMDAnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXJ1bm5lci1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLWRpZC1jZXJ0czovY2VydHMnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcGdyZXAKICAgICAgICAtIGZvcmdlam8tcnVubmVyCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMzBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBjb21tYW5kOiAnZm9yZ2Vqby1ydW5uZXIgLS1jb25maWcgY29uZmlnLnltbCBkYWVtb24nCg==", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "postgresql", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, + "forgejo-with-runner": { + "documentation": "https://forgejo.org/docs?utm_source=coolify.io", + "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1M6LWZhbHNlfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ET01BSU49JHtTRVJWSUNFX0ZRRE5fRk9SR0VKT30nCiAgICAgIC0gJ0ZPUkdFSk9fX3NlcnZlcl9fU1NIX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfUE9SVD0ke0ZPUkdFSk9fU1NIX1BPUlQ6LTIyMjIyfScKICAgICAgLSBVU0VSX1VJRD0xMDAwCiAgICAgIC0gVVNFUl9HSUQ9MTAwMAogICAgICAtICdSVU5ORVJfU0hBUkVEX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzY0X1JVTk5FUn0nCiAgICAgIC0gRk9SR0VKT19fc2VjdXJpdHlfX0lOU1RBTExfTE9DSz10cnVlCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fVVNFUj0ke1NFUlZJQ0VfVVNFUl9BRE1JTn0nCiAgICAgIC0gJ0ZPUkdFSk9fQURNSU5fUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX0FETUlOfScKICAgICAgLSAnRk9SR0VKT19BRE1JTl9FTUFJTD0ke0ZPUkdFSk9fQURNSU5fRU1BSUw6LWFkbWluQGV4YW1wbGUuY29tfScKICAgICAgLSBGT1JHRUpPX19yZXBvc2l0b3J5X19FTkFCTEVfUFVTSF9DUkVBVEVfVVNFUj10cnVlCiAgICAgIC0gRk9SR0VKT19fcmVwb3NpdG9yeV9fREVGQVVMVF9QVVNIX0NSRUFURV9QUklWQVRFPWZhbHNlCiAgICAgIC0gJ0ZPUkdFSk9fX3JlcG9zaXRvcnlfX0RFRkFVTFRfUkVQT19VTklUUz1yZXBvLmNvZGUscmVwby5hY3Rpb25zJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kYXRhOi9kYXRhJwogICAgICAtICdmb3JnZWpvLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2Zvcmdlam8tbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJyR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9OjIyJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdjdXJsIC1mcyBodHRwOi8vMTI3LjAuMC4xOjMwMDAgPiAvZGV2L251bGwgJiYgdGVzdCAtZiAvdG1wL3J1bm5lci1yZWdpc3RlcmVkJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMwCiAgICBjb21tYW5kOiAnYmFzaCAtYyAnJyAvdXNyL2Jpbi9zNi1zdnNjYW4gL2V0Yy9zNiAmIHVudGlsIHN1IC1jICJmb3JnZWpvIGZvcmdlam8tY2xpIGFjdGlvbnMgcmVnaXN0ZXIgLS1rZWVwLWxhYmVscyAtLXNlY3JldCAkJHtSVU5ORVJfU0hBUkVEX1NFQ1JFVDowOjQwfSIgZ2l0IDsgZG8gc2xlZXAgNSA7IGRvbmUgOyBzdSAtYyAiZm9yZ2VqbyBhZG1pbiB1c2VyIGNyZWF0ZSAtLWFkbWluIC0tdXNlcm5hbWUgXCIkJEZPUkdFSk9fQURNSU5fVVNFUlwiIC0tcGFzc3dvcmQgXCIkJEZPUkdFSk9fQURNSU5fUEFTU1dPUkRcIiAtLWVtYWlsIFwiJCRGT1JHRUpPX0FETUlOX0VNQUlMXCIgLS1tdXN0LWNoYW5nZS1wYXNzd29yZD1mYWxzZSIgZ2l0IHx8IHRydWUgOyB0b3VjaCAvdG1wL3J1bm5lci1yZWdpc3RlcmVkIDsgd2FpdCAnJycKICBkb2NrZXItaW4tZG9ja2VyOgogICAgaW1hZ2U6ICdkb2NrZXI6ZGluZCcKICAgIGhvc3RuYW1lOiBkb2NrZXIKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBkb2NrZXIKICAgICAgICAtICctSCcKICAgICAgICAtICd1bml4Oi8vL3Zhci9ydW4vZG9ja2VyLnNvY2snCiAgICAgICAgLSBpbmZvCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMzBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBET0NLRVJfVExTX0NFUlRESVI9L2NlcnRzCiAgICAgIC0gRE9DS0VSX0hPU1Q9ZG9ja2VyLWluLWRvY2tlcgogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1kaWQtY2VydHM6L2NlcnRzJwogIHJ1bm5lci1yZWdpc3RlcjoKICAgIGltYWdlOiAnZGF0YS5mb3JnZWpvLm9yZy9mb3JnZWpvL3J1bm5lcjoxMy4yLjAnCiAgICByZXN0YXJ0OiAnbm8nCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICAtICdSVU5ORVJfU0hBUkVEX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzY0X1JVTk5FUn0nCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLXJ1bm5lci1kYXRhOi9kYXRhJwogICAgdXNlcjogJzA6MCcKICAgIGNvbW1hbmQ6ICdiYXNoIC1lYyAnJyBzZWNyZXQ9JCR7UlVOTkVSX1NIQVJFRF9TRUNSRVQ6MDo0MH0gOyB1dWlkPSQkKHByaW50ZiAlcyAiJCR7c2VjcmV0OjA6MTZ9IiB8IG9kIC1BbiAtdHgxIHwgdHIgLWQgIiBcbiIgfCBzZWQgLUUgInMvKC57OH0pKC57NH0pKC57NH0pKC57NH0pKC57MTJ9KS9cMS1cMi1cMy1cNC1cNS8iKSA7IGZvcmdlam8tcnVubmVyIGdlbmVyYXRlLWNvbmZpZyA+IGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICBsYWJlbHM6IFxbXF18ICBsYWJlbHM6IFtcImRvY2tlcjpkb2NrZXI6Ly9ub2RlOjIyLWJvb2t3b3JtXCIsIFwidWJ1bnR1LWxhdGVzdDpkb2NrZXI6Ly9jYXR0aGVoYWNrZXIvdWJ1bnR1OmFjdC0yMi4wNFwiLCBcInVidW50dS0yMi4wNDpkb2NrZXI6Ly9jYXR0aGVoYWNrZXIvdWJ1bnR1OmFjdC0yMi4wNFwiXXwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8bmV0d29yazogLip8bmV0d29yazogaG9zdHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8XiAgZW52czokJHwgIGVudnM6XG4gICAgRE9DS0VSX0hPU1Q6IHRjcDovL2RvY2tlcjoyMzc2XG4gICAgRE9DS0VSX1RMU19WRVJJRlk6IDFcbiAgICBET0NLRVJfQ0VSVF9QQVRIOiAvY2VydHMvY2xpZW50fCIgY29uZmlnLnltbCA7IHNlZCAtaSAtZSAic3xeICBvcHRpb25zOnwgIG9wdGlvbnM6IC12IC9jZXJ0cy9jbGllbnQ6L2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICB2YWxpZF92b2x1bWVzOiBcW1xdJCR8ICB2YWxpZF92b2x1bWVzOlxuICAgIC0gL2NlcnRzL2NsaWVudHwiIGNvbmZpZy55bWwgOyBzZWQgLWkgLWUgInN8ICBjb25uZWN0aW9uczp8ICBjb25uZWN0aW9uczpcbiAgICBkZWZhdWx0OlxuICAgICAgdXJsOiBodHRwOi8vZm9yZ2VqbzozMDAwXG4gICAgICB1dWlkOiAkJHV1aWRcbiAgICAgIHRva2VuOiAkJHNlY3JldHwiIGNvbmZpZy55bWwgOyBjaG93biAtUiAxMDAwOjEwMDAgL2RhdGEgJycnCiAgcnVubmVyOgogICAgaW1hZ2U6ICdkYXRhLmZvcmdlam8ub3JnL2Zvcmdlam8vcnVubmVyOjEzLjIuMCcKICAgIGRlcGVuZHNfb246CiAgICAgIGZvcmdlam86CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgZG9ja2VyLWluLWRvY2tlcjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBydW5uZXItcmVnaXN0ZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIGVudmlyb25tZW50OgogICAgICAtICdET0NLRVJfSE9TVD10Y3A6Ly9kb2NrZXI6MjM3NicKICAgICAgLSBET0NLRVJfQ0VSVF9QQVRIPS9jZXJ0cy9jbGllbnQKICAgICAgLSBET0NLRVJfVExTX1ZFUklGWT0xCiAgICB1c2VyOiAnMTAwMDoxMDAwJwogICAgdm9sdW1lczoKICAgICAgLSAnZm9yZ2Vqby1ydW5uZXItZGF0YTovZGF0YScKICAgICAgLSAnZm9yZ2Vqby1kaWQtY2VydHM6L2NlcnRzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHBncmVwCiAgICAgICAgLSBmb3JnZWpvLXJ1bm5lcgogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDMwcwogICAgICByZXRyaWVzOiAxMAogICAgY29tbWFuZDogJ2Zvcmdlam8tcnVubmVyIC0tY29uZmlnIGNvbmZpZy55bWwgZGFlbW9uJwo=", + "tags": [ + "version control", + "collaboration", + "code", + "hosting", + "lightweight", + "runner", + "actions", + "cicd", + "ci" + ], + "category": "git", + "logo": "svgs/forgejo.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-10T11:35:20+02:00", + "port": "3000" + }, "forgejo": { "documentation": "https://forgejo.org/docs?utm_source=coolify.io", "slogan": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.", - "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICBwb3J0czoKICAgICAgLSAnMjIyMjI6MjInCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", + "compose": "c2VydmljZXM6CiAgZm9yZ2VqbzoKICAgIGltYWdlOiAnY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2VqbzoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JHRUpPXzMwMDAKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19ST09UX1VSTD0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TPSR7Rk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dFRF9ET01BSU5TfScKICAgICAgLSAnRk9SR0VKT19fbWlncmF0aW9uc19fQUxMT1dfTE9DQUxORVRXT1JLUz0ke0ZPUkdFSk9fX21pZ3JhdGlvbnNfX0FMTE9XX0xPQ0FMTkVUV09SS1MtZmFsc2V9JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX0RPTUFJTj0ke1NFUlZJQ0VfRlFETl9GT1JHRUpPfScKICAgICAgLSAnRk9SR0VKT19fc2VydmVyX19TU0hfRE9NQUlOPSR7U0VSVklDRV9GUUROX0ZPUkdFSk99JwogICAgICAtICdGT1JHRUpPX19zZXJ2ZXJfX1NTSF9QT1JUPSR7Rk9SR0VKT19TU0hfUE9SVDotMjIyMjJ9JwogICAgICAtIFVTRVJfVUlEPTEwMDAKICAgICAgLSBVU0VSX0dJRD0xMDAwCiAgICBwb3J0czoKICAgICAgLSAnJHtGT1JHRUpPX1NTSF9QT1JUOi0yMjIyMn06MjInCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JnZWpvLWRhdGE6L2RhdGEnCiAgICAgIC0gJ2Zvcmdlam8tdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZm9yZ2Vqby1sb2NhbHRpbWU6L2V0Yy9sb2NhbHRpbWU6cm8nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", "tags": [ "version control", "collaboration",