client/scripts/test-infra/update-test-infra.sh

92 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2020 The Knative Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -e
# This script updates test-infra scripts in-repo.
# Run it to update (usually from hack/update-deps.sh) the current scripts.
# Scripts are installed to REPO_ROOT/scripts/test-infra
# The following arguments are accepted:
# --update
# Do the update
# --ref X
# Defines which ref (branch, tag, commit) of test-infra to get scripts from; defaults to master
# --first-time
# Run this script from your repo root directory to install scripts for the first time
# Will also sed -i non-vendor scripts in the current repo to point to new path
# TODO: --verify
# Verify the contents of scripts/test-infra match the contents from commit sha in scripts/test-infra/COMMIT
# One can verify manually by running the script with '--ref $(cat scripts/test-infra/COMMIT)' and ensuring no files are staged
declare -i FIRST_TIME_SETUP=0
declare -i DO_UPDATE=0
declare SCRIPTS_REF=master
while [[ $# -ne 0 ]]; do
parameter="$1"
case ${parameter} in
--ref)
shift
SCRIPTS_REF="$1"
;;
--first-time)
FIRST_TIME_SETUP=1
;;
--update)
DO_UPDATE=1
;;
*)
echo "unknown option ${parameter}"
exit 1
;;
esac
shift
done
function do_read_tree() {
mkdir -p scripts/test-infra
git read-tree --prefix=scripts/test-infra -u "test-infra/${SCRIPTS_REF}:scripts"
git show-ref -s -- "refs/remotes/test-infra/${SCRIPTS_REF}" > scripts/test-infra/COMMIT
git add scripts/test-infra/COMMIT
echo "test-infra scripts installed to scripts/test-infra from branch ${SCRIPTS_REF}"
}
function run() {
if (( FIRST_TIME_SETUP )); then
if [[ ! -d .git ]]; then
echo "I don't believe you are in a repo root; exiting"
exit 5
fi
git remote add test-infra https://github.com/knative/test-infra.git || echo "test-infra remote already set; not changing"
git fetch test-infra "${SCRIPTS_REF}"
do_read_tree
echo "Attempting to point all scripts to use this new path"
grep -RiIl vendor/knative.dev/test-infra | grep -v ^vendor | grep -v ^scripts/test-infra | xargs sed -i 's+vendor/knative.dev/test-infra/scripts+scripts/test-infra+'
elif (( DO_UPDATE )); then
pushd "$(dirname "${BASH_SOURCE[0]}")/../.."
trap popd EXIT
git remote add test-infra https://github.com/knative/test-infra.git || true
git fetch test-infra "${SCRIPTS_REF}"
git rm -fr scripts/test-infra
rm -fR scripts/test-infra
do_read_tree
fi
}
run