Custom BluePrints in CodeCatalyst – templated projects that empower you to build better software
Tags: cicd, codecatalyst, devops, projen
Published: 2023-11-28 09:52:11

---
title: Custom BluePrints in CodeCatalyst – templated projects that empower you to build better software
published: true
date: 2023-11-28 09:42:59 UTC
tags: CICD,CodeCatalyst,DevOps,projen
canonical_url: https://lockhead.info/index.php/2023/11/28/custom-blueprints-in-codecatalyst-templeted-projects-that-empower-you-to-build-better-software/
---

In this post you will learn how to build a Custom BluePrints in Amazon CodeCatalyst. You will get to know how Custom BluePrints allow you to generate a consistent setup of your projects and CI/CD workflows and how you can leverage this to empower your teams to be compliant with rules and deployment best practices. AWS has announced this today at his annual user conference [AWS re:invent 2023](https://aws.amazon.com/blogs/aws/amazon-codecatalyst-introduces-custom-blueprints-and-a-new-enterprise-tier/) in Las Vegas.

# Custom BluePrints – what they do, why they are there and how you can use them

Custom BluePrints can be seen as “project templates” that you can build and offer to all of your users of a space. As a user of CodeCatalyst you should already be aware of the general concept of a blueprint: It’s a templated project that you can start your software project on.

Custom BluePrints take this concept to a new level: Now you can build BluePrints for your projects!  
And that’s not it: a project can be depended/generated by multiple BluePrints and a project generated from BluePrints can also become a BluePrint!  **yey!**  
You do not start from zero and you are now also abled to add a BluePrint to an existing project.

Think about what this means for you and your organization: You can set up certain default workflows, permissions, dependencies, environments, etc. and apply that to all of your new projects by default, without the need to “touch” anything.

And that’s not “it” – there is more: CodeCatalyst also allows you to “update” projects that have been build from a Custom BluePrint!

Think about the scenerio where you ahve over 20 microservices that all follow the same CI/CD pattern, including governance rules and dependencies. They all have the same dependencies and pre-requisites (e.g. AWS account permissions, environment setups, etc.). Now one of the dependencies has a critical, security relevant defect and you urgently need to upgrade all of these projects…

CodeCatalyst Custom BluePrints enables you to do exactly that with just a few clicks and pull request approvals!

I hope you are curious to look at this new functionality in details now, keep reading!

# The technology behind blue prints – the power of Projen and Code Generation

Custom Blue Prints are powered by [Projen](https://github.com/projen/projen) under the hood – to learn more about Projen, please look [here](https://github.com/projen/projen). Similar to a `projen.rc.ts` you will need to create a `blueprint.ts` file in the `src` folder of your BluePrint project. There you can then define the rules and automations which will be applied when the BluePrint is used as a starting point for a new project. Currently the [Custom BluePrint SDK](https://www.npmjs.com/package/@amazon-codecatalyst/blueprints?activeTab=dependencies) allows you to define Wizard configurations, Workflows, Environments, Source Repositories, Pre-Configured Dev Environments, … Using Projen as an underying technology the team is able to re-generate the code for your project and create a pull request on your behalf for the source repository of your project i there is changes. And this is great!

# Building your first BluePrint

Building your first BluePrint is easy!

## Create your BluePrint project

It starts with creating a new Custom BluePrint project in the CodeCatalyst UI using the BluePrint builder. This one can be accessed from the Space “Settings” page. After going through the wizard, this will create a new project for you in CodeCatalyst. In this project, you can now either checkout the source repository into your local IDE or you can use the DevEnvironments to directly get you started to work on the project.

## Building and Editing Custom BluePrints can be a HIGH RISK

As you are reading this and as the functionality has only just been announced, it might be early – but it is never too early to warn about this:

If you edit a Custom BluePrint and potentially introduce security problems – maybe even unsecure dependencies – you might expose everyone that uses your BluePrint to challenges.

Better set up additional protections for all of your BluePrint projects!

## Edit the sources of your BluePrint Project

Now that you your project is set up, you can start building your own components and parts of your project.

Be cautious to edit `package.json` in your BluePrint project – you can, but it might break some of the integrations. The `typescript` project is set up for you to be able to preview and publish your BluePrint.

The main “sources” of your BluePrint and the definitions will be in the `src/blueprint.ts` file. Initially, the project comes with a simple wizard set up with only a few parameters. It copies only the contents of the `static-assets` directory when being executed.

I’ve not been able yet to try out a lot of the functionalities and possibilities of the SDK, but still I was able to create a custom BluePrint that can be used to deploy a Flutter Web application with a Serverless Backend.

What I found out is that it will be a huge effort to set up the BluePrint in combination with a Wizard. This is _not_ a 4 hour task, we’re rather talking about a week to get started. Further details on this – see the “Testing” section. This might also explain why this functionality is part of the new [Enterprise tier](https://aws.amazon.com/blogs/aws/amazon-codecatalyst-introduces-custom-blueprints-and-a-new-enterprise-tier/) for Amazon CodeCatalyst.

Please read the available options of `package.json`, but to get you started: use `npm run blueprint:synth` or `yarn blueprint:synth` to generate the BluePrint locally.

This will also execute any local unit tests that you have build for your BluePrint.

## Testing your Blue Print locally

Using `npm run blueprint:synth` or `yarn blueprint:synth` will generate the BluePrint bundle locally and execute unit tests. It will generate a version of your project created by the BluePrint in the folder `synth/synth.[options-name]/proposed-bundle/`. This will use the default options you provided.

It is also possible to simulate the wizard adding the `--cache` parameter.

You could also build Unit Tests or SnapShots tests and integrate them into this lifecycle step of the build procedure.

## Publishing your BluePrint to the Space Catalog

Use `npm run blueprint:preview` or `yarn blueprint:preview` to upload a “preview” version of your BluePrint to your CodeCatalyst space. This will make the Custom BluePrint available but not make it available in the catalog yet, so users cannot use it.

It also automatically increases the version number for your BluePrint.

## Testing your Blue Print through the UI

After publishing your BluePrint preview from your local environment, you will now see this preview version within your _Space Settings_. From there, you are able to create a project out of the Preview version of your BluePrint.

Here you will need to test _all options of the wizard_ and in addition to that verify that the customizations that you added have been correctly generated after you went through the wizard.

I have made the experience that a whole testing cycle can take 3-5 minutes – so I really recommend you to look at local unit tests.

After you have finished your tests, you can add a specific version of your BluePrint to the BluePrint catalog. This is currenty only be possible through the UI in the Space Settings.

# Creating (one or many) projects from your BluePrint

Now you are ready to start creating projects from your BluePrint!

Go to the normal “Create Project” screen – after using “Create from Blueprint” you will now have the option sect “Space Blueprints” which is where you will find your newly created BluePrint.

This should now generate your project from your BluePrint and the structure should be as you wanted it to be. ![🙂](https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png)

You can also add additional BluePrints to an existing project – this allows you to incorporate multiple BluePrints in a single project, a combination of multiple “default” project settings.

Please be aware that this will remove manually added or created resources that are part of the BluePrint that you are adding – it will overwrite manual changes that “interfere” with the BluePrints code.

# Upgrading your BluePrint

Upgrading your works similar to creating it – upload a new “Preview” version, add the new version to the catalog.

# Upgrading your projects to a new BluePrint version

You can currently update the used Blue Print vesion for a project by going to the project settings, to the Blue Prints section there and then by loading up one BluePrint. Choosing to upgrade to a different or newer version will generate the proposed changes and make them visible to you before you apply them.

# What’s next for Custom BluePrints?

Oh wow, this is one of the new features that I am most excited about for CodeCatalyst! _There is so much potential!_ I have to explore further the possibility to have multiple BluePrints attached to a project, the possibility to remove a BluePrint from a project, and all of the other things that I didn’t touch yet.

Here’s stuff that I would love to get for Custom BluePrints:

- auto-apply updates to ALL projects that are from the same BluePrint automatically
- share Custom BluePrints with other Spaces
- a Custom BluePrints market place where developers (like me) can put “their” BluePrints in and organizations can “buy” a BluePrint from

I also believe that the team needs to work a bit more on the developer experience when building Custom BluePrints, e.g. by pre-suggesting automated integrated tests (integration or snapshot tests). Publishing a new version to the catalog should also visualize the changes that are going to be added to other projects _before_ you actually publish the new version.

I am a bit disappointed that the “free tier” does not give you the possibility to try out this functionality by being able to add one or two Custom Blue Prints to your space, but maybe this is something that will be possible as soon as the Blueprint SDK is stable.

**What do you think of Custom BluePrints? What are your main wishes? Please reach out to me and let me know!**

Hits: 4