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

-- 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)