hosty
Version:
A code based opinionated way to self-host and manage web apps.
66 lines • 2.36 kB
JavaScript
import path from 'path';
import * as blocks from '../../blocks/index.js';
export function git(config) {
return {
...config,
type: 'app.git',
get_deploy_tasks: (server) => get_deploy_tasks(server, config),
get_destroy_tasks: (server) => get_destroy_tasks(server, config),
};
}
function get_deploy_tasks(server, config) {
config.path || (config.path = '.');
config.instances || (config.instances = 1);
const tasks = [];
const service_dir = path.join(server.hosty_dir, 'services', config.name);
if (config.domain) {
tasks.push(blocks.set_available_ports(service_dir, config.instances, 'app_ports'));
}
tasks.push(blocks.build_repo({
repo_url: config.repo,
branch: config.branch,
service_dir,
image_name: config.name,
facts: { source_changed: 'source_changed' },
path: config.path,
env: config.env,
}));
const service = blocks.create_service({
name: config.name,
compose: make_composes(config),
docker_network: server.docker_network,
service_dir,
restart_conditions: ['source_changed'],
before_start: config.before_start,
});
tasks.push(service);
if (config.domain) {
tasks.push(blocks.create_domain({ domain: config.domain, ports_var: 'app_ports', caddyfile_path: path.join(service_dir, 'Caddyfile') }));
}
return tasks;
}
function get_destroy_tasks(server, config) {
const tasks = [];
const service_dir = path.join(server.hosty_dir, 'services', config.name);
tasks.push(blocks.delete_service(service_dir));
tasks.push(blocks.delete_docker_image(config.name));
if (config.domain) {
tasks.push(blocks.delete_domain({ domain: config.domain, caddyfile_path: path.join(service_dir, 'Caddyfile') }));
}
return tasks;
}
function make_composes(config) {
const compose = config.compose || {};
compose.image = config.name;
compose.environment = { ...(config.env || {}), ...(compose.environment || {}) };
compose.ports || (compose.ports = []);
const composes = [];
for (let i = 1; i <= config.instances; i++) {
composes.push({
...compose,
ports: [...compose.ports, `{{app_ports[${i - 1}]}}:80`],
});
}
return composes;
}
//# sourceMappingURL=git.js.map