in github-runner-ami/packer/files/runner-supervisor.py [0:0]
def merge_in_settings(repo: str, out_folder: str) -> None:
    client = boto3.client('ssm')
    param_path = os.path.join('/runners/', repo, 'configOverlay')
    log.info("Loading config overlay from %s", param_path)
    try:
        resp = client.get_parameter(Name=param_path, WithDecryption=True)
    except client.exceptions.ParameterNotFound:
        log.debug("Failed to load config overlay", exc_info=True)
        return
    try:
        overlay = json.loads(resp['Parameter']['Value'])
    except ValueError:
        log.debug("Failed to parse config overlay", exc_info=True)
        return
    with open(os.path.join(out_folder, ".runner"), "r+") as fh:
        settings = json.load(fh)
        for key, val in overlay.items():
            settings[key] = val
        fh.seek(0, os.SEEK_SET)
        os.ftruncate(fh.fileno(), 0)
        json.dump(settings, fh, indent=2)