Options
All
  • Public
  • Public/Protected
  • All
Menu

@pennlabs/kraken

kraken

A cdk library for cdkactions.

Documentation

See Kraken documentation.

Getting started

When creating a new project, do the following:

  • Follow the cdkactions getting started guide to initialize the cdkactions project.
  • Run yarn install @pennlabs/kraken
  • Configure cdkactions (See the following subjections)
  • Finally, run yarn build within the .github/cdk folder and commit your changes.

Django + React Project

Most Penn Labs products follow the mold of a Django project in the backend directory and a React project in the frontend directory.

Since this is a common use-case, kraken provides an LabsApplicationStack that can easily configure the CI for this type of project.

To use an LabsApplicationStack stack, just replace the generated stack with:

new LabsApplicationStack(app, {
  djangoProjectName: 'exampleDjangoProject',
  dockerImageBaseName: 'example-product',
});

This configuration will lint, test, build, publish docker images for, and deploy both the Django project and a React project. The published docker images will be named: $dockerImageBaseName-backend and $dockerImageBaseName-frontend

Different Configuration

If your repo is different from the normal 1 Django and 1 React project per repo, you can utilize the DjangoProject and ReactProject classes. For example, if you had a single Django project with multiple frontends, you could add something like the following inside of the generated Stack:

const workflow = new Workflow(this, 'workflow', {
  name: 'Workflow',
  on: 'push',
});

const django = new DjangoProject(workflow,
  {
    projectName: 'djangoProject',
    path: 'backend',
    imageName: 'project-backend',
  });

const reactOne = new ReactProject(workflow,
  {
    id: 'one',
    path: 'frontendOne',
    imageName: 'project-frontendOne',
  });

const reactTwo = new ReactProject(workflow,
  {
    id: 'two',
    path: 'frontendTwo',
    imageName: 'project-frontendTwo',
  });

new DeployJob(workflow, {},
  {
    needs: [django.publishJobId, reactOne.publishJobId, reactTwo.publishJobId],
  });

This configuration will lint, test, build, publish docker images for the Django project as well as the two React projects and then finally deploy the application.

Generated using TypeDoc