aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/cask/developer/bin/fix_outdated_appcasts')
-rwxr-xr-xLibrary/Homebrew/cask/developer/bin/fix_outdated_appcasts78
1 files changed, 78 insertions, 0 deletions
diff --git a/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts b/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts
new file mode 100755
index 000000000..9915b5339
--- /dev/null
+++ b/Library/Homebrew/cask/developer/bin/fix_outdated_appcasts
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+IFS=$'\n'
+
+readonly caskroom_repos_dir='/tmp/caskroom_repos'
+readonly caskroom_repos=(homebrew-cask homebrew-versions homebrew-fonts homebrew-eid)
+
+if [[ ! $(which 'ghi') ]] || ! security find-internet-password -s github.com -l 'ghi token' &> /dev/null; then
+ echo -e "$(tput setaf 1)
+ This script requires 'ghi' installed and configured.
+ If you have [Homebrew](http://brew.sh), you can install it with 'brew install ghi'.
+ To configure it, run 'ghi config --auth <username>'. Your Github password will be required, but is never stored.
+ $(tput sgr0)" | sed -E 's/ {4}//' >&2
+ exit 1
+fi
+
+if [[ ! $(which 'cask-repair') ]]; then
+ echo -e "$(tput setaf 1)
+ This script requires 'cask-repair'.
+ If you have [Homebrew](http://brew.sh), you can install it with 'brew install vitorgalvao/tiny-scripts/cask-repair'.
+ $(tput sgr0)" | sed -E 's/ {4}//' >&2
+ exit 1
+fi
+
+function message {
+ echo "${1}"
+}
+
+function go_to_repos_dir {
+ [[ ! -d "${caskroom_repos_dir}" ]] && mkdir -p "${caskroom_repos_dir}"
+ cd "${caskroom_repos_dir}" || exit 1
+}
+
+function go_to_repo_and_update {
+ local repo_name repo_dir casks_dir
+
+ repo_name="${1}"
+ repo_dir="${caskroom_repos_dir}/${repo_name}"
+ casks_dir="${repo_dir}/Casks"
+
+ if [[ ! -d "${repo_dir}" ]]; then
+ go_to_repos_dir
+
+ message "Cloning ${repo_name}…"
+ git clone "https://github.com/caskroom/${repo_name}.git" --quiet
+
+ cd "${casks_dir}" || exit 1
+ else
+ cd "${casks_dir}" || exit 1
+
+ message "Updating ${repo_name}…"
+ git pull --rebase origin master --quiet
+ fi
+}
+
+function fix_outdated_appcasts {
+ local issue_number cask_name pr_number
+
+ for line in $(ghi list --state open --no-pulls --label 'outdated appcast' --reverse | tail +2); do
+ [[ "${line}" == 'None.' ]] && break # exit early if there are no relevant issues in repo
+
+ issue_number="$(awk '{print $1}' <<< "${line}")"
+ cask_name="$(awk '{print $4}' <<< "${line}")"
+
+ cask-repair --pull origin --push origin --open-appcast --closes-issue "${issue_number}" --blind-submit "${cask_name}"
+
+ if [[ "$?" -eq 0 ]]; then
+ pr_number="$(ghi list --pulls --creator | sed -n 2p | awk '{print $1}')"
+ ghi edit --label 'outdated appcast' "${pr_number}" &>/dev/null
+ ghi comment --close --message "Closing in favour of #${pr_number}." "${issue_number}" &>/dev/null
+ fi
+ done
+}
+
+for repo in "${caskroom_repos[@]}"; do
+ go_to_repo_and_update "${repo}"
+ fix_outdated_appcasts
+done