%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc CodeBuild %% %% CodeBuild is a fully managed build service in the cloud. %% %% CodeBuild compiles your source code, runs unit tests, and produces %% artifacts that are ready to deploy. CodeBuild eliminates the need to %% provision, manage, and scale your own build servers. It provides %% prepackaged build environments for the most popular programming languages %% and build tools, such as Apache Maven, Gradle, and more. You can also %% fully customize build environments in CodeBuild to use your own build %% tools. CodeBuild scales automatically to meet peak build requests. You pay %% only for the build time you consume. For more information about CodeBuild, %% see the CodeBuild User Guide. -module(aws_codebuild). -export([batch_delete_builds/2, batch_delete_builds/3, batch_get_build_batches/2, batch_get_build_batches/3, batch_get_builds/2, batch_get_builds/3, batch_get_projects/2, batch_get_projects/3, batch_get_report_groups/2, batch_get_report_groups/3, batch_get_reports/2, batch_get_reports/3, create_project/2, create_project/3, create_report_group/2, create_report_group/3, create_webhook/2, create_webhook/3, delete_build_batch/2, delete_build_batch/3, delete_project/2, delete_project/3, delete_report/2, delete_report/3, delete_report_group/2, delete_report_group/3, delete_resource_policy/2, delete_resource_policy/3, delete_source_credentials/2, delete_source_credentials/3, delete_webhook/2, delete_webhook/3, describe_code_coverages/2, describe_code_coverages/3, describe_test_cases/2, describe_test_cases/3, get_report_group_trend/2, get_report_group_trend/3, get_resource_policy/2, get_resource_policy/3, import_source_credentials/2, import_source_credentials/3, invalidate_project_cache/2, invalidate_project_cache/3, list_build_batches/2, list_build_batches/3, list_build_batches_for_project/2, list_build_batches_for_project/3, list_builds/2, list_builds/3, list_builds_for_project/2, list_builds_for_project/3, list_curated_environment_images/2, list_curated_environment_images/3, list_projects/2, list_projects/3, list_report_groups/2, list_report_groups/3, list_reports/2, list_reports/3, list_reports_for_report_group/2, list_reports_for_report_group/3, list_shared_projects/2, list_shared_projects/3, list_shared_report_groups/2, list_shared_report_groups/3, list_source_credentials/2, list_source_credentials/3, put_resource_policy/2, put_resource_policy/3, retry_build/2, retry_build/3, retry_build_batch/2, retry_build_batch/3, start_build/2, start_build/3, start_build_batch/2, start_build_batch/3, stop_build/2, stop_build/3, stop_build_batch/2, stop_build_batch/3, update_project/2, update_project/3, update_project_visibility/2, update_project_visibility/3, update_report_group/2, update_report_group/3, update_webhook/2, update_webhook/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Deletes one or more builds. batch_delete_builds(Client, Input) when is_map(Client), is_map(Input) -> batch_delete_builds(Client, Input, []). batch_delete_builds(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"BatchDeleteBuilds">>, Input, Options). %% @doc Retrieves information about one or more batch builds. batch_get_build_batches(Client, Input) when is_map(Client), is_map(Input) -> batch_get_build_batches(Client, Input, []). batch_get_build_batches(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"BatchGetBuildBatches">>, Input, Options). %% @doc Gets information about one or more builds. batch_get_builds(Client, Input) when is_map(Client), is_map(Input) -> batch_get_builds(Client, Input, []). batch_get_builds(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"BatchGetBuilds">>, Input, Options). %% @doc Gets information about one or more build projects. batch_get_projects(Client, Input) when is_map(Client), is_map(Input) -> batch_get_projects(Client, Input, []). batch_get_projects(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"BatchGetProjects">>, Input, Options). %% @doc Returns an array of report groups. batch_get_report_groups(Client, Input) when is_map(Client), is_map(Input) -> batch_get_report_groups(Client, Input, []). batch_get_report_groups(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"BatchGetReportGroups">>, Input, Options). %% @doc Returns an array of reports. batch_get_reports(Client, Input) when is_map(Client), is_map(Input) -> batch_get_reports(Client, Input, []). batch_get_reports(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"BatchGetReports">>, Input, Options). %% @doc Creates a build project. create_project(Client, Input) when is_map(Client), is_map(Input) -> create_project(Client, Input, []). create_project(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateProject">>, Input, Options). %% @doc Creates a report group. %% %% A report group contains a collection of reports. create_report_group(Client, Input) when is_map(Client), is_map(Input) -> create_report_group(Client, Input, []). create_report_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateReportGroup">>, Input, Options). %% @doc For an existing CodeBuild build project that has its source code %% stored in a GitHub or Bitbucket repository, enables CodeBuild to start %% rebuilding the source code every time a code change is pushed to the %% repository. %% %% If you enable webhooks for an CodeBuild project, and the project is used %% as a build step in CodePipeline, then two identical builds are created for %% each commit. One build is triggered through webhooks, and one through %% CodePipeline. Because billing is on a per-build basis, you are billed for %% both builds. Therefore, if you are using CodePipeline, we recommend that %% you disable webhooks in CodeBuild. In the CodeBuild console, clear the %% Webhook box. For more information, see step 5 in Change a Build %% Project's Settings. create_webhook(Client, Input) when is_map(Client), is_map(Input) -> create_webhook(Client, Input, []). create_webhook(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateWebhook">>, Input, Options). %% @doc Deletes a batch build. delete_build_batch(Client, Input) when is_map(Client), is_map(Input) -> delete_build_batch(Client, Input, []). delete_build_batch(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteBuildBatch">>, Input, Options). %% @doc Deletes a build project. %% %% When you delete a project, its builds are not deleted. delete_project(Client, Input) when is_map(Client), is_map(Input) -> delete_project(Client, Input, []). delete_project(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteProject">>, Input, Options). %% @doc Deletes a report. delete_report(Client, Input) when is_map(Client), is_map(Input) -> delete_report(Client, Input, []). delete_report(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteReport">>, Input, Options). %% @doc Deletes a report group. %% %% Before you delete a report group, you must delete its reports. delete_report_group(Client, Input) when is_map(Client), is_map(Input) -> delete_report_group(Client, Input, []). delete_report_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteReportGroup">>, Input, Options). %% @doc Deletes a resource policy that is identified by its resource ARN. delete_resource_policy(Client, Input) when is_map(Client), is_map(Input) -> delete_resource_policy(Client, Input, []). delete_resource_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteResourcePolicy">>, Input, Options). %% @doc Deletes a set of GitHub, GitHub Enterprise, or Bitbucket source %% credentials. delete_source_credentials(Client, Input) when is_map(Client), is_map(Input) -> delete_source_credentials(Client, Input, []). delete_source_credentials(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteSourceCredentials">>, Input, Options). %% @doc For an existing CodeBuild build project that has its source code %% stored in a GitHub or Bitbucket repository, stops CodeBuild from %% rebuilding the source code every time a code change is pushed to the %% repository. delete_webhook(Client, Input) when is_map(Client), is_map(Input) -> delete_webhook(Client, Input, []). delete_webhook(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteWebhook">>, Input, Options). %% @doc Retrieves one or more code coverage reports. describe_code_coverages(Client, Input) when is_map(Client), is_map(Input) -> describe_code_coverages(Client, Input, []). describe_code_coverages(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeCodeCoverages">>, Input, Options). %% @doc Returns a list of details about test cases for a report. describe_test_cases(Client, Input) when is_map(Client), is_map(Input) -> describe_test_cases(Client, Input, []). describe_test_cases(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeTestCases">>, Input, Options). %% @doc Analyzes and accumulates test report values for the specified test %% reports. get_report_group_trend(Client, Input) when is_map(Client), is_map(Input) -> get_report_group_trend(Client, Input, []). get_report_group_trend(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetReportGroupTrend">>, Input, Options). %% @doc Gets a resource policy that is identified by its resource ARN. get_resource_policy(Client, Input) when is_map(Client), is_map(Input) -> get_resource_policy(Client, Input, []). get_resource_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetResourcePolicy">>, Input, Options). %% @doc Imports the source repository credentials for an CodeBuild project %% that has its source code stored in a GitHub, GitHub Enterprise, or %% Bitbucket repository. import_source_credentials(Client, Input) when is_map(Client), is_map(Input) -> import_source_credentials(Client, Input, []). import_source_credentials(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ImportSourceCredentials">>, Input, Options). %% @doc Resets the cache for a project. invalidate_project_cache(Client, Input) when is_map(Client), is_map(Input) -> invalidate_project_cache(Client, Input, []). invalidate_project_cache(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"InvalidateProjectCache">>, Input, Options). %% @doc Retrieves the identifiers of your build batches in the current %% region. list_build_batches(Client, Input) when is_map(Client), is_map(Input) -> list_build_batches(Client, Input, []). list_build_batches(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListBuildBatches">>, Input, Options). %% @doc Retrieves the identifiers of the build batches for a specific %% project. list_build_batches_for_project(Client, Input) when is_map(Client), is_map(Input) -> list_build_batches_for_project(Client, Input, []). list_build_batches_for_project(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListBuildBatchesForProject">>, Input, Options). %% @doc Gets a list of build IDs, with each build ID representing a single %% build. list_builds(Client, Input) when is_map(Client), is_map(Input) -> list_builds(Client, Input, []). list_builds(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListBuilds">>, Input, Options). %% @doc Gets a list of build identifiers for the specified build project, %% with each build identifier representing a single build. list_builds_for_project(Client, Input) when is_map(Client), is_map(Input) -> list_builds_for_project(Client, Input, []). list_builds_for_project(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListBuildsForProject">>, Input, Options). %% @doc Gets information about Docker images that are managed by CodeBuild. list_curated_environment_images(Client, Input) when is_map(Client), is_map(Input) -> list_curated_environment_images(Client, Input, []). list_curated_environment_images(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListCuratedEnvironmentImages">>, Input, Options). %% @doc Gets a list of build project names, with each build project name %% representing a single build project. list_projects(Client, Input) when is_map(Client), is_map(Input) -> list_projects(Client, Input, []). list_projects(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListProjects">>, Input, Options). %% @doc Gets a list ARNs for the report groups in the current Amazon Web %% Services account. list_report_groups(Client, Input) when is_map(Client), is_map(Input) -> list_report_groups(Client, Input, []). list_report_groups(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListReportGroups">>, Input, Options). %% @doc Returns a list of ARNs for the reports in the current Amazon Web %% Services account. list_reports(Client, Input) when is_map(Client), is_map(Input) -> list_reports(Client, Input, []). list_reports(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListReports">>, Input, Options). %% @doc Returns a list of ARNs for the reports that belong to a %% `ReportGroup'. list_reports_for_report_group(Client, Input) when is_map(Client), is_map(Input) -> list_reports_for_report_group(Client, Input, []). list_reports_for_report_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListReportsForReportGroup">>, Input, Options). %% @doc Gets a list of projects that are shared with other Amazon Web %% Services accounts or users. list_shared_projects(Client, Input) when is_map(Client), is_map(Input) -> list_shared_projects(Client, Input, []). list_shared_projects(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListSharedProjects">>, Input, Options). %% @doc Gets a list of report groups that are shared with other Amazon Web %% Services accounts or users. list_shared_report_groups(Client, Input) when is_map(Client), is_map(Input) -> list_shared_report_groups(Client, Input, []). list_shared_report_groups(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListSharedReportGroups">>, Input, Options). %% @doc Returns a list of `SourceCredentialsInfo' objects. list_source_credentials(Client, Input) when is_map(Client), is_map(Input) -> list_source_credentials(Client, Input, []). list_source_credentials(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListSourceCredentials">>, Input, Options). %% @doc Stores a resource policy for the ARN of a `Project' or %% `ReportGroup' object. put_resource_policy(Client, Input) when is_map(Client), is_map(Input) -> put_resource_policy(Client, Input, []). put_resource_policy(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"PutResourcePolicy">>, Input, Options). %% @doc Restarts a build. retry_build(Client, Input) when is_map(Client), is_map(Input) -> retry_build(Client, Input, []). retry_build(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RetryBuild">>, Input, Options). %% @doc Restarts a failed batch build. %% %% Only batch builds that have failed can be retried. retry_build_batch(Client, Input) when is_map(Client), is_map(Input) -> retry_build_batch(Client, Input, []). retry_build_batch(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"RetryBuildBatch">>, Input, Options). %% @doc Starts running a build. start_build(Client, Input) when is_map(Client), is_map(Input) -> start_build(Client, Input, []). start_build(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StartBuild">>, Input, Options). %% @doc Starts a batch build for a project. start_build_batch(Client, Input) when is_map(Client), is_map(Input) -> start_build_batch(Client, Input, []). start_build_batch(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StartBuildBatch">>, Input, Options). %% @doc Attempts to stop running a build. stop_build(Client, Input) when is_map(Client), is_map(Input) -> stop_build(Client, Input, []). stop_build(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StopBuild">>, Input, Options). %% @doc Stops a running batch build. stop_build_batch(Client, Input) when is_map(Client), is_map(Input) -> stop_build_batch(Client, Input, []). stop_build_batch(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"StopBuildBatch">>, Input, Options). %% @doc Changes the settings of a build project. update_project(Client, Input) when is_map(Client), is_map(Input) -> update_project(Client, Input, []). update_project(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateProject">>, Input, Options). %% @doc Changes the public visibility for a project. %% %% The project's build results, logs, and artifacts are available to the %% general public. For more information, see Public build projects in the %% CodeBuild User Guide. %% %% The following should be kept in mind when making your projects public: %% %% All of a project's build results, logs, and artifacts, including %% builds that were run when the project was private, are available to the %% general public. %% %% All build logs and artifacts are available to the public. Environment %% variables, source code, and other sensitive information may have been %% output to the build logs and artifacts. You must be careful about what %% information is output to the build logs. Some best practice are: %% %% Do not store sensitive values, especially Amazon Web Services access key %% IDs and secret access keys, in environment variables. We recommend that %% you use an Amazon EC2 Systems Manager Parameter Store or Secrets Manager %% to store sensitive values. %% %% Follow Best practices for using webhooks in the CodeBuild User Guide to %% limit which entities can trigger a build, and do not store the buildspec %% in the project itself, to ensure that your webhooks are as secure as %% possible. %% %% A malicious user can use public builds to distribute malicious artifacts. %% We recommend that you review all pull requests to verify that the pull %% request is a legitimate change. We also recommend that you validate any %% artifacts with their checksums to make sure that the correct artifacts are %% being downloaded. update_project_visibility(Client, Input) when is_map(Client), is_map(Input) -> update_project_visibility(Client, Input, []). update_project_visibility(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateProjectVisibility">>, Input, Options). %% @doc Updates a report group. update_report_group(Client, Input) when is_map(Client), is_map(Input) -> update_report_group(Client, Input, []). update_report_group(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateReportGroup">>, Input, Options). %% @doc Updates the webhook associated with an CodeBuild build project. %% %% If you use Bitbucket for your repository, `rotateSecret' is ignored. update_webhook(Client, Input) when is_map(Client), is_map(Input) -> update_webhook(Client, Input, []). update_webhook(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateWebhook">>, Input, Options). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), binary(), map(), list()) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: map(). request(Client, Action, Input, Options) -> RequestFun = fun() -> do_request(Client, Action, Input, Options) end, aws_request:request(RequestFun, Options). do_request(Client, Action, Input0, Options) -> Client1 = Client#{service => <<"codebuild">>}, Host = build_host(<<"codebuild">>, Client1), URL = build_url(Host, Client1), Headers = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, <<"CodeBuild_20161006.", Action/binary>>} ], Input = Input0, Payload = jsx:encode(Input), SignedHeaders = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload), Response = hackney:request(post, URL, SignedHeaders, Payload, Options), handle_response(Response). handle_response({ok, 200, ResponseHeaders, Client}) -> case hackney:body(Client) of {ok, <<>>} -> {ok, undefined, {200, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body), {ok, Result, {200, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body), {error, Error, {StatusCode, ResponseHeaders, Client}}; handle_response({error, Reason}) -> {error, Reason}. build_host(_EndpointPrefix, #{region := <<"local">>, endpoint := Endpoint}) -> Endpoint; build_host(_EndpointPrefix, #{region := <<"local">>}) -> <<"localhost">>; build_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) -> aws_util:binary_join([EndpointPrefix, Region, Endpoint], <<".">>). build_url(Host, Client) -> Proto = maps:get(proto, Client), Port = maps:get(port, Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).