@cryptotaxi247 / kubo / commits / c63559081

misc: add branch archiving script

License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>

Jakub Sztandera committed Feb 27, 2017 at 21:44 UTC c63559081ce19c1dab7edadf7327dfd40f789251
1 file changed +56
bin/archive-branches.sh new
+56
@@ -0,0 +1,56 @@
1 +#!/usr/bin/env bash
2 +set -euo pipefail
3 +IFS=$'\n\t'
4 +set -x
5 +
6 +auth=""
7 +#auth="-u kubuxu:$GH_TOKEN"
8 +org=ipfs
9 +repo=go-ipfs
10 +arch_repo=go-ipfs-archived
11 +api_repo="repos/$org/$repo"
12 +
13 +exclusions=(
14 + 'master'
15 + 'release'
16 +)
17 +
18 +gh_api_next() {
19 + links=$(grep '^Link:' | sed -e 's/Link: //' -e 's/, /\n/g')
20 + echo "$links" | grep '; rel="next"' >/dev/null || return
21 + link=$(echo "$links" | grep '; rel="next"' | sed -e 's/^<//' -e 's/>.*//')
22 +
23 + curl $auth -f -sD >(gh_api_next) $link
24 +}
25 +
26 +gh_api() {
27 + curl $auth -f -sD >(gh_api_next) "https://api.github.com/$1" | jq -s '[.[] | .[]]'
28 +}
29 +
30 +pr_branches() {
31 + gh_api "$api_repo/pulls" | jq -r '.[].head.label | select(test("^ipfs:"))' \
32 + | sed 's/^ipfs://'
33 +}
34 +
35 +origin_refs() {
36 + format=${1-'%(refname:short)'}
37 +
38 + git for-each-ref --format "$format" refs/remotes/origin | sed 's|^origin/||'
39 +}
40 +
41 +active_branches() {
42 + origin_refs '%(refname:short) %(committerdate:unix)' |awk \
43 +' BEGIN { monthAgo = systime() - 31*24*60*60 }
44 + { if ($2 > monthAgo) print $1 }
45 +'
46 +}
47 +
48 +git remote add archived "git@github.com:$org/$arch_repo.git" || true
49 +
50 +cat <(active_branches) <(pr_branches) <((IFS=$'\n'; echo "${exclusions[*]}")) \
51 + | sort -u | comm - <(origin_refs | sort) -13 |\
52 + while read ref; do
53 + git push archived "origin/$ref:refs/heads/$ref/$(date --rfc-3339=date)"
54 + git push origin --delete "$ref"
55 + done
56 +