diff --git a/puppet/kandra/files/hooks/post-deploy.d/zulip_notify_schema_diff.hook b/puppet/kandra/files/hooks/post-deploy.d/zulip_notify_schema_diff.hook new file mode 100644 index 0000000000..44e97d038e --- /dev/null +++ b/puppet/kandra/files/hooks/post-deploy.d/zulip_notify_schema_diff.hook @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -e +set -u + +source "$(dirname "$0")/../common/zulip_notify.sh" + +if ! ref=$(crudini --get /etc/zulip/zulip.conf push_git_ref ref); then + exit 0 +fi + +diffstat=$(git diff --stat "$ZULIP_NEW_MERGE_BASE_COMMIT" ./*/migrations/) + +if [ -z "$diffstat" ]; then + exit 0 +fi + +echo "zulip_notify_schema_diff: Found schema differences from merge-base!" + +zulip_send "${deploy_environment} deploy on $(hostname) found differences in schema from merge-base: + +\`\`\` +${diffstat} +\`\`\` + +Please manually adjust the \`${ref}\` ref. +" diff --git a/puppet/kandra/manifests/hooks/file.pp b/puppet/kandra/manifests/hooks/file.pp new file mode 100644 index 0000000000..a01a2db526 --- /dev/null +++ b/puppet/kandra/manifests/hooks/file.pp @@ -0,0 +1,14 @@ +# @summary Install a static hook file +# +define kandra::hooks::file() { + include zulip::hooks::base + + file { "/etc/zulip/hooks/${title}": + ensure => file, + mode => '0755', + owner => 'zulip', + group => 'zulip', + source => "puppet:///modules/kandra/hooks/${title}", + tag => ['hooks'], + } +} diff --git a/puppet/kandra/manifests/hooks/zulip_notify_schema_diff.pp b/puppet/kandra/manifests/hooks/zulip_notify_schema_diff.pp new file mode 100644 index 0000000000..d44639bef1 --- /dev/null +++ b/puppet/kandra/manifests/hooks/zulip_notify_schema_diff.pp @@ -0,0 +1,8 @@ +# @summary Install hook that checks for schema drift from published ref +# +class kandra::hooks::zulip_notify_schema_diff { + include zulip::hooks::base + include zulip::hooks::zulip_common + + kandra::hooks::file { 'post-deploy.d/zulip_notify_schema_diff.hook': } +} diff --git a/puppet/kandra/manifests/prod_app_frontend_once.pp b/puppet/kandra/manifests/prod_app_frontend_once.pp index 974dab6504..8295e34797 100644 --- a/puppet/kandra/manifests/prod_app_frontend_once.pp +++ b/puppet/kandra/manifests/prod_app_frontend_once.pp @@ -2,6 +2,7 @@ class kandra::prod_app_frontend_once { include zulip::app_frontend_once include zulip::hooks::push_git_ref include zulip::hooks::zulip_notify + include kandra::hooks::zulip_notify_schema_diff zulip::cron { 'update-first-visible-message-id': hour => '7', diff --git a/puppet/zulip/files/hooks/common/zulip_notify.sh b/puppet/zulip/files/hooks/common/zulip_notify.sh index 1ec78b9953..153d183897 100644 --- a/puppet/zulip/files/hooks/common/zulip_notify.sh +++ b/puppet/zulip/files/hooks/common/zulip_notify.sh @@ -26,10 +26,9 @@ fi from=${ZULIP_OLD_MERGE_BASE_COMMIT:-$ZULIP_OLD_VERSION} to=${ZULIP_NEW_MERGE_BASE_COMMIT:-$ZULIP_NEW_VERSION} deploy_environment=$(crudini --get /etc/zulip/zulip.conf machine deploy_type || echo "development") +# shellcheck disable=SC2034 commit_count=$(git rev-list "${from}..${to}" | wc -l) -echo "zulip_notify: Sending notify of $from .. $to ($commit_count commits) for $deploy_environment to $zulip_notify_server" - zulip_send() { ./zulip-py3-venv/bin/zulip-send \ --site "$zulip_notify_server" \ diff --git a/puppet/zulip/files/hooks/post-deploy.d/zulip_notify.hook b/puppet/zulip/files/hooks/post-deploy.d/zulip_notify.hook index 9e1977451f..039cb63951 100644 --- a/puppet/zulip/files/hooks/post-deploy.d/zulip_notify.hook +++ b/puppet/zulip/files/hooks/post-deploy.d/zulip_notify.hook @@ -5,4 +5,6 @@ set -u source "$(dirname "$0")/../common/zulip_notify.sh" +echo "zulip_notify: Sending notify of $from .. $to ($commit_count commits) for $deploy_environment to $zulip_notify_server" + zulip_send "Finished ${deploy_environment} deploy of [${commit_count} new commits](https://github.com/zulip/zulip/compare/${from}...${to}) on $(hostname)" diff --git a/puppet/zulip/files/hooks/pre-deploy.d/zulip_notify.hook b/puppet/zulip/files/hooks/pre-deploy.d/zulip_notify.hook index c5f24829d6..44320e0eb1 100644 --- a/puppet/zulip/files/hooks/pre-deploy.d/zulip_notify.hook +++ b/puppet/zulip/files/hooks/pre-deploy.d/zulip_notify.hook @@ -5,4 +5,6 @@ set -u source "$(dirname "$0")/../common/zulip_notify.sh" +echo "zulip_notify: Sending notify of $from .. $to ($commit_count commits) for $deploy_environment to $zulip_notify_server" + zulip_send "Starting ${deploy_environment} deploy of [${commit_count} new commits](https://github.com/zulip/zulip/compare/${from}...${to}) on $(hostname)" diff --git a/puppet/zulip/manifests/hooks/zulip_common.pp b/puppet/zulip/manifests/hooks/zulip_common.pp new file mode 100644 index 0000000000..19f8bdb1fe --- /dev/null +++ b/puppet/zulip/manifests/hooks/zulip_common.pp @@ -0,0 +1,7 @@ +# @summary zulip_notify common file +# +class zulip::hooks::zulip_common { + include zulip::hooks::base + + zulip::hooks::file { 'common/zulip_notify.sh': } +} diff --git a/puppet/zulip/manifests/hooks/zulip_notify.pp b/puppet/zulip/manifests/hooks/zulip_notify.pp index 79c484e3f5..a9d1188cce 100644 --- a/puppet/zulip/manifests/hooks/zulip_notify.pp +++ b/puppet/zulip/manifests/hooks/zulip_notify.pp @@ -2,9 +2,9 @@ # class zulip::hooks::zulip_notify { include zulip::hooks::base + include zulip::hooks::zulip_common zulip::hooks::file { [ - 'common/zulip_notify.sh', 'pre-deploy.d/zulip_notify.hook', 'post-deploy.d/zulip_notify.hook', ]: }