blob: fc983b4b96038cf600baf2dac9200dab84902138 [file] [log] [blame]
Joey Armstrong97643b32022-11-14 17:33:27 -05001#!/usr/bin/env groovy
Joey Armstrong379660e2022-12-14 19:21:00 -05002// -----------------------------------------------------------------------
Joey Armstrongaf679da2023-01-31 14:22:41 -05003// Copyright 2021-2023 Open Networking Foundation (ONF) and the ONF Contributors
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16// -----------------------------------------------------------------------
Joey Armstrong379660e2022-12-14 19:21:00 -050017// Install the voltctl command by branch name "voltha-xx"
18// -----------------------------------------------------------------------
Joey Armstrong97643b32022-11-14 17:33:27 -050019
Joey Armstrong379660e2022-12-14 19:21:00 -050020// -----------------------------------------------------------------------
21// -----------------------------------------------------------------------
Joey Armstrong97af2192023-09-05 17:06:41 -040022String getIam(String func) {
Joey Armstrong379660e2022-12-14 19:21:00 -050023 // Cannot rely on a stack trace due to jenkins manipulation
24 String src = 'vars/installVoltctl.groovy'
25 String iam = [src, func].join('::')
26 return iam
27}
28
29// -----------------------------------------------------------------------
Joey Armstrong97af2192023-09-05 17:06:41 -040030// Intent: Log progress message
31// -----------------------------------------------------------------------
32void enter(String name) {
33 // Announce ourselves for log usability
34 String iam = getIam(name)
35 println("${iam}: ENTER")
36 return
37}
38
39// -----------------------------------------------------------------------
40// Intent: Log progress message
41// -----------------------------------------------------------------------
42void leave(String name) {
43 // Announce ourselves for log usability
44 String iam = getIam(name)
45 println("${iam}: LEAVE")
46 return
47}
48
49// -----------------------------------------------------------------------
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040050// Intent: Assign perms to fix access problems
51// . /bin/sh: 1: /home/jenkins/.volt/config: Permission denied
52// -----------------------------------------------------------------------
Joey Armstrong97af2192023-09-05 17:06:41 -040053void fixPerms() {
54 enter('fixPerms')
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040055
Joey Armstrong97af2192023-09-05 17:06:41 -040056 sh(label : 'fixperms',
57 script : """
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040058
59 umask 022
60
Joey Armstronge695f4a2023-09-07 14:58:58 -040061 declare volt_dir=\$HOME/.volt
62 declare volt_cfg=\$HOME/.volt/config
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040063
64 echo
Joey Armstrongaf731d82023-09-07 15:36:11 -040065 echo "** Fixing perms: \$volt_cfg"
Joey Armstronge695f4a2023-09-07 14:58:58 -040066 mkdir -p \$volt_dir
67 chmod -R u+w,go-rwx \$volt_dir
68 chmod u=rwx \$volt_dir
69 touch \$volt_cfg
70 /bin/ls -l \$volt_dir
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040071""")
Joey Armstronge695f4a2023-09-07 14:58:58 -040072
Joey Armstrong97af2192023-09-05 17:06:41 -040073 leave('fixPerms')
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040074 return
75}
76
77// -----------------------------------------------------------------------
Joey Armstrong379660e2022-12-14 19:21:00 -050078// -----------------------------------------------------------------------
Joey Armstrong97af2192023-09-05 17:06:41 -040079Boolean process(String branch) {
80 Boolean ans = true
81 enter('process')
Joey Armstrong299f1f32022-11-24 08:45:25 -050082
Joey Armstrong97643b32022-11-14 17:33:27 -050083 // This logic seems odd given we branch & tag repositories
84 // for release so hilight non-frozen until we know for sure.
Joey Armstronge0ed0352023-09-05 19:00:50 -040085 def released = [
Joey Armstrong9d35c0f2023-08-25 21:35:54 -040086 // v1.9.1 - https://github.com/opencord/voltctl/releases/tag/untagged-cd611c39178f25b95a87
87 'voltha-2.12' : '1.8.45',
88 'voltha-2.11' : '1.8.45',
89 // https://github.com/opencord/voltctl/releases/tag/v1.7.6
90 'voltha-2.10' : '1.7.6',
91 'voltha-2.9' : '1.7.4',
92 'voltha-2.8' : '1.6.11',
Joey Armstrong97643b32022-11-14 17:33:27 -050093 ]
Matteo Scandolob47a6fd2021-10-27 17:02:49 -070094
Joey Armstrong97643b32022-11-14 17:33:27 -050095 boolean have_released = released.containsKey(branch)
96 boolean is_release = false
97 // TODO: Enable with parameter: RELEASE_VOLTHA=
98 boolean has_binding = binding.hasVariable('WORKSPACE')
Matteo Scandolob47a6fd2021-10-27 17:02:49 -070099
Joey Armstrong97643b32022-11-14 17:33:27 -0500100 // WIP: Probe to find out what is available
Joey Armstrong96158a92022-11-25 10:36:06 -0500101 print("""
102** have_released: ${have_released}
103** has_binding: ${has_binding}
104""")
Matteo Scandolob47a6fd2021-10-27 17:02:49 -0700105
Joey Armstrong97643b32022-11-14 17:33:27 -0500106 // ---------------------------------------------
107 // Sanity check: released version must be frozen
108 // ---------------------------------------------
109 if (is_release && ! released.containsKey(branch)) {
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400110 // Fingers crossed: jenkins may rewrite the callstack.
Joey Armstrong97af2192023-09-05 17:06:41 -0400111 String myname = this.class.getName()
Joey Armstrong97643b32022-11-14 17:33:27 -0500112
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400113 String url = [
114 'https://docs.voltha.org/master',
115 'howto/release/installVoltctl.html',
116 ].join('/')
Joey Armstrong97643b32022-11-14 17:33:27 -0500117
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400118 String error = [
Joey Armstrong97af2192023-09-05 17:06:41 -0400119 myname, 'ERROR:',
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400120 "Detected release version=[$branch]",
Joey Armstrong97af2192023-09-05 17:06:41 -0400121 'but voltctl is not frozen.',
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400122 '',
Joey Armstrong97af2192023-09-05 17:06:41 -0400123 'See Also:', url,
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400124 ].join(' ')
Joey Armstrong97af2192023-09-05 17:06:41 -0400125 throw new Exception(error) // groovylint-disable-line ThrowException
Joey Armstrong97643b32022-11-14 17:33:27 -0500126 }
127
128 // --------------------------------
129 // General answer: latest available
130 // --------------------------------
131 if (! have_released) {
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400132 url = 'https://api.github.com/repos/opencord/voltctl/releases/latest'
133 get_version = [
134 "curl -sSL ${url}",
Joey Armstrong97af2192023-09-05 17:06:41 -0400135 'jq -r .tag_name',
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400136 "sed -e 's/^v//g'",
137 ].join(' | ')
138
139 print(" ** RUNNING: ${get_version}")
Joey Armstrong97af2192023-09-05 17:06:41 -0400140 released[branch] = sh(
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400141 script: get_version,
142 returnStdout: true
143 ).trim()
Joey Armstrong97643b32022-11-14 17:33:27 -0500144 }
145
146 voltctlVersion = released[branch]
147 println "Installing voltctl version ${voltctlVersion} on branch ${branch}"
148
149 // -----------------------------------------------------------------------
150 // groovy expansion: ${var}
151 // shell expansion: \${var}
152 // -----------------------------------------------------------------------
Joey Armstrong97af2192023-09-05 17:06:41 -0400153 sh(
154 label : 'Install Voltctl',
155 returnStdout: false,
156 script: """#!/bin/bash
Joey Armstrong97643b32022-11-14 17:33:27 -0500157
Joey Armstrong97af2192023-09-05 17:06:41 -0400158 # set -eu -o pipefail
Joey Armstrong97643b32022-11-14 17:33:27 -0500159
160 bin_voltctl="$WORKSPACE/bin/voltctl"
161
162 mkdir -p "$WORKSPACE/bin"
163 cd "$WORKSPACE" || { echo "ERROR: cd $WORKSPACE failed"; exit 1; }
164
165 HOSTOS="\$(uname -s | tr '[:upper:]' '[:lower:]')"
166 HOSTARCH="\$(uname -m | tr '[:upper:]' '[:lower:]')"
167 if [ "\$HOSTARCH" == "x86_64" ]; then
Hardik Windlass9658cd22021-10-25 11:13:25 +0000168 HOSTARCH="amd64"
169 fi
Joey Armstrong97643b32022-11-14 17:33:27 -0500170
171 # Retrieve versioned voltctl binary
172 download_url="https://github.com/opencord/voltctl/releases/download"
173 vol_ver="v${voltctlVersion}"
174 vol_name="voltctl-${voltctlVersion}-\${HOSTOS}-\${HOSTARCH}"
Joey Armstrongb2f89812022-11-24 08:09:40 -0500175 curl -o "\$bin_voltctl" -sSL "\${download_url}/\${vol_ver}/\${vol_name}"
Joey Armstrong97643b32022-11-14 17:33:27 -0500176
Joey Armstronga935e712022-11-24 08:03:15 -0500177 chmod u=rwx,go=rx "\$bin_voltctl"
Joey Armstrong97643b32022-11-14 17:33:27 -0500178
Joey Armstrong379660e2022-12-14 19:21:00 -0500179 # ---------------------------------------------------------
180 # /usr/local/bin/voltctl --version != bin/voltctl --version
181 # Problem when default searchpath has not been modified.
182 # ---------------------------------------------------------
Joey Armstronga935e712022-11-24 08:03:15 -0500183 "\${bin_voltctl}" version --clientonly
Hardik Windlass9658cd22021-10-25 11:13:25 +0000184 voltctl version --clientonly
Joey Armstrong97af2192023-09-05 17:06:41 -0400185""")
Joey Armstrong299f1f32022-11-24 08:45:25 -0500186
Joey Armstrong97af2192023-09-05 17:06:41 -0400187 enter('process')
188 return(ans)
Hardik Windlass9658cd22021-10-25 11:13:25 +0000189}
Joey Armstrong97643b32022-11-14 17:33:27 -0500190
Joey Armstrong379660e2022-12-14 19:21:00 -0500191// -----------------------------------------------------------------------
192// -----------------------------------------------------------------------
Joey Armstrong97af2192023-09-05 17:06:41 -0400193def call(String branch) {
194 try {
195 enter('main')
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400196 fixPerms()
197 process(branch)
Joey Armstrong379660e2022-12-14 19:21:00 -0500198 }
Joey Armstrong97af2192023-09-05 17:06:41 -0400199 catch (Exception err) { // groovylint-disable-line CatchException
200 String iam = getIam('main')
Joey Armstrong9d35c0f2023-08-25 21:35:54 -0400201 println("** ${iam}: EXCEPTION ${err}")
202 throw err
Joey Armstrong379660e2022-12-14 19:21:00 -0500203 }
Joey Armstrong97af2192023-09-05 17:06:41 -0400204 finally {
205 leave('main')
Joey Armstrong379660e2022-12-14 19:21:00 -0500206 }
207 return
208}
209
Joey Armstrong97643b32022-11-14 17:33:27 -0500210// [EOF]