summaryrefslogtreecommitdiffstats
path: root/src/build/tools/CommitSbeImageToCMVC.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/build/tools/CommitSbeImageToCMVC.py')
-rwxr-xr-xsrc/build/tools/CommitSbeImageToCMVC.py376
1 files changed, 376 insertions, 0 deletions
diff --git a/src/build/tools/CommitSbeImageToCMVC.py b/src/build/tools/CommitSbeImageToCMVC.py
new file mode 100755
index 00000000..b6f4eca8
--- /dev/null
+++ b/src/build/tools/CommitSbeImageToCMVC.py
@@ -0,0 +1,376 @@
+#!/usr/bin/python
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/tools/CommitSbeImageToCMVC.py $
+#
+# OpenPOWER sbe Project
+#
+# Contributors Listed Below - COPYRIGHT 2016
+#
+#
+# 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.
+#
+# IBM_PROLOG_END_TAG
+'''
+###########################################################
+# @file CommitSbeImageToCMVC.py
+# @author: George Keishing <gkeishin@in.ibm.com>
+# Sangeetha TS <sangeet2@in.ibm.com>
+# @brief Main Module to support CMVC operation
+#
+# Created on March 03, 2016
+# ----------------------------------------------------
+# @version Developer Date Description
+# ----------------------------------------------------
+# 1.0 gkeishin 03/03/16 Initial create
+###########################################################
+'''
+
+#-------------------------
+# Imports
+#-------------------------
+import getopt
+import os, sys, glob
+import shutil
+
+# Libraries/utility funcs and user define const
+import sbeCmvcConstants as errorcode
+import sbeCmvcUtility as utilcode
+
+#-------------------------
+# Main Function
+#-------------------------
+def main():
+
+ #------------------------------------------
+ # Usage tool option
+ #------------------------------------------
+ def usage():
+ print " ---------------------------------------------------------------------------------------------------"
+ print " :: Command line USAGE options for Uploading FW SBE image to CMVC :: \n"
+ print " CommitSbeImageToCMVC.py -d <cmvc defect/feature id> -r <fips release> -p <SBE repo Path> -i <file1,file2.file3>"
+
+ print " \n"
+ print " +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ print " | By default user MUST pass CMVC/Release/Path input. |"
+ print " +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ print " \n ***** Options Supported *****"
+ print " \t -d,--defect = Defect CMVC number"
+ print " \t -f,--feature = Feature CMVC number"
+ print " \t -r,--release = FW fips release string EX: fips910"
+ print " \t -p,--path = Absolute path of the SBE repo"
+ print " \t -i,--input = [ Optional ] List of image or file to upload"
+ print " \t -b,--bvt = BVT xml file for CI"
+ print " \t -h,--help = Help"
+ print " ------------------------------------------------------------------------------------"
+
+ #------------------------------------------
+ # Exit from this Main
+ #------------------------------------------
+ def exit_main(rc):
+ if rc == errorcode.HELP_EXIT:
+ print " [ HELP DOCUMENTATION ]\n"
+ sys.exit(0)
+
+ if rc:
+ print "\n [ ERROR - MAIN ] Exiting with error code = ", rc
+ sys.exit(rc)
+ else:
+ print "\n SBE Image Upload to CMVC completed [ OK ] "
+ sys.exit(0)
+
+ #------------------------------------------
+ # Local var place name holder's
+ #------------------------------------------
+ defect_num = "None"
+ feature_num = "None"
+ release_name = "None"
+ path_name = "None"
+ file_name = "None"
+ bvt = "None"
+
+ #----------------------------
+ # Read command line args
+ #----------------------------
+ opts, args = getopt.getopt(sys.argv[1:],"d:f:r:p:i:b:h",['defect=', 'feature=', 'release=', 'path=', 'input=', 'bvt=', 'help'])
+ for opt, arg in opts:
+ if opt in ('-h', '--help'):
+ usage()
+ exit_main(errorcode.HELP_EXIT)
+ elif opt in ('-d', '--defect'):
+ defect_num = arg
+ elif opt in ('-f', '--feature'):
+ feature_num = arg
+ elif opt in ('-r', '--release'):
+ release_name = arg
+ elif opt in ('-p', '--path'):
+ path_name = arg
+ elif opt in ('-i', '--input'):
+ file_name = arg
+ elif opt in ('-b', '--bvt'):
+ bvt = arg
+ else:
+ usage()
+ exit_main(errorcode.ERROR_EXIT)
+
+ #----------------------------------
+ # Preping the data for Image Upload
+ #----------------------------------
+ print " \n"
+ print " ******************************************************"
+ print " ****** Stagging PPE image Files Upload to CMVC ******"
+ print " ******************************************************"
+
+ #------------------------------------------------------
+ # Make sure that it has passed atleast one arg with it
+ #------------------------------------------------------
+ if len(sys.argv)<2:
+ usage()
+ exit_main(errorcode.ERROR_SYS_EXIT)
+
+ #-------------------------------------------------------------
+ # Check user inputs and display
+ #-------------------------------------------------------------
+ def input_setting():
+ print " ---------------------------------------------------------------------------------"
+ print " [ Display User Inputs ]"
+ print " ---------------------------------------------------------------------------------"
+ # Look elsewhere for the name instead of assigning to it locally.
+ # This is now gloabal var
+ global g_cmvc_num
+ if ( defect_num != "None" ) or ( feature_num != "None" ):
+ if not defect_num == "None":
+ g_cmvc_num = 'D'+defect_num #D1234
+ print " [ CMVC Defect ] \t\t#Number\t = %s"%(g_cmvc_num)
+ else:
+ g_cmvc_num = 'F'+feature_num # F1234
+ print " [ CMVC Feature ] \t\t#Number\t = %s"%(g_cmvc_num)
+ else:
+ print " [ CMVC Defect/Feature ] Neeed CMVC number. This can't be empty "
+ exit_main(errorcode.ERROR_EXIT)
+
+ if not release_name == "None":
+ print " [ Fips Release Name ] \t#String\t = %s"%(release_name)
+ else:
+ print " [ Fips release ] Neeed fips release string. This can't be empty "
+ exit_main(errorcode.ERROR_EXIT)
+
+ if not path_name == "None":
+ print " [ Build Repo Path ] \t\t#String\t = %s"%(path_name)
+ else:
+ print " [ User Build Repo Path ] \t\t#String\t = %s"%(path_name)
+
+ # Optional, by default looks up predefined files
+ if not file_name == "None":
+ print " [ Files for Check-in - User List ]"
+ for files in file_name.split(","):
+ print " \t\t\t\t#",files
+ else:
+ print " [ Files for Check-in - Default List ]"
+ for files in errorcode.CMVC_FILE_LIST.split(","):
+ print " \t\t\t\t# ",files
+
+ print " ---------------------------------------------------------------------------------"
+
+ #-------------------------------------------------------------
+ # CMVC ENV check
+ #-------------------------------------------------------------
+ def UserCmvcENV():
+ # Assumed the CMVC cofig is there in the user bash ENV
+ # In .bashrc the CMVX ENV would look like this
+ # CMVC specific example
+ #-----------------------------------------------------------
+ #export CMVC_FAMILY=aix@auscmvc1.austin.ibm.com@2035
+ #export CMVC_BECOME=gkeishin
+ #export CMVC_AUTH_METHOD=PWD
+ #-----------------------------------------------------------
+
+ l_found_cmvc_conf = False
+ for key in os.environ.keys():
+ if "CMVC" in key:
+ print "\t %s : %s" % (key,os.environ[key])
+ l_found_cmvc_conf = True
+
+ if l_found_cmvc_conf == False:
+ print "\n [ ERROR SETTING ] : The CMVC specific ENV is not set"
+ print " Please add the following CMVC details in ~/.bashrc"
+ print " ------------------------------------------------------"
+ print " export CMVC_FAMILY=aix@<yourcmvcdomian>@<portnumber>"
+ print " export CMVC_BECOME=<your cmvc id>"
+ print " export CMVC_AUTH_METHOD=PWD"
+ print " ------------------------------------------------------"
+ return errorcode.ERROR_SETTING
+
+ return errorcode.SUCCESS_EXIT
+
+ # Testing CMVC login session.. probe
+ def CheckCmvcAccess():
+ cmd='File -view src/sbei/sbfw/img/sbe_seeprom.bin -family aix -release fips910 >/dev/null 2>&1'
+ rc = os.system(cmd)
+ if rc:
+ return errorcode.ERROR_CMVC_LOGIN
+
+ #---------------------------------------------
+ # Callling the Func defs in order
+ #---------------------------------------------
+
+ #------------------------------
+ # 1) User input params/ Check ENV
+ #------------------------------
+ input_setting()
+
+ print "\n [ Checking PPE ENV Pre-req ] "
+ # Check if User has passed the path, else get it from ENV
+ if path_name == "None":
+ # Get the PPE path
+ l_ppe_path = utilcode.utilppeSbENV("SBEROOT")
+ if l_ppe_path == "None":
+ print " PPE Repo ENV Setting Path : [ ERROR CODE: %s ] " % l_ppe_path
+ exit_main(errorcode.ERROR_SETTING)
+ else:
+ print " PPE Repo path Setting : [ %s ]"% l_ppe_path
+ path_name = l_ppe_path
+
+ print "\n [ Checking CMVC user ENV Pre-req ] "
+ rc_code = UserCmvcENV()
+ if rc_code == errorcode.SUCCESS_EXIT :
+ print " CMVC Setting : [ OK ] "
+ else:
+ print " CMVC Setting : [ ERORR CODE: %s ]"% rc_code
+
+ #------------------------------
+ # 2) Check the CMVC login access
+ #------------------------------
+ print "\n [ Checking CMVC user Login Session access ] "
+ rc_cmvc = CheckCmvcAccess()
+ if rc_cmvc == errorcode.ERROR_CMVC_LOGIN:
+ print " CMVC Login Access : [ ERORR CODE: %s ]"% rc_cmvc
+ print "\t No cmvc login was found in this session."
+ print "\t Issue the cmvclog command to establish a login and re-run."
+ print "\t Command : cmvclog -in <login user id>"
+ exit_main(rc_cmvc)
+ else:
+ print " CMVC Session Login : [ OK ] "
+
+ # Call API/Utility funcs def here
+ #------------------------------
+ # 3) Check track status
+ #------------------------------
+ print "\n [ Checking CMVC track state ] "
+ l_trackFix = utilcode.utilCheckTrackState(g_cmvc_num,release_name)
+ if l_trackFix == errorcode.SUCCESS_TRACK_STATE :
+ print " Track in fix state. Suitable to continue."
+ else :
+ print " Track not in fix state. Aborting activity."
+ return errorcode.ERROR_TRACK_STATE
+
+ #------------------------------
+ # 4) Checkout the code
+ #------------------------------
+ print "\n [ Creating Sandbox ]"
+ origDir = os.getcwd()
+ utilcode.utilCmvcChangeDir(g_cmvc_num)
+ sbDir = os.getcwd()
+
+ print "\n [ Checkout Files from CMVC ] "
+ print " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ if file_name == "None":
+ file_name = errorcode.CMVC_FILE_LIST
+ for l_filename in file_name.split(","):
+ rc_checkout = utilcode.utilCmvcCheckout(l_filename,release_name,g_cmvc_num)
+ if rc_checkout == errorcode.ERROR_CMVC_CHECKOUT:
+ print " [ CMVC File Checkout Failed ] [Error code : %s]\t:%s"%(rc_checkout,l_filename)
+ # Undo checkout.. dont check errors just do it
+ utilcode.utilRollBack("checkout",g_cmvc_num,release_name)
+ # Return to initial directory of operation
+ os.chdir(origDir)
+ shutil.rmtree(sbDir)
+ exit_main(rc_checkout)
+ else:
+ print " CMVC File Checkout [ OK ]"
+ print " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+
+ #------------------------------
+ # 4) Copy the binaries and file
+ #------------------------------
+ # Find the files from the repo and copy to the Checkout dir
+ print "\n [ Find files and Overide the checkout file ] "
+ print " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ rc_copy = utilcode.utilCmvcRepoPath(path_name,g_cmvc_num,file_name)
+ if rc_copy == errorcode.ERROR_CMVC_FILE_COPY:
+ print " [ File copy Failed ] [ Error code : %s]"%rc_copy
+ # Return to initial directory of operation
+ os.chdir(origDir)
+ shutil.rmtree(sbDir)
+ exit_main(rc_copy)
+ else:
+ print " Files Copied Successfully : [ OK ] "
+
+ print " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+
+ #---------------------
+ # 6) Checkin the files
+ #---------------------
+ print "\n [ Check-in Files from CMVC ] "
+ print " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+ if file_name == "None":
+ file_name = errorcode.CMVC_FILE_LIST
+ for files in file_name.split(","):
+ rc_checkin = utilcode.utilCmvcCheckin(files,release_name,g_cmvc_num)
+ if rc_checkin == errorcode.ERROR_CMVC_CHECKIN:
+ print " [ CMVC File Checkin Failed ] [Error code : %s]\t:%s"%(rc_checkin,files)
+ # Undo checkin.. dont check errors just do it
+ utilcode.utilRollBack("checkin",g_cmvc_num,release_name)
+ # Return to initial directory of operation
+ os.chdir(origDir)
+ shutil.rmtree(sbDir)
+ exit_main(rc_checkin)
+ else:
+ print " CMVC File Checkin [ OK ]"
+ print " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
+
+ #---------------------------------
+ # 7) Fix record the defect/release
+ #---------------------------------
+ print "\n [ Fix the Record to complete in CMVC ] "
+ utilcode.utilCmvcFixComplete(g_cmvc_num, release_name)
+
+ #---------------------------------
+ # 8) Trigger Jenkins CI Job
+ #---------------------------------
+ print "\n [ Trigering Jenkins job ] "
+ rc_ci = utilcode.utilTriggerJenkins(g_cmvc_num, release_name, bvt)
+ if rc_ci == errorcode.ERROR_CI_TRIGGER :
+ print " [ CI Trigger Failed ] [Error code : %s]\t"%(rc_ci)
+ # Return to initial directory of operation
+ os.chdir(origDir)
+ shutil.rmtree(sbDir)
+ exit_main(rc_ci)
+ else :
+ print " CI Trigger [ OK ]"
+
+ #-----------------------------------------
+ # Return to initial directory of operation
+ #-----------------------------------------
+ os.chdir(origDir)
+ shutil.rmtree(sbDir)
+
+ # Clean exit
+ print "\n [ Manually Integrate on CMVC post CI ] "
+ exit_main(errorcode.SUCCESS_EXIT)
+
+
+if __name__=="__main__":
+ main()
+
OpenPOWER on IntegriCloud