2
0
Fork 0
backend/drone_gen.js

202 lines
4.0 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 ini = require('ini');
2019-03-23 23:27:04 +08:00
const gitmodules = ini.parse(fs.readFileSync('.gitmodules', 'utf-8'));
2019-07-03 10:38:06 +08:00
const gitmodulepaths = Object.values(gitmodules).map(m => m.path);
2019-07-03 10:28:05 +08:00
/*
2019-03-23 23:27:04 +08:00
const folders = fs.readdirSync(cwd, { withFileTypes: true });
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-07-03 10:28:05 +08:00
*/
2019-07-03 10:38:06 +08:00
const submodules = gitmodulepaths.concat([
// Additional nested submodules
'backend-protobuf',
]);
const dockers = gitmodulepaths; // Assumption: All submodules have Docker. Should hold true
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: {
depth: 32,
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
},
},
{
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',
},
},
},
],
trigger: {
branch: ["master"],
event: ["push", "tag", "promote", "rollback"],
},
2019-03-23 23:48:01 +08:00
}))
2019-03-24 23:37:37 +08:00
const sshTest = {
kind: 'pipeline',
name: 'ssh-test',
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'
],
},
},
],
trigger: {
branch: ["master"],
event: ["push", "tag", "promote", "rollback"],
},
};
const callSelf = {
kind: 'pipeline',
name: 'call-self',
steps: [
{
name: 'regenrate',
image: 'node:12-alpine',
commands: [
'yarn install',
'yarn generate',
],
},
{
name: 'push-or-fail',
image: 'appleboy/drone-git-push',
settings: {
remote_name: 'origin',
branch: '${DRONE_SOURCE_BRANCH}',
key: {
from_secret: 'push_ssh_key',
},
commit: true,
commit_message: '[SKIP CI] Automatically updating .drone.yml',
2019-04-02 12:27:20 +08:00
},
failure: 'ignore',
2019-03-24 23:37:37 +08:00
},
],
trigger: {
branch: ["master"],
event: ["pull_request"],
},
2019-03-24 23:37:37 +08:00
};
2019-03-23 23:48:01 +08:00
const deploy = {
kind: 'pipeline',
name: 'deploy',
steps: [
{
2019-03-24 01:28:38 +08:00
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',
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',
},
},
{
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
},
},
{
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-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-03-23 23:48:01 +08:00
],
trigger: {
branch: ["master"],
event: ["push", "tag", "promote", "rollback"],
},
2019-03-23 23:48:01 +08:00
depends_on: dockers,
};
const droneyml = [].concat(sshTest).concat(callSelf).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');