summaryrefslogtreecommitdiffstats
path: root/taskcluster/docker/python-dependency-update/scripts/update_pipfiles.sh
diff options
context:
space:
mode:
Diffstat (limited to 'taskcluster/docker/python-dependency-update/scripts/update_pipfiles.sh')
-rwxr-xr-xtaskcluster/docker/python-dependency-update/scripts/update_pipfiles.sh136
1 files changed, 136 insertions, 0 deletions
diff --git a/taskcluster/docker/python-dependency-update/scripts/update_pipfiles.sh b/taskcluster/docker/python-dependency-update/scripts/update_pipfiles.sh
new file mode 100755
index 0000000000..c6f9b10701
--- /dev/null
+++ b/taskcluster/docker/python-dependency-update/scripts/update_pipfiles.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+
+set -e
+
+function usage {
+ cat <<EOF
+
+Usage: $(basename "$0") -h # Displays this usage/help text
+Usage: $(basename "$0") -x # lists exit codes
+Usage: $(basename "$0") -b branch -r REQUIREMENTS_FILE [-2] [-3]
+
+EOF
+}
+
+BRANCH=""
+PIP=""
+COMMIT_AUTHOR='ffxbld <ffxbld@mozilla.com>'
+REPODIR=''
+HGHOST="hg.mozilla.org"
+BASEDIR="${HOME}"
+REQUIREMENTS_FILE=""
+
+HG="$(command -v hg)"
+
+# Clones an hg repo
+function clone_repo {
+ cd "${BASEDIR}"
+ if [ ! -d "${REPODIR}" ]; then
+ CLONE_CMD="${HG} clone ${HGREPO} ${REPODIR}"
+ ${CLONE_CMD}
+ fi
+
+ ${HG} -R "${REPODIR}" pull
+ ${HG} -R "${REPODIR}" update -C default
+}
+
+# Push all pending commits to Phabricator
+function push_repo {
+ cd "${REPODIR}"
+ if [ ! -r "${HOME}/.arcrc" ]
+ then
+ return 1
+ fi
+ if ! ARC=$(command -v arc)
+ then
+ return 1
+ fi
+ if [ -z "${REVIEWERS}" ]
+ then
+ return 1
+ fi
+ # Clean up older review requests
+ # Turn Needs Review D624: No bug, Automated HSTS ...
+ # into D624
+ for diff in $($ARC list | grep "Needs Review" | grep "${REQUIREMENTS_FILE} pip-update" | awk 'match($0, /D[0-9]+[^: ]/) { print substr($0, RSTART, RLENGTH) }')
+ do
+ echo "Removing old request $diff"
+ # There is no 'arc abandon', see bug 1452082
+ echo '{"transactions": [{"type":"abandon"}], "objectIdentifier": "'"${diff}"'"}' | arc call-conduit differential.revision.edit
+ done
+
+ $ARC diff --verbatim --reviewers "${REVIEWERS}"
+}
+
+function update_requirements {
+ pushd "${REPODIR}/${1}"
+ pip-compile --generate-hashes "${2}"
+ popd
+}
+
+# Main
+
+# Parse our command-line options.
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -h) usage; exit 0 ;;
+ -b) BRANCH="$2"; shift ;;
+ -r) REPODIR="$2"; shift ;;
+ -2) PIP="pip" ;;
+ -3) PIP="pip3" ;;
+ -f) REQUIREMENTS_FILE="$2"; shift ;;
+ -*) usage
+ exit 11 ;;
+ *) break ;; # terminate while loop
+ esac
+ shift
+done
+
+# Must supply a code branch to work with.
+if [ "${PIP}" == "" ]; then
+ echo "Error: You must specify a python version with -2 or -3" >&2
+ usage
+ exit 12
+fi
+
+# Must supply a code branch to work with.
+if [ "${BRANCH}" == "" ]; then
+ echo "Error: You must specify a branch with -b branchname." >&2
+ usage
+ exit 13
+fi
+
+if [ "${REPODIR}" == "" ]; then
+ REPODIR="${BASEDIR}/$(basename "${BRANCH}")"
+fi
+
+if [ "${BRANCH}" == "mozilla-central" ]; then
+ HGREPO="https://${HGHOST}/${BRANCH}"
+elif [[ "${BRANCH}" == mozilla-* ]]; then
+ HGREPO="https://${HGHOST}/releases/${BRANCH}"
+else
+ HGREPO="https://${HGHOST}/projects/${BRANCH}"
+fi
+
+clone_repo
+
+${PIP} install pip-tools
+
+requirements_basefile="$(basename "${REQUIREMENTS_FILE}")"
+requirements_dir="$(dirname "${REQUIREMENTS_FILE}")"
+update_requirements "${requirements_dir}" "${requirements_basefile}"
+requirements_newfile="${requirements_basefile%%.in}.txt"
+DIFF_ARTIFACT="${ARTIFACTS_DIR}/${requirements_newfile}.diff"
+
+echo "INFO: diffing old/new ${requirements_newfile} into ${DIFF_ARTIFACT}"
+${HG} -R "${REPODIR}" diff "${BASEDIR}/${BRANCH}/${requirements_dir}/${requirements_newfile}" | tee "${DIFF_ARTIFACT}"
+
+COMMIT_MESSAGE="No Bug, ${requirements_dir}/${requirements_newfile} pip-update."
+
+if ${HG} -R "${REPODIR}" commit -u "${COMMIT_AUTHOR}" -m "${COMMIT_MESSAGE}"
+then
+ ${HG} -R "${REPODIR}" out
+ push_repo
+fi
+
+echo "All done"