Merge pull request #3722 from tannewt/remove_file_urls

Update build board info.
This commit is contained in:
Jeff Epler 2020-11-19 10:43:53 -06:00 committed by GitHub
commit d53ecac888
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,20 +19,24 @@ import shared_bindings_matrix
sys.path.append("adabot") sys.path.append("adabot")
import adabot.github_requests as github import adabot.github_requests as github
SUPPORTED_PORTS = ["atmel-samd", "cxd56", "esp32s2", "litex", "mimxrt10xx", "nrf", "stm"] SUPPORTED_PORTS = [
"atmel-samd",
"cxd56",
"esp32s2",
"litex",
"mimxrt10xx",
"nrf",
"stm",
]
BIN = ('bin',) BIN = ("bin",)
UF2 = ('uf2',) UF2 = ("uf2",)
BIN_UF2 = ('bin', 'uf2') BIN_UF2 = ("bin", "uf2")
HEX = ('hex',) HEX = ("hex",)
HEX_UF2 = ('hex', 'uf2') HEX_UF2 = ("hex", "uf2")
SPK = ('spk',) SPK = ("spk",)
DFU = ('dfu',) DFU = ("dfu",)
BIN_DFU = ('bin', 'dfu') BIN_DFU = ("bin", "dfu")
# Example:
# https://downloads.circuitpython.org/bin/trinket_m0/en_US/adafruit-circuitpython-trinket_m0-en_US-5.0.0-rc.0.uf2
DOWNLOAD_BASE_URL = "https://downloads.circuitpython.org/bin"
# Default extensions # Default extensions
extension_by_port = { extension_by_port = {
@ -42,7 +46,7 @@ extension_by_port = {
"cxd56": SPK, "cxd56": SPK,
"mimxrt10xx": HEX_UF2, "mimxrt10xx": HEX_UF2,
"litex": DFU, "litex": DFU,
"esp32s2": BIN_UF2 "esp32s2": BIN_UF2,
} }
# Per board overrides # Per board overrides
@ -57,26 +61,28 @@ extension_by_board = {
"feather_m0_rfm69": BIN_UF2, "feather_m0_rfm69": BIN_UF2,
"feather_m0_rfm9x": BIN_UF2, "feather_m0_rfm9x": BIN_UF2,
"uchip": BIN_UF2, "uchip": BIN_UF2,
# nRF52840 dev kits that may not have UF2 bootloaders, # nRF52840 dev kits that may not have UF2 bootloaders,
"makerdiary_nrf52840_mdk": HEX, "makerdiary_nrf52840_mdk": HEX,
"makerdiary_nrf52840_mdk_usb_dongle": HEX_UF2, "makerdiary_nrf52840_mdk_usb_dongle": HEX_UF2,
"pca10056": BIN_UF2, "pca10056": BIN_UF2,
"pca10059": BIN_UF2, "pca10059": BIN_UF2,
"electronut_labs_blip": HEX, "electronut_labs_blip": HEX,
# stm32 # stm32
"meowbit_v121": UF2 "meowbit_v121": UF2,
} }
aliases_by_board = { aliases_by_board = {
"circuitplayground_express": ["circuitplayground_express_4h", "circuitplayground_express_digikey_pycon2019"], "circuitplayground_express": [
"circuitplayground_express_4h",
"circuitplayground_express_digikey_pycon2019",
],
"pybadge": ["edgebadge"], "pybadge": ["edgebadge"],
"pyportal": ["pyportal_pynt"], "pyportal": ["pyportal_pynt"],
"gemma_m0": ["gemma_m0_pycon2018"], "gemma_m0": ["gemma_m0_pycon2018"],
"pewpew10": ["pewpew13"] "pewpew10": ["pewpew13"],
} }
def get_languages(): def get_languages():
languages = [] languages = []
for f in os.scandir("../locale"): for f in os.scandir("../locale"):
@ -84,6 +90,7 @@ def get_languages():
languages.append(f.name[:-3]) languages.append(f.name[:-3])
return languages return languages
def get_board_mapping(): def get_board_mapping():
boards = {} boards = {}
for port in SUPPORTED_PORTS: for port in SUPPORTED_PORTS:
@ -95,23 +102,30 @@ def get_board_mapping():
extensions = extension_by_port[port] extensions = extension_by_port[port]
extensions = extension_by_board.get(board_path.name, extensions) extensions = extension_by_board.get(board_path.name, extensions)
aliases = aliases_by_board.get(board_path.name, []) aliases = aliases_by_board.get(board_path.name, [])
boards[board_id] = {"port": port, boards[board_id] = {
"extensions": extensions, "port": port,
"download_count": 0, "extensions": extensions,
"aliases": aliases} "download_count": 0,
"aliases": aliases,
}
for alias in aliases: for alias in aliases:
boards[alias] = {"port": port, boards[alias] = {
"extensions": extensions, "port": port,
"download_count": 0, "extensions": extensions,
"alias": True, "download_count": 0,
"aliases": []} "alias": True,
"aliases": [],
}
return boards return boards
def get_version_info(): def get_version_info():
version = None version = None
sha = git("rev-parse", "--short", "HEAD").stdout.decode("utf-8") sha = git("rev-parse", "--short", "HEAD").stdout.decode("utf-8")
try: try:
version = git("describe", "--tags", "--exact-match").stdout.decode("utf-8").strip() version = (
git("describe", "--tags", "--exact-match").stdout.decode("utf-8").strip()
)
except sh.ErrorReturnCode_128: except sh.ErrorReturnCode_128:
# No exact match # No exact match
pass pass
@ -120,10 +134,11 @@ def get_version_info():
sha = os.environ["GITHUB_SHA"] sha = os.environ["GITHUB_SHA"]
if not version: if not version:
version="{}-{}".format(date.today().strftime("%Y%m%d"), sha[:7]) version = "{}-{}".format(date.today().strftime("%Y%m%d"), sha[:7])
return sha, version return sha, version
def get_current_info(): def get_current_info():
response = github.get("/repos/adafruit/circuitpython-org/git/refs/heads/master") response = github.get("/repos/adafruit/circuitpython-org/git/refs/heads/master")
if not response.ok: if not response.ok:
@ -131,7 +146,9 @@ def get_current_info():
raise RuntimeError("cannot get master sha") raise RuntimeError("cannot get master sha")
commit_sha = response.json()["object"]["sha"] commit_sha = response.json()["object"]["sha"]
response = github.get("/repos/adafruit/circuitpython-org/contents/_data/files.json?ref=" + commit_sha) response = github.get(
"/repos/adafruit/circuitpython-org/contents/_data/files.json?ref=" + commit_sha
)
if not response.ok: if not response.ok:
print(response.text) print(response.text)
raise RuntimeError("cannot get previous files.json") raise RuntimeError("cannot get previous files.json")
@ -145,6 +162,7 @@ def get_current_info():
current_info[info["id"]] = info current_info[info["id"]] = info
return git_info, current_info return git_info, current_info
def create_pr(changes, updated, git_info, user): def create_pr(changes, updated, git_info, user):
commit_sha, original_blob_sha = git_info commit_sha, original_blob_sha = git_info
branch_name = "new_release_" + changes["new_release"] branch_name = "new_release_" + changes["new_release"]
@ -158,7 +176,7 @@ def create_pr(changes, updated, git_info, user):
updated_list.append(info) updated_list.append(info)
updated = json.dumps(updated_list, sort_keys=True, indent=1).encode("utf-8") + b"\n" updated = json.dumps(updated_list, sort_keys=True, indent=1).encode("utf-8") + b"\n"
#print(updated.decode("utf-8")) # print(updated.decode("utf-8"))
pr_title = "Automated website update for release {}".format(changes["new_release"]) pr_title = "Automated website update for release {}".format(changes["new_release"])
boards = "" boards = ""
if changes["new_boards"]: if changes["new_boards"]:
@ -167,16 +185,13 @@ def create_pr(changes, updated, git_info, user):
if changes["new_languages"]: if changes["new_languages"]:
languages = "New languages:\n* " + "\n* ".join(changes["new_languages"]) languages = "New languages:\n* " + "\n* ".join(changes["new_languages"])
message = "Automated website update for release {} by Blinka.\n\n{}\n\n{}\n".format( message = "Automated website update for release {} by Blinka.\n\n{}\n\n{}\n".format(
changes["new_release"], changes["new_release"], boards, languages
boards,
languages
) )
create_branch = { create_branch = {"ref": "refs/heads/" + branch_name, "sha": commit_sha}
"ref": "refs/heads/" + branch_name, response = github.post(
"sha": commit_sha "/repos/{}/circuitpython-org/git/refs".format(user), json=create_branch
} )
response = github.post("/repos/{}/circuitpython-org/git/refs".format(user), json=create_branch)
if not response.ok and response.json()["message"] != "Reference already exists": if not response.ok and response.json()["message"] != "Reference already exists":
print("unable to create branch") print("unable to create branch")
print(response.text) print(response.text)
@ -186,10 +201,13 @@ def create_pr(changes, updated, git_info, user):
"message": message, "message": message,
"content": base64.b64encode(updated).decode("utf-8"), "content": base64.b64encode(updated).decode("utf-8"),
"sha": original_blob_sha, "sha": original_blob_sha,
"branch": branch_name "branch": branch_name,
} }
response = github.put("/repos/{}/circuitpython-org/contents/_data/files.json".format(user), json=update_file) response = github.put(
"/repos/{}/circuitpython-org/contents/_data/files.json".format(user),
json=update_file,
)
if not response.ok: if not response.ok:
print("unable to post new file") print("unable to post new file")
print(response.text) print(response.text)
@ -199,7 +217,7 @@ def create_pr(changes, updated, git_info, user):
"head": user + ":" + branch_name, "head": user + ":" + branch_name,
"base": "master", "base": "master",
"body": message, "body": message,
"maintainer_can_modify": True "maintainer_can_modify": True,
} }
response = github.post("/repos/adafruit/circuitpython-org/pulls", json=pr_info) response = github.post("/repos/adafruit/circuitpython-org/pulls", json=pr_info)
if not response.ok: if not response.ok:
@ -220,17 +238,14 @@ def print_active_user():
print("Not logged in") print("Not logged in")
return None return None
def generate_download_info(): def generate_download_info():
boards = {} boards = {}
errors = [] errors = []
new_tag = os.environ["RELEASE_TAG"] new_tag = os.environ["RELEASE_TAG"]
changes = { changes = {"new_release": new_tag, "new_boards": [], "new_languages": []}
"new_release": new_tag,
"new_boards": [],
"new_languages": []
}
user = print_active_user() user = print_active_user()
@ -254,8 +269,9 @@ def generate_download_info():
info = current_info[board] info = current_info[board]
for version in info["versions"]: for version in info["versions"]:
previous_releases.add(version["version"]) previous_releases.add(version["version"])
previous_languages.update(version["files"].keys()) if version["stable"] == new_stable or (
if version["stable"] == new_stable: new_stable and version["version"].startswith(this_version)
):
info["versions"].remove(version) info["versions"].remove(version)
board_mapping = get_board_mapping() board_mapping = get_board_mapping()
@ -272,29 +288,15 @@ def generate_download_info():
alias_info = board_mapping[alias] alias_info = board_mapping[alias]
if alias not in current_info: if alias not in current_info:
changes["new_boards"].append(alias) changes["new_boards"].append(alias)
current_info[alias] = {"downloads": 0, current_info[alias] = {"downloads": 0, "versions": []}
"versions": []}
new_version = { new_version = {
"stable": new_stable, "stable": new_stable,
"version": new_tag, "version": new_tag,
"modules": support_matrix.get(alias, "[]"), "modules": support_matrix.get(alias, "[]"),
"files": {},
"languages": languages, "languages": languages,
"extensions": board_info["extensions"] "extensions": board_info["extensions"],
} }
for language in languages:
files = []
new_version["files"][language] = files
for extension in board_info["extensions"]:
files.append(
"{base_url}/{alias}/{language}/adafruit-circuitpython-{alias}-{language}-{tag}.{extension}"
.format(
base_url=DOWNLOAD_BASE_URL,
tag=new_tag,
alias=alias,
language=language,
extension=extension))
current_info[alias]["downloads"] = alias_info["download_count"] current_info[alias]["downloads"] = alias_info["download_count"]
current_info[alias]["versions"].append(new_version) current_info[alias]["versions"].append(new_version)
@ -305,6 +307,7 @@ def generate_download_info():
else: else:
print("No new release to update") print("No new release to update")
if __name__ == "__main__": if __name__ == "__main__":
if "RELEASE_TAG" in os.environ and os.environ["RELEASE_TAG"]: if "RELEASE_TAG" in os.environ and os.environ["RELEASE_TAG"]:
generate_download_info() generate_download_info()