- Fix restart_policy in Service config.
- Tweaked the upgrade process a bit. REVERTED.
- Refactor and cosmetic surgery here and there.
- Track Service config changes and allow redeploy if it changes.
This commit is contained in:
Andras Bacsai
2021-03-30 23:35:22 +02:00
committed by GitHub
parent a1cccd479e
commit 767c65ab10
16 changed files with 122 additions and 116 deletions

View File

@@ -1,9 +1,10 @@
const { docker } = require('../../docker')
const { execShellAsync, delay } = require('../../common')
const { execShellAsync } = require('../../common')
const Deployment = require('../../../models/Deployment')
async function purgeOldThings () {
try {
// TODO: Tweak this, because it deletes coolify-base, so the upgrade will be slow
await docker.engine.pruneImages()
await docker.engine.pruneContainers()
} catch (error) {

View File

@@ -1,8 +1,9 @@
const { uniqueNamesGenerator, adjectives, colors, animals } = require('unique-names-generator')
const cuid = require('cuid')
const { execShellAsync } = require('../common')
const crypto = require('crypto')
const { execShellAsync } = require('../common')
function getUniq () {
return uniqueNamesGenerator({ dictionaries: [adjectives, animals, colors], length: 2 })
}
@@ -15,6 +16,24 @@ function setDefaultConfiguration (configuration) {
const shaBase = JSON.stringify({ repository: configuration.repository })
const sha256 = crypto.createHash('sha256').update(shaBase).digest('hex')
const baseServiceConfiguration = {
replicas: 1,
restart_policy: {
condition: 'any',
max_attempts: 3
},
update_config: {
parallelism: 1,
delay: '10s',
order: 'start-first'
},
rollback_config: {
parallelism: 1,
delay: '10s',
order: 'start-first'
}
}
configuration.build.container.name = sha256.slice(0, 15)
configuration.general.nickname = nickname
@@ -34,6 +53,9 @@ function setDefaultConfiguration (configuration) {
if (!configuration.build.directory) configuration.build.directory = '/'
}
configuration.build.container.baseSHA = crypto.createHash('sha256').update(JSON.stringify(baseServiceConfiguration)).digest('hex')
configuration.baseServiceConfiguration = baseServiceConfiguration
return configuration
} catch (error) {
throw { error, type: 'server' }

View File

@@ -1,9 +1,9 @@
const yaml = require('js-yaml')
const fs = require('fs').promises
const { execShellAsync } = require('../../common')
const { docker } = require('../../docker')
const { saveAppLog } = require('../../logging')
const { deleteSameDeployments } = require('../cleanup')
const fs = require('fs').promises
module.exports = async function (configuration, configChanged, imageChanged) {
try {
@@ -12,6 +12,11 @@ module.exports = async function (configuration, configChanged, imageChanged) {
generateEnvs[secret.name] = secret.value
}
const containerName = configuration.build.container.name
// Only save SHA256 of it in the configuration label
const baseServiceConfiguration = configuration.baseServiceConfiguration
delete configuration.baseServiceConfiguration
const stack = {
version: '3.8',
services: {
@@ -20,23 +25,7 @@ module.exports = async function (configuration, configChanged, imageChanged) {
networks: [`${docker.network}`],
environment: generateEnvs,
deploy: {
replicas: 1,
restart_policy: {
condition: 'on-failure',
delay: '5s',
max_attempts: 1,
window: '120s'
},
update_config: {
parallelism: 1,
delay: '10s',
order: 'start-first'
},
rollback_config: {
parallelism: 1,
delay: '10s',
order: 'start-first'
},
...baseServiceConfiguration,
labels: [
'managedBy=coolify',
'type=application',
@@ -71,8 +60,10 @@ module.exports = async function (configuration, configChanged, imageChanged) {
}
}
}
console.log(stack)
await saveAppLog('### Publishing.', configuration)
await fs.writeFile(`${configuration.general.workdir}/stack.yml`, yaml.dump(stack))
// TODO: Compare stack.yml with the currently running one to upgrade if something changes, like restart_policy
if (configChanged) {
// console.log('configuration changed')
await execShellAsync(
@@ -91,6 +82,7 @@ module.exports = async function (configuration, configChanged, imageChanged) {
await saveAppLog('### Published done!', configuration)
} catch (error) {
console.log(error)
await saveAppLog(`Error occured during deployment: ${error.message}`, configuration)
throw { error, type: 'server' }
}