blob: 271e7d04fa0d27105bb9bc1f561d0e42c460fffb [file] [log] [blame]
#!/bin/bash -e
# Explicitly unset any pre-existing environment variables to avoid variable collision
unset DRY_RUN DEBUG_DIR
WIKI_TEXT_ADDITIONS_FILE=""
. "$(dirname "${0}")/wiki_functions.sh"
WIKI_TITLE="ReleaseEngineering/Maintenance"
function usage {
echo "Usage: $0 -h"
echo "Usage: $0 [-r RECONFIG_DIR ] -d [-w WIKI_TEXT_ADDITIONS_FILE]"
echo "Usage: $0 [-r RECONFIG_DIR ] -w WIKI_TEXT_ADDITIONS_FILE"
echo
echo " -d: Dry run; will not make changes, only validates login."
echo " -h: Display help."
echo " -r DEBUG_DIR: Copy temporary generated files into directory DEBUG_DIR"
echo " -w WIKI_TEXT_ADDITIONS_FILE: File containing wiki markdown to insert into wiki page."
echo "You need to set WIKI_USERNAME and WIKI_PASSWORD in env before running."
}
# Simple function to output the name of this script and the options that were passed to it
function command_called {
echo -n "Command called:"
for ((INDEX=0; INDEX<=$#; INDEX+=1))
do
echo -n " '${!INDEX}'"
done
echo ''
echo "From directory: '$(pwd)'"
}
command_called "${@}" | sed '1s/^/ * /;2s/^/ /'
echo " * Parsing parameters of $(basename "${0}")..."
# Parse parameters passed to this script
while getopts ":dhr:w:" opt; do
case "${opt}" in
d) DRY_RUN=1
;;
h) usage
exit 0
;;
r) DEBUG_DIR="${OPTARG}"
;;
w) WIKI_TEXT_ADDITIONS_FILE="${OPTARG}"
;;
?) usage >&2
exit 1
;;
esac
done
DRY_RUN="${DRY_RUN:-0}"
DEBUG_DIR="${DEBUG_DIR:-}"
if [ -n "${DEBUG_DIR}" ]; then
if [ ! -d "${DEBUG_DIR}" ]; then
echo " * Creating directory '${DEBUG_DIR}'..."
if ! mkdir -p "${DEBUG_DIR}"; then
echo "ERROR: Directory '${DEBUG_DIR}' could not be created from directory '$(pwd)'." >&2
exit 70
fi
else
echo " * Debug directory '${DEBUG_DIR}' exists - OK"
fi
else
echo " * Not storing temporary files (DEBUG_DIR has not been specified)"
fi
# if doing a dry run, not *necessary* to specify a wiki text file, but optional, so if specified, use it
if [ "${DRY_RUN}" == 0 ] || [ -n "${WIKI_TEXT_ADDITIONS_FILE}" ]; then
if [ -z "${WIKI_TEXT_ADDITIONS_FILE}" ]; then
echo "ERROR: Must provide a file containing additional wiki text to embed, e.g. '${0}' -w 'reconfig-bugs.wikitext'" >&2
echo "Exiting..." >&2
exit 71
fi
if [ ! -f "${WIKI_TEXT_ADDITIONS_FILE}" ]; then
echo "ERROR: File '${WIKI_TEXT_ADDITIONS_FILE}' not found. Working directory is '$(pwd)'." >&2
echo "This file should contain additional wiki content to be inserted in https://wiki.mozilla.org/ReleaseEngineering/Maintenance." >&2
echo "Exiting..." >&2
exit 72
fi
fi
check_wiki_login_env "${WIKI_TITLE}"
# create some temporary files
current_content="$(mktemp -t current-content.XXXXXXXXXX)"
new_content="$(mktemp -t new-content.XXXXXXXXXX)"
echo " * Retrieving current wiki text of https://wiki.mozilla.org/${WIKI_TITLE}..."
curl -s "https://wiki.mozilla.org/${WIKI_TITLE}?action=raw" >> "${current_content}"
# find first "| in production" line in the current content, and grab line number
old_line="$(sed -n '/^| in production$/=' "${current_content}" | head -1)"
echo " * Preparing wiki page to include new content..."
# create new version of whole page, and put in "${new_content}" file...
{
# old content, up to 2 lines before the first "| in production" line
sed -n 1,$((old_line-2))p "${current_content}"
# the new content to add
if [ -r "${WIKI_TEXT_ADDITIONS_FILE}" ]; then
echo '|-'
echo '| in production'
echo "| `TZ=America/Los_Angeles date +"%Y-%m-%d %H:%M PT"`"
echo '|'
cat "${WIKI_TEXT_ADDITIONS_FILE}"
fi
# the rest of the page (starting from line before "| in production"
sed -n $((old_line-1)),\$p "${current_content}"
} > "${new_content}"
WIKI_COMMENT="reconfig"
wiki_login
wiki_edit_login
wiki_post
wiki_logout
if [ -n "${DEBUG_DIR}" ]; then
echo " * Backing up temporary files generated during wiki publish before they get deleted..."
cp "${cookie_jar}" "${DEBUG_DIR}/cookie_jar.txt"
cp "${new_content}" "${DEBUG_DIR}/new_wiki_content.txt"
cp "${current_content}" "${DEBUG_DIR}/old_wiki_content.log"
fi
# remove temporary files
echo " * Deleting temporary files..."
rm "${cookie_jar}"
rm "${new_content}"
rm "${current_content}"
exit "${EXIT_CODE}"