Example #1
0
def github_repo():
    name = "bmu-{0}".format(uuid.uuid4().hex[:7])
    print("Creating GitHub repo {0} ...".format(name))
    create_resp = github.sync_post('user/repos', json={'name': name})
    assert create_resp.ok
    yield create_resp.json()
    print("Deleting GitHub repo {0} ...".format(name))
    delete_resp = github.sync_delete("repos/bmcorser/{0}".format(name))
    assert delete_resp.ok
Example #2
0
def ssh_wrapper(github_repo):
    WRAPPER_TEMPLATE = '''#!/bin/bash
ssh -i {0} $1 $2'''
    key = RSA.generate(2048)

    private = tempfile.NamedTemporaryFile(delete=False)
    os.chmod(private.name, 0600)
    private.write(key.exportKey('PEM'))
    private.file.flush()
    private.close()

    public = tempfile.NamedTemporaryFile(delete=False)
    public.write(key.publickey().exportKey('OpenSSH'))
    public.file.flush()
    public.close()

    wrapper = tempfile.NamedTemporaryFile(delete=False)
    wrapper.write(WRAPPER_TEMPLATE.format(private.name))
    wrapper.file.flush()
    wrapper.close()
    os.chmod(wrapper.name, 0755)

    with open(public.name, 'r') as pubkey_file:
        pubkey_content = pubkey_file.read()
    print('Adding temp pubkey to GitHub ...')
    create_resp = github.sync_post(
        'user/keys',
        json={'title': github_repo['name'], 'key': pubkey_content}
    )
    assert create_resp.ok
    key_id = create_resp.json()['id']

    yield wrapper.name

    map(os.remove, (wrapper.name, private.name, public.name))
    print('Deleting temp pubkey from GitHub ...')
    delete_resp = github.sync_delete("user/keys/{0}".format(key_id))
    assert delete_resp.ok