Sync scripts in 'script' directory with internal CI
Sync scripts with platform-ci commit:
539c151d0cd99a5e6ca6c0e6966f6d8579fe864e
Signed-off-by: Zelalem <zelalem.aweke@arm.com>
Change-Id: I455770dea2e3974f652de317b21e53cfc0b9199e
diff --git a/script/backup_external_repo.sh b/script/backup_external_repo.sh
new file mode 100755
index 0000000..78b36df
--- /dev/null
+++ b/script/backup_external_repo.sh
@@ -0,0 +1,128 @@
+#!/bin/bash
+#
+# Copyright (c) 2019, 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"