Scaffold Repositories Using Cookiecutter
This GitHub action allows you to quickly scaffold repositories using any selected Cookiecutter Template via Port Actions.
In addition, as cookiecutter is an open source project you can make your own project template, learn more about it here
Example - scaffolding golang templateโ
Follow these steps to get started with the Golang template:
Create the following GitHub action secrets:
ORG_TOKEN
- a PAT (Personal Access Token) with permissions to create repositories;PORT_CLIENT_ID
- Port Client ID learn more;PORT_CLIENT_SECRET
- Port Client Secret learn more;
Install Port's GitHub app by clicking here;
Create a Port blueprint with the following properties:
note
Keep in mind this can be any blueprint you would like and this is just an example
{
"identifier": "microservice",
"title": "Microservice",
"icon": "Microservice",
"schema": {
"properties": {
"description": {
"title": "Description",
"type": "string"
},
"url": {
"title": "URL",
"format": "url",
"type": "string"
},
"readme": {
"title": "README",
"type": "string",
"format": "markdown",
"icon": "Book"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {}
}
- Create Port action using the following JSON definition:
note
Keep in mind that any input that starts with cookiecutter_
will automatically be injected into the cookiecutter action as a variable. He we are using the cookiecutter_app_name
input of the Golang Template
[
{
"identifier": "scaffold",
"title": "Scaffold Golang Microservice",
"icon": "Go",
"userInputs": {
"properties": {
"name": {
"title": "Repo Name",
"type": "string"
},
"cookiecutter_app_name": {
"type": "string",
"title": "Application Name"
}
},
"required": ["name"]
},
"invocationMethod": {
"type": "GITHUB",
"org": "port-cookiecutter-example",
"repo": "gha-templater",
"workflow": "scaffold-golang.yml",
"omitUserInputs": true
},
"trigger": "CREATE",
"description": "Scaffold a new Microservice from a Cookiecutter teplate"
}
]
- Create a workflow file under
.github/workflows/scaffold-golang.yml
with the following content:
on:
workflow_dispatch:
inputs:
port_payload:
required: true
description: "Port's payload, including details for who triggered the action and general context (blueprint, run id, etc...)"
type: string
secrets:
ORG_TOKEN:
required: true
PORT_CLIENT_ID:
required: true
PORT_CLIENT_SECRET:
required: true
jobs:
scaffold:
runs-on: ubuntu-latest
steps:
- uses: port-labs/cookiecutter-gha@v1
with:
portClientId: ${{ secrets.PORT_CLIENT_ID }}
portClientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
token: ${{ secrets.ORG_TOKEN }}
portRunId: ${{ fromJson(inputs.port_payload).context.runId }}
repositoryName: ${{ fromJson(inputs.port_payload).payload.properties.name }}
portUserInputs: ${{ toJson(fromJson(inputs.port_payload).payload.properties) }}
cookiecutterTemplate: https://github.com/lacion/cookiecutter-golang
blueprintIdentifier: "microservice"
organizationName: INSERT_ORG_NAME
- Trigger the action from Port's UI.
Next stepsโ
- Connect Port's GitHub exporter to make sure all of the properties (like URL, readme etc..) are automatically ingested from GitHub. You can learn how to setup Port's GitHub exporter here you can find more information about it.