2
0
Fork 0
backend/drone_gen.js

180 lines
3.3 KiB
JavaScript
Raw Normal View History

2019-03-23 23:27:04 +08:00
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
const yaml = require('js-yaml');
const folders = fs.readdirSync(cwd, { withFileTypes: true });
2019-03-23 23:48:01 +08:00
const submodules = folders.filter(f =>
f.isDirectory() && fs.readdirSync(path.join(cwd, f.name)).includes('.git')
).map(f => f.name);
2019-03-23 23:27:04 +08:00
const dockers = folders.filter(f =>
f.isDirectory() && fs.readdirSync(path.join(cwd, f.name)).includes('Dockerfile')
2019-03-23 23:48:01 +08:00
).map(f => f.name);
2019-03-23 23:27:04 +08:00
2019-03-23 23:48:01 +08:00
const submodule_override = submodules.reduce((acc, f) => {
acc[f] = 'https://git.makerforce.io/beep/' + f + '.git';
return acc;
}, {});
const yamls = dockers.map(f => ({
2019-03-23 23:27:04 +08:00
kind: 'pipeline',
name: f,
clone: {
2019-03-23 23:48:01 +08:00
depth: 1,
2019-03-23 23:27:04 +08:00
},
steps: [
{
name: 'submodule',
image: 'plugins/git',
settings: {
recursive: true,
2019-03-23 23:48:01 +08:00
submodule_override,
2019-03-23 23:27:04 +08:00
},
2019-04-02 12:27:20 +08:00
when: {
branch: ['master'],
},
2019-03-23 23:27:04 +08:00
},
{
name: 'docker',
image: 'plugins/docker',
settings: {
registry: 'registry.makerforce.io',
repo: 'registry.makerforce.io/beep/' + f,
2019-03-23 23:48:01 +08:00
context: f,
dockerfile: f + '/Dockerfile',
2019-03-23 23:27:04 +08:00
auto_tag: true,
username: {
from_secret: 'docker_username',
},
password: {
from_secret: 'docker_password',
},
},
2019-03-25 00:36:20 +08:00
when: {
branch: ['master'],
},
2019-03-23 23:27:04 +08:00
},
],
2019-03-23 23:48:01 +08:00
}))
2019-03-24 23:37:37 +08:00
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'
],
},
2019-04-02 12:27:20 +08:00
when: {
branch: ['master'],
},
2019-03-24 23:37:37 +08:00
},
],
};
2019-03-23 23:48:01 +08:00
const deploy = {
kind: 'pipeline',
name: 'deploy',
clone: {
depth: 1,
},
steps: [
{
2019-03-24 01:28:38 +08:00
name: 'submodule',
image: 'plugins/git',
settings: {
recursive: true,
submodule_override,
},
2019-04-02 12:27:20 +08:00
when: {
branch: ['master'],
},
2019-03-24 01:28:38 +08:00
},
{
name: 'copy-docker-compose',
image: 'appleboy/drone-scp',
settings: {
host: 'staging.beepvoice.app',
username: 'core',
2019-03-24 23:30:04 +08:00
key: {
2019-03-24 01:28:38 +08:00
from_secret: 'ssh_key',
},
source: [
'docker-compose.staging.yml',
2019-03-24 01:30:53 +08:00
'traefik.staging.toml',
2019-03-24 01:28:38 +08:00
],
target: '/home/core/staging',
},
2019-03-25 00:36:20 +08:00
when: {
branch: ['master'],
},
2019-03-24 01:28:38 +08:00
},
{
name: 'copy-migrations',
image: 'appleboy/drone-scp',
settings: {
host: 'staging.beepvoice.app',
username: 'core',
2019-03-24 23:30:04 +08:00
key: {
2019-03-24 01:28:38 +08:00
from_secret: 'ssh_key',
},
source: [
'backend-core/postgres/*',
],
2019-03-25 00:42:06 +08:00
target: '/home/core/staging',
2019-03-24 01:28:38 +08:00
},
2019-03-25 00:36:20 +08:00
when: {
branch: ['master'],
},
2019-03-24 01:28:38 +08:00
},
{
name: 'docker-compose-up',
image: 'appleboy/drone-ssh',
settings: {
host: 'staging.beepvoice.app',
username: 'core',
2019-03-24 23:30:04 +08:00
key: {
2019-03-24 01:28:38 +08:00
from_secret: 'ssh_key',
},
script: [
2019-03-24 22:22:41 +08:00
'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',
2019-03-24 01:28:38 +08:00
],
},
2019-03-25 00:36:20 +08:00
when: {
branch: ['master'],
},
2019-03-23 23:48:01 +08:00
},
2019-03-25 00:18:32 +08:00
{
name: 'slack',
image: 'plugins/slack',
settings: {
webhook: {
from_secret: 'slack_webhook_beep',
},
},
2019-04-02 12:27:20 +08:00
when: {
branch: ['master'],
},
2019-03-25 00:18:32 +08:00
},
2019-03-23 23:48:01 +08:00
],
depends_on: dockers,
};
2019-03-24 23:37:37 +08:00
const droneyml = [].concat(sshTest).concat(yamls).concat(deploy).map(yaml.safeDump).join('---\n');
2019-03-23 23:27:04 +08:00
fs.writeFileSync(path.join(cwd, '.drone.yml'), droneyml);
console.log('Written to .drone.yml');