Exemplo n.º 1
0
def create_approval(project_config_file, env):
    env = create_approval_environment_variables(env)
    with open(project_config_file) as json_data_file:
        project_data = load_project_configuration(json_data_file)

        if env["artifact_sha256"] is None:
            src_commit = commit_for_commitish(repo_at(env["repo_path"]),
                                              env["target_src_commit"])
            response = get_artifacts_for_commit(env["host"], env["api_token"],
                                                project_data, src_commit)
            env["artifact_sha256"] = latest_artifact_for_commit(response)
            print(
                f"Found artifact {env['artifact_sha256']} as latest artifact for source commit {env['target_src_commit']}"
            )

        commit_list = list_commits_between(
            repo_at(env["repo_path"]),
            target_commit=env["target_src_commit"],
            base_commit=env["base_src_commit"])

        approval_json = build_approval_json(
            artifact_sha256=env["artifact_sha256"],
            description=env["description"],
            is_approved=env["is_externally_approved"],
            src_commit_list=commit_list)

        url = ApiSchema.url_for_approvals(env["host"], project_data)
        http_post_payload(url, approval_json, env["api_token"])
Exemplo n.º 2
0
def test_post_dry_run_doesnt_call(mocker, capsys):
    requests = mocker.patch('cdb.http.req')

    with silent(capsys), dry_run({}):
        http_post_payload("https://www.example.com", {}, "")

    requests.post.assert_not_called()
Exemplo n.º 3
0
def test_no_retries_when_http_call_is_not_503(capsys):
    url, payload, api_token = stub_http_503('POST', 0)

    with retry_backoff_factor(0.001):
        http_post_payload(url, payload, api_token)

    assert len(responses.calls) == 1
    verify_approval(capsys)
Exemplo n.º 4
0
def test_503_post_retries_5_times_then_raises_HttpRetryExhausted(capsys):
    url, payload, api_token = stub_http_503('POST', 1 + MAX_RETRY_COUNT)

    with retry_backoff_factor(0.001), raises(HttpRetryExhausted) as exc_info:
        http_post_payload(url, payload, api_token)

    assert exc_info.value.url() == url
    assert len(responses.calls) == 1 + MAX_RETRY_COUNT
    verify_approval(capsys)
def create_deployment(project_file):
    # Todo: make this smoother
    set_artifact_sha_env_variable_from_file_or_image()
    payload = create_deployment_payload()

    with open(project_file) as json_data_file:
        project_data = load_project_configuration(json_data_file)
        url = ApiSchema.url_for_deployments(get_host(), project_data)
        http_post_payload(url, payload, get_api_token())
Exemplo n.º 6
0
 def __call__(self):
     payload = {
         "artifact_sha256": self.fingerprint.sha,
         "build_url": self.ci_build_url.value,
         "description": self.description.value,
         "environment": self.environment.value,
         "user_data": self.user_data.value
     }
     url = ApiSchema.url_for_deployments(self.host.value, self.merkelypipe)
     http_post_payload(url, payload, self.api_token.value)
     return 'Posting', url, payload
Exemplo n.º 7
0
def test_post_stops_retrying_when_non_503_and_returns_None(capsys):
    url, payload, api_token = stub_http_503('POST', 1 + 1)

    with retry_backoff_factor(0.001):
        response = http_post_payload(url, payload, api_token)

    assert response is None
    assert len(responses.calls) == 1 + 1 + 1
    verify_approval(capsys)
Exemplo n.º 8
0
def create_release(project_config_file):
    env = create_release_environment_variables()
    with open(project_config_file) as json_data_file:
        project_data = load_project_configuration(json_data_file)

        if env["artifact_sha"] is None:
            src_commit = commit_for_commitish(repo_at(env["repo_path"]),
                                              env["target_src_commit"])
            response = get_artifacts_for_commit(env["host"], env["api_token"],
                                                project_data, src_commit)
            env["artifact_sha"] = latest_artifact_for_commit(response)
            print(
                f"Found artifact {env['artifact_sha']} as latest artifact for source commit {env['target_src_commit']}"
            )

        commit_list = list_commits_between(repo_at(env["repo_path"]),
                                           env["target_src_commit"],
                                           env["base_src_commit"])
        release_json = build_release_json(env["artifact_sha"],
                                          env["description"], commit_list)
        url = ApiSchema.url_for_releases(env["host"], project_data)
        http_post_payload(url, release_json, env["api_token"])
Exemplo n.º 9
0
 def __call__(self):
     commit_list = list_commits_between(repo_at(self.src_repo_root.value),
                                        self.newest_src_commitish.value,
                                        self.oldest_src_commitish.value)
     payload = {
         "artifact_sha256":
         self.fingerprint.sha,
         "description":
         self.description.value,
         "src_commit_list":
         commit_list,
         "user_data":
         self.user_data.value,
         "approvals": [{
             "state": self.approval_state(),
             "comment": self.description.value,
             "approved_by": "External",
             "approval_url": "undefined"
         }]
     }
     url = ApiSchema.url_for_approvals(self.host.value, self.merkelypipe)
     http_post_payload(url, payload, self.api_token.value)
     return 'Posting', url, payload