blob: a8c9f2ce3cd3db337b320af8502aa053399d6cce [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright (c) 2019-2020 Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Make a backup of the following repositories on Github:
# - arm-trusted-firmware-private.git
# - arm-trusted-firmware-private.wiki.git
# - tf-issues.git
#
# Also backup the following repositories from review.trustedfirmware.org:
# - trusted-firmware-a.git
# - tf-a-tests.git
set -e
ci_root="$(readlink -f "$(dirname "$0")/..")"
source "$ci_root/utils.sh"
backup_dir="${BACKUP_DIR:-/arm/ref/pd/pdsw/external-repo-backup}"
initial_clone() {
local repo_url="${1:?}"
local repo_dir="${2:?}"
local repo_name="$(basename $repo_dir)"
local s_before s_after s_diff
s_before="$(date +%s)"
echo
echo "Cloning repository $repo_name..."
git clone --quiet --mirror "$repo_url" "$repo_dir"
pushd "$repo_dir"
git show --quiet | sed 's/^/ > /g'
popd
s_after="$(date +%s)"
let "s_diff = $s_after - $s_before" || true
echo "Cloned in $s_diff seconds."
echo
}
update_repo() {
local repo_dir="${1:?}"
local repo_name="$(basename $repo_dir)"
local s_before s_after s_diff
pushd "$repo_dir"
s_before="$(date +%s)"
echo
echo "Updating repo $repo_name..."
git gc --quiet
git remote update --prune
git show --quiet | sed 's/^/ > /g'
s_after="$(date +%s)"
let "s_diff = $s_after - $s_before" || true
echo "Updated in $s_diff seconds."
echo
popd
}
get_repo_url() {
local url_var="${1:?}"
local repo_location="${2:?}"
local repo_name="${3:?}"
case "$repo_location" in
"github")
if upon "$anonymous"; then
eval $url_var="https://github.com/ARM-software/$repo_name"
else
GITHUB_USER="${GITHUB_USER:-arm-tf-bot}"
GITHUB_PASSWORD="${GITHUB_PASSWORD:?}"
eval $url_var="https://$GITHUB_USER:$GITHUB_PASSWORD@github.com/ARM-software/$repo_name"
fi
;;
"tf.org")
if not_upon "$anonymous"; then
echo "Authenticated access to repo $repo_name not supported."
exit 1
fi
eval $url_var="https://review.trustedfirmware.org/TF-A/$repo_name"
;;
*)
echo "Unsupported repository location: $repo_location."
exit 1
;;
esac
}
backup_repo() {
local repo_location="${1:?}"
local repo_name="${2:?}"
local repo_dir="${3:-$repo_location/$repo_name}"
if [ ! -d "$repo_dir" ]; then
local repo_url
get_repo_url "repo_url" "$repo_location" "$repo_name"
initial_clone "$repo_url" "$repo_dir"
else
update_repo "${repo_dir:?}"
fi
}
cd "$backup_dir"
# Private repositories. Need arm-tf-bot credentials for authentication.
anonymous=0 backup_repo "github" "arm-trusted-firmware-private.git"
anonymous=0 backup_repo "github" "arm-trusted-firmware-private.wiki.git"
# Public repositories. Anonymous access is allowed.
anonymous=1 backup_repo "github" "tf-issues.git"
anonymous=1 backup_repo "tf.org" "trusted-firmware-a.git"
anonymous=1 backup_repo "tf.org" "tf-a-tests.git"