def test_no_matching_parent(self): result = find_git_root( self.get_home_folder(), folder_name="this_folder_must_not_exist." ) self.assertFalse(result)
def new_f(*args, **kwargs): if not "path" in kwargs: # path = "." path = find_git_root(os.curdir) kwargs['path'] = path if not "str_data" in kwargs: yaml = os.path.join(path, DEFAULT_WERCKER_YML) if os.path.isfile(yaml): fh = open(yaml) data = fh.read() fh.close() kwargs["str_data"] = data else: term = get_term() puts("{t.red}Error:{t.normal} {yaml} not found".format( yaml=DEFAULT_WERCKER_YML, t=term)) if not "yaml_data" in kwargs and "str_data" in kwargs: try: yaml_data = load(kwargs["str_data"], Loader=Loader) except ParserError: yaml_data = None term = get_term() puts( "{t.red}Error:{t.normal} {yaml} is not formatted propery.". format(t=term, yaml=DEFAULT_WERCKER_YML)) if type(yaml_data) is dict: kwargs["yaml_data"] = yaml_data return f(*args, **kwargs)
def new_f(*args, **kwargs): if not "path" in kwargs: # path = "." path = find_git_root(os.curdir) kwargs["path"] = path if not "str_data" in kwargs: yaml = os.path.join(path, DEFAULT_WERCKER_YML) if os.path.isfile(yaml): fh = open(yaml) data = fh.read() fh.close() kwargs["str_data"] = data else: term = get_term() puts("{t.red}Error:{t.normal} {yaml} not found".format(yaml=DEFAULT_WERCKER_YML, t=term)) if not "yaml_data" in kwargs and "str_data" in kwargs: try: yaml_data = load(kwargs["str_data"], Loader=Loader) except ParserError: yaml_data = None term = get_term() puts( "{t.red}Error:{t.normal} {yaml} is not formatted propery.".format(t=term, yaml=DEFAULT_WERCKER_YML) ) if type(yaml_data) is dict: kwargs["yaml_data"] = yaml_data return f(*args, **kwargs)
def test_find_git_root_in_same_folder(self): result = find_git_root( os.path.join( self.folder, self.repo_name ), self.get_git_folder() ) self.assertFalse(result is None)
def test_find_git_root_from_curdir(self): # print os # print os.getcwd() # current_dir = os.getcwd() os.chdir(self.get_home_folder()) os.mkdir('.git') result = find_git_root(os.curdir) self.assertTrue(result)
def project_link(valid_token=None, puts_result=True, auto_link=True): if not valid_token: raise ValueError("A valid token is required!") term = get_term() if puts_result: puts("Searching for git remote information... ") path = find_git_root(os.curdir) if not path: if puts_result: puts(term.red("error:") + " No git repository found") return False options = get_remote_options(path) if options is None: if puts_result: puts(term.red("error:") + " No git repository found") return False if puts_result: puts("Retrieving list of applications...") c = Client() response, result = c.get_applications(valid_token) for option in options: for app in result: if convert_to_url(app['url']) == convert_to_url(option.url): if auto_link: set_value(VALUE_PROJECT_ID, app['id']) if puts_result: puts( term.green("success:") + " application is now linked to this repository" ) return True if puts_result: puts( "An application could " + term.white("not") + " be linked to this repository") return False
def test_find_git_root_from_subfolder(self): # self.assertTrue(False) new_folder = os.path.join( self.folder, self.repo_name, # self.get_git_folder(), "multiple", "subfolders", "and", "it", "still") result = find_git_root(new_folder, self.get_git_folder()) self.assertFalse(result is None)
def test_find_git_root_from_subfolder(self): # self.assertTrue(False) new_folder = os.path.join( self.folder, self.repo_name, # self.get_git_folder(), "multiple", "subfolders", "and", "it", "still" ) result = find_git_root(new_folder, self.get_git_folder()) self.assertFalse(result is None)
def validate(): """ Validates the wercker.json file by doing the following: * Check whether there is a git repository in the current directory or up. * Check whether there is a wercker.json file in that root. * Check whether the size of that file is greater that zero. * Check whether the wercker.json file contains valid json. Currently this command doesn't validate the wercker.json file against a schema. But you can expect this in the future. """ term = get_term() git_root_path = find_git_root(os.curdir) if not git_root_path: puts(term.red("Error: ") + "Could not find a git repository") return wercker_json_path = os.path.join(git_root_path, "wercker.json") if os.path.exists(wercker_json_path) is False: puts(term.yellow("Warning: ") + " Could not find a wercker.json file") return if os.path.getsize(wercker_json_path) == 0: puts(term.red("Error: ") + "wercker.json is found, but empty") return try: with open(wercker_json_path) as f: try: json.load(f) puts(term.green("wercker.json is found and valid!")) except ValueError as e: puts(term.red("Error: ") + "wercker.json is not valid json: " + e.message) except IOError as e: puts(term.red("Error: ") + "Error while reading wercker.json file: " + e.message)
def get_value(name, default_value=None, path=os.curdir, print_warnings=True): value = None term = get_term() if name == VALUE_WERCKER_URL: value = os.getenv("wercker_url", None) if value is None: value = os.getenv(ENV_KEY_WERCKER_URL, DEFAULT_WERCKER_URL) return value elif name == VALUE_MIXPANEL_TOKEN: value = os.getenv(ENV_KEY_MIXPANEL_TOKEN, DEFAULT_MIXPANEL_TOKEN) elif name == VALUE_USER_TOKEN: wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) file = _get_or_create_netrc_location() rc = netrc.netrc(file) if url.hostname in rc.hosts: value = rc.hosts[url.hostname][2] elif name == VALUE_USER_NAME: wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) file = _get_or_create_netrc_location() rc = netrc.netrc(file) if url.hostname in rc.hosts: value = rc.hosts[url.hostname][0] elif name == VALUE_HEROKU_TOKEN: file = _get_or_create_netrc_location() rc = netrc.netrc(file) result = rc.authenticators('api.heroku.com') if result and len(result) == 3: value = result[2] elif name == VALUE_PROJECT_ID: # from paths import find_git_root path = find_git_root(path) if not path: if print_warnings: puts( term.red("Warning:") + " Could not find a git repository." ) return file = os.path.join( path, DEFAULT_DOT_WERCKER_NAME ) if not os.path.isfile(file): if print_warnings: puts( term.yellow("Warning:") + " Could not find a %s file in the application root" % DEFAULT_DOT_WERCKER_NAME ) return Config = ConfigParser.ConfigParser() Config.read(file) try: value = Config.get('project', 'id') except ( ConfigParser.NoOptionError, ConfigParser.NoSectionError ): value = None elif name == VALUE_DISPLAY_DEBUG: env_value = os.environ.get(ENV_KEY_DISPLAY_DEBUG) if env_value is not None and env_value.lower() == "true": value = True else: value = DEFAULT_DISPLAY_DEBUG return value
def create(path=".", valid_token=None): if not valid_token: raise ValueError("A valid token is required!") term = get_term() if get_value(VALUE_PROJECT_ID, print_warnings=False): puts("A .wercker file was found.") run_create = prompt.yn("Are you sure you want to run `wercker create`?", default="n") if run_create is False: puts("Aborting.") return else: puts("") if project_link(valid_token=valid_token, puts_result=False, auto_link=False): puts("A matching application was found on wercker.") use_link = prompt.yn( "Do you want to run 'wercker link' instead of\ `wercker create`?" ) puts("") if use_link is True: project_link(valid_token=valid_token) return path = find_git_root(path) if path: options = get_remote_options(path) heroku_options = filter_heroku_sources(options) else: options = [] heroku_options = [] if not path: return False puts( """About to create an application on wercker. This consists of the following steps: 1. Configure application 2. Setup keys 3. Add a deploy target ({heroku_options} heroku targets detected) 4. Trigger initial build""".format( wercker_url=get_value(VALUE_WERCKER_URL), heroku_options=len(heroku_options) ) ) if not path: puts( term.red("Error:") + " Could not find a repository." + " wercker create requires a git repository. Create/clone a\ repository first." ) return options = [o for o in options if o not in heroku_options] options = [o for o in options if o.priority > 1] count = len(options) puts( """ Step """ + term.white("1") + """. Configure application ------------- """ ) puts("%s repository location(s) found...\n" % term.bold(str(count))) url = pick_url(options) url = convert_to_url(url) source = get_preferred_source_type(url) puts("\n%s repository detected..." % source) puts("Selected repository url is %s\n" % url) client = Client() code, profile = client.get_profile(valid_token) source_type = get_source_type(url) if source_type == SOURCE_BITBUCKET: if profile.get("hasBitbucketToken", False) is False: puts( "No Bitbucket account linked with your profile. Wercker uses\ this connection to linkup some events for your repository on Bitbucket to our\ service." ) provider_url = get_value(VALUE_WERCKER_URL) + "/provider/add/cli/bitbucket" puts("Launching {url} to start linking.".format(url=provider_url)) from time import sleep sleep(5) import webbrowser webbrowser.open(provider_url) raw_input("Press enter to continue...") elif source_type == SOURCE_GITHUB: if profile.get("hasGithubToken", False) is False: puts( "No GitHub account linked with your profile. Wercker uses\ this connection to linkup some events for your repository on GitHub to our\ service." ) provider_url = get_value(VALUE_WERCKER_URL) + "/provider/add/cli/github" puts("Launching {url} to start linking.".format(url=provider_url)) from time import sleep sleep(5) import webbrowser webbrowser.open(provider_url) raw_input("Press enter to continue...") username = get_username(url) project = get_project(url) puts( """ Step {t.white}2{t.normal}. ------------- In order to clone the repository on wercker, an ssh key is needed. A new/unique key can be generated for each repository. There 3 ways of using ssh keys on wercker: {t.green}1. Automatically add a deploy key [recommended]{t.normal} 2. Use the checkout key, wercker uses for public projects. 3. Let wercker generate a key, but allow add it manually to github/bitbucket. (needed when using git submodules) For more information on this see: http://etc... """.format( t=term ) ) key_method = None while True: result = prompt.get_value_with_default("Options:", "1") valid_values = [str(i + 1) for i in range(3)] if result in valid_values: key_method = valid_values.index(result) break else: puts(term.red("warning: ") + " invalid build selected.") checkout_key_id = None checkout_key_publicKey = None if key_method != 1: puts("""Retrieving a new ssh-key.""") status, response = client.create_checkout_key() puts("done.") if status == 200: checkout_key_id = response["id"] checkout_key_publicKey = response["publicKey"] if key_method == 0: puts("Adding deploy key to repository:") status, response = client.link_checkout_key( valid_token, checkout_key_id, username, project, source_type ) if status != 200: puts(term.red("Error:") + " uanble to add key to repository.") sys.exit(1) elif key_method == 2: profile_username = profile.get("username") status, response = client.get_profile_detailed(valid_token, profile_username) username = response[source_type + "Username"] url = None if source_type == SOURCE_GITHUB: url = "https://github.com/settings/ssh" elif source_type == SOURCE_BITBUCKET: url = "http://bitbucket.org/account/user/{username}/\ ssh-keys/" if status == 200: formatted_key = "\n".join(textwrap.wrap(checkout_key_publicKey)) puts( """Please add the following public key: {publicKey} You can add the key here: {url}\n""".format( publicKey=formatted_key, url=url.format(username=username) ) ) raw_input("Press enter to continue...") else: puts(term.red("Error:") + " unable to load wercker profile information.") sys.exit(1) else: puts(term.red("Error:") + "unable to retrieve an ssh key.") sys.exit(1) puts("Creating a new application") status, response = client.create_project(valid_token, username, project, source, checkout_key_id) if response["success"]: puts("done.\n") set_value(VALUE_PROJECT_ID, response["data"]["id"]) puts( "In the root of this repository a .wercker file has been created\ which enables the link between the source code and wercker.\n" ) site_url = None if source_type == SOURCE_GITHUB: site_url = "https://github.com/" + username + "/" + project elif source_type == SOURCE_BITBUCKET: site_url = "https://bitbucket.org/" + username + "/" + project puts( """ Step """ + term.white("3") + """. ------------- """ ) target_options = heroku_options nr_targets = len(target_options) puts("%s automatic supported target(s) found." % str(nr_targets)) if nr_targets: target_add(valid_token=valid_token) puts( """ Step """ + term.white("4") + """. ------------- """ ) project_build(valid_token=valid_token) puts( """ Done. ------------- You are all set up to for using wercker. You can trigger new builds by committing and pushing your latest changes. Happy coding!""" ) else: puts(term.red("Error: ") + "Unable to create project. \n\nResponse: %s\n" % (response.get("errorMessage"))) puts( """ Note: only repository where the wercker's user has permissions on can be added. This is because some event hooks for wercker need to be registered on the repository. If you want to test a public repository and don't have permissions on it: fork it. You can add the forked repository to wercker""" )
def get_value(name, default_value=None, path=os.curdir, print_warnings=True): value = None term = get_term() if name == VALUE_WERCKER_URL: value = os.getenv("wercker_url", None) if value is None: value = os.getenv(ENV_KEY_WERCKER_URL, DEFAULT_WERCKER_URL) return value elif name == VALUE_MIXPANEL_TOKEN: value = os.getenv(ENV_KEY_MIXPANEL_TOKEN, DEFAULT_MIXPANEL_TOKEN) elif name == VALUE_USER_TOKEN: wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) file = _get_or_create_netrc_location() rc = netrc.netrc(file) if url.hostname in rc.hosts: value = rc.hosts[url.hostname][2] elif name == VALUE_USER_NAME: wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) file = _get_or_create_netrc_location() rc = netrc.netrc(file) if url.hostname in rc.hosts: value = rc.hosts[url.hostname][0] elif name == VALUE_HEROKU_TOKEN: file = _get_or_create_netrc_location() rc = netrc.netrc(file) result = rc.authenticators('api.heroku.com') if result and len(result) == 3: value = result[2] elif name == VALUE_PROJECT_ID: # from paths import find_git_root path = find_git_root(path) if not path: if print_warnings: puts( term.red("Warning:") + " Could not find a git repository.") return file = os.path.join(path, DEFAULT_DOT_WERCKER_NAME) if not os.path.isfile(file): if print_warnings: puts( term.yellow("Warning:") + " Could not find a %s file in the application root" % DEFAULT_DOT_WERCKER_NAME) return Config = ConfigParser.ConfigParser() Config.read(file) try: value = Config.get('project', 'id') except (ConfigParser.NoOptionError, ConfigParser.NoSectionError): value = None elif name == VALUE_DISPLAY_DEBUG: env_value = os.environ.get(ENV_KEY_DISPLAY_DEBUG) if env_value is not None and env_value.lower() == "true": value = True else: value = DEFAULT_DISPLAY_DEBUG return value
def set_value(name, value): term = get_term() if name == VALUE_USER_TOKEN: file = _get_or_create_netrc_location() rc = netrc.netrc(file=file) wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) if url.hostname in rc.hosts: current_settings = rc.hosts[url.hostname] else: current_settings = (None, None, None) if value is not None: rc.hosts[url.hostname] = ( current_settings[0], current_settings[1], value ) else: rc.hosts.pop(url.hostname) with open(file, 'w') as fp: fp.write(str(rc)) fp.close() elif name == VALUE_USER_NAME: file = _get_or_create_netrc_location() rc = netrc.netrc(file=file) wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) if url.hostname in rc.hosts: current_settings = rc.hosts[url.hostname] else: current_settings = (None, None, None) if value is not None: rc.hosts[url.hostname] = ( value, current_settings[1], current_settings[2]) else: rc.hosts.pop(url.hostname) with open(file, 'w') as fp: fp.write(str(rc)) fp.close() elif name == VALUE_PROJECT_ID: path = find_git_root(os.curdir) if not path: puts( term.red("Error:") + " Could not find the root repository." ) return file = os.path.join( path, DEFAULT_DOT_WERCKER_NAME ) Config = ConfigParser.ConfigParser() if os.path.isfile(file): Config.read(file) if not 'project' in Config.sections(): Config.add_section('project') fp = open(file, 'w') Config.set('project', 'id', value) Config.write(fp) fp.close()
def create(path='.', valid_token=None): if not valid_token: raise ValueError("A valid token is required!") term = get_term() if get_value(VALUE_PROJECT_ID, print_warnings=False): puts("A .wercker file was found.") run_create = prompt.yn( "Are you sure you want to run `wercker create`?", default="n") if run_create is False: puts("Aborting.") return else: puts("") if project_link( valid_token=valid_token, puts_result=False, auto_link=False ): puts("A matching application was found on wercker.") use_link = prompt.yn("Do you want to run 'wercker link' instead of\ `wercker create`?") puts("") if use_link is True: project_link(valid_token=valid_token) return path = find_git_root(path) if path: options = get_remote_options(path) heroku_options = filter_heroku_sources(options) else: options = [] heroku_options = [] if not path: return False puts('''About to create an application on wercker. This consists of the following steps: 1. Configure application 2. Setup keys 3. Add a deploy target ({heroku_options} heroku targets detected) 4. Trigger initial build'''.format( wercker_url=get_value(VALUE_WERCKER_URL), heroku_options=len(heroku_options)) ) if not path: puts( term.red("Error:") + " Could not find a repository." + " wercker create requires a git repository. Create/clone a\ repository first." ) return options = [o for o in options if o not in heroku_options] options = [o for o in options if o.priority > 1] count = len(options) puts(''' Step ''' + term.white('1') + '''. Configure application ------------- ''') puts( "%s repository location(s) found...\n" % term.bold(str(count)) ) url = pick_url(options) url = convert_to_url(url) source = get_preferred_source_type(url) puts("\n%s repository detected..." % source) puts("Selected repository url is %s\n" % url) client = Client() code, profile = client.get_profile(valid_token) source_type = get_source_type(url) if source_type == SOURCE_BITBUCKET: if profile.get('hasBitbucketToken', False) is False: puts("No Bitbucket account linked with your profile. Wercker uses\ this connection to linkup some events for your repository on Bitbucket to our\ service.") provider_url = get_value( VALUE_WERCKER_URL ) + '/provider/add/cli/bitbucket' puts("Launching {url} to start linking.".format( url=provider_url )) from time import sleep sleep(5) import webbrowser webbrowser.open(provider_url) raw_input("Press enter to continue...") elif source_type == SOURCE_GITHUB: if profile.get('hasGithubToken', False) is False: puts("No GitHub account linked with your profile. Wercker uses\ this connection to linkup some events for your repository on GitHub to our\ service.") provider_url = get_value( VALUE_WERCKER_URL ) + '/provider/add/cli/github' puts("Launching {url} to start linking.".format( url=provider_url )) from time import sleep sleep(5) import webbrowser webbrowser.open(provider_url) raw_input("Press enter to continue...") username = get_username(url) project = get_project(url) puts(''' Step {t.white}2{t.normal}. ------------- In order to clone the repository on wercker, an ssh key is needed. A new/unique key can be generated for each repository. There 3 ways of using ssh keys on wercker: {t.green}1. Automatically add a deploy key [recommended]{t.normal} 2. Use the checkout key, wercker uses for public projects. 3. Let wercker generate a key, but allow add it manually to github/bitbucket. (needed when using git submodules) For more information on this see: http://etc... '''.format(t=term)) key_method = None while(True): result = prompt.get_value_with_default( "Options:", '1' ) valid_values = [str(i + 1) for i in range(3)] if result in valid_values: key_method = valid_values.index(result) break else: puts(term.red("warning: ") + " invalid build selected.") checkout_key_id = None checkout_key_publicKey = None if(key_method != 1): puts('''Retrieving a new ssh-key.''') status, response = client.create_checkout_key() puts("done.") if status == 200: checkout_key_id = response['id'] checkout_key_publicKey = response['publicKey'] if key_method == 0: puts('Adding deploy key to repository:') status, response = client.link_checkout_key(valid_token, checkout_key_id, username, project, source_type) if status != 200: puts(term.red("Error:") + " uanble to add key to repository.") sys.exit(1) elif key_method == 2: profile_username = profile.get('username') status, response = client.get_profile_detailed( valid_token, profile_username) username = response[source_type + 'Username'] url = None if source_type == SOURCE_GITHUB: url = "https://github.com/settings/ssh" elif source_type == SOURCE_BITBUCKET: url = "http://bitbucket.org/account/user/{username}/\ ssh-keys/" if status == 200: formatted_key = "\n".join( textwrap.wrap(checkout_key_publicKey)) puts('''Please add the following public key: {publicKey} You can add the key here: {url}\n'''.format(publicKey=formatted_key, url=url.format( username=username))) raw_input("Press enter to continue...") else: puts(term.red("Error:") + " unable to load wercker profile information.") sys.exit(1) else: puts(term.red("Error:") + 'unable to retrieve an ssh key.') sys.exit(1) puts("Creating a new application") status, response = client.create_project( valid_token, username, project, source, checkout_key_id, ) if response['success']: puts("done.\n") set_value(VALUE_PROJECT_ID, response['data']['id']) puts("In the root of this repository a .wercker file has been created\ which enables the link between the source code and wercker.\n") site_url = None if source_type == SOURCE_GITHUB: site_url = "https://github.com/" + \ username + \ "/" + \ project elif source_type == SOURCE_BITBUCKET: site_url = "https://bitbucket.org/" + \ username + \ "/" + \ project puts(''' Step ''' + term.white('3') + '''. ------------- ''') target_options = heroku_options nr_targets = len(target_options) puts("%s automatic supported target(s) found." % str(nr_targets)) if nr_targets: target_add(valid_token=valid_token) puts(''' Step ''' + term.white('4') + '''. ------------- ''') project_build(valid_token=valid_token) puts(''' Done. ------------- You are all set up to for using wercker. You can trigger new builds by committing and pushing your latest changes. Happy coding!''') else: puts( term.red("Error: ") + "Unable to create project. \n\nResponse: %s\n" % (response.get('errorMessage')) ) puts(''' Note: only repository where the wercker's user has permissions on can be added. This is because some event hooks for wercker need to be registered on the repository. If you want to test a public repository and don't have permissions on it: fork it. You can add the forked repository to wercker''')
def test_find_git_root_in_same_folder(self): result = find_git_root(os.path.join(self.folder, self.repo_name), self.get_git_folder()) self.assertFalse(result is None)
def test_no_matching_parent(self): result = find_git_root(self.get_home_folder(), folder_name="this_folder_must_not_exist.") self.assertFalse(result)
def create(path='.', valid_token=None): if not valid_token: raise ValueError("A valid token is required!") term = get_term() if get_value(VALUE_PROJECT_ID, print_warnings=False): puts("A .wercker file was found.") run_create = prompt.yn( "Are you sure you want to run `wercker create`?", default="n") if run_create is False: puts("Aborting.") return else: puts("") if project_link( valid_token=valid_token, puts_result=False, auto_link=False ): puts("A matching application was found on wercker.") use_link = prompt.yn("Do you want to run 'wercker link' instead of\ `wercker create`?") puts("") if use_link is True: project_link(valid_token=valid_token) return path = find_git_root(path) if path: options = get_remote_options(path) heroku_options = filter_heroku_sources(options) else: options = [] heroku_options = [] if not path: return False puts('''About to create an application on wercker. This consists of the following steps: 1. Validate permissions and create an application 2. Add a deploy target ({heroku_options} heroku targets detected) 3. Trigger initial build'''.format( wercker_url=get_value(VALUE_WERCKER_URL), heroku_options=len(heroku_options)) ) if not path: puts( term.red("Error:") + " Could not find a repository." + " wercker create requires a git repository. Create/clone a\ repository first." ) return options = [o for o in options if o not in heroku_options] options = [o for o in options if o.priority > 1] count = len(options) puts(''' Step ''' + term.white('1') + '''. ------------- ''') puts( "Found %s repository location(s)...\n" % term.white(str(count)) ) url = pick_url(options) url = convert_to_url(url) source = get_preferred_source_type(url) puts("\n%s repository detected..." % source) puts("Selected repository url is %s\n" % url) client = Client() code, profile = client.get_profile(valid_token) source_type = get_source_type(url) if source_type == SOURCE_BITBUCKET: if profile.get('hasBitbucketToken', False) is False: puts("No Bitbucket account linked with your profile. Wercker uses\ this connection to linkup some events for your repository on Bitbucket to our\ service.") provider_url = get_value( VALUE_WERCKER_URL ) + '/provider/add/cli/bitbucket' puts("Launching {url} to start linking.".format( url=provider_url )) from time import sleep sleep(5) import webbrowser webbrowser.open(provider_url) raw_input("Press enter to continue...") elif source_type == SOURCE_GITHUB: if profile.get('hasGithubToken', False) is False: puts("No GitHub account linked with your profile. Wercker uses\ this connection to linkup some events for your repository on GitHub to our\ service.") provider_url = get_value( VALUE_WERCKER_URL ) + '/provider/add/cli/github' puts("Launching {url} to start linking.".format( url=provider_url )) from time import sleep sleep(5) import webbrowser webbrowser.open(provider_url) raw_input("Press enter to continue...") puts("Creating a new application") status, response = client.create_project( url, source, valid_token ) if response['success']: puts("a new application has been created.") set_value(VALUE_PROJECT_ID, response['projectId']) puts("In the root of this repository a .wercker file has been created\ which enables the link between the source code and wercker.\n") site_url = None if source_type == SOURCE_GITHUB: site_url = "https://github.com/" + \ get_username(url) + \ "/" + \ get_project(url) elif source_type == SOURCE_BITBUCKET: site_url = "https://bitbucket.org/" + \ get_username(url) + \ "/" + \ get_project(url) project_check_repo( valid_token=valid_token, failure_confirmation=True, site_url=site_url ) # puts("\nSearching for deploy target information (for \ # platforms such as Heroku).") puts(''' Step ''' + term.white('2') + '''. ------------- ''') target_options = heroku_options nr_targets = len(target_options) puts("%s automatic supported target(s) found." % str(nr_targets)) if nr_targets: target_add(valid_token=valid_token) puts(''' Step ''' + term.white('3') + '''. ------------- ''') project_build(valid_token=valid_token) # if project_build(valid_token=valid_token): # puts("To trigger a build") # puts("") puts(''' Done. ------------- You are all set up to for using wercker. You can trigger new builds by committing and pushing your latest changes. Happy coding!''') else: puts( term.red("Error: ") + "Unable to create project. \n\nResponse: %s\n" % (response.get('errorMessage')) ) puts(''' Note: only repository where the wercker's user has permissions on can be added. This is because some event hooks for wercker need to be registered on the repository. If you want to test a public repository and don't have permissions on it: fork it. You can add the forked repository to wercker''')
def set_value(name, value): term = get_term() if name == VALUE_USER_TOKEN: file = _get_or_create_netrc_location() rc = netrc.netrc(file=file) wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) if url.hostname in rc.hosts: current_settings = rc.hosts[url.hostname] else: current_settings = (None, None, None) if value is not None: rc.hosts[url.hostname] = (current_settings[0], current_settings[1], value) else: rc.hosts.pop(url.hostname) with open(file, 'w') as fp: fp.write(str(rc)) fp.close() elif name == VALUE_USER_NAME: file = _get_or_create_netrc_location() rc = netrc.netrc(file=file) wercker_url = get_value(VALUE_WERCKER_URL) url = urlparse(wercker_url) if url.hostname in rc.hosts: current_settings = rc.hosts[url.hostname] else: current_settings = (None, None, None) if value is not None: rc.hosts[url.hostname] = (value, current_settings[1], current_settings[2]) else: rc.hosts.pop(url.hostname) with open(file, 'w') as fp: fp.write(str(rc)) fp.close() elif name == VALUE_PROJECT_ID: path = find_git_root(os.curdir) if not path: puts(term.red("Error:") + " Could not find the root repository.") return file = os.path.join(path, DEFAULT_DOT_WERCKER_NAME) Config = ConfigParser.ConfigParser() if os.path.isfile(file): Config.read(file) if not 'project' in Config.sections(): Config.add_section('project') fp = open(file, 'w') Config.set('project', 'id', value) Config.write(fp) fp.close()