diff --git a/.release/0.250.0.migrate b/.release/0.250.0.migrate new file mode 100644 index 0000000000000000000000000000000000000000..dfbf39f9f4cce3ed8a61e8d1e5fc52d37616bcdc --- /dev/null +++ b/.release/0.250.0.migrate @@ -0,0 +1,1125 @@ +# This file describe operations needed for migration between versions, +# both for UPGRADE and DOWNGRADE. +# +# Documentation about syntax of this file: +# https://metacpan.org/pod/App::migrate#SYNTAX +# +# You shouldn't modify anything in this file BEFORE LAST "VERSION" LINE! +# If you will do this you'll likely BREAK DOWNGRADE for some version. +# Exceptions from this rule are: +# - git rebase +# - add/remove comments, empty lines or do other visual/formatting changes +# - add new DEFINEs +# - modification of downgrade/after_downgrade operations needed to FIX +# BROKEN DOWNGRADE +# +# You shouldn't manually add "VERSION" lines - run narada-release instead. +# Exceptions from this rule are some advanced use cases like: +# - squashing several patches into one +# - merging different release branches like 1.x and 2.x + +# INSTALL +# - usually it will be automatically added by ./release, and you shouldn't +# add it manually +# - this operation must be the last one, right before VERSION - to make +# sure patch&tgz will be applied exactly between before_upgrade and +# upgrade operations, and will be reversed exactly between downgrade and +# after_downgrade operations +DEFINE2 INSTALL +before_upgrade + if test -f .release/${MIGRATE_NEXT_VERSION}.patch; then + GIT_DIR=.git git apply .release/${MIGRATE_NEXT_VERSION}.patch + fi + if test -f .release/${MIGRATE_PREV_VERSION}.tgz; then + files='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}||print' + dirs='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}&&print' + names=$(tar tzf .release/${MIGRATE_PREV_VERSION}.tgz) + echo "$names" | perl -ne "$files" | xargs -0 -r rm -f + echo "$names" | tac | perl -ne "$dirs" | xargs -0 -r rmdir --ignore-fail-on-non-empty + fi + if test -f .release/${MIGRATE_NEXT_VERSION}.tgz; then + tar xzvpf .release/${MIGRATE_NEXT_VERSION}.tgz + fi + narada-bg-killall +after_downgrade + if test -f .release/${MIGRATE_PREV_VERSION}.patch; then + GIT_DIR=.git git apply -R .release/${MIGRATE_PREV_VERSION}.patch + fi + if test -f .release/${MIGRATE_PREV_VERSION}.tgz; then + files='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}||print' + dirs='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}&&print' + names=$(tar tzf .release/${MIGRATE_PREV_VERSION}.tgz) + echo "$names" | perl -ne "$files" | xargs -0 -r rm -f + echo "$names" | tac | perl -ne "$dirs" | xargs -0 -r rmdir --ignore-fail-on-non-empty + fi + if test -f .release/${MIGRATE_NEXT_VERSION}.tgz; then + tar xzvpf .release/${MIGRATE_NEXT_VERSION}.tgz + fi + narada-bg-killall + +DEFINE2 only_before_upgrade +upgrade +downgrade true + +DEFINE2 only_upgrade +upgrade +downgrade true + +DEFINE2 only_downgrade +upgrade true +downgrade + +DEFINE2 only_after_downgrade +upgrade true +after_downgrade + +# mysql path/to/alter.sql +# mysql +# sql commands here ... +DEFINE mysql +upgrade + test -f "$1" -a -r "$1" + narada-mysql < "$1" + +# rollback_mysql path/to/alter.sql +# rollback_mysql +# sql commands here ... +DEFINE rollback_mysql +downgrade + test -f "$1" -a -r "$1" + narada-mysql < "$1" + +# mkdir some/dir ... +# - parameters can't contain /../ or begin with / +DEFINE2 mkdir +upgrade + perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@" + mkdir "$@" +downgrade + perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@" + rm -rf "$@" + +# rmdir some/dir ... +# - parameters can't contain /../ or begin with / +DEFINE2 rmdir +upgrade + perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@" + rm -rf "$@" +after_downgrade + perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@" + narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar "$@" + +# rm some/file ... +# - parameters can't contain /../ or begin with / +DEFINE2 rm +upgrade + perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@" + rm -f "$@" +after_downgrade + perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@" + narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar "$@" + +# add_config some/config "value" +# add_config some/config - +# value +# - config must not exists +DEFINE2 add_config +upgrade + test ! -e config/"$1" + mkdir -p $(dirname config/"$1") + { test $# = 3 && cat "$3" || echo -n "$2"; } > config/"$1" + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail +downgrade + rm -f config/"$1" + rmdir -p $(dirname config/"$1") 2>/dev/null || : + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail + +# set_config some/config "new value" +# set_config some/config - +# new value +# - config may exists +# - on downgrade previous value restored only if current is "new value" +DEFINE2 set_config +upgrade + mkdir -p $(dirname config/"$1") + { test $# = 3 && cat "$3" || echo -n "$2"; } > config/"$1" + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail +after_downgrade + test $# = 3 && value=$(cat "$3") || value="$2" + if test "$(cat config/"$1")" = "$value"; then + narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1" + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail + fi + +# mod_config some/config "pcre regex" "new value" +# mod_config some/config "pcre regex" - +# new value +# - config must exists +# - value changed only if current value match "pcre regex" +# - on downgrade previous value restored only if current is "new value" +DEFINE2 mod_config +upgrade + test -e config/"$1" + if grep -q -P -- "$2" config/"$1"; then + { test $# = 4 && cat "$4" || echo -n "$3"; } > config/"$1" + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail + fi +after_downgrade + test $# = 4 && value=$(cat "$4") || value="$3" + if test "$(cat config/"$1")" = "$value"; then + narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1" + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail + fi + +# del_config some/config +DEFINE2 del_config +upgrade + rm -f config/"$1" + rmdir -p $(dirname config/"$1") 2>/dev/null || : + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail +after_downgrade + narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1" + echo "$1" | grep -v -q '^crontab/' || narada-setup-cron + echo "$1" | grep -v -q '^qmail/' || narada-setup-qmail + +# exclude_from_backup "value" +DEFINE2 exclude_from_backup +upgrade + test -e config/backup/exclude + if ! grep -q -F -x -- "$1" config/backup/exclude; then + echo "$1" >> config/backup/exclude + fi +after_downgrade + test -e config/backup/exclude + grep -v -F -x -- "$1" config/backup/exclude >tmp/config_backup_exclude.$$ + mv tmp/config_backup_exclude.$$ config/backup/exclude + +# kill process_name ... +# - make sure processes started before upgrade/downgrade but blocked on +# start because of lock won't continue to run after upgrade/downgrade +DEFINE2 kill +upgrade + killall -9 "$@" || : +after_downgrade + killall -9 "$@" || : + +# Initial version. MUST be 0.0.0 for new empty projects. +VERSION 0.0.0 + +# REQUIRED Narada files & directories: +only_upgrade + mkdir -p .backup +mkdir config +mkdir tmp +mkdir var +mkdir var/log +mkdir var/use + +add_config backup/exclude - + ./.backup/* + ./.lock* + ./tmp/* + ./.release/* +add_config backup/pass +only_upgrade + chmod 0600 config/backup/pass +add_config crontab/backup - + 1 3 * * * ( narada-backup && echo Reminder: encrypt .backup/full.tar with config/backup/pass and upload it somewhere >&2) >/dev/null + 1 2 * * 1 rm .backup/full.tar >/dev/null 2>&1 + +add_config log/level DEBUG +add_config log/type syslog +add_config log/output var/log.sock + +# OPTIONAL Narada files & directories: +mkdir config/qmail +mkdir var/mysql +mkdir var/qmail + +### narada-plugin-runit + +# restart service_to_restart +DEFINE2 restart +upgrade + sv t ./service/"$1" || : +after_downgrade + sv t ./service/"$1" || : + +add_config service/type runit +add_config crontab/service - + */1 * * * * narada-start-services & + +exclude_from_backup ./service/*/supervise +exclude_from_backup ./service/*/log/supervise + +### narada-plugin-socklog + +restart log + +### narada-plugin-go-service + +add_config listen 127.0.0.1:0 +add_config basepath +add_config real_ip_header + +INSTALL +VERSION 0.1.0 + +add_config httptimeout 10s + +add_config rsa_public_key + +add_config lock_timeout 1s + +upgrade + mkdir -p config/http + mv config/listen config/http/listen + mv config/basepath config/http/basepath + mv config/real_ip_header config/http/real_ip_header + mv config/httptimeout config/http/timeout + +downgrade + mv config/http/listen config/listen + mv config/http/basepath config/basepath + mv config/http/real_ip_header config/real_ip_header + mv config/http/timeout config/httptimeout + rm -r config/http + +upgrade mv service/main service/redminems +downgrade mv service/redminems service/main + +add_config router http://localhost + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.70.0 + +restart redminems + +INSTALL +VERSION 0.71.0 + +restart redminems + +INSTALL +VERSION 0.72.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.76.0 + +restart redminems + +INSTALL +VERSION 0.77.0 + +restart redminems + +INSTALL +VERSION 0.78.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.81.0 + +restart redminems + +INSTALL +VERSION 0.82.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.87.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.94.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.101.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.104.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.108.0 + +add_config sentry_dsn +add_config service_name +restart redminems + +INSTALL +VERSION 0.109.0 + +restart redminems + +INSTALL +VERSION 0.110.0 + +restart redminems + +INSTALL +VERSION 0.111.0 + +restart redminems + +INSTALL +VERSION 0.112.0 + +restart redminems + +INSTALL +VERSION 0.113.0 + +restart redminems + +INSTALL +VERSION 0.114.0 + +restart redminems + +INSTALL +VERSION 0.115.0 + +restart redminems + +INSTALL +VERSION 0.116.0 + +restart redminems + +INSTALL +VERSION 0.117.0 + +restart redminems + +INSTALL +VERSION 0.118.0 + +restart redminems + +INSTALL +VERSION 0.119.0 + +restart redminems + +INSTALL +VERSION 0.120.0 + +restart redminems + +INSTALL +VERSION 0.121.0 + +restart redminems + +INSTALL +VERSION 0.122.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.133.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.139.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.150.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.153.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.154.0 + +restart redminems + +INSTALL +VERSION 0.155.0 + +restart redminems + +INSTALL +VERSION 0.156.0 + +restart redminems + +INSTALL +VERSION 0.157.0 + +restart redminems + +INSTALL +VERSION 0.158.0 + +restart redminems + +INSTALL +VERSION 0.159.0 + +restart redminems + +INSTALL +VERSION 0.160.0 + +restart redminems + +INSTALL +VERSION 0.161.0 + +restart redminems + +INSTALL +VERSION 0.162.0 + +restart redminems + +INSTALL +VERSION 0.163.0 + +restart redminems + +INSTALL +VERSION 0.164.0 + +restart redminems + +INSTALL +VERSION 0.165.0 + +restart redminems + +INSTALL +VERSION 0.166.0 + +restart redminems + +INSTALL +VERSION 0.167.0 + +restart redminems + +INSTALL +VERSION 0.168.0 + +restart redminems + +INSTALL +VERSION 0.169.0 + +restart redminems + +INSTALL +VERSION 0.170.0 + +restart redminems + +INSTALL +VERSION 0.171.0 + +restart redminems + +INSTALL +VERSION 0.172.0 + +restart redminems + +INSTALL +VERSION 0.173.0 + +restart redminems + +INSTALL +VERSION 0.174.0 + +restart redminems + +INSTALL +VERSION 0.175.0 + +restart redminems + +INSTALL +VERSION 0.176.0 + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.178.0 + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.180.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.187.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +INSTALL +VERSION 0.195.0 + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + +restart redminems + + +restart redminems + +INSTALL +VERSION 0.202.0 + + +restart redminems + +INSTALL +VERSION 0.203.0 + + +restart redminems + +INSTALL +VERSION 0.204.0 + + +restart redminems + +INSTALL +VERSION 0.205.0 + + +restart redminems + +INSTALL +VERSION 0.206.0 + + +restart redminems + +INSTALL +VERSION 0.207.0 + + +restart redminems + +INSTALL +VERSION 0.208.0 + + +restart redminems + +INSTALL +VERSION 0.209.0 + + +restart redminems + +INSTALL +VERSION 0.210.0 + + +restart redminems + +INSTALL +VERSION 0.211.0 + + +restart redminems + +INSTALL +VERSION 0.212.0 + + +restart redminems + +INSTALL +VERSION 0.213.0 + + +restart redminems + +INSTALL +VERSION 0.214.0 + + +restart redminems + +INSTALL +VERSION 0.215.0 + + +restart redminems + +INSTALL +VERSION 0.216.0 + + +restart redminems + +INSTALL +VERSION 0.217.0 + + +restart redminems + +INSTALL +VERSION 0.218.0 + + +restart redminems + +INSTALL +VERSION 0.219.0 + + +restart redminems + +INSTALL +VERSION 0.220.0 + + +restart redminems + +INSTALL +VERSION 0.221.0 + + +restart redminems + +INSTALL +VERSION 0.222.0 + + +restart redminems + +INSTALL +VERSION 0.223.0 + + +restart redminems + +INSTALL +VERSION 0.224.0 + + +restart redminems + +INSTALL +VERSION 0.225.0 + + +restart redminems + +INSTALL +VERSION 0.226.0 + + +restart redminems + +INSTALL +VERSION 0.227.0 + + +restart redminems + +INSTALL +VERSION 0.228.0 + + +restart redminems + +INSTALL +VERSION 0.229.0 + + +restart redminems + +INSTALL +VERSION 0.230.0 + + +restart redminems + +INSTALL +VERSION 0.231.0 + + +restart redminems + +INSTALL +VERSION 0.232.0 + + +restart redminems + +INSTALL +VERSION 0.233.0 + + +restart redminems + +INSTALL +VERSION 0.234.0 + + +restart redminems + +INSTALL +VERSION 0.235.0 + + +restart redminems + +INSTALL +VERSION 0.236.0 + + +restart redminems + +INSTALL +VERSION 0.237.0 + + +restart redminems + +INSTALL +VERSION 0.238.0 + + +restart redminems + +INSTALL +VERSION 0.239.0 + + +restart redminems + +INSTALL +VERSION 0.240.0 + + +restart redminems + +INSTALL +VERSION 0.241.0 + + +restart redminems + +INSTALL +VERSION 0.242.0 + + +restart redminems + +INSTALL +VERSION 0.243.0 + + +restart redminems + +INSTALL +VERSION 0.244.0 + + +restart redminems + +INSTALL +VERSION 0.245.0 + + +restart redminems + +INSTALL +VERSION 0.246.0 + + +restart redminems + +INSTALL +VERSION 0.247.0 + + +restart redminems + +INSTALL +VERSION 0.248.0 + + +restart redminems + +INSTALL +VERSION 0.249.0 + + +restart redminems + +INSTALL +VERSION 0.250.0 + diff --git a/migrate b/migrate index f22b3e384a515bfd379b1b28c2f8d1c9dd3b7fae..dfbf39f9f4cce3ed8a61e8d1e5fc52d37616bcdc 100644 --- a/migrate +++ b/migrate @@ -1117,3 +1117,9 @@ restart redminems INSTALL VERSION 0.249.0 + +restart redminems + +INSTALL +VERSION 0.250.0 +