Пример #1
0
def mock_pr_comment_functionality():
    packit_yaml = ("{'specfile_path': '', 'synced_files': [],"
                   "'jobs': [{'trigger': 'pull_request', 'job': 'copr_build',"
                   "'metadata': {'targets': 'fedora-rawhide-x86_64'}}]}")
    flexmock(
        GithubProject,
        get_file_content=lambda path, ref: packit_yaml,
        full_repo_name="packit-service/hello-world",
    )
    flexmock(Github, get_repo=lambda full_name_or_id: None)
    flexmock(GithubProject).should_receive("who_can_merge_pr").and_return(
        {"phracek"})
    flexmock(GithubProject).should_receive("get_all_pr_commits").with_args(
        9).and_return(["528b803be6f93e19ca4130bf4976f2800a3004c4"])
    config = ServiceConfig()
    config.command_handler_work_dir = SANDCASTLE_WORK_DIR
    flexmock(ServiceConfig).should_receive("get_service_config").and_return(
        config)
    copr_dict = {
        "login": "******",
        "username": "******",
        "token": "apple",
        "copr_url": "https://copr.fedorainfracloud.org",
    }

    flexmock(CoprClient).should_receive("create_from_config_file").and_return(
        CoprClient(copr_dict))
    flexmock(LocalProject, refresh_the_arguments=lambda: None)
    flexmock(Whitelist, check_and_report=True)
Пример #2
0
def test_dist_git_push_release_handle(release_event):
    packit_yaml = (
        "{'specfile_path': '', 'synced_files': []"
        ", jobs: [{trigger: release, job: propose_downstream, metadata: {targets:[]}}]}"
    )
    flexmock(Github, get_repo=lambda full_name_or_id: None)
    flexmock(
        GithubProject,
        get_file_content=lambda path, ref: packit_yaml,
        full_repo_name="packit-service/hello-world",
    )
    flexmock(LocalProject, refresh_the_arguments=lambda: None)
    flexmock(Whitelist, check_and_report=True)
    steve = SteveJobs()
    flexmock(SteveJobs, _is_private=False)
    config = Config()
    config.command_handler_work_dir = SANDCASTLE_WORK_DIR
    flexmock(Config).should_receive("get_service_config").and_return(config)
    # it would make sense to make LocalProject offline
    flexmock(PackitAPI).should_receive("sync_release").with_args(
        dist_git_branch="master", version="0.3.0", create_pr=False).once()

    results = steve.process_message(release_event)
    assert "propose_downstream" in results.get("jobs", {})
    assert results.get("jobs", {}).get("propose_downstream", {}).get("success")
    assert results["trigger"] == str(JobTriggerType.release)
Пример #3
0
def mock_issue_comment_functionality():
    packit_yaml = (
        "{'specfile_path': '', 'synced_files': [],"
        "'jobs': [{'trigger': 'release', 'job': 'propose_downstream',"
        "'metadata': {'dist-git-branch': 'master'}}],"
        "'downstream_package_name': 'packit'}")
    flexmock(
        GithubProject,
        get_file_content=lambda path, ref: packit_yaml,
        full_repo_name="packit-service/packit",
    )
    flexmock(Github, get_repo=lambda full_name_or_id: None)
    flexmock(GithubProject).should_receive("who_can_merge_pr").and_return(
        {"phracek"})
    flexmock(GithubProject).should_receive("issue_comment").and_return(None)
    flexmock(GithubProject).should_receive("issue_close").and_return(None)
    gr = GithubRelease(
        tag_name="0.5.1",
        url="packit-service/packit",
        created_at="",
        tarball_url="https://foo/bar",
        git_tag=flexmock(GitTag),
        project=flexmock(GithubProject),
        raw_release=flexmock(PyGithubRelease),
    )
    flexmock(GithubProject).should_receive("get_latest_release").and_return(gr)
    config = ServiceConfig()
    config.command_handler_work_dir = SANDCASTLE_WORK_DIR
    flexmock(ServiceConfig).should_receive("get_service_config").and_return(
        config)
    flexmock(LocalProject, refresh_the_arguments=lambda: None)
    flexmock(Whitelist, check_and_report=True)
