From 40ca5ba486084a804442b66315bbe691bb35dece Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Mon, 13 Mar 2023 14:47:31 -0700 Subject: [PATCH] Don't hardcode filename --- .github/workflows/build.yml | 6 +- generate-board-info.py | 112 +++++++++++++++++++++--------------- 2 files changed, 69 insertions(+), 49 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1f6a641..190d23f3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,13 +50,15 @@ jobs: run: python3 check-boards.py - name: Check Image Dimensions run: python3 check-images.py + - name: Make Directory For Report Files + run: mkdir -p bin/json - name: Generate ESP32 Boards JSON - run: python3 generate-board-info.py + run: python3 generate-board-info.py -o bin/json/esp32_boards.json - name: Upload ESP32 Boards JSON To AWS S3 env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - run: "[ -z \"$AWS_ACCESS_KEY_ID\" ] || aws s3 cp esp32_boards.json s3://adafruit-circuit-python/esp32_boards.json --no-progress --region us-east-1" + run: "[ -z \"$AWS_ACCESS_KEY_ID\" ] || aws s3 cp bin/json/esp32_boards.json s3://adafruit-circuit-python/esp32_boards.json --no-progress --region us-east-1" - name: Build site with jekyll run: | bundle exec jekyll build -d build diff --git a/generate-board-info.py b/generate-board-info.py index c2162827..59d694cc 100644 --- a/generate-board-info.py +++ b/generate-board-info.py @@ -2,61 +2,79 @@ import json from pathlib import Path import frontmatter +import argparse INCLUDED_CHIP_FAMILIES = ("esp32s2", "esp32s3", "esp32c3", "esp32") BOOTLOADER_URL_PREFIX = "https://adafruit-circuit-python.s3.amazonaws.com/bootloaders/esp32/" DOWNLOAD_URL_PREFIX = "https://adafruit-circuit-python.s3.amazonaws.com/bin/" -OUTPUT_FILENAME = 'esp32_boards.json' -# Get CircuitPython Bootloader Info -with open('./_data/bootloaders.json', "rt") as f: - bootloaders = json.load(f) +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "-o", "--output", + help="Output filename. If not specified, output will just print to screen.", + type=str, + ) -with open('./_data/files.json', "rt") as f: - board_info = json.load(f) + args = parser.parse_args() -def get_releases(board_id): - releases = [] - for board in board_info: - if board_id in board["id"]: - for board_releases in board["versions"]: - release = {} - release["version"] = board_releases["version"] - for extension in board_releases["extensions"]: - release[f'{extension}file'] = f'{DOWNLOAD_URL_PREFIX}/{board_id}/en_US/adafruit-circuitpython-{board_id}-en_US-{release["version"]}.{extension}' - releases.append(release) - break - return releases + # Get CircuitPython Bootloader Info + with open('./_data/bootloaders.json', "rt") as f: + bootloaders = json.load(f) -def get_bootloader(chipfamily, bootloader_id): - if chipfamily in bootloaders and "version" in bootloaders[chipfamily]: - bootloader_version = bootloaders[chipfamily]["version"] - return f"{BOOTLOADER_URL_PREFIX}tinyuf2-{bootloader_id}-{bootloader_version}.zip" - return None + with open('./_data/files.json', "rt") as f: + board_info = json.load(f) -def generate_boards(folder): - boards = {} - for filename in Path(folder).glob("*.md"): - board = {} - with open(filename, "rt") as f: - metadata, _ = frontmatter.parse(f.read()) - downloads_display = metadata.get('downloads_display') - if downloads_display is None or downloads_display: - board_id = metadata.get('board_id') or () - if board_id == "unknown": - continue - board["name"] = metadata.get('name') - board["chipfamily"] = metadata.get('family') - if board["chipfamily"] not in INCLUDED_CHIP_FAMILIES: - continue - bootloader_id = metadata.get('bootloader_id') - if board["chipfamily"] and bootloader_id: - board["bootloader"] = get_bootloader(board["chipfamily"], bootloader_id) - board["releases"] = get_releases(board_id) - boards[board_id] = board - return boards + def get_releases(board_id): + releases = [] + for board in board_info: + if board_id in board["id"]: + for board_releases in board["versions"]: + release = {} + release["version"] = board_releases["version"] + for extension in board_releases["extensions"]: + release[f'{extension}file'] = f'{DOWNLOAD_URL_PREFIX}/{board_id}/en_US/adafruit-circuitpython-{board_id}-en_US-{release["version"]}.{extension}' + releases.append(release) + break + return releases -boards = generate_boards("_board") + def get_bootloader(chipfamily, bootloader_id): + if chipfamily in bootloaders and "version" in bootloaders[chipfamily]: + bootloader_version = bootloaders[chipfamily]["version"] + return f"{BOOTLOADER_URL_PREFIX}tinyuf2-{bootloader_id}-{bootloader_version}.zip" + return None -with open(OUTPUT_FILENAME, "wt") as f: - json.dump(boards, f, indent=4) \ No newline at end of file + def generate_boards(folder): + boards = {} + for filename in Path(folder).glob("*.md"): + board = {} + with open(filename, "rt") as f: + metadata, _ = frontmatter.parse(f.read()) + downloads_display = metadata.get('downloads_display') + if downloads_display is None or downloads_display: + board_id = metadata.get('board_id') or () + if board_id == "unknown": + continue + board["name"] = metadata.get('name') + board["chipfamily"] = metadata.get('family') + if board["chipfamily"] not in INCLUDED_CHIP_FAMILIES: + continue + bootloader_id = metadata.get('bootloader_id') + if board["chipfamily"] and bootloader_id: + board["bootloader"] = get_bootloader(board["chipfamily"], bootloader_id) + board["releases"] = get_releases(board_id) + boards[board_id] = board + print(f"Added {board_id}") + return boards + + boards = generate_boards("_board") + + if args.output: + with open(args.output, "wt") as f: + json.dump(boards, f, indent=4) + print (f"Wrote {args.output}") + else: + print(json.dumps(boards, indent=4)) + +if __name__ == "__main__": + main() \ No newline at end of file