Leonardo Sandoval | b0efb54 | 2021-05-31 11:43:27 -0500 | [diff] [blame] | 1 | #!/usr/bin/env bash |
| 2 | # |
| 3 | # Copyright (c) 2021 Arm Limited. All rights reserved. |
| 4 | # |
| 5 | # SPDX-License-Identifier: BSD-3-Clause |
| 6 | # |
| 7 | |
| 8 | # Given the name of the release (e.g., 18.04), this script downloads all |
| 9 | # Linaro release archives to the current directory, verifies, extracts, and |
| 10 | # finally removes the archive files. |
| 11 | |
| 12 | # FVP launcher: Script that generates docker and baremetal commands based on LAVA |
| 13 | # log stored at [TF Open CI](http://ci.trustedfirmware.org/) |
| 14 | # |
| 15 | # Usage: |
| 16 | # Run the `fvp-launcher.sh` script, providing a https://ci.trustedfirmware.org/view/TF-A/job/tf-a-builder/ |
| 17 | # job as parameter, for example |
| 18 | # |
| 19 | # $ ./fvp-launcher.sh https://ci.trustedfirmware.org/job/tf-a-builder/252606/ |
| 20 | # |
| 21 | # executon will fetch all artefacts locally and finally generating the two commands: docker and baremetal commands, |
| 22 | # any can be run depending on the scenario. |
| 23 | |
| 24 | |
| 25 | # safe execution |
| 26 | set -ue |
| 27 | |
| 28 | function r_curl(){ |
| 29 | local target="$1" |
| 30 | local source="$2" |
| 31 | curl --connect-timeout 5 --retry 5 --retry-delay 1 -fsSLo "$1" "$2" |
| 32 | } |
| 33 | |
| 34 | declare -A saveas |
| 35 | declare -A urls |
| 36 | |
| 37 | ## Must params |
| 38 | JENKINS_URL="${1:?}" |
| 39 | |
| 40 | |
| 41 | ## Optional params passed through env variables |
| 42 | USE_LOCAL_IMAGE="${USE_LOCAL_IMAGE:-false}" |
| 43 | NO_ARM_LICENSE="${NO_ARM_LICENSE:-true}" |
| 44 | NO_TTY="${NO_TTY:-true}" |
| 45 | LAVA_LOG="${LAVA_LOG:-./lava.log}" |
| 46 | DOCKER_CMDS_FILE="${DOCKER_CMDS_FILE:-./docker.txt}" |
| 47 | BM_CMDS_FILE="${BM_CMDS_FILE:-./bm.txt}" |
| 48 | |
| 49 | JENKINS_URL="${JENKINS_URL}/artifact/lava.log" |
| 50 | |
| 51 | |
| 52 | # Fetch the LAVA log |
| 53 | r_curl "${LAVA_LOG}" "${JENKINS_URL}" |
| 54 | |
| 55 | # Get download directories from the lava log |
| 56 | i=1 |
| 57 | for sa in $(awk '/saving as/ {print $4}' $LAVA_LOG); do |
| 58 | # NOTE the leading dot, which modifies original LAVA paths |
| 59 | saveas[$i]=".$sa" |
| 60 | i=$((i + 1)) |
| 61 | done |
| 62 | |
| 63 | i=1 |
| 64 | # Get the artefacts from the lava log |
| 65 | for url in $(awk '/downloading/ {print $3}' $LAVA_LOG); do |
| 66 | urls[$i]="$url" |
| 67 | i=$((i + 1)) |
| 68 | done |
| 69 | |
| 70 | total=$((i -1)) |
| 71 | |
| 72 | # Fetch artefacts and place it under top dir |
| 73 | mkdir -p $PWD/lava |
| 74 | i=1 |
| 75 | for i in $(seq $total); do |
| 76 | u=${urls[$i]} |
| 77 | o=${saveas[$i]} |
| 78 | |
| 79 | mkdir -p $(dirname $o) |
| 80 | |
| 81 | # Just fetch in case artefact is not present |
| 82 | if [ ! -f $o ]; then |
| 83 | r_curl "$o" "$u" |
| 84 | fi |
| 85 | cp -f $o $PWD/lava |
| 86 | done |
| 87 | |
| 88 | # allow docker to use local X windows |
| 89 | xhost + > /dev/null |
| 90 | |
| 91 | rm -f ${DOCKER_CMDS_FILE} ${BM_CMDS_FILE} |
| 92 | |
| 93 | grep -o -E 'docker run .*' $LAVA_LOG | tail -1 | while read line; do |
| 94 | cmd="$line" |
| 95 | cmd="$(echo $cmd | sed -e 's;docker run;docker run --env="DISPLAY" --net=host ;g')" |
| 96 | |
| 97 | if [[ "${NO_TTY}" == "true" ]]; then |
| 98 | cmd="$(echo $cmd | sed 's/--tty//g')" |
| 99 | fi |
| 100 | |
| 101 | if [[ "${NO_ARM_LICENSE}" == "true" ]]; then |
| 102 | cmd="$(echo $cmd | sed 's/-e ARMLMD_LICENSE_FILE=27000@ci.trustedfirmware.org//g')" |
| 103 | fi |
| 104 | |
| 105 | if [[ "${USE_LOCAL_IMAGE}" == "true" ]]; then |
| 106 | cmd="$(echo $cmd | sed 's/987685672616.dkr.ecr.us-east-1.amazonaws.com\///g')" |
| 107 | fi |
| 108 | |
| 109 | docker_cmd="$(echo $cmd | sed "s;--volume /;--volume $PWD/;g")" |
| 110 | |
| 111 | # Point model parameters to local lava folder |
| 112 | bm_cmd="" |
| 113 | for token in $docker_cmd; do |
| 114 | bm_token="$(echo $token | sed "s;=/lava.*/;=$PWD/lava/;g")" |
| 115 | bm_cmd="$bm_cmd $bm_token " |
| 116 | done |
| 117 | |
| 118 | # trim the docker leading code |
| 119 | bm_cmd="$(echo "${bm_cmd}" | sed 's;.* /opt/model;/opt/model;g')" |
| 120 | |
| 121 | echo "$docker_cmd" >> $DOCKER_CMDS_FILE |
| 122 | echo "$bm_cmd" >> $BM_CMDS_FILE |
| 123 | |
| 124 | done |
| 125 | |
| 126 | echo "Docker command" |
| 127 | echo |
| 128 | cat $DOCKER_CMDS_FILE |
| 129 | echo |
| 130 | |
| 131 | echo "Baremetal command" |
| 132 | echo |
| 133 | cat $BM_CMDS_FILE |
| 134 | echo |
| 135 | |