77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # build.py
 | |
| # pre-build script, setting up build environment
 | |
| 
 | |
| import requests
 | |
| from os.path import basename
 | |
| from platformio import util
 | |
| 
 | |
| Import("env")
 | |
| 
 | |
| # get keyfile from platformio.ini and parse it
 | |
| project_config = util.load_project_config()
 | |
| keyfile = str(env.get("PROJECTSRC_DIR")) + "/" + project_config.get("common", "keyfile")
 | |
| print "Parsing OTA keys from " + keyfile
 | |
| mykeys = {}
 | |
| with open(keyfile) as myfile:
 | |
|     for line in myfile:
 | |
|         key, value = line.partition("=")[::2]
 | |
|         mykeys[key.strip()] = str(value).strip()
 | |
| 
 | |
| # get bintray credentials from keyfile
 | |
| user = mykeys["BINTRAY_USER"]
 | |
| repository = mykeys["BINTRAY_REPO"]
 | |
| apitoken = mykeys["BINTRAY_API_TOKEN"]
 | |
| 
 | |
| # get bintray parameters from platformio.ini
 | |
| version = project_config.get("common", "release_version")
 | |
| package = str(env.get("PIOENV"))
 | |
| 
 | |
| # put bintray credentials to platformio environment
 | |
| env.Replace(BINTRAY_USER=user)
 | |
| env.Replace(BINTRAY_REPO=repository)
 | |
| env.Replace(BINTRAY_API_TOKEN=apitoken)
 | |
| 
 | |
| # get runtime credentials from keyfile and put them to compiler directive
 | |
| env.Replace(CPPDEFINES=[
 | |
|     ('WIFI_SSID', '\\"' + mykeys["OTA_WIFI_SSID"] + '\\"'), 
 | |
|     ('WIFI_PASS', '\\"' + mykeys["OTA_WIFI_PASS"] + '\\"'),
 | |
|     ('BINTRAY_USER', '\\"' + mykeys["BINTRAY_USER"] + '\\"'),
 | |
|     ('BINTRAY_REPO', '\\"' + mykeys["BINTRAY_REPO"] + '\\"'),
 | |
|     ])
 | |
| 
 | |
| # function for pushing new firmware to bintray storage using API
 | |
| def publish_bintray(source, target, env):
 | |
|     firmware_path = str(source[0])
 | |
|     firmware_name = basename(firmware_path)
 | |
|     url = "/".join([
 | |
|         "https://api.bintray.com", "content",
 | |
|         user, repository, package, version, firmware_name
 | |
|     ])
 | |
| 
 | |
|     print("Uploading {0} to Bintray. Version: {1}".format(
 | |
|         firmware_name, version))
 | |
|     print(url)
 | |
| 
 | |
|     headers = {
 | |
|         "Content-type": "application/octet-stream",
 | |
|         "X-Bintray-Publish": "1",
 | |
|         "X-Bintray-Override": "1"
 | |
|     }
 | |
| 
 | |
|     r = requests.put(
 | |
|         url,
 | |
|         data=open(firmware_path, "rb"),
 | |
|         headers=headers,
 | |
|         auth=(user, apitoken))
 | |
| 
 | |
|     if r.status_code != 201:
 | |
|         print("Failed to submit package: {0}\n{1}".format(
 | |
|             r.status_code, r.text))
 | |
|     else:
 | |
|         print("The firmware has been successfuly published at Bintray.com!")
 | |
| 
 | |
| # put build file name and upload command to platformio environment
 | |
| env.Replace(
 | |
|     PROGNAME="firmware_" + package + "_v%s" % version,
 | |
|     UPLOADCMD=publish_bintray
 | |
| ) |