168 lines
3.2 KiB
JavaScript
168 lines
3.2 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const cwd = process.cwd();
|
|
const yaml = require('js-yaml');
|
|
|
|
const folders = fs.readdirSync(cwd, { withFileTypes: true });
|
|
const submodules = folders.filter(f =>
|
|
f.isDirectory() && fs.readdirSync(path.join(cwd, f.name)).includes('.git')
|
|
).map(f => f.name);
|
|
const dockers = folders.filter(f =>
|
|
f.isDirectory() && fs.readdirSync(path.join(cwd, f.name)).includes('Dockerfile')
|
|
).map(f => f.name);
|
|
|
|
const submodule_override = submodules.reduce((acc, f) => {
|
|
acc[f] = 'https://git.makerforce.io/beep/' + f + '.git';
|
|
return acc;
|
|
}, {});
|
|
|
|
const yamls = dockers.map(f => ({
|
|
kind: 'pipeline',
|
|
name: f,
|
|
clone: {
|
|
depth: 1,
|
|
},
|
|
steps: [
|
|
{
|
|
name: 'submodule',
|
|
image: 'plugins/git',
|
|
settings: {
|
|
recursive: true,
|
|
submodule_override,
|
|
},
|
|
},
|
|
{
|
|
name: 'docker',
|
|
image: 'plugins/docker',
|
|
settings: {
|
|
registry: 'registry.makerforce.io',
|
|
repo: 'registry.makerforce.io/beep/' + f,
|
|
context: f,
|
|
dockerfile: f + '/Dockerfile',
|
|
auto_tag: true,
|
|
username: {
|
|
from_secret: 'docker_username',
|
|
},
|
|
password: {
|
|
from_secret: 'docker_password',
|
|
},
|
|
},
|
|
when: {
|
|
branch: ['master'],
|
|
},
|
|
},
|
|
],
|
|
}))
|
|
|
|
const sshTest = {
|
|
kind: 'pipeline',
|
|
name: 'ssh-test',
|
|
clone: {
|
|
depth: 1,
|
|
},
|
|
steps: [
|
|
{
|
|
name: 'ssh',
|
|
image: 'appleboy/drone-ssh',
|
|
settings: {
|
|
host: 'staging.beepvoice.app',
|
|
username: 'core',
|
|
key: {
|
|
from_secret: 'ssh_key',
|
|
},
|
|
script: [
|
|
'cd /home/core/staging && ls'
|
|
],
|
|
},
|
|
},
|
|
],
|
|
};
|
|
|
|
const deploy = {
|
|
kind: 'pipeline',
|
|
name: 'deploy',
|
|
clone: {
|
|
depth: 1,
|
|
},
|
|
steps: [
|
|
{
|
|
name: 'submodule',
|
|
image: 'plugins/git',
|
|
settings: {
|
|
recursive: true,
|
|
submodule_override,
|
|
},
|
|
},
|
|
{
|
|
name: 'copy-docker-compose',
|
|
image: 'appleboy/drone-scp',
|
|
settings: {
|
|
host: 'staging.beepvoice.app',
|
|
username: 'core',
|
|
key: {
|
|
from_secret: 'ssh_key',
|
|
},
|
|
source: [
|
|
'docker-compose.staging.yml',
|
|
'traefik.staging.toml',
|
|
],
|
|
target: '/home/core/staging',
|
|
},
|
|
when: {
|
|
branch: ['master'],
|
|
},
|
|
},
|
|
{
|
|
name: 'copy-migrations',
|
|
image: 'appleboy/drone-scp',
|
|
settings: {
|
|
host: 'staging.beepvoice.app',
|
|
username: 'core',
|
|
key: {
|
|
from_secret: 'ssh_key',
|
|
},
|
|
source: [
|
|
'backend-core/postgres/*',
|
|
],
|
|
target: '/home/core/staging',
|
|
},
|
|
when: {
|
|
branch: ['master'],
|
|
},
|
|
},
|
|
{
|
|
name: 'docker-compose-up',
|
|
image: 'appleboy/drone-ssh',
|
|
settings: {
|
|
host: 'staging.beepvoice.app',
|
|
username: 'core',
|
|
key: {
|
|
from_secret: 'ssh_key',
|
|
},
|
|
script: [
|
|
'cd /home/core/staging && /home/core/docker-compose -f docker-compose.staging.yml pull',
|
|
'cd /home/core/staging && /home/core/docker-compose -f docker-compose.staging.yml up -d',
|
|
],
|
|
},
|
|
when: {
|
|
branch: ['master'],
|
|
},
|
|
},
|
|
{
|
|
name: 'slack',
|
|
image: 'plugins/slack',
|
|
settings: {
|
|
webhook: {
|
|
from_secret: 'slack_webhook_beep',
|
|
},
|
|
},
|
|
},
|
|
],
|
|
depends_on: dockers,
|
|
};
|
|
|
|
const droneyml = [].concat(sshTest).concat(yamls).concat(deploy).map(yaml.safeDump).join('---\n');
|
|
|
|
fs.writeFileSync(path.join(cwd, '.drone.yml'), droneyml);
|
|
console.log('Written to .drone.yml');
|