You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.4 KiB
67 lines
2.4 KiB
-- See https://github.com/libkafe/kafe for documentation.
|
|
|
|
local k = require('kafe')
|
|
k.require_api(1)
|
|
|
|
k.add_inventory('deploy', '159.65.52.14', 22, 'staging', 'website')
|
|
|
|
k.task('deploy', function()
|
|
local version = os.time(os.date('!*t'))
|
|
|
|
k.define('deploy_to', '/opt/almalinux.org')
|
|
k.define('public', '/var/www/almalinux.org')
|
|
k.define('version', version)
|
|
|
|
k.local_shell('make assemble')
|
|
|
|
local deploy = function()
|
|
k.within('{{deploy_to}}')
|
|
|
|
if not k.shell('mkdir -p release/{{version}}')
|
|
then error('Could not create release root directory') end
|
|
|
|
k.upload_file('tmp/deployment.tar.gz', 'release/{{version}}/deployment.tar.gz')
|
|
|
|
if not k.shell('tar -xf release/{{version}}/deployment.tar.gz -C release/{{version}}')
|
|
then error('Could not unpack uploaded archive') end
|
|
|
|
if not k.shell('rm release/{{version}}/deployment.tar.gz')
|
|
then error('Failed to remove uploaded archive') end
|
|
|
|
k.shell('docker load < release/{{version}}/almalinux.org.image.tar')
|
|
k.shell('cp release/{{version}}/docker-compose.yml docker-compose.yml')
|
|
k.shell('mkdir -p {{public}}/release/{{version}}')
|
|
k.shell('mv release/{{version}}/public {{public}}/release/{{version}}')
|
|
k.shell('/usr/local/bin/docker-compose up -d mariadb && sleep 5')
|
|
k.shell('/usr/local/bin/docker-compose run web python3 ./manage.py migrate')
|
|
k.shell('/usr/local/bin/docker-compose up -d web')
|
|
k.shell('docker system prune -f')
|
|
end
|
|
|
|
local symlink_www = function()
|
|
k.within('{{public}}')
|
|
|
|
if not k.shell('ln -nsfv release/{{version}}/ current')
|
|
then error('Failed to update the symlink to the new version') end
|
|
end
|
|
|
|
local remove_old_public_releases = function()
|
|
k.within('{{public}}/release/')
|
|
|
|
if not k.shell('ls -1tr | head -n -3 | xargs -d \'\\n\' rm -rf --') then
|
|
error('Failed to remove old www releases') end
|
|
end
|
|
|
|
local remove_old_app_releases = function()
|
|
k.within('{{deploy_to}}/release/')
|
|
|
|
if not k.shell('ls -1tr | head -n -3 | xargs -d \'\\n\' rm -rf --') then
|
|
error('Failed to remove old app releases') end
|
|
end
|
|
|
|
if k.on('website', deploy) then
|
|
k.on('website', symlink_www)
|
|
k.on('website', remove_old_public_releases)
|
|
k.on('website', remove_old_app_releases)
|
|
end
|
|
end)
|
|
|