2022-10-20 14:06:33 +00:00
|
|
|
import { createDirectories, getServiceFromDB, getServiceImage, getServiceMainPort, isDev, makeLabelForServices } from "./common";
|
|
|
|
|
import fs from 'fs/promises';
|
|
|
|
|
export async function getTemplates() {
|
2022-10-24 12:23:34 +00:00
|
|
|
let templates: any = [];
|
|
|
|
|
if (isDev) {
|
|
|
|
|
templates = JSON.parse(await (await fs.readFile('./template.json')).toString())
|
|
|
|
|
} else {
|
|
|
|
|
templates = JSON.parse(await (await fs.readFile('/app/template.json')).toString())
|
|
|
|
|
}
|
2022-10-24 11:12:31 +00:00
|
|
|
if (!isDev) {
|
|
|
|
|
templates.push({
|
|
|
|
|
"templateVersion": "1.0.0",
|
|
|
|
|
"defaultVersion": "latest",
|
|
|
|
|
"name": "Test-Fake-Service",
|
|
|
|
|
"description": "",
|
|
|
|
|
"services": {
|
|
|
|
|
"$$id": {
|
|
|
|
|
"name": "Test-Fake-Service",
|
|
|
|
|
"depends_on": [
|
|
|
|
|
"$$id-postgresql",
|
|
|
|
|
"$$id-redis"
|
|
|
|
|
],
|
|
|
|
|
"image": "weblate/weblate:$$core_version",
|
|
|
|
|
"volumes": [
|
|
|
|
|
"$$id-data:/app/data",
|
|
|
|
|
],
|
|
|
|
|
"environment": [
|
|
|
|
|
`POSTGRES_SECRET=$$secret_postgres_secret`,
|
|
|
|
|
`WEBLATE_SITE_DOMAIN=$$config_weblate_site_domain`,
|
|
|
|
|
`WEBLATE_ADMIN_PASSWORD=$$secret_weblate_admin_password`,
|
|
|
|
|
`POSTGRES_PASSWORD=$$secret_postgres_password`,
|
|
|
|
|
`POSTGRES_USER=$$config_postgres_user`,
|
|
|
|
|
`POSTGRES_DATABASE=$$config_postgres_db`,
|
|
|
|
|
`POSTGRES_HOST=$$id-postgresql`,
|
|
|
|
|
`POSTGRES_PORT=5432`,
|
|
|
|
|
`REDIS_HOST=$$id-redis`,
|
|
|
|
|
],
|
|
|
|
|
"ports": [
|
|
|
|
|
"8080"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"$$id-postgresql": {
|
|
|
|
|
"name": "PostgreSQL",
|
|
|
|
|
"depends_on": [],
|
|
|
|
|
"image": "postgres:14-alpine",
|
|
|
|
|
"volumes": [
|
|
|
|
|
"$$id-postgresql-data:/var/lib/postgresql/data",
|
|
|
|
|
],
|
|
|
|
|
"environment": [
|
|
|
|
|
"POSTGRES_USER=$$config_postgres_user",
|
|
|
|
|
"POSTGRES_PASSWORD=$$secret_postgres_password",
|
|
|
|
|
"POSTGRES_DB=$$config_postgres_db",
|
|
|
|
|
],
|
|
|
|
|
"ports": []
|
|
|
|
|
},
|
|
|
|
|
"$$id-redis": {
|
|
|
|
|
"name": "Redis",
|
|
|
|
|
"depends_on": [],
|
|
|
|
|
"image": "redis:7-alpine",
|
|
|
|
|
"volumes": [
|
|
|
|
|
"$$id-redis-data:/data",
|
|
|
|
|
],
|
|
|
|
|
"environment": [],
|
|
|
|
|
"ports": [],
|
|
|
|
|
}
|
2022-10-21 13:51:32 +00:00
|
|
|
},
|
2022-10-24 11:12:31 +00:00
|
|
|
"variables": [
|
|
|
|
|
{
|
|
|
|
|
"id": "$$config_weblate_site_domain",
|
|
|
|
|
"main": "$$id",
|
|
|
|
|
"name": "WEBLATE_SITE_DOMAIN",
|
|
|
|
|
"label": "Weblate Domain",
|
|
|
|
|
"defaultValue": "$$generate_domain",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$secret_weblate_admin_password",
|
|
|
|
|
"main": "$$id",
|
|
|
|
|
"name": "WEBLATE_ADMIN_PASSWORD",
|
|
|
|
|
"label": "Weblate Admin Password",
|
|
|
|
|
"defaultValue": "$$generate_password",
|
|
|
|
|
"description": "",
|
|
|
|
|
"extras": {
|
|
|
|
|
"isVisibleOnUI": true,
|
2022-10-21 13:51:32 +00:00
|
|
|
}
|
2022-10-24 11:12:31 +00:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$secret_weblate_admin_password2",
|
|
|
|
|
"name": "WEBLATE_ADMIN_PASSWORD2",
|
|
|
|
|
"label": "Weblate Admin Password2",
|
|
|
|
|
"defaultValue": "$$generate_password",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$config_postgres_user",
|
|
|
|
|
"main": "$$id-postgresql",
|
|
|
|
|
"name": "POSTGRES_USER",
|
|
|
|
|
"label": "PostgreSQL User",
|
|
|
|
|
"defaultValue": "$$generate_username",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$secret_postgres_password",
|
|
|
|
|
"main": "$$id-postgresql",
|
|
|
|
|
"name": "POSTGRES_PASSWORD",
|
|
|
|
|
"label": "PostgreSQL Password",
|
|
|
|
|
"defaultValue": "$$generate_password(32)",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$secret_postgres_password_hex32",
|
|
|
|
|
"name": "POSTGRES_PASSWORD_hex32",
|
|
|
|
|
"label": "PostgreSQL Password hex32",
|
|
|
|
|
"defaultValue": "$$generate_hex(32)",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$config_postgres_something_hex32",
|
|
|
|
|
"name": "POSTGRES_SOMETHING_HEX32",
|
|
|
|
|
"label": "PostgreSQL Something hex32",
|
|
|
|
|
"defaultValue": "$$generate_hex(32)",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$config_postgres_db",
|
|
|
|
|
"main": "$$id-postgresql",
|
|
|
|
|
"name": "POSTGRES_DB",
|
|
|
|
|
"label": "PostgreSQL Database",
|
|
|
|
|
"defaultValue": "weblate",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": "$$secret_postgres_secret",
|
|
|
|
|
"name": "POSTGRES_SECRET",
|
|
|
|
|
"label": "PostgreSQL Secret",
|
|
|
|
|
"defaultValue": "",
|
|
|
|
|
"description": "",
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
})
|
2022-10-20 14:06:33 +00:00
|
|
|
}
|
|
|
|
|
return templates
|
|
|
|
|
}
|
2022-08-15 14:58:10 +00:00
|
|
|
export async function defaultServiceConfigurations({ id, teamId }) {
|
|
|
|
|
const service = await getServiceFromDB({ id, teamId });
|
|
|
|
|
const { destinationDockerId, destinationDocker, type, serviceSecret } = service;
|
|
|
|
|
|
|
|
|
|
const network = destinationDockerId && destinationDocker.network;
|
|
|
|
|
const port = getServiceMainPort(type);
|
|
|
|
|
|
|
|
|
|
const { workdir } = await createDirectories({ repository: type, buildId: id });
|
|
|
|
|
|
|
|
|
|
const image = getServiceImage(type);
|
|
|
|
|
let secrets = [];
|
|
|
|
|
if (serviceSecret.length > 0) {
|
|
|
|
|
serviceSecret.forEach((secret) => {
|
2022-08-16 09:13:22 +00:00
|
|
|
secrets.push(`${secret.name}=${secret.value}`);
|
2022-08-15 14:58:10 +00:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return { ...service, network, port, workdir, image, secrets }
|
|
|
|
|
}
|