Adding repository and source code components to a blueprint
A repository is used by Amazon CodeCatalyst to store code. The repository takes a name as an input. Most components are stored in a repository, such as source code files, workflows, and other components like managed development environments (MDE). The source repository component also exports components used for managing files and static assets. Repositories have name constraints. For more information, see Store and collaborate on code with source repositories in CodeCatalyst.
const repository = new SourceRepository(this, { title: 'my-new-repository-title', });
To import Amazon CodeCatalyst blueprints repository and source code components
In your blueprint.ts
file, add the following:
import {...} from '@caws-blueprint-component/caws-source-repositories'
Topics
Adding a file
You can write a text file to a repository with the SourceFile
construct. The
operation is one of the most common use cases and takes a repository, a filepath, and text
contents. If the file path doesn't exist within a repository, the component creates all the
required folders.
new SourceFile(repository, `path/to/my/file/in/repo/file.txt`, 'my file contents');
Note
If you write two files to the same location within the same repository, the most recent implementation overwrites the previous one. You can use the feature to layer generated code, and it's especially useful for extending over the code that the custom blueprints may have generated.
Adding a generic file
You can write arbitrary bits to your repository. You can read from a buffer and use the File
construct.
new File(repository, `path/to/my/file/in/repo/file.img`, new Buffer(...)); new File(repository, `path/to/my/file/in/repo/new-img.img`, new StaticAsset('path/to/image.png').content());
Copying files
You can get started with generated code by copying and pasting starter code and then
generating more code on top of that base. Place the code inside the static-assets
directory, and then target that code with the StaticAsset
construct. The path in
this case always begins at the root of the static-assets
directory.
const starterCode = new StaticAsset('path/to/file/file.txt') const starterCodeText = new StaticAsset('path/to/file/file.txt').toString() const starterCodeRawContent = new StaticAsset('path/to/image/hello.png').content() const starterCodePath = new StaticAsset('path/to/image/hello.png').path() // starterCodePath is equal to 'path/to/image/hello.png'
A subclass of StaticAsset
is SubstitutionAsset
. The subclass
functions exactly the same, but instead you can run a mustache substitution over the file
instead. It can be useful for performing copy-and-replace style generation.
Static asset substitution uses a mustache templating engine to render the static files that
are seeded into the generated source repository. Mustache templating rules are applied during the
rendering, which means that all values are HTML-encoded by default. To render unescaped HTML, use
the triple mustache syntax {{{name}}}
. For more information, see the
mustache templating
rules
Note
Running a substitute over files that aren't text-interpretable can produce errors.
const starterCodeText = new SubstitionAsset('path/to/file/file.txt').subsitite({ 'my_variable': 'subbed value1', 'another_variable': 'subbed value2' })
Targeting multiple files
Static assets support glob targeting through a static function on StaticAsset
and its subclasses called
findAll(...)
, which returns a list of static assets preloaded with their paths, contents, and more. You can chain
the list with File
constructions to copy and paste contents in the static-assets
directory.
new File(repository, `path/to/my/file/in/repo/file.img`, new Buffer(...)); new File(repository, `path/to/my/file/in/repo/new-img.img`, new StaticAsset('path/to/image.png').content());
Creating a new repository and adding files
You can use a repository component to create a new repository in a generated project. You can then add files or workflows to the created repository.
import { SourceRepository } from '@amazon-codecatalyst/codecatalyst-source-repositories'; ... const repository = new SourceRepository(this, { title: 'myRepo' });
The following example shows how to add files and workflows to an existing repository:
import { SourceFile } from '@amazon-codecatalyst/codecatalyst-source-repositories'; import { Workflow } from '@amazon-codecatalyst/codecatalyst-workflows'; ... new SourceFile(repository, 'README.md', 'This is the content of my readme'); new Workflow(this, repository, {/**...workflowDefinition...**/});
Combining the two pieces of code generates a single repository named
myRepo
with a source file README.md
and a CodeCatalyst
workflow at the root.