Add support for filtering based on tags, in addition to branches

This commit is contained in:
Joseph Schorr 2014-10-23 16:39:10 -04:00
parent 94c24a93c2
commit fb2470615b
7 changed files with 236 additions and 63 deletions

View file

@ -231,15 +231,16 @@ class GithubBuildTrigger(BuildTrigger):
return repos_by_org
def matches_branch(self, branch_name, regex):
def matches_ref(self, ref, regex):
match_string = ref.split('/', 1)[1]
if not regex:
return False
m = regex.match(branch_name)
m = regex.match(match_string)
if not m:
return False
return len(m.group(0)) == len(branch_name)
return len(m.group(0)) == len(match_string)
def list_build_subdirs(self, auth_token, config):
gh_client = self._get_client(auth_token)
@ -250,11 +251,11 @@ class GithubBuildTrigger(BuildTrigger):
# Find the first matching branch.
branches = None
if 'branch_regex' in config:
if 'branchtag_regex' in config:
try:
regex = re.compile(config['branch_regex'])
regex = re.compile(config['branchtag_regex'])
branches = [branch.name for branch in repo.get_branches()
if self.matches_branch(branch.name, regex)]
if self.matches_ref('refs/heads/' + branch.name, regex)]
except:
pass
@ -370,14 +371,13 @@ class GithubBuildTrigger(BuildTrigger):
commit_sha = payload['head_commit']['id']
commit_message = payload['head_commit'].get('message', '')
if 'branch_regex' in config:
if 'branchtag_regex' in config:
try:
regex = re.compile(config['branch_regex'])
regex = re.compile(config['branchtag_regex'])
except:
regex = re.compile('.*')
branch = ref.split('/')[-1]
if not self.matches_branch(branch, regex):
if not self.matches_ref(ref, regex):
raise SkipRequestException()
if should_skip_commit(commit_message):
@ -414,6 +414,19 @@ class GithubBuildTrigger(BuildTrigger):
def list_field_values(self, auth_token, config, field_name):
if field_name == 'refs':
branches = self.list_field_values(auth_token, config, 'branch_name')
tags = self.list_field_values(auth_token, config, 'tag_name')
return ([{'kind': 'branch', 'name': b} for b in branches] +
[{'kind': 'tag', 'name': tag} for tag in tags])
if field_name == 'tag_name':
gh_client = self._get_client(auth_token)
source = config['build_source']
repo = gh_client.get_repo(source)
return [tag.name for tag in repo.get_tags()]
if field_name == 'branch_name':
gh_client = self._get_client(auth_token)
source = config['build_source']