# AWS CodeBuild Construct Library
<!--BEGIN STABILITY BANNER-->---
![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)
![cdk-constructs: Stable](https://img.shields.io/badge/cdk--constructs-stable-success.svg?style=for-the-badge)
---
<!--END STABILITY BANNER-->
AWS CodeBuild is a fully managed continuous integration service that compiles
source code, runs tests, and produces software packages that are ready to
deploy. With CodeBuild, you don’t need to provision, manage, and scale your own
build servers. CodeBuild scales continuously and processes multiple builds
concurrently, so your builds are not left waiting in a queue. You can get
started quickly by using prepackaged build environments, or you can create
custom build environments that use your own build tools. With CodeBuild, you are
charged by the minute for the compute resources you use.
## Installation
Install the module:
```console
$ npm i @aws-cdk/aws-codebuild
```
Import it into your code:
```python
import aws_cdk.aws_codebuild as codebuild
```
The `codebuild.Project` construct represents a build project resource. See the
reference documentation for a comprehensive list of initialization properties,
methods and attributes.
## Source
Build projects are usually associated with a *source*, which is specified via
the `source` property which accepts a class that extends the `Source`
abstract base class.
The default is to have no source associated with the build project;
the `buildSpec` option is required in that case.
Here's a CodeBuild project with no source which simply prints `Hello, CodeBuild!`:
```python
codebuild.Project(self, "MyProject",
build_spec=codebuild.BuildSpec.from_object({
"version": "0.2",
"phases": {
"build": {
"commands": ["echo \"Hello, CodeBuild!\""
]
}
}
})
)
```
### `CodeCommitSource`
Use an AWS CodeCommit repository as the source of this build:
```python
import aws_cdk.aws_codecommit as codecommit
repository = codecommit.Repository(self, "MyRepo", repository_name="foo")
codebuild.Project(self, "MyFirstCodeCommitProject",
source=codebuild.Source.code_commit(repository=repository)
)
```
### `S3Source`
Create a CodeBuild project with an S3 bucket as the source:
```python
bucket = s3.Bucket(self, "MyBucket")
codebuild.Project(self, "MyProject",
source=codebuild.Source.s3(
bucket=bucket,
path="path/to/file.zip"
)
)
```
The CodeBuild role will be granted to read just the given path from the given `bucket`.
### `GitHubSource` and `GitHubEnterpriseSource`
These source types can be used to build code from a GitHub repository.
Example:
```python
git_hub_source = codebuild.Source.git_hub(
owner="awslabs",
repo="aws-cdk",
webhook=True, # optional, default: true if `webhookFilters` were provided, false otherwise
webhook_triggers_batch_build=True, # optional, default is false
webhook_filters=[
codebuild.FilterGroup.in_event_of(codebuild.EventAction.PUSH).and_branch_is("master").and_commit_message_is("the commit message")
]
)
```
To provide GitHub credentials, please either go to AWS CodeBuild Console to connect
or call `ImportSourceCredentials` to persist your personal access token.
Example:
```console
aws codebuild import-source-credentials --server-type GITHUB --auth-type PERSONAL_ACCESS_TOKEN --token <token_value>
```
### `BitBucketSource`
This source type can be used to build code from a BitBucket repository.
```python
bb_source = codebuild.Source.bit_bucket(
owner="owner",
repo="repo"
)
```
### For all Git sources
For all Git sources, you can fetch submodules while cloing git repo.
```python
git_hub_source = codebuild.Source.git_hub(
owner="awslabs",
repo="aws-cdk",
fetch_submodules=True
)
```
## Artifacts
CodeBuild Projects can produce Artifacts and upload them to S3. For example:
```python
# bucket: s3.Bucket
project = codebuild.Project(self, "MyProject",
build_spec=codebuild.BuildSpec.from_object({
"version": "0.2"
}),
artifacts=codebuild.Artifacts.s3(
bucket=bucket,
include_build_id=False,
package_zip=True,
path="another/path",
identifier="AddArtifact1"
)
)
```
If you'd prefer your buildspec to be rendered as YAML in the template,
use the `fromObjectToYaml()` method instead of `fromObject()`.
Because we've not set the `name` property, this example will set the
`overrideArtifactName` parameter, and produce an artifact named as defined in
the Buildspec file, uploaded to an S3 bucket (`bucket`). The path will be
`another/path` and the artifact will be a zipfile.
## CodePipeline
To add a CodeBuild Project as an Action to CodePipeline,
use the `PipelineProject` class instead of `Project`.
It's a simple class that doesn't allow you to specify `sources`,
`secondarySources`, `artifacts` or `secondaryArtifacts`,
as these are handled by setting input and output CodePipeline `Artifact` instances on the Action,
instead of setting them on the Project.
```python
project = codebuild.PipelineProject(self, "Project")
```
For more details, see the readme of the `@aws-cdk/@aws-codepipeline-actions` package.
## Caching
You can save time when your project builds by using a cache. A cache can store reusable pieces of your build environment and use them across multiple builds. Your build project can use one of two types of caching: Amazon S3 or local. In general, S3 caching is a good option for small and intermediate build artifacts that are more expensive to build than to download. Local caching is a good option for large intermediate build artifacts because the cache is immediately available on the build host.
### S3 Caching
With S3 caching, the cache is stored in an S3 bucket which is available
regardless from what CodeBuild instance gets selected to run your CodeBuild job
on. When using S3 caching, you must also add in a `cache` section to your
buildspec which indicates the files to be cached:
```python
# my_caching_bucket: s3.Bucket
codebuild.Project(self, "Project",
source=codebuild.Source.bit_bucket(
owner="awslabs",
repo="aws-cdk"
),
cache=codebuild.Cache.bucket(my_caching_bucket),
# BuildSpec with a 'cache' section necessary for S3 caching. This can
# also come from 'buildspec.yml' in your source.
build_spec=codebuild.BuildSpec.from_object({
"version": "0.2",
"phases": {
"build": {
"commands": ["..."]
}
},
"cache": {
"paths": ["/root/cachedir/**/*"
]
}
})
)
```
Note that two different CodeBuild Projects using the same S3 bucket will *not*
share their cache: each Project will get a unique file in the S3 bucket to store
the cache in.
### Local Caching
With local caching, the cache is stored on the codebuild instance itself. This
is simple, cheap and fast, but CodeBuild cannot guarantee a reuse of instance
and hence cannot guarantee cache hits. For example, when a build starts and
caches files locally, if two subsequent builds start at the same time afterwards
only one of those builds would get the cache. Three different cache modes are
supported, which can be turned on individually.
* `LocalCacheMode.SOURCE` caches Git metadata for primary and secondary sources.
* `LocalCacheMode.DOCKER_LAYER` caches existing Docker layers.
* `LocalCacheMode.CUSTOM` caches directories you specify in the buildspec file.
```python
codebuild.Project(self, "Project",
source=codebuild.Source.git_hub_enterprise(
https_clone_url="https://my-github-enterprise.com/owner/repo"
),
# Enable Docker AND custom caching
cache=codebuild.Cache.local(codebuild.LocalCacheMode.DOCKER_LAYER, codebuild.LocalCacheMode.CUSTOM),
# BuildSpec with a 'cache' section necessary for 'CUSTOM' caching. This can
# also come from 'buildspec.yml' in your source.
build_spec=codebuild.BuildSpec.from_object({
"version": "0.2",
"phases": {
"build": {
"commands": ["..."]
}
},
"cache": {
"paths": ["/root/cachedir/**/*"
]
}
})
)
```
## Environment
By default, projects use a small instance with an Ubuntu 18.04 image. You
can use the `environment` property to customize the build environment:
* `buildImage` defines the Docker image used. See [Images](#images) below for
details on how to define build images.
* `certificate` defines the location of a PEM encoded certificate to import.
* `computeType` defines the instance type used for the build.
* `privileged` can be set to `true` to allow privileged access.
* `environmentVariables` can be set at this level (and also at the project
level).
## Images
The CodeBuild library supports both Linux and Windows images via the
`LinuxBuildImage` (or `LinuxArmBuildImage`), and `WindowsBuildImage` classes, respectively.
You can specify one of the predefined Windows/Linux images by using one
of the constants such as `WindowsBuildImage.WIN_SERVER_CORE_2019_BASE`,
`WindowsBuildImage.WINDOWS_BASE_2_0`, `LinuxBuildImage.STANDARD_2_0`, or
`LinuxArmBuildImage.AMAZON_LINUX_2_ARM`.
Alternatively, you can specify a custom image using one of the static methods on
`LinuxBuildImage`:
* `LinuxBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }])` to reference an image in any public or private Docker registry.
* `LinuxBuildImage.fromEcrRepository(repo[, tag])` to reference an image available in an
ECR repository.
* `LinuxBuildImage.fromAsset(parent, id, props)` to use an image created from a
local asset.
* `LinuxBuildImage.fromCodeBuildImageId(id)` to reference a pre-defined, CodeBuild-provided Docker image.
or one of the corresponding methods on `WindowsBuildImage`:
* `WindowsBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }, imageType])`
* `WindowsBuildImage.fromEcrRepository(repo[, tag, imageType])`
* `WindowsBuildImage.fromAsset(parent, id, props, [, imageType])`
or one of the corresponding methods on `LinuxArmBuildImage`:
* `LinuxArmBuildImage.fromEcrRepository(repo[, tag])`
Note that the `WindowsBuildImage` version of the static methods accepts an optional parameter of type `WindowsImageType`,
which can be either `WindowsImageType.STANDARD`, the default, or `WindowsImageType.SERVER_2019`:
```python
# ecr_repository: ecr.Repository
codebuild.Project(self, "Project",
environment=codebuild.BuildEnvironment(
build_image=codebuild.WindowsBuildImage.from_ecr_repository(ecr_repository, "v1.0", codebuild.WindowsImageType.SERVER_2019),
# optional certificate to include in the build image
certificate=codebuild.BuildEnvironmentCertificate(
bucket=s3.Bucket.from_bucket_name(self, "Bucket", "my-bucket"),
object_key="path/to/cert.pem"
)
)
)
```
The following example shows how to define an image from a Docker asset:
```python
environment=codebuild.BuildEnvironment(
build_image=codebuild.LinuxBuildImage.from_asset(self, "MyImage",
directory=path.join(__dirname, "demo-image")
)
)
```
The following example shows how to define an image from an ECR repository:
```python
environment=codebuild.BuildEnvironment(
build_image=codebuild.LinuxBuildImage.from_ecr_repository(ecr_repository, "v1.0")
)
```
The following example shows how to define an image from a private docker registry:
```python
environment=codebuild.BuildEnvironment(
build_image=codebuild.LinuxBuildImage.from_docker_registry("my-registry/my-repo",
secrets_manager_credentials=secrets
)
)
```
### GPU images
The class `LinuxGpuBuildImage` contains constants for working with
[AWS Deep Learning Container images](https://aws.amazon.com/releasenotes/available-deep-learning-containers-images):
```python
codebuild.Project(self, "Project",
environment=codebuild.BuildEnvironment(
build_image=codebuild.LinuxGpuBuildImage.DLC_TENSORFLOW_2_1_0_INFERENCE
)
)
```
One complication is that the repositories for the DLC images are in
different accounts in different AWS regions.
In most cases, the CDK will handle providing the correct account for you;
in rare cases (for example, deploying to new regions)
where our information might be out of date,
you can always specify the account
(along with the repository name and tag)
explicitly using the `awsDeepLearningContainersImage` method:
```python
codebuild.Project(self, "Project",
environment=codebuild.BuildEnvironment(
build_image=codebuild.LinuxGpuBuildImage.aws_deep_learning_containers_image("tensorflow-inference", "2.1.0-gpu-py36-cu101-ubuntu18.04", "123456789012")
)
)
```
Alternatively, you can reference an image available in an ECR repository using the `LinuxGpuBuildImage.fromEcrRepository(repo[, tag])` method.
## Logs
CodeBuild lets you specify an S3 Bucket, CloudWatch Log Group or both to receive logs from your projects.
By default, logs will go to cloudwatch.
### CloudWatch Logs Example
```python
codebuild.Project(self, "Project",
logging=codebuild.LoggingOptions(
cloud_watch=codebuild.CloudWatchLoggingOptions(
log_group=logs.LogGroup(self, "MyLogGroup")
)
)
)
```
### S3 Logs Example
```python
codebuild.Project(self, "Project",
logging=codebuild.LoggingOptions(
s3=codebuild.S3LoggingOptions(
bucket=s3.Bucket(self, "LogBucket")
)
)
)
```
## Credentials
CodeBuild allows you to store credentials used when communicating with various sources,
like GitHub:
```python
codebuild.GitHubSourceCredentials(self, "CodeBuildGitHubCreds",
access_token=SecretValue.secrets_manager("my-token")
)
```
and BitBucket:
```python
codebuild.BitBucketSourceCredentials(self, "CodeBuildBitBucketCreds",
username=SecretValue.secrets_manager("my-bitbucket-creds", json_field="username"),
password=SecretValue.secrets_manager("my-bitbucket-creds", json_field="password")
)
```
**Note**: the credentials are global to a given account in a given region -
they are not defined per CodeBuild project.
CodeBuild only allows storing a single credential of a given type
(GitHub, GitHub Enterprise or BitBucket)
in a given account in a given region -
any attempt to save more than one will result in an error.
You can use the [`list-source-credentials` AWS CLI operation](https://docs.aws.amazon.com/cli/latest/reference/codebuild/list-source-credentials.html)
to inspect what credentials are stored in your account.
## Test reports
You can specify a test report in your buildspec:
```python
project = codebuild.Project(self, "Project",
build_spec=codebuild.BuildSpec.from_object({
# ...
"reports": {
"my_report": {
"files": "**/*",
"base-directory": "build/test-results"
}
}
})
)
```
This will create a new test report group,
with the name `<ProjectName>-myReport`.
The project's role in the CDK will always be granted permissions to create and use report groups
with names starting with the project's name;
if you'd rather not have those permissions added,
you can opt out of it when creating the project:
```python
# source: codebuild.Source
project = codebuild.Project(self, "Project",
source=source,
grant_report_group_permissions=False
)
```
Alternatively, you can specify an ARN of an existing resource group,
instead of a simple name, in your buildspec:
```python
# source: codebuild.Source
# create a new ReportGroup
report_group = codebuild.ReportGroup(self, "ReportGroup")
project = codebuild.Project(self, "Project",
source=source,
build_spec=codebuild.BuildSpec.from_object({
# ...
"reports": {
"report_group.report_group_arn": {
"files": "**/*",
"base-directory": "build/test-results"
}
}
})
)
```
If you do that, you need to grant the project's role permissions to write reports to that report group:
```python
# project: codebuild.Project
# report_group: codebuild.ReportGroup
report_group.grant_write(project)
```
For more information on the test reports feature,
see the [AWS CodeBuild documentation](https://docs.aws.amazon.com/codebuild/latest/userguide/test-reporting.html).
## Events
CodeBuild projects can be used either as a source for events or be triggered
by events via an event rule.
### Using Project as an event target
The `@aws-cdk/aws-events-targets.CodeBuildProject` allows using an AWS CodeBuild
project as a AWS CloudWatch event rule target:
```python
# start build when a commit is pushed
import aws_cdk.aws_codecommit as codecommit
import aws_cdk.aws_events_targets as targets
# code_commit_repository: codecommit.Repository
# project: codebuild.Project
code_commit_repository.on_commit("OnCommit",
target=targets.CodeBuildProject(project)
)
```
### Using Project as an event source
To define Amazon CloudWatch event rules for build projects, use one of the `onXxx`
methods:
```python
import aws_cdk.aws_events_targets as targets
# fn: lambda.Function
# project: codebuild.Project
rule = project.on_state_change("BuildStateChange",
target=targets.LambdaFunction(fn)
)
```
## CodeStar Notifications
To define CodeStar Notification rules for Projects, use one of the `notifyOnXxx()` methods.
They are very similar to `onXxx()` methods for CloudWatch events:
```python
import aws_cdk.aws_chatbot as chatbot
# project: codebuild.Project
target = chatbot.SlackChannelConfiguration(self, "MySlackChannel",
slack_channel_configuration_name="YOUR_CHANNEL_NAME",
slack_workspace_id="YOUR_SLACK_WORKSPACE_ID",
slack_channel_id="YOUR_SLACK_CHANNEL_ID"
)
rule = project.notify_on_build_succeeded("NotifyOnBuildSucceeded", target)
```
## Secondary sources and artifacts
CodeBuild Projects can get their sources from multiple places, and produce
multiple outputs. For example:
```python
import aws_cdk.aws_codecommit as codecommit
# repo: codecommit.Repository
# bucket: s3.Bucket
project = codebuild.Project(self, "MyProject",
secondary_sources=[
codebuild.Source.code_commit(
identifier="source2",
repository=repo
)
],
secondary_artifacts=[
codebuild.Artifacts.s3(
identifier="artifact2",
bucket=bucket,
path="some/path",
name="file.zip"
)
]
)
```
Note that the `identifier` property is required for both secondary sources and
artifacts.
The contents of the secondary source is available to the build under the
directory specified by the `CODEBUILD_SRC_DIR_<identifier>` environment variable
(so, `CODEBUILD_SRC_DIR_source2` in the above case).
The secondary artifacts have their own section in the buildspec, under the
regular `artifacts` one. Each secondary artifact has its own section, beginning
with their identifier.
So, a buildspec for the above Project could look something like this:
```python
project = codebuild.Project(self, "MyProject",
# secondary sources and artifacts as above...
build_spec=codebuild.BuildSpec.from_object({
"version": "0.2",
"phases": {
"build": {
"commands": ["cd $CODEBUILD_SRC_DIR_source2", "touch output2.txt"
]
}
},
"artifacts": {
"secondary-artifacts": {
"artifact2": {
"base-directory": "$CODEBUILD_SRC_DIR_source2",
"files": ["output2.txt"
]
}
}
}
})
)
```
### Definition of VPC configuration in CodeBuild Project
Typically, resources in an VPC are not accessible by AWS CodeBuild. To enable
access, you must provide additional VPC-specific configuration information as
part of your CodeBuild project configuration. This includes the VPC ID, the
VPC subnet IDs, and the VPC security group IDs. VPC-enabled builds are then
able to access resources inside your VPC.
For further Information see https://docs.aws.amazon.com/codebuild/latest/userguide/vpc-support.html
**Use Cases**
VPC connectivity from AWS CodeBuild builds makes it possible to:
* Run integration tests from your build against data in an Amazon RDS database that's isolated on a private subnet.
* Query data in an Amazon ElastiCache cluster directly from tests.
* Interact with internal web services hosted on Amazon EC2, Amazon ECS, or services that use internal Elastic Load Balancing.
* Retrieve dependencies from self-hosted, internal artifact repositories, such as PyPI for Python, Maven for Java, and npm for Node.js.
* Access objects in an Amazon S3 bucket configured to allow access through an Amazon VPC endpoint only.
* Query external web services that require fixed IP addresses through the Elastic IP address of the NAT gateway or NAT instance associated with your subnet(s).
Your builds can access any resource that's hosted in your VPC.
**Enable Amazon VPC Access in your CodeBuild Projects**
Pass the VPC when defining your Project, then make sure to
give the CodeBuild's security group the right permissions
to access the resources that it needs by using the
`connections` object.
For example:
```python
# load_balancer: elbv2.ApplicationLoadBalancer
vpc = ec2.Vpc(self, "MyVPC")
project = codebuild.Project(self, "MyProject",
vpc=vpc,
build_spec=codebuild.BuildSpec.from_object({})
)
project.connections.allow_to(load_balancer, ec2.Port.tcp(443))
```
## Project File System Location EFS
Add support for CodeBuild to build on AWS EFS file system mounts using
the new ProjectFileSystemLocation.
The `fileSystemLocations` property which accepts a list `ProjectFileSystemLocation`
as represented by the interface `IFileSystemLocations`.
The only supported file system type is `EFS`.
For example:
```python
codebuild.Project(self, "MyProject",
build_spec=codebuild.BuildSpec.from_object({
"version": "0.2"
}),
file_system_locations=[
codebuild.FileSystemLocation.efs(
identifier="myidentifier2",
location="myclodation.mydnsroot.com:/loc",
mount_point="/media",
mount_options="opts"
)
]
)
```
Here's a CodeBuild project with a simple example that creates a project mounted on AWS EFS:
[Minimal Example](./test/integ.project-file-system-location.ts)
## Batch builds
To enable batch builds you should call `enableBatchBuilds()` on the project instance.
It returns an object containing the batch service role that was created,
or `undefined` if batch builds could not be enabled, for example if the project was imported.
```python
# source: codebuild.Source
project = codebuild.Project(self, "MyProject", source=source)
if project.enable_batch_builds():
print("Batch builds were enabled")
```
## Timeouts
There are two types of timeouts that can be set when creating your Project.
The `timeout` property can be used to set an upper limit on how long your Project is able to run without being marked as completed.
The default is 60 minutes.
An example of overriding the default follows.
```python
codebuild.Project(self, "MyProject",
timeout=Duration.minutes(90)
)
```
The `queuedTimeout` property can be used to set an upper limit on how your Project remains queued to run.
There is no default value for this property.
As an example, to allow your Project to queue for up to thirty (30) minutes before the build fails,
use the following code.
```python
codebuild.Project(self, "MyProject",
queued_timeout=Duration.minutes(30)
)
```
## Limiting concurrency
By default if a new build is triggered it will be run even if there is a previous build already in progress.
It is possible to limit the maximum concurrent builds to value between 1 and the account specific maximum limit.
By default there is no explicit limit.
```python
codebuild.Project(self, "MyProject",
concurrent_build_limit=1
)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/aws/aws-cdk",
"name": "aws-cdk.aws-codebuild",
"maintainer": "",
"docs_url": null,
"requires_python": "~=3.7",
"maintainer_email": "",
"keywords": "",
"author": "Amazon Web Services",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/1a/2a/7e336d389440193da46bbae40e550b6db37374dc5fc5de70696f3f98e70f/aws-cdk.aws-codebuild-1.203.0.tar.gz",
"platform": null,
"description": "# AWS CodeBuild Construct Library\n\n<!--BEGIN STABILITY BANNER-->---\n\n\n![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge)\n\n![cdk-constructs: Stable](https://img.shields.io/badge/cdk--constructs-stable-success.svg?style=for-the-badge)\n\n---\n<!--END STABILITY BANNER-->\n\nAWS CodeBuild is a fully managed continuous integration service that compiles\nsource code, runs tests, and produces software packages that are ready to\ndeploy. With CodeBuild, you don\u2019t need to provision, manage, and scale your own\nbuild servers. CodeBuild scales continuously and processes multiple builds\nconcurrently, so your builds are not left waiting in a queue. You can get\nstarted quickly by using prepackaged build environments, or you can create\ncustom build environments that use your own build tools. With CodeBuild, you are\ncharged by the minute for the compute resources you use.\n\n## Installation\n\nInstall the module:\n\n```console\n$ npm i @aws-cdk/aws-codebuild\n```\n\nImport it into your code:\n\n```python\nimport aws_cdk.aws_codebuild as codebuild\n```\n\nThe `codebuild.Project` construct represents a build project resource. See the\nreference documentation for a comprehensive list of initialization properties,\nmethods and attributes.\n\n## Source\n\nBuild projects are usually associated with a *source*, which is specified via\nthe `source` property which accepts a class that extends the `Source`\nabstract base class.\nThe default is to have no source associated with the build project;\nthe `buildSpec` option is required in that case.\n\nHere's a CodeBuild project with no source which simply prints `Hello, CodeBuild!`:\n\n```python\ncodebuild.Project(self, \"MyProject\",\n build_spec=codebuild.BuildSpec.from_object({\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\"echo \\\"Hello, CodeBuild!\\\"\"\n ]\n }\n }\n })\n)\n```\n\n### `CodeCommitSource`\n\nUse an AWS CodeCommit repository as the source of this build:\n\n```python\nimport aws_cdk.aws_codecommit as codecommit\n\n\nrepository = codecommit.Repository(self, \"MyRepo\", repository_name=\"foo\")\ncodebuild.Project(self, \"MyFirstCodeCommitProject\",\n source=codebuild.Source.code_commit(repository=repository)\n)\n```\n\n### `S3Source`\n\nCreate a CodeBuild project with an S3 bucket as the source:\n\n```python\nbucket = s3.Bucket(self, \"MyBucket\")\n\ncodebuild.Project(self, \"MyProject\",\n source=codebuild.Source.s3(\n bucket=bucket,\n path=\"path/to/file.zip\"\n )\n)\n```\n\nThe CodeBuild role will be granted to read just the given path from the given `bucket`.\n\n### `GitHubSource` and `GitHubEnterpriseSource`\n\nThese source types can be used to build code from a GitHub repository.\nExample:\n\n```python\ngit_hub_source = codebuild.Source.git_hub(\n owner=\"awslabs\",\n repo=\"aws-cdk\",\n webhook=True, # optional, default: true if `webhookFilters` were provided, false otherwise\n webhook_triggers_batch_build=True, # optional, default is false\n webhook_filters=[\n codebuild.FilterGroup.in_event_of(codebuild.EventAction.PUSH).and_branch_is(\"master\").and_commit_message_is(\"the commit message\")\n ]\n)\n```\n\nTo provide GitHub credentials, please either go to AWS CodeBuild Console to connect\nor call `ImportSourceCredentials` to persist your personal access token.\nExample:\n\n```console\naws codebuild import-source-credentials --server-type GITHUB --auth-type PERSONAL_ACCESS_TOKEN --token <token_value>\n```\n\n### `BitBucketSource`\n\nThis source type can be used to build code from a BitBucket repository.\n\n```python\nbb_source = codebuild.Source.bit_bucket(\n owner=\"owner\",\n repo=\"repo\"\n)\n```\n\n### For all Git sources\n\nFor all Git sources, you can fetch submodules while cloing git repo.\n\n```python\ngit_hub_source = codebuild.Source.git_hub(\n owner=\"awslabs\",\n repo=\"aws-cdk\",\n fetch_submodules=True\n)\n```\n\n## Artifacts\n\nCodeBuild Projects can produce Artifacts and upload them to S3. For example:\n\n```python\n# bucket: s3.Bucket\n\n\nproject = codebuild.Project(self, \"MyProject\",\n build_spec=codebuild.BuildSpec.from_object({\n \"version\": \"0.2\"\n }),\n artifacts=codebuild.Artifacts.s3(\n bucket=bucket,\n include_build_id=False,\n package_zip=True,\n path=\"another/path\",\n identifier=\"AddArtifact1\"\n )\n)\n```\n\nIf you'd prefer your buildspec to be rendered as YAML in the template,\nuse the `fromObjectToYaml()` method instead of `fromObject()`.\n\nBecause we've not set the `name` property, this example will set the\n`overrideArtifactName` parameter, and produce an artifact named as defined in\nthe Buildspec file, uploaded to an S3 bucket (`bucket`). The path will be\n`another/path` and the artifact will be a zipfile.\n\n## CodePipeline\n\nTo add a CodeBuild Project as an Action to CodePipeline,\nuse the `PipelineProject` class instead of `Project`.\nIt's a simple class that doesn't allow you to specify `sources`,\n`secondarySources`, `artifacts` or `secondaryArtifacts`,\nas these are handled by setting input and output CodePipeline `Artifact` instances on the Action,\ninstead of setting them on the Project.\n\n```python\nproject = codebuild.PipelineProject(self, \"Project\")\n```\n\nFor more details, see the readme of the `@aws-cdk/@aws-codepipeline-actions` package.\n\n## Caching\n\nYou can save time when your project builds by using a cache. A cache can store reusable pieces of your build environment and use them across multiple builds. Your build project can use one of two types of caching: Amazon S3 or local. In general, S3 caching is a good option for small and intermediate build artifacts that are more expensive to build than to download. Local caching is a good option for large intermediate build artifacts because the cache is immediately available on the build host.\n\n### S3 Caching\n\nWith S3 caching, the cache is stored in an S3 bucket which is available\nregardless from what CodeBuild instance gets selected to run your CodeBuild job\non. When using S3 caching, you must also add in a `cache` section to your\nbuildspec which indicates the files to be cached:\n\n```python\n# my_caching_bucket: s3.Bucket\n\n\ncodebuild.Project(self, \"Project\",\n source=codebuild.Source.bit_bucket(\n owner=\"awslabs\",\n repo=\"aws-cdk\"\n ),\n\n cache=codebuild.Cache.bucket(my_caching_bucket),\n\n # BuildSpec with a 'cache' section necessary for S3 caching. This can\n # also come from 'buildspec.yml' in your source.\n build_spec=codebuild.BuildSpec.from_object({\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\"...\"]\n }\n },\n \"cache\": {\n \"paths\": [\"/root/cachedir/**/*\"\n ]\n }\n })\n)\n```\n\nNote that two different CodeBuild Projects using the same S3 bucket will *not*\nshare their cache: each Project will get a unique file in the S3 bucket to store\nthe cache in.\n\n### Local Caching\n\nWith local caching, the cache is stored on the codebuild instance itself. This\nis simple, cheap and fast, but CodeBuild cannot guarantee a reuse of instance\nand hence cannot guarantee cache hits. For example, when a build starts and\ncaches files locally, if two subsequent builds start at the same time afterwards\nonly one of those builds would get the cache. Three different cache modes are\nsupported, which can be turned on individually.\n\n* `LocalCacheMode.SOURCE` caches Git metadata for primary and secondary sources.\n* `LocalCacheMode.DOCKER_LAYER` caches existing Docker layers.\n* `LocalCacheMode.CUSTOM` caches directories you specify in the buildspec file.\n\n```python\ncodebuild.Project(self, \"Project\",\n source=codebuild.Source.git_hub_enterprise(\n https_clone_url=\"https://my-github-enterprise.com/owner/repo\"\n ),\n\n # Enable Docker AND custom caching\n cache=codebuild.Cache.local(codebuild.LocalCacheMode.DOCKER_LAYER, codebuild.LocalCacheMode.CUSTOM),\n\n # BuildSpec with a 'cache' section necessary for 'CUSTOM' caching. This can\n # also come from 'buildspec.yml' in your source.\n build_spec=codebuild.BuildSpec.from_object({\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\"...\"]\n }\n },\n \"cache\": {\n \"paths\": [\"/root/cachedir/**/*\"\n ]\n }\n })\n)\n```\n\n## Environment\n\nBy default, projects use a small instance with an Ubuntu 18.04 image. You\ncan use the `environment` property to customize the build environment:\n\n* `buildImage` defines the Docker image used. See [Images](#images) below for\n details on how to define build images.\n* `certificate` defines the location of a PEM encoded certificate to import.\n* `computeType` defines the instance type used for the build.\n* `privileged` can be set to `true` to allow privileged access.\n* `environmentVariables` can be set at this level (and also at the project\n level).\n\n## Images\n\nThe CodeBuild library supports both Linux and Windows images via the\n`LinuxBuildImage` (or `LinuxArmBuildImage`), and `WindowsBuildImage` classes, respectively.\n\nYou can specify one of the predefined Windows/Linux images by using one\nof the constants such as `WindowsBuildImage.WIN_SERVER_CORE_2019_BASE`,\n`WindowsBuildImage.WINDOWS_BASE_2_0`, `LinuxBuildImage.STANDARD_2_0`, or\n`LinuxArmBuildImage.AMAZON_LINUX_2_ARM`.\n\nAlternatively, you can specify a custom image using one of the static methods on\n`LinuxBuildImage`:\n\n* `LinuxBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }])` to reference an image in any public or private Docker registry.\n* `LinuxBuildImage.fromEcrRepository(repo[, tag])` to reference an image available in an\n ECR repository.\n* `LinuxBuildImage.fromAsset(parent, id, props)` to use an image created from a\n local asset.\n* `LinuxBuildImage.fromCodeBuildImageId(id)` to reference a pre-defined, CodeBuild-provided Docker image.\n\nor one of the corresponding methods on `WindowsBuildImage`:\n\n* `WindowsBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }, imageType])`\n* `WindowsBuildImage.fromEcrRepository(repo[, tag, imageType])`\n* `WindowsBuildImage.fromAsset(parent, id, props, [, imageType])`\n\nor one of the corresponding methods on `LinuxArmBuildImage`:\n\n* `LinuxArmBuildImage.fromEcrRepository(repo[, tag])`\n\nNote that the `WindowsBuildImage` version of the static methods accepts an optional parameter of type `WindowsImageType`,\nwhich can be either `WindowsImageType.STANDARD`, the default, or `WindowsImageType.SERVER_2019`:\n\n```python\n# ecr_repository: ecr.Repository\n\n\ncodebuild.Project(self, \"Project\",\n environment=codebuild.BuildEnvironment(\n build_image=codebuild.WindowsBuildImage.from_ecr_repository(ecr_repository, \"v1.0\", codebuild.WindowsImageType.SERVER_2019),\n # optional certificate to include in the build image\n certificate=codebuild.BuildEnvironmentCertificate(\n bucket=s3.Bucket.from_bucket_name(self, \"Bucket\", \"my-bucket\"),\n object_key=\"path/to/cert.pem\"\n )\n )\n)\n```\n\nThe following example shows how to define an image from a Docker asset:\n\n```python\nenvironment=codebuild.BuildEnvironment(\n build_image=codebuild.LinuxBuildImage.from_asset(self, \"MyImage\",\n directory=path.join(__dirname, \"demo-image\")\n )\n)\n```\n\nThe following example shows how to define an image from an ECR repository:\n\n```python\nenvironment=codebuild.BuildEnvironment(\n build_image=codebuild.LinuxBuildImage.from_ecr_repository(ecr_repository, \"v1.0\")\n)\n```\n\nThe following example shows how to define an image from a private docker registry:\n\n```python\nenvironment=codebuild.BuildEnvironment(\n build_image=codebuild.LinuxBuildImage.from_docker_registry(\"my-registry/my-repo\",\n secrets_manager_credentials=secrets\n )\n)\n```\n\n### GPU images\n\nThe class `LinuxGpuBuildImage` contains constants for working with\n[AWS Deep Learning Container images](https://aws.amazon.com/releasenotes/available-deep-learning-containers-images):\n\n```python\ncodebuild.Project(self, \"Project\",\n environment=codebuild.BuildEnvironment(\n build_image=codebuild.LinuxGpuBuildImage.DLC_TENSORFLOW_2_1_0_INFERENCE\n )\n)\n```\n\nOne complication is that the repositories for the DLC images are in\ndifferent accounts in different AWS regions.\nIn most cases, the CDK will handle providing the correct account for you;\nin rare cases (for example, deploying to new regions)\nwhere our information might be out of date,\nyou can always specify the account\n(along with the repository name and tag)\nexplicitly using the `awsDeepLearningContainersImage` method:\n\n```python\ncodebuild.Project(self, \"Project\",\n environment=codebuild.BuildEnvironment(\n build_image=codebuild.LinuxGpuBuildImage.aws_deep_learning_containers_image(\"tensorflow-inference\", \"2.1.0-gpu-py36-cu101-ubuntu18.04\", \"123456789012\")\n )\n)\n```\n\nAlternatively, you can reference an image available in an ECR repository using the `LinuxGpuBuildImage.fromEcrRepository(repo[, tag])` method.\n\n## Logs\n\nCodeBuild lets you specify an S3 Bucket, CloudWatch Log Group or both to receive logs from your projects.\n\nBy default, logs will go to cloudwatch.\n\n### CloudWatch Logs Example\n\n```python\ncodebuild.Project(self, \"Project\",\n logging=codebuild.LoggingOptions(\n cloud_watch=codebuild.CloudWatchLoggingOptions(\n log_group=logs.LogGroup(self, \"MyLogGroup\")\n )\n )\n)\n```\n\n### S3 Logs Example\n\n```python\ncodebuild.Project(self, \"Project\",\n logging=codebuild.LoggingOptions(\n s3=codebuild.S3LoggingOptions(\n bucket=s3.Bucket(self, \"LogBucket\")\n )\n )\n)\n```\n\n## Credentials\n\nCodeBuild allows you to store credentials used when communicating with various sources,\nlike GitHub:\n\n```python\ncodebuild.GitHubSourceCredentials(self, \"CodeBuildGitHubCreds\",\n access_token=SecretValue.secrets_manager(\"my-token\")\n)\n```\n\nand BitBucket:\n\n```python\ncodebuild.BitBucketSourceCredentials(self, \"CodeBuildBitBucketCreds\",\n username=SecretValue.secrets_manager(\"my-bitbucket-creds\", json_field=\"username\"),\n password=SecretValue.secrets_manager(\"my-bitbucket-creds\", json_field=\"password\")\n)\n```\n\n**Note**: the credentials are global to a given account in a given region -\nthey are not defined per CodeBuild project.\nCodeBuild only allows storing a single credential of a given type\n(GitHub, GitHub Enterprise or BitBucket)\nin a given account in a given region -\nany attempt to save more than one will result in an error.\nYou can use the [`list-source-credentials` AWS CLI operation](https://docs.aws.amazon.com/cli/latest/reference/codebuild/list-source-credentials.html)\nto inspect what credentials are stored in your account.\n\n## Test reports\n\nYou can specify a test report in your buildspec:\n\n```python\nproject = codebuild.Project(self, \"Project\",\n build_spec=codebuild.BuildSpec.from_object({\n # ...\n \"reports\": {\n \"my_report\": {\n \"files\": \"**/*\",\n \"base-directory\": \"build/test-results\"\n }\n }\n })\n)\n```\n\nThis will create a new test report group,\nwith the name `<ProjectName>-myReport`.\n\nThe project's role in the CDK will always be granted permissions to create and use report groups\nwith names starting with the project's name;\nif you'd rather not have those permissions added,\nyou can opt out of it when creating the project:\n\n```python\n# source: codebuild.Source\n\n\nproject = codebuild.Project(self, \"Project\",\n source=source,\n grant_report_group_permissions=False\n)\n```\n\nAlternatively, you can specify an ARN of an existing resource group,\ninstead of a simple name, in your buildspec:\n\n```python\n# source: codebuild.Source\n\n\n# create a new ReportGroup\nreport_group = codebuild.ReportGroup(self, \"ReportGroup\")\n\nproject = codebuild.Project(self, \"Project\",\n source=source,\n build_spec=codebuild.BuildSpec.from_object({\n # ...\n \"reports\": {\n \"report_group.report_group_arn\": {\n \"files\": \"**/*\",\n \"base-directory\": \"build/test-results\"\n }\n }\n })\n)\n```\n\nIf you do that, you need to grant the project's role permissions to write reports to that report group:\n\n```python\n# project: codebuild.Project\n# report_group: codebuild.ReportGroup\n\n\nreport_group.grant_write(project)\n```\n\nFor more information on the test reports feature,\nsee the [AWS CodeBuild documentation](https://docs.aws.amazon.com/codebuild/latest/userguide/test-reporting.html).\n\n## Events\n\nCodeBuild projects can be used either as a source for events or be triggered\nby events via an event rule.\n\n### Using Project as an event target\n\nThe `@aws-cdk/aws-events-targets.CodeBuildProject` allows using an AWS CodeBuild\nproject as a AWS CloudWatch event rule target:\n\n```python\n# start build when a commit is pushed\nimport aws_cdk.aws_codecommit as codecommit\nimport aws_cdk.aws_events_targets as targets\n\n# code_commit_repository: codecommit.Repository\n# project: codebuild.Project\n\n\ncode_commit_repository.on_commit(\"OnCommit\",\n target=targets.CodeBuildProject(project)\n)\n```\n\n### Using Project as an event source\n\nTo define Amazon CloudWatch event rules for build projects, use one of the `onXxx`\nmethods:\n\n```python\nimport aws_cdk.aws_events_targets as targets\n# fn: lambda.Function\n# project: codebuild.Project\n\n\nrule = project.on_state_change(\"BuildStateChange\",\n target=targets.LambdaFunction(fn)\n)\n```\n\n## CodeStar Notifications\n\nTo define CodeStar Notification rules for Projects, use one of the `notifyOnXxx()` methods.\nThey are very similar to `onXxx()` methods for CloudWatch events:\n\n```python\nimport aws_cdk.aws_chatbot as chatbot\n\n# project: codebuild.Project\n\n\ntarget = chatbot.SlackChannelConfiguration(self, \"MySlackChannel\",\n slack_channel_configuration_name=\"YOUR_CHANNEL_NAME\",\n slack_workspace_id=\"YOUR_SLACK_WORKSPACE_ID\",\n slack_channel_id=\"YOUR_SLACK_CHANNEL_ID\"\n)\n\nrule = project.notify_on_build_succeeded(\"NotifyOnBuildSucceeded\", target)\n```\n\n## Secondary sources and artifacts\n\nCodeBuild Projects can get their sources from multiple places, and produce\nmultiple outputs. For example:\n\n```python\nimport aws_cdk.aws_codecommit as codecommit\n# repo: codecommit.Repository\n# bucket: s3.Bucket\n\n\nproject = codebuild.Project(self, \"MyProject\",\n secondary_sources=[\n codebuild.Source.code_commit(\n identifier=\"source2\",\n repository=repo\n )\n ],\n secondary_artifacts=[\n codebuild.Artifacts.s3(\n identifier=\"artifact2\",\n bucket=bucket,\n path=\"some/path\",\n name=\"file.zip\"\n )\n ]\n)\n```\n\nNote that the `identifier` property is required for both secondary sources and\nartifacts.\n\nThe contents of the secondary source is available to the build under the\ndirectory specified by the `CODEBUILD_SRC_DIR_<identifier>` environment variable\n(so, `CODEBUILD_SRC_DIR_source2` in the above case).\n\nThe secondary artifacts have their own section in the buildspec, under the\nregular `artifacts` one. Each secondary artifact has its own section, beginning\nwith their identifier.\n\nSo, a buildspec for the above Project could look something like this:\n\n```python\nproject = codebuild.Project(self, \"MyProject\",\n # secondary sources and artifacts as above...\n build_spec=codebuild.BuildSpec.from_object({\n \"version\": \"0.2\",\n \"phases\": {\n \"build\": {\n \"commands\": [\"cd $CODEBUILD_SRC_DIR_source2\", \"touch output2.txt\"\n ]\n }\n },\n \"artifacts\": {\n \"secondary-artifacts\": {\n \"artifact2\": {\n \"base-directory\": \"$CODEBUILD_SRC_DIR_source2\",\n \"files\": [\"output2.txt\"\n ]\n }\n }\n }\n })\n)\n```\n\n### Definition of VPC configuration in CodeBuild Project\n\nTypically, resources in an VPC are not accessible by AWS CodeBuild. To enable\naccess, you must provide additional VPC-specific configuration information as\npart of your CodeBuild project configuration. This includes the VPC ID, the\nVPC subnet IDs, and the VPC security group IDs. VPC-enabled builds are then\nable to access resources inside your VPC.\n\nFor further Information see https://docs.aws.amazon.com/codebuild/latest/userguide/vpc-support.html\n\n**Use Cases**\nVPC connectivity from AWS CodeBuild builds makes it possible to:\n\n* Run integration tests from your build against data in an Amazon RDS database that's isolated on a private subnet.\n* Query data in an Amazon ElastiCache cluster directly from tests.\n* Interact with internal web services hosted on Amazon EC2, Amazon ECS, or services that use internal Elastic Load Balancing.\n* Retrieve dependencies from self-hosted, internal artifact repositories, such as PyPI for Python, Maven for Java, and npm for Node.js.\n* Access objects in an Amazon S3 bucket configured to allow access through an Amazon VPC endpoint only.\n* Query external web services that require fixed IP addresses through the Elastic IP address of the NAT gateway or NAT instance associated with your subnet(s).\n\nYour builds can access any resource that's hosted in your VPC.\n\n**Enable Amazon VPC Access in your CodeBuild Projects**\n\nPass the VPC when defining your Project, then make sure to\ngive the CodeBuild's security group the right permissions\nto access the resources that it needs by using the\n`connections` object.\n\nFor example:\n\n```python\n# load_balancer: elbv2.ApplicationLoadBalancer\n\n\nvpc = ec2.Vpc(self, \"MyVPC\")\nproject = codebuild.Project(self, \"MyProject\",\n vpc=vpc,\n build_spec=codebuild.BuildSpec.from_object({})\n)\n\nproject.connections.allow_to(load_balancer, ec2.Port.tcp(443))\n```\n\n## Project File System Location EFS\n\nAdd support for CodeBuild to build on AWS EFS file system mounts using\nthe new ProjectFileSystemLocation.\nThe `fileSystemLocations` property which accepts a list `ProjectFileSystemLocation`\nas represented by the interface `IFileSystemLocations`.\nThe only supported file system type is `EFS`.\n\nFor example:\n\n```python\ncodebuild.Project(self, \"MyProject\",\n build_spec=codebuild.BuildSpec.from_object({\n \"version\": \"0.2\"\n }),\n file_system_locations=[\n codebuild.FileSystemLocation.efs(\n identifier=\"myidentifier2\",\n location=\"myclodation.mydnsroot.com:/loc\",\n mount_point=\"/media\",\n mount_options=\"opts\"\n )\n ]\n)\n```\n\nHere's a CodeBuild project with a simple example that creates a project mounted on AWS EFS:\n\n[Minimal Example](./test/integ.project-file-system-location.ts)\n\n## Batch builds\n\nTo enable batch builds you should call `enableBatchBuilds()` on the project instance.\n\nIt returns an object containing the batch service role that was created,\nor `undefined` if batch builds could not be enabled, for example if the project was imported.\n\n```python\n# source: codebuild.Source\n\n\nproject = codebuild.Project(self, \"MyProject\", source=source)\n\nif project.enable_batch_builds():\n print(\"Batch builds were enabled\")\n```\n\n## Timeouts\n\nThere are two types of timeouts that can be set when creating your Project.\nThe `timeout` property can be used to set an upper limit on how long your Project is able to run without being marked as completed.\nThe default is 60 minutes.\nAn example of overriding the default follows.\n\n```python\ncodebuild.Project(self, \"MyProject\",\n timeout=Duration.minutes(90)\n)\n```\n\nThe `queuedTimeout` property can be used to set an upper limit on how your Project remains queued to run.\nThere is no default value for this property.\nAs an example, to allow your Project to queue for up to thirty (30) minutes before the build fails,\nuse the following code.\n\n```python\ncodebuild.Project(self, \"MyProject\",\n queued_timeout=Duration.minutes(30)\n)\n```\n\n## Limiting concurrency\n\nBy default if a new build is triggered it will be run even if there is a previous build already in progress.\nIt is possible to limit the maximum concurrent builds to value between 1 and the account specific maximum limit.\nBy default there is no explicit limit.\n\n```python\ncodebuild.Project(self, \"MyProject\",\n concurrent_build_limit=1\n)\n```\n\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "The CDK Construct Library for AWS::CodeBuild",
"version": "1.203.0",
"project_urls": {
"Homepage": "https://github.com/aws/aws-cdk",
"Source": "https://github.com/aws/aws-cdk.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "04d59efd8fb2dee5b109d9ee152aab3bd83c66f0c01ad72441edbcb445385674",
"md5": "1dd3fb155f84dd23cb9f38d97e32a081",
"sha256": "3cafaf9c14061286c2f60b30bfd630cb00f328bc027396b637e40ba20efa8b3d"
},
"downloads": -1,
"filename": "aws_cdk.aws_codebuild-1.203.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1dd3fb155f84dd23cb9f38d97e32a081",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "~=3.7",
"size": 604809,
"upload_time": "2023-05-31T22:53:33",
"upload_time_iso_8601": "2023-05-31T22:53:33.516596Z",
"url": "https://files.pythonhosted.org/packages/04/d5/9efd8fb2dee5b109d9ee152aab3bd83c66f0c01ad72441edbcb445385674/aws_cdk.aws_codebuild-1.203.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1a2a7e336d389440193da46bbae40e550b6db37374dc5fc5de70696f3f98e70f",
"md5": "ee6a01a18b555f7153418eeda2f832a1",
"sha256": "9c24b546f5ed4095e62335d874809ee4e6fd547d0fda8548995a260ea0282783"
},
"downloads": -1,
"filename": "aws-cdk.aws-codebuild-1.203.0.tar.gz",
"has_sig": false,
"md5_digest": "ee6a01a18b555f7153418eeda2f832a1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "~=3.7",
"size": 606088,
"upload_time": "2023-05-31T23:01:20",
"upload_time_iso_8601": "2023-05-31T23:01:20.248741Z",
"url": "https://files.pythonhosted.org/packages/1a/2a/7e336d389440193da46bbae40e550b6db37374dc5fc5de70696f3f98e70f/aws-cdk.aws-codebuild-1.203.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-31 23:01:20",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aws",
"github_project": "aws-cdk",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aws-cdk.aws-codebuild"
}