Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save cmoetzing/1c1f6cadf7646a0cc5ca6c49d696d4bb to your computer and use it in GitHub Desktop.
Save cmoetzing/1c1f6cadf7646a0cc5ca6c49d696d4bb to your computer and use it in GitHub Desktop.
Script to delete all disabled branches of a Bamboo build plan.
#!/bin/bash -u
# Deletes all disabled branches of a Bamboo build plan
# -----------------------------------------------------------------------------
# Syntax:
# $0 {planKey}
# -----------------------------------------------------------------------------
# Purpose: Bamboo does not automatically delete plan branches when the
# corresponding branch in the repository gets deleted. Because Bamboo fails
# to pull from it, it disables the branch but keep it around forever.
# This script goes through all branches of a build plan and delete the ones
# that are disabled.
#
# Notes:
# - Script depends on jq library: https://github.com/stedolan/jq
# - The script will prompt for Bamboo credentials. The corresponding
# account must have admin access to the given plan.
# - Before running the script, change the value of `BAMBOO_BASE_URL` to
# the correct url of the bamboo instance.
# -----------------------------------------------------------------------------
# Copyright 2014 Lixar I.T. Inc.
# Author: Sylvain Guillopé <[email protected]>
# -----------------------------------------------------------------------------
LC_COLLATE=C ; export LC_COLLATE
LANG=C ; export LANG
umask 022
function die {
[ -z "$1" ] || echo 1>&2 "[!] $1"
exit 1
}
[ -z "$1" ] && die "Usage: ./$(basename $0) {planKey}"
readonly PLAN_KEY="$1"
readonly MAX_BRANCH_RESULT="500"
readonly BAMBOO_BASE_URL="https://mybamboo.net"
readonly BAMBOO_GET_PLAN_URL="$BAMBOO_BASE_URL/rest/api/latest/plan/$PLAN_KEY?os_authType=basic&expand=branches&max-results=$MAX_BRANCH_RESULT"
readonly BAMBOO_DELETE_PLAN_URL="$BAMBOO_BASE_URL/ajax/deleteChain.action"
# Ask for bamboo credentials
username=
password=
while [ -z "$username" ]; do
read -p "Bamboo username: " -s username
done
while [ -z "$password" ]; do
read -p "Bamboo password: " -s password
done
function fetch_plan {
echo $(curl -k --silent --user "$username:$password" --header "Accept: application/json" --header "X-Atlassian-Token: no-check" "$BAMBOO_GET_PLAN_URL")
}
function get_branch_lines {
echo "$1" | jq --compact-output '.branches.branch[]'
}
function delete_disabled_branches {
while read -r branch_line; do
if is_branch_disabled "$branch_line"; then
local branch_key=$(get_branch_key "$branch_line")
delete_branch "$branch_key"
fi
done <<< "$branch_lines"
}
function is_branch_disabled {
local enabled=$(echo $1 | jq '.enabled')
if [ "$enabled" == "false" ]; then
return 0
else
return 1
fi
}
function delete_branch {
local branch_key=$1
echo "delete branch ${branch_key}"
curl -k -qs --user "$username:$password" --header "X-Atlassian-Token: no-check" -H 'Accept: application/json' -H 'Content-Type: application/x-www-form-urlencoded' --data "buildKey=$branch_key" "$BAMBOO_DELETE_PLAN_URL"
}
function get_branch_key {
echo $1 | jq --raw-output '.key'
}
function main {
local plan_details=$(fetch_plan "$1")
local branch_lines=$(get_branch_lines "$plan_details")
delete_disabled_branches "$branch_lines"
}
main "$PLAN_KEY"
@Hoopie
Copy link

Hoopie commented Jul 6, 2019

Worked a charm on bamboo 6.5.0. Many thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment