aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/dz60/info.json
Commit message (Expand)AuthorAgeFilesLines
* [Keymap] add keymap with split spacebar, ansi, hhkb features (#6114)Calvin Moody2019-06-111-1/+5
* [Kenyboard] Add ansi_split_space_rshift layout to DZ60 (#6004)Klemen Košir2019-05-281-1/+5
* [Keymap] DZ60 keymap and layout (#5474)Oliver Granlund2019-05-031-0/+4
* Add tsangan layout to dz60 with a "sane" default keymap (#4717)Jason Thigpen2018-12-241-0/+4
* Keyboard: Add dz60 tsangan hhkb (#4529)Jason Thigpen2018-12-051-0/+4
* Add personal zvecr dz60 keymap (#4443)zvecr2018-11-181-0/+4
* added ASCII representation to dz60 iso-split layout and adjusted it so that i...SpacebarRacecar2018-10-221-4/+4
* added an ISO split spacebar layout, keymap and readme files (#4165)mcarni2018-10-191-0/+4
* Keyboard: DZ60: add Plate B layouts (#4076)noroadsleft2018-10-041-0/+8
* Keyboard: DZ60 cleanup (#3994)noroadsleft2018-10-011-19/+3
* Keyboard: Add ansi, split bs and rshift, 5 1u keys to right of space in DZ60 ...orbitingorca2018-08-111-0/+4
* Keyboard: Enable using shared user hhkb layout for dz60 (#3549)orbitingorca2018-08-021-0/+4
* DZ60 Configurator fix and refactor (#3205)noroadsleft2018-06-211-14/+20
* ISO Keymap & Layout for dz60 (#3198)Jan Kolkmeier2018-06-171-0/+3
* DZ60: Add LAYOUT_directional_625_space (#3148)noroadsleft2018-06-081-27/+31
* Add standard layout 60% support for QMK Configurator and user space (#2950)MechMerlin2018-05-121-0/+4
* new layout for iso and arrows (#2865)MechMerlin2018-05-011-0/+4
* Remove bootloader from info.jsonsskullY2018-04-111-1/+0
* More Configurator Warning Fixes (#2716)MechMerlin2018-04-071-11/+11
* Pull information from config.h and rules.mk (#2711)skullydazed2018-04-071-4/+1
* Configurator/dz60 support for info.json (#2568)MechMerlin2018-03-201-0/+32
hlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.

from __future__ import absolute_import, division, print_function

import getpass
import glob
import io
import os
import subprocess
import time

import click

from clint.textui.progress import Bar as ProgressBar

import requests


JENKINS_URL = (
    "https://ci.cryptography.io/job/cryptography-support-jobs/"
    "job/wheel-builder"
)


def run(*args, **kwargs):
    print("[running] {0}".format(list(args)))
    subprocess.check_call(list(args), **kwargs)


def wait_for_build_completed(session):
    # Wait 20 seconds before actually checking if the build is complete, to
    # ensure that it had time to really start.
    time.sleep(20)
    while True:
        response = session.get(
            "{0}/lastBuild/api/json/".format(JENKINS_URL),
            headers={
                "Accept": "application/json",
            }
        )
        response.raise_for_status()
        if not response.json()["building"]:
            assert response.json()["result"] == "SUCCESS"
            break
        time.sleep(0.1)


def download_artifacts(session):
    response = session.get(
        "{0}/lastBuild/api/json/".format(JENKINS_URL),
        headers={
            "Accept": "application/json"
        }
    )
    response.raise_for_status()
    json_response = response.json()
    assert not json_response["building"]
    assert json_response["result"] == "SUCCESS"

    paths = []

    for artifact in json_response["artifacts"]:
        response = session.get(
            "{0}artifact/{1}".format(
                json_response["url"], artifact["relativePath"]
            ), stream=True
        )
        assert response.headers["content-length"]
        print("Downloading {0}".format(artifact["fileName"]))
        bar = ProgressBar(
            expected_size=int(response.headers["content-length"]),
            filled_char="="
        )
        content = io.BytesIO()
        for data in response.iter_content(chunk_size=8192):
            content.write(data)
            bar.show(content.tell())
        assert bar.expected_size == content.tell()
        bar.done()
        out_path = os.path.join(
            os.path.dirname(__file__),
            "dist",
            artifact["fileName"],
        )
        with open(out_path, "wb") as f:
            f.write(content.getvalue())
        paths.append(out_path)
    return paths


@click.command()
@click.argument("version")
def release(version):
    """
    ``version`` should be a string like '0.4' or '1.0'.
    """
    run("git", "tag", "-s", version, "-m", "{0} release".format(version))
    run("git", "push", "--tags")

    run("python", "setup.py", "sdist")
    run("python", "setup.py", "sdist", "bdist_wheel", cwd="vectors/")

    packages = (
        glob.glob("dist/cryptography-{0}*".format(version)) +
        glob.glob("vectors/dist/cryptography_vectors-{0}*".format(version))
    )
    run("twine", "upload", "-s", *packages)

    session = requests.Session()

    token = getpass.getpass("Input the Jenkins token: ")
    response = session.get(
        "{0}/buildWithParameters".format(JENKINS_URL),
        params={
            "token": token,
            "BUILD_VERSION": version,
            "cause": "Building wheels for {0}".format(version)
        }
    )
    response.raise_for_status()
    wait_for_build_completed(session)
    paths = download_artifacts(session)
    run("twine", "upload", *paths)


if __name__ == "__main__":
    release()