Add initial code
[ta/build-tools.git] / nexus3_dl.sh
1 #!/bin/bash
2 # Copyright 2019 Nokia
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 set -eu
17
18 NEXUS_URL=$1
19 NEXUS_REPOSITORY=$2
20 NEXUS_REPOSITORY_BASE_PATH=$3
21 shift;shift;shift
22 NEXUS_REPOSITORY_SEARCH_PATTERNS=$@
23
24 _abort() {
25   echo "ERROR: $@"
26   exit 1
27 }
28
29 _search_group() {
30   local params=""
31   [ -n "$1" ] && params+="&group=$1"
32   [ -n "${2:-}" ] && params+="&name=$2"
33   curl "${NEXUS_URL}/service/rest/v1/search?repository=${NEXUS_REPOSITORY}${params}"
34 }
35
36 for pat in $NEXUS_REPOSITORY_SEARCH_PATTERNS; do
37   search_group="/$NEXUS_REPOSITORY_BASE_PATH/$(echo $pat | cut -d':' -f1)"
38   search_name=""
39   if echo $pat | grep ':'; then
40       search_name="$(echo $pat | cut -d':' -f2)"
41   fi
42   resp=$(_search_group $search_group $search_name)
43   if [ "$(echo $resp | jq -r '.continuationToken')" != "null" ]; then
44     _abort "Pagination not implemented"
45   fi
46   for url in $(echo $resp | jq -r '.items[].assets[].downloadUrl'); do
47     to=${url#$NEXUS_URL/repository/$NEXUS_REPOSITORY/$NEXUS_REPOSITORY_BASE_PATH/}
48     mkdir -p $(dirname $to)
49     echo "Fetch $url"
50     curl $url > $to
51   done
52 done