Пример #4
0
def test_process_message(event):
    packit_yaml = {
        "specfile_path": "",
        "synced_files": [],
        "jobs": [{"trigger": "release", "job": "propose_downstream"}],
    }
    flexmock(Github, get_repo=lambda full_name_or_id: None)
    flexmock(
        GithubProject,
        get_file_content=lambda path, ref: dumps(packit_yaml),
        full_repo_name="foo/bar",
    )
    flexmock(LocalProject, refresh_the_arguments=lambda: None)
    config = Config()
    config.command_handler_work_dir = SANDCASTLE_WORK_DIR
    flexmock(Config).should_receive("get_service_config").and_return(config)

    flexmock(PackitAPI).should_receive("sync_release").with_args(
        dist_git_branch="master", version="1.2.3", create_pr=False
    ).once()
    flexmock(Whitelist, check_and_report=True)
    flexmock(SteveJobs, _is_private=False)

    results = SteveJobs().process_message(event)
    assert "propose_downstream" in results.get("jobs", {})
    assert results["trigger"] == str(JobTriggerType.release)
Пример #5
0
def test_handler_cleanup(tmpdir):
    t = Path(tmpdir)
    t.joinpath("a").mkdir()
    t.joinpath("b").write_text("a")
    t.joinpath("c").symlink_to("b")
    t.joinpath("d").symlink_to("a", target_is_directory=True)
    t.joinpath("e").symlink_to("nope", target_is_directory=False)
    t.joinpath("f").symlink_to("nopez", target_is_directory=True)
    t.joinpath(".g").write_text("g")
    t.joinpath(".h").symlink_to(".g", target_is_directory=False)

    c = Config()
    c.command_handler_work_dir = t
    jc = JobConfig(JobType.copr_build, [], JobTriggerType.pull_request, {})
    j = JobHandler(c, jc, Event(JobTriggerType.pull_request))

    j._clean_workplace()

    assert len(list(t.iterdir())) == 0
Пример #6
0
def packit_base(ctx, debug, fas_user, keytab):
    """Integrate upstream open source projects into Fedora operating system."""
    c = Config.get_service_config()
    c.debug = debug or c.debug
    c.fas_user = fas_user or c.fas_user
    c.keytab_path = keytab or c.keytab_path
    ctx.obj = c
    if ctx.obj.debug:
        set_logging(level=logging.DEBUG)
        logger.debug("logging set to DEBUG")
    else:
        set_logging(level=logging.INFO)
        logger.debug("logging set to INFO")
Пример #7
0
    def test_parse_pr(self, pull_request):
        event_object = Parser.parse_event(pull_request)

        assert isinstance(event_object, PullRequestEvent)
        assert event_object.trigger == JobTriggerType.pull_request
        assert event_object.action == PullRequestAction.opened
        assert event_object.pr_id == 342
        assert event_object.base_repo_namespace == "packit-service"
        assert event_object.base_repo_name == "packit"
        assert event_object.base_ref == "528b803be6f93e19ca4130bf4976f2800a3004c4"
        assert event_object.target_repo == "packit-service/packit"
        assert event_object.https_url == "https://github.com/packit-service/packit"
        assert event_object.commit_sha == "528b803be6f93e19ca4130bf4976f2800a3004c4"

        def _get_f_c(*args, **kwargs):
            raise FileNotFoundError()

        flexmock(GithubProject, get_file_content=_get_f_c)
        flexmock(Config, get_service_config=Config())
        assert event_object.get_package_config() is None
Пример #8
0
    def get_testing_farm_check() -> str:
        config = Config.get_service_config()
        if config.deployment == Deployment.prod:
            return PACKIT_PROD_TESTING_FARM_CHECK

        return PACKIT_STG_TESTING_FARM_CHECK
Пример #9
0
    def get_build_check() -> str:
        config = Config.get_service_config()
        if config.deployment == Deployment.prod:
            return PACKIT_PROD_CHECK

        return PACKIT_STG_CHECK
Пример #10
0
 def config(self):
     if self._config is None:
         self._config = Config.get_service_config()
     return self._config
Пример #11
0
from flask import Flask, abort, request, jsonify

from packit.utils import set_logging
from packit_service.celerizer import celery_app
from packit_service.config import Config


class PackitWebhookReceiver(Flask):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        set_logging(level=logging.DEBUG)


app = PackitWebhookReceiver(__name__)
config = Config.get_service_config()
logger = logging.getLogger("packit_service")


@app.route("/healthz", methods=["GET", "HEAD", "POST"])
def get_health():
    # TODO: add some interesting stats here
    return jsonify({"msg": "We are healthy!"})


@app.route("/webhooks/github", methods=["POST"])
def github_webhook():
    msg = request.get_json()

    if not msg:
        logger.debug("/webhooks/github: we haven't received any JSON data.")
Пример #12
0
def test_parse_missing(service_config_missing):
    with pytest.raises(PackitInvalidConfigException):
        Config.get_from_dict(service_config_missing)
Пример #13
0
def test_parse_valid(service_config_valid):
    config = Config.get_from_dict(service_config_valid)
    assert config.deployment == Deployment("prod")