Added Gitea step source
This commit is contained in:
parent
78ccfc074b
commit
d39640ea10
36
buildbot_gitea/step_source.py
Normal file
36
buildbot_gitea/step_source.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
from twisted.internet import defer
|
||||||
|
from twisted.python import log
|
||||||
|
|
||||||
|
from buildbot.steps.source.git import Git
|
||||||
|
|
||||||
|
|
||||||
|
class Gitea(Git):
|
||||||
|
"""
|
||||||
|
Source step that knows how to handle merge requests from
|
||||||
|
the Gitea webhook
|
||||||
|
"""
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def _fetch(self, arg):
|
||||||
|
print("Update")
|
||||||
|
super(Gitea, self)._fetch(arg)
|
||||||
|
if self.build.hasProperty("pr_id"):
|
||||||
|
remote = yield self._dovccmd(
|
||||||
|
['config', 'remote.pr_source.url'], collectStdout=True)
|
||||||
|
print(remote)
|
||||||
|
if remote is None or remote is '':
|
||||||
|
yield self._dovccmd(
|
||||||
|
['remote', 'add', 'pr_source',
|
||||||
|
self.build.getProperty("head_git_ssh_url", None)])
|
||||||
|
else:
|
||||||
|
yield self._dovccmd(
|
||||||
|
['remote', 'set-url', 'pr_source',
|
||||||
|
self.build.getProperty("head_git_ssh_url", None)])
|
||||||
|
yield self._dovccmd(['fetch', 'pr_source'])
|
||||||
|
yield self._dovccmd(['merge', self.build.getProperty("head_sha", None)])
|
||||||
|
else:
|
||||||
|
print("Not a PR")
|
99
buildbot_gitea/test/test_step_source.py
Normal file
99
buildbot_gitea/test/test_step_source.py
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
# This file is part of Buildbot. Buildbot is free software: you can
|
||||||
|
# redistribute it and/or modify it under the terms of the GNU General Public
|
||||||
|
# License as published by the Free Software Foundation, version 2.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program; if not, write to the Free Software Foundation, Inc., 51
|
||||||
|
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Copyright Buildbot Team Members
|
||||||
|
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
from twisted.trial import unittest
|
||||||
|
|
||||||
|
from buildbot.process.results import SUCCESS
|
||||||
|
from buildbot_gitea.step_source import Gitea
|
||||||
|
from buildbot.test.fake.remotecommand import Expect
|
||||||
|
from buildbot.test.fake.remotecommand import ExpectShell
|
||||||
|
from buildbot.test.util import config
|
||||||
|
from buildbot.test.util import sourcesteps
|
||||||
|
|
||||||
|
|
||||||
|
class TestGitea(sourcesteps.SourceStepMixin, config.ConfigErrorsMixin, unittest.TestCase):
|
||||||
|
stepClass = Gitea
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.sourceName = self.stepClass.__name__
|
||||||
|
return self.setUpSourceStep()
|
||||||
|
|
||||||
|
def setupStep(self, step, args, **kwargs):
|
||||||
|
step = sourcesteps.SourceStepMixin.setupStep(self, step, args, **kwargs)
|
||||||
|
step.build.properties.setProperty("pr_id", "1", "gitea pr id")
|
||||||
|
step.build.properties.setProperty("base_sha", "f6ad368298bd941e934a41f3babc827b2aa95a1d", "gitea source branch")
|
||||||
|
step.build.properties.setProperty("base_branch", "master", "gitea source branch")
|
||||||
|
step.build.properties.setProperty("base_git_ssh_url",
|
||||||
|
"git@gitea.example.com:base/awesome_project.git",
|
||||||
|
"gitea source git ssh url")
|
||||||
|
step.build.properties.setProperty("head_sha", "e4cd1224c622d46a8199c85c858485723115d2c8", "gitea target sha")
|
||||||
|
step.build.properties.setProperty("head_branch", "feature-branch", "gitea target branch")
|
||||||
|
step.build.properties.setProperty("head_git_ssh_url",
|
||||||
|
"git@gitea.example.com:target/awesome_project.git",
|
||||||
|
"gitea target git ssh url")
|
||||||
|
return step
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
return self.tearDownSourceStep()
|
||||||
|
|
||||||
|
def test_with_merge_branch(self):
|
||||||
|
self.setupStep(
|
||||||
|
Gitea(repourl='git@gitea.example.com:base/awesome_project.git',
|
||||||
|
mode='full', method='clean'), None)
|
||||||
|
|
||||||
|
self.expectCommands(
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', '--version'])
|
||||||
|
+ ExpectShell.log('stdio',
|
||||||
|
stdout='git version 1.7.5')
|
||||||
|
+ 0,
|
||||||
|
Expect('stat', dict(file='wkdir/.buildbot-patched',
|
||||||
|
logEnviron=True))
|
||||||
|
+ 1,
|
||||||
|
Expect('listdir', {'dir': 'wkdir', 'logEnviron': True,
|
||||||
|
'timeout': 1200})
|
||||||
|
+ Expect.update('files', ['.git'])
|
||||||
|
+ 0,
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'clean', '-f', '-f', '-d'])
|
||||||
|
+ 0,
|
||||||
|
# here we always ignore revision, and fetch the merge branch
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'fetch', '-t',
|
||||||
|
'git@gitea.example.com:base/awesome_project.git', 'HEAD'])
|
||||||
|
+ 0,
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'reset', '--hard', 'FETCH_HEAD', '--'])
|
||||||
|
+ 0,
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'config', 'remote.pr_source.url'])
|
||||||
|
+ 0,
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'remote', 'add', 'pr_source', 'git@gitea.example.com:target/awesome_project.git'])
|
||||||
|
+ 0,
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'fetch', 'pr_source'])
|
||||||
|
+ 0,
|
||||||
|
ExpectShell(workdir='wkdir',
|
||||||
|
command=['git', 'merge', 'e4cd1224c622d46a8199c85c858485723115d2c8'])
|
||||||
|
+ 0
|
||||||
|
)
|
||||||
|
self.expectOutcome(result=SUCCESS)
|
||||||
|
self.expectProperty(
|
||||||
|
'got_revision', 'e4cd1224c622d46a8199c85c858485723115d2c8', 'GitLab')
|
||||||
|
return self.runStep()
|
Loading…
Reference in New Issue
Block a user