Backstage Scaffolder Actions Directory
Published on August 8th, 2024This page is a comprehensive directory of all open source Scaffolder actions available for Backstage with instructions and examples for each action.
Roadie comes bundled with a select set of actions to use out of the box. If you would like to use one that is not included, please contact Roadie support.
If you want to add an action to this list, please raise an issue on our repo or contribute a PR with the addition.
NB:
- A subset of available actions in Roadie can also be found at the following page inside your Roadie app:
https://<tenant-name>.roadie.so/create/actions
- We do not list actions created for hackathons and talks that are not maintained or intended for widespread use.
Actions Summary Table
Generic Tools:
Category | Name | Description | Ready to use in Roadie |
---|---|---|---|
Downloading Content | fetch:plain | Downloads directory content and places it in the workspace. | ✅️ |
Downloading Content | fetch:plain:plus | Downloads directory content and places it in the workspace for multiple urls. | |
Downloading Content | fetch:template | Downloads a directory containing templated files using nunjucks,merges variables in, and writes result to the workspace. | ✅️ |
Downloading Content | fetch:template:plus | Downloads multiple directories containing templated files using nunjucks,merges variables in, and writes results to the workspace. | |
Downloading Content | fetch:plain:file | Downloads single file and places it in the workspace. | ✅️ |
Downloading Content | fetch:plain:file:plus | Downloads files and places them in the workspace for multiple urls. | |
HTTP Requests | http:backstage:request | Runs an HTTP request against the Backstage Backend API and handles the response. | ✅️ |
Debugging | debug:log | Log a message to the UI output. | ✅️ |
Debugging | debug:wait | Waits for a certain period of time. | |
File Operations | fs:delete | Deletes files and directories in the workspace | ✅️ |
File Operations | fs:rename | Renames files and directories in the workspace, essentially moving them. | ✅️ |
File Operations | roadiehq:utils:fs:replace | Replaces found string in files with content defined in input. | ✅️ |
File Operations | roadiehq:utils:fs:parse | Reads a file from the workspace and outputs content to be used in next steps. | ✅️ |
File Operations | roadiehq:utils:fs:write | Creates a file with the content on the given path. | ✅️ |
File Operations | roadiehq:utils:fs:append | Creates a file with the content on the given path. | ✅️ |
File Operations | roadiehq:utils:merge | Merge data into an existing JSON or YAML file. | ✅️ |
File Operations | roadiehq:utils:zip | Compresses content to a zip file in the workspace. | ✅️ |
Parsing and Serialization | roadiehq:utils:serialize:yaml | Converts YAML to a string. | ✅️ |
Parsing and Serialization | roadiehq:utils:serialize:json | Converts JSON to a formated string. | ✅️ |
Parsing and Serialization | json | Parse JSON data from various encoded content sources such as Base64, files, raw data, or URLs. | |
Parsing and Serialization | yaml | Parse YAML data from various encoded content sources such as Base64, files, raw data, or URLs. | |
Parsing and Serialization | xml | Parse XML into JSON using various options and processing pipes, utilizing the xml-js library for conversion. |
|
Content Manipulation | roadiehq:utils:jsonata | Performs JSONata operations and transformations on input objects. | ✅️ |
Content Manipulation | roadiehq:utils:jsonata:yaml:transform | Performs JSONata operations and transformations on a YAML file in the workspace. | ✅️ |
Content Manipulation | roadiehq:utils:jsonata:json:transform | Performs JSONata operations and transformations on a JSON file in the workspace. | ✅️ |
Content Manipulation | json:merge-files | Merges multiple JSON files into a single JSON object stored in a new file in the workspace. | |
Content Manipulation | json:merge-file | Uses JSON-merger syntax to manipulate a single JSON file and store the result in a new file in the workspace. | |
Content Manipulation | roadiehq:utils:json:merge | Merge new data into an existing JSON file. | ✅️ |
Content Manipulation | regex:replace | Validate an input structure using the zod library to perform regex replacements on input values. |
|
Content Manipulation | regex:fs:replace:plus | Enable regex-based search and replacement across files using glob patterns. | |
Other Utils | uuid:v4:gen:plus | Generates a list of UUIDv4 values, allowing users to specify the number of UUIDs to generate. | |
Other Utils | roadiehq:utils:sleep | Halts the scaffolding process for the given amount of seconds. | ✅️ |
Other Utils | vars:plus | Handles and logs input variables, returning the same input as the output in a formatted structure. |
Backstage Specific:
Category | Name | Description | Ready to use in Roadie |
---|---|---|---|
Catalog | catalog:register | Registers an entity in the catalog. | ✅️ |
Catalog | catalog:register:plus | Registers multiple entities in the catalog. | |
Catalog | catalog:write | Writes the catalog-info.yaml for your template | ✅️ |
Catalog | catalog:fetch | Fetches an entity or entities from the catalog by entity reference(s). | |
Catalog | catalog:query:plus | Queries the catalog using provided filters, fields, and ordering parameters. | |
Catalog | catalog:relation:plus | Query entities based on relations. | |
Catalog | catalog:timestamping | Adds the backstage.io/createdAt annotation containing the current timestamp to your entity object. |
|
Catalog | catalog:scaffolded-from | Adds scaffoldedFrom spec containing the template entityRef to your entity object. |
|
Catalog | catalog:annotate | Allows you to annotate your entity object with specified label(s), annotation(s) and spec property(ies). | |
Notifications | notification:send | Sends notifications via the Backstage Notification Service. |
Language / protocol / infrastructure:
Category | Name | Description | Ready to use in Roadie |
---|---|---|---|
Git | git | Allows execution of Git commands within a specified working directory. | |
HCL | hcl:merge | Create an action for merging two HCL contents. | |
HCL | hcl:merge:write | Merge two HCL content strings and write the merged result to a specified output path. | |
HCL | hcl:merge:files | Merge two HCL files specified by their paths. | |
HCL | hcl:merge:files:write | Merge two HCL files and write the merged content to a specified output path, with input validation. | |
Kubernetes | kubernetes:create-namespace | Creates a Kubernetes namespace, leveraging the Kubernetes API and Backstage’s catalog client to fetch cluster information. | |
Kubernetes | deploy:kubernetes | Action for deploying Kubernetes manifests within a Backstage application, using the Kubernetes API to apply the provided YAML or JSON resources. | |
Kubernetes | kube:apply | Action for applying Kubernetes manifests in a Backstage application. | |
Kubernetes | kube:delete | Action for deleting Kubernetes resources. | |
Kubernetes | kube:job:wait | Action that waits for a Kubernetes job to complete based on specified labels and a namespace. | |
Maven | maven | Runs Maven commands in a specified working directory with optional arguments. | |
NPM | npm:init | Action that automates running the npm init -y command in a specified workspace directory. |
|
NPM | npm:install | Action that installs an npm package quietly based on the provided package name. | |
NPM | npm:exec | Action for executing npm exec commands in a task workspace directory, using specific arguments provided in the input. |
|
NPM | npm:config | Action that runs an npm config command with specified arguments in a task’s workspace directory. |
|
Odo | devfile:odo:command | Action for executing OpenShift Do (odo) commands in a workspace. | |
Odo | devfile:odo:component:init | Action to initialize an ODO (OpenShift Do) component using a Devfile within Backstage. | |
Pulumi | pulumi:new | Action for creating a new Pulumi project, including input validation and execution of necessary commands to set up the project. | |
Pulumi | pulumi:up | Runs Pulumi to manage cloud resources, either in a local or remote workspace based on the provided configuration. |
3rd Party Tools:
Category | Name | Description | Ready to use in Roadie |
---|---|---|---|
Ansible | ansible:jobTemplate:launch | Action for launching an Ansible job template and waiting for it to complete. | |
Ansible | ansible-controller:jobTemplate:launch | Triggers the launch of an Ansible job template via the Ansible controller API. | |
Ansible | argocd:create-resources | Action for creating Argo CD resources using Backstage’s scaffolding plugin. | |
AWS | roadiehq:aws:s3:cp | Action that uploads files from a local directory to an AWS S3 bucket using specified parameters. | |
AWS | roadiehq:aws:ecr:create | Creates an AWS Elastic Container Registry (ECR) repository. | |
AWS | roadiehq:aws:secrets-manager:create | Creates a new secret in AWS Secrets Manager using the Backstage scaffolder plugin. | |
AWS | opa:get-env-providers | Retrieves AWS environment provider data based on a reference to an AWS environment entity. | |
AWS | opa:create-secret | Creates secrets in AWS Secrets Manager. | |
AWS | opa:createRepoAccessToken:gitlab | Creates a GitLab repository access token and stores it in AWS Secrets Manager. | |
AWS | opa:get-platform-metadata | Retrieves metadata about the OPA (Open Policy Agent) on AWS platform. | |
AWS | opa:get-ssm-parameters | Retrieves AWS SSM parameter values for specified environment providers. | |
AWS | aws:cloudcontrol:create | Action for creating resources using AWS Cloud Control API. | |
Azure | publish:azure | Action to initialize a Git repository and publish it to Azure DevOps. | |
Azure | git:clone:azure | Clones repositories from Azure DevOps Git, allowing for multiple repositories to be cloned with the same Git reference. | |
Azure | git:commit:azure | Commits and pushes changes to an Azure DevOps Git repository, processing parameters and handling Git operations. | |
Azure | pipeline:create:azure | Automates the creation of Azure DevOps pipelines from Git repositories. | |
Azure | azure:pipeline:create | Creates an Azure Pipeline through the Azure DevOps REST API using Backstage’s scaffolding plugin. | |
Azure | azure:pipeline:run | Defines an Azure DevOps pipeline runner action using Backstage’s scaffolder plugin. | |
Azure | azure:pipeline:permit | Defines an Azure DevOps pipeline permission management action for Backstage scaffolding. | |
Azure | azure:repo:clone | Action for cloning an Azure repository into a specified workspace directory using Backstage’s scaffolding plugin. | ✅️ |
Azure | azure:repo:push | Action that pushes content from a local workspace to a remote Azure repository. | ✅️ |
Azure | azure:repo:pr | Action for creating a pull request in Azure DevOps. | ✅️ |
Bitbucket | publish:bitbucket | (Deprected for publish:bitbucketCloud and publish:bitbucketServer) Creates a new Bitbucket repository and publishes the files in the workspace directory to the repository. | ✅️ |
Bitbucket | publish:bitbucketCloud | Creates and initializes a Bitbucket Cloud repository and publishes content to it from a workspace. | ✅️ |
Bitbucket | bitbucket:pipelines:run | Triggers a run of a Bitbucket Cloud pipeline using the Backstage framework. | |
Bitbucket | publish:bitbucketCloud:pull-request | Action for publishing a pull request to a Bitbucket Cloud repository using Backstage’s scaffolding system. | |
Bitbucket | publish:bitbucketServer | Creates a new repository in Bitbucket Server. | ✅️ |
Bitbucket | publish:bitbucketServer:pull-request | Opens a pull request on a Bitbucket Server repository to merge two existing branches. | |
CNEO | cnoe:kubernetes:apply | Action for applying Kubernetes manifests using kubectl , either from a string, an object, or a file path, with support for namespaced configurations. |
|
CNEO | cnoe:verify:dependency | Verify resource dependencies for CNOE. | |
CNEO | cnoe:utils:sanitize | Action for sanitizing resources defined in a YAML document by removing empty fields, before further processing. | |
Codacy | codacy:add-repo | Action for adding a repository to Codacy using its API. | |
Confluence | confluence:transform:markdown | Action that transforms Confluence content into Markdown format and updates a GitHub repository with the new Markdown files and modified mkdocs.yml configuration. |
|
Cue | cue:cueflow | This action fetches some template content, runs a Cue command on it, and copies output files to a specified directory. | |
Gerrit | publish:gerrit:review | Action for creating a new Gerrit review by committing and pushing changes to a Git repository. | |
Gerrit | publish:gerrit | Action that initializes a Git repository with content from the workspace and publishes it to a Gerrit repository. | |
Gerrit | publish:gitea | This action initializes a git repository from workspace content and publishes it to a Gitea repository. | |
GitHub | publish:github | Creates a new GitHub repository and publishes files from the workspace to the repository. | ✅️ |
GitHub | publish:github:pull-request | Creates a pull request in a pre-existing repository using files from the workspace. | ✅️ |
GitHub | github:actions:dispatch | Allows you to trigger the execution of a GitHub action on a repository. | ✅️ |
GitHub | github:webhook | Configures a webhook on an existing GitHub repository, requiring repoUrl and webhookUrl . |
✅️ |
GitHub | github:autolinks:create | Create autolink references for GitHub repositories, linking keywords to specific URLs in issues, pull requests, or commits. | |
GitHub | github:deployKey:create | Creates and stores GitHub Deploy Keys, with the option to encrypt and store the private key as a GitHub secret. | |
GitHub | github:environment:create | Creates deployment environments on GitHub with branch or tag policies and environment variables. | |
GitHub | github:issues:label | Adds labels to pull requests or issues on GitHub. | ✅️ |
GitHub | github:pages:enable | Enables GitHub Pages for a repository with options for build type, source branch, and source path. | |
GitHub | github:repo:create | Creates GitHub repositories programmatically with various settings and collaborators. | |
GitHub | github:repo:push | Initializes a git repository in a workspace and pushes it to GitHub with options to configure branch protection and repository settings. | |
GitHub | parse:repo-url:plus | Parses GitHub repository URLs and extracts relevant metadata based on a specified schema. | |
GitLab | publish:gitlab | Initializes a Git repository of the content in the workspace and publishes it to GitLab. | ✅️ |
GitLab | publish:gitlab:merge-request | Creates a merge request in a GitLab repository. | ✅️ |
GitLab | gitlab:repo:push | Automates the process of pushing commits to a GitLab repository. | |
GitLab | gitlab:group:ensureExists | Ensures that a GitLab group or sub-groups exist, creating them if they do not. | |
GitLab | gitlab:issues:create | Action to create GitLab issues, including input validation using Zod, GitLab API calls, and error handling. | |
GitLab | gitlab:issue:edit | Validates input and output data using zod and interacts with GitLab’s API to edit issue properties such as labels and assignees. |
|
GitLab | gitlab:pipeline:trigger | Automates the creation and triggering of a GitLab pipeline using specific input parameters. | |
GitLab | gitlab:projectAccessToken:create | Action that creates a project access token in GitLab. | |
GitLab | gitlab:projectVariable:create | Action for creating project variables in GitLab. | |
GitLab | gitlab:projectDeployToken:create | Action that creates a GitLab project deploy token. | |
Humanitec | humanitec:create-app | Action for creating applications in Humanitec, using a YAML setup file to define application properties. | |
Microsoft Teams | ms-teams:sendMessage | Action that sends messages to a Microsoft Teams channel using a specified webhook URL. | |
PagerDuty | pagerduty:service:create | Action for the Backstage scaffolder plugin that allows users to create a PagerDuty service. | |
Quay | quay:create-repository | Action for creating a repository in Quay.io. | |
Sonarqube | sonarqube:create-project | Action for creating a project in SonarQube via the Backstage Scaffolder plugin. | |
ServiceNow | servicenow:now:table:createRecord | Action for Backstage’s Scaffolder, allowing users to insert a record into a specified ServiceNow. | |
ServiceNow | servicenow:now:table:deleteRecord | Action for deleting a record from a ServiceNow table. | |
ServiceNow | servicenow:now:table:modifyRecord | Action handler that modifies a record in a ServiceNow table. | |
ServiceNow | servicenow:now:table:retrieveRecord | Action handler that retrieves a record in a ServiceNow table. | |
ServiceNow | servicenow:now:table:retrieveRecords | Action handler that retrieves records in a ServiceNow table. | |
ServiceNow | servicenow:now:table:updateRecord | Action handler that updates a record in a ServiceNow table. | |
Slack | slack:sendMessage:conversation | Sends a Slack message to a specific conversation using the Slack API. | |
Slack | slack:sendMessage:webhook | Sends a message to Slack via a webhook URL. | |
Sentry | sentry:create-project | Action to create a new project in Sentry. | |
Torque | torque:create-app | Action for managing applications in Torque. | |
Webex | webex:webhooks:sendMessage | Action that sends messages to Webex Incoming Webhooks. | |
Yeoman | run:yeoman | Action for running a Yeoman generator in Backstage scaffolder. |
Generic Tools
Download content
fetch:plain
✅️ Ready to use in Roadie
Downloads directory content and places it in the workspace.
Inputs
Key | Description | Type | Example |
---|---|---|---|
url | Relative path or absolute URL pointing to the directory tree to fetch | string | ’../assets’ |
targetPath | Target path within the working directory to download the contents to | string | ‘assets-copy’ |
token | An optional token to use for authentication when reading the resources | string | ‘sku1263kjh280’ |
Examples
steps:
- action: fetch:plain
id: fetch-plain
name: Fetch plain
input:
url: ./plain
Optionally, if you would prefer the data to be downloaded to a subdirectory in the workspace you may specify the ‘targetPath’ input option.
steps:
- action: fetch:plain
id: fetch-plain
name: Fetch plain
input:
url: ./plain
targetPath: fetched-data
Outputs
None
Links:
fetch:plain:plus
Downloads directory content and places it in the workspace for multiple urls.
Inputs
Key | Description | Type | Example |
---|---|---|---|
commonParams |
object | { ‘targetPath’: ’./’ } | |
commonParams.url |
Relative path or absolute URL pointing to the directory tree to fetch. If only a single directory needs to be fetched this can be used instead of sources . |
string | https://github.com/backstage/community/tree/main/backstage-community-sessions/assets |
commonParams.targetPath |
Target path within the working directory to download the contents to. Used as the default path for downloads from urls in sources . |
string | downloads |
sources |
An array of objects containing URL and optionally a target path. If no TargetPath is specified the parameter from commonParams is used. | array | [ { ‘url’: ‘./assets’ } ] |
sources[0].url * |
Relative path or absolute URL pointing to the directory tree to fetch | string | ’../assets’ |
sources[0].targetPath |
Target path within the working directory to download the contents to. | string | ‘downloads’ |
Examples
Downloads content and places it in the workspace.
steps:
- action: fetch:plain:plus
id: fetch-plain
name: Fetch plain
input:
commonParams:
targetPath: ./
sources:
- url: https://github.com/backstage/community/tree/main/backstage-community-sessions/assets
Optionally, if you would prefer the data to be downloaded to a diferent subdirectory in the workspace for each url you may specify the ‘targetPath’ input option.
steps:
- action: fetch:plain:plus
id: fetch-plain
name: Fetch plain
input:
sources:
- url: https://github.com/backstage/community/tree/main/backstage-community-sessions/assets
targetPath: fetched-data
Outputs
Key | Description | Type |
---|---|---|
results | An array of paths that have been written to in the working directory | array |
Links:
fetch:plain:file
✅️ Ready to use in Roadie
Downloads single file and places it in the workspace, or optionally in a subdirectory specified by the ‘targetPath’ input option.
Inputs
Key | Description | Type | Example |
---|---|---|---|
url | Relative path or absolute URL pointing to the file to fetch | string | ’../assets/test.json’ |
targetPath | Target directory within the working directory to download the file to | string | ‘assets-copy’ |
token | An optional token to use for authentication when reading the resources | string | ‘sku1263kjh280’ |
Examples
steps:
- action: fetch:plain:file
id: fetch-plain-file
name: Fetch plain file
input:
url: ./plain.json
Outputs
None
Links:
fetch:plain:file:plus
Inputs
Key | Description | Type | Example |
---|---|---|---|
commonParams |
object | { ‘targetPath’: ‘./test.json’ } | |
commonParams.url |
Relative path or absolute URL pointing to the file to fetch. If only a single file needs to be fetched this can be used instead of files . |
string | https://github.com/backstage/community/tree/main/backstage-community-sessions/assets/test.json |
commonParams.targetPath |
Target path within the working directory to download the contents to. Used as the default path for downloads from urls in sources . |
string | downloads |
files |
An array of objects containing URL and optionally a target path. If no TargetPath is specified the parameter from commonParams is used. | array | [ { ‘url’: ‘./assets/test.json’ } ] |
files[0].url * |
Relative path or absolute URL pointing to the file to fetch | string | ’../assets/test.json’ |
files[0].targetPath |
Target path within the working directory to download the file to. | string | ‘downloads’ |
Examples
Downloads multiple files from different urls and places them in a directory in the workspace.
steps:
- action: fetch:plain:file:plus
id: fetch-files
name: Fetch files
input:
commonParams:
targetPath: ./downloads
files:
- url: https://github.com/backstage/community/tree/main/backstage-community-sessions/assets/test.json
Optionally, if you would prefer the files to be downloaded to a different subdirectory in the workspace for each url you may specify the ‘targetPath’ input option.
steps:
- action: fetch:plain:file:plus
id: fetch-files
name: Fetch files
input:
files:
- url: https://github.com/backstage/community/tree/main/backstage-community-sessions/assets/test.json
targetPath: fetched-data
Outputs
Key | Description | Type |
---|---|---|
results | An array of paths that have been written to in the working directory | array |
Links:
fetch:template
✅️ Ready to use in Roadie
Downloads a directory containing templated files, then renders all the template variables into the files, directory names and content using Nunjucks, and places the result in the workspace.
Inputs
Key | Description | Type | Example |
---|---|---|---|
url | Relative path or absolute URL pointing to the directory tree to fetch | string | |
targetPath | Target path within the working directory to download the contents to. Defaults to the working directory root. | string | |
values | Values to pass on to the templating engine | object | |
copyWithoutRender | [Deprecated] An array of glob patterns. Files or directories matching these are copied without template processing | array of strings | |
copyWithoutTemplating | An array of glob patterns. Contents of matched files are copied without being processed but paths are rendered | array of strings | |
cookiecutterCompat | Enable compatibility features for templates built for fetch:cookiecutter |
boolean | |
templateFileExtension | If set, only files with the given extension will be templated. If set to true , the default extension .njk is used |
string/boolean | |
replace | If set, replace files in targetPath instead of skipping existing ones |
boolean | |
token | Optional token for authentication when reading resources | string | |
trimBlocks | If set, template rendering will trim blocks | boolean | |
lstripBlocks | If set, template rendering will strip leading whitespace in blocks | boolean |
Examples
steps:
- action: fetch:template
id: fetch-template
name: Fetch template
input:
url: ./template
values:
name: ${{ parameters.name }}
The templated files themselves can contain references to the values in the following way ${{ values.name }}
. It uses the nunjucks templating language. More details can be found here.
i.e.
./template/README.md
## ${{ values.name }} service
This is a service Readme example. Please update me.
Optionally, if you would prefer the data to be downloaded to a subdirectory in the workspace you may specify the ‘targetPath’ input option.
steps:
- action: fetch:template
id: fetch-template
name: Fetch template
input:
url: ./template
targetPath: fetched-data
values:
name: ${{ parameters.name }}
You can also choose to not template specific files downloaded by the task by using the copyWithoutRender
option. It may use file paths or globs.
steps:
- action: fetch:template
id: fetch-template
name: Fetch template
input:
url: ./template
copyWithoutRender:
- README.md
- src/**.ts
values:
name: ${{ parameters.name }}
If you would like to limit the templating to very specific files, you can optionally add the .njk
extension to the files and use the templateFileExtension
option.
steps:
- action: fetch:template
id: fetch-template
name: Fetch template
input:
url: ./template
templateFileExtension: true
values:
name: ${{ parameters.name }}
Outputs
The fetch:template
action does not output any data.
Links
fetch:template:plus
Downloads multiple directories containing templated files, then renders all the template variables into the files, directory names and content using Nunjucks, and places the results in the workspace.
Inputs
Key | Description | Type | Example |
---|---|---|---|
commonParams | Common parameters including URL, targetPath, and other template fields | object | { ‘copyWithoutRender’: true } |
templates | Array of template fields including URL and targetPath | array of objects | |
templates[0].url | Relative path or absolute URL pointing to the directory tree to fetch | string | |
templates[0].targetPath | Target path within the working directory to download the contents to. Defaults to root | string | |
templates[0].values | Values to pass on to the templating engine | object | |
templates[0].copyWithoutRender | [Deprecated] An array of glob patterns. Any files/directories copied without processing | array of strings | |
templates[0].copyWithoutTemplating | An array of glob patterns. Contents copied without processing, but paths are rendered | array of strings | |
templates[0].cookiecutterCompat | Enable features to maximize compatibility with templates built for fetch:cookiecutter | boolean | |
templates[0].templateFileExtension | File extension for templating. If true , .njk is used |
string or boolean | |
templates[0].replace | Replace files in targetPath instead of skipping existing ones | boolean |
Examples
steps:
- action: fetch:template:plus
id: fetch-multiple-templates
name: Fetch templates
input:
commonParams:
cookiecutterCompat: true
templates:
- url: ./template
values:
name: ${{ parameters.name }}
Outputs
Key | Description | Type |
---|---|---|
results | Array of results data | array |
Links
fetch:cookiecutter
Deprecated for fetch:template
used with cookiecutterCompat: true
input parameter.
Links:
fetch:template:file
Downloads a single file and templates variables into file. Then places the result in the workspace, or optionally in a subdirectory specified by the ‘targetPath’ input option.
Inputs
Key | Description | Type | Example |
---|---|---|---|
url |
Relative path or absolute URL pointing to the single file to fetch. | string |
|
targetPath |
Target path within the working directory to download the file as. | string |
|
values |
Values to pass on to the templating engine. | object |
|
cookiecutterCompat |
Enable features to maximize compatibility with templates built for fetch:cookiecutter. | boolean |
|
replace |
If set, replaces the file in targetPath instead of overwriting the existing one. | boolean |
|
trimBlocks |
Controls trimming of block white spaces in templates, if applicable. | boolean |
|
lstripBlocks |
Controls stripping of left-hand whitespace before block-level structures. | boolean |
|
token |
An optional token to use for authentication when reading the resources. | string |
Examples
steps:
- action: fetch:template:file
id: fetch-template-file
name: Fetch template file
input:
url: './skeleton.txt'
targetPath: './target/skeleton.txt'
values:
name: 'test-project'
count: 1234
itemList: ['first', 'second', 'third']
This example fetches a single template from a relative path and substitutes the values name, count, and itemList into the file during the templating process. This allows for dynamic content creation based on the input values.
Outputs
None
Links
fetch:rails
Downloads a Rails template from a given URL, applies templating using Rails, and optionally runs it inside a Docker container.
Inputs
Key | Description | Type | Example |
---|---|---|---|
url |
Relative path or absolute URL pointing to the directory tree to fetch | string |
|
targetPath |
Target path within the working directory to download the contents to | string |
|
values |
Values to pass on to Rails for templating | object |
|
values.railsArguments |
Arguments to pass to the rails new command |
object |
|
values.railsArguments.minimal |
Preconfigure a minimal Rails app | boolean |
|
values.railsArguments.skipBundle |
Don’t run bundle install |
boolean |
|
values.railsArguments.skipWebpackInstall |
Don’t run Webpack install | boolean |
|
values.railsArguments.skipTest |
Skip test files | boolean |
|
values.railsArguments.skipActionCable |
Skip Action Cable files | boolean |
|
values.railsArguments.skipActionMailer |
Skip Action Mailer files | boolean |
|
values.railsArguments.skipActionMailbox |
Skip Action Mailbox gem | boolean |
|
values.railsArguments.skipActiveStorage |
Skip Active Storage files | boolean |
|
values.railsArguments.skipActionText |
Skip Action Text gem | boolean |
|
values.railsArguments.skipActiveRecord |
Skip Active Record files | boolean |
|
values.railsArguments.force |
Overwrite files that already exist | boolean |
|
values.railsArguments.api |
Preconfigure smaller stack for API-only apps | boolean |
|
values.railsArguments.template |
Path to an application template (filesystem path or URL) | string |
|
values.railsArguments.webpacker |
Preconfigure Webpack with a specific framework (e.g. react, vue, etc.) | string (enum) |
|
values.railsArguments.database |
Preconfigure for selected database (e.g. mysql, postgresql, etc.) | string (enum) |
|
values.railsArguments.railsVersion |
Set up the app with a Gemfile pointing to a specific Rails version | string (enum) |
|
imageName |
Specify a Docker image to run rails new . Used when a local Rails is not found |
string |
Examples
steps:
- id: fetch-base
name: Fetch Base
action: fetch:rails
input:
url: ./template
values:
name: ${{ parameters.name }}
owner: ${{ parameters.owner }}
system: ${{ parameters.system }}
railsArguments: ${{ parameters.railsArguments }}
This step fetches the specified Rails template and configures it with the provided values and Rails arguments, enabling customization based on user input during scaffolding.
Outputs
Key | Description | Type |
---|---|---|
targetPath |
Path where the template will be downloaded and processed | string |
outputPath |
The result directory where the generated files are copied | string |
Links
HTTP Request Scaffolder Actions
http:backstage:request
✅️ Ready to use in Roadie
This action allows the Scaffolder task to run an HTTP request against the Backstage Backend API and handle the response. It can be useful for extending the scaffolder to call out to third party APIs. You can do this by configuring a proxy and then calling the proxy with this action.
Inputs:
key | description | value | example |
---|---|---|---|
method |
The method type of the request | ‘GET’,‘HEAD’,‘OPTIONS’,‘POST’,‘UPDATE’,‘DELETE’,‘PUT’,‘PATCH’ | GET |
path |
The url path you want to query | string |
‘/proxy/snyk/org/${{ parameters.orgName }}/projects/${{ parameters.projectId }}’ |
headers |
The headers you would like to pass to your request | object |
Accept: application/json |
params |
The query parameters you would like to pass to your request | object |
kind: Component |
body |
The body you would like to pass to your request | ‘object’,‘string’,‘array’ | type: TEST |
logRequestPath |
Option to turn request path logging off. Defaults to true |
boolean |
false |
continueOnBadResponse |
Return response code and body and continue to next scaffolder step if the response status is 4xx or 5xx. Defaults to false |
boolean |
true |
The path should always point to a proxy entry with the following format: /proxy/<proxy-path>/<external-api-path>
- i.e.: /proxy/snyk/org/<some-org>/projects
or /proxy/circleci/api/projects
(NB: the CircleCI proxy path is circleci/api/
but Snyk is just snyk/
)
Examples
steps:
- action: http:backstage:request
id: http-request
name: Create a thing on the acme service
input:
method: GET
path: '/proxy/snyk/org/<some-org>/project/<some-project-id>'
You can optionally add request params
.
steps:
- action: http:backstage:request
id: http-request
name: Create a thing on the acme service
input:
method: POST
path: '/proxy/acme/thing'
params:
state: 'bar'
The headers
parameter allows setting headers on the request:
steps:
- action: http:backstage:request
id: http-request
name: Create a thing on the acme service
input:
method: GET
path: '/proxy/circleci/api/projects'
headers:
Accept: 'application/json'
The body
param allows you to set a request body. This is most likely going to be useful for POST
requests.
steps:
- action: http:backstage:request
id: http-request
name: Create a thing on the acme service
input:
method: POST
path: '/api/proxy/acme/thing'
body: 'thingname=abc1'
You can also have the action generate a json
formatted body by setting a custom “Content-Type” header to “application/json” and then providing an object to the body
param.
steps:
- action: http:backstage:request
id: http-request
name: Create a thing on the acme service
input:
method: POST
path: '/api/proxy/acme/thing'
headers:
'Content-Type': 'application/json'
body:
thingname: 'foo'
Outputs
Name | Description | Type |
---|---|---|
code | Status code of the http response | string |
headers | Object containing all of the response headers and their values | object |
body | Body of the response. If content-type header is application/json this will be a parsed object. Otherwise, it will contain an object with a single param message containing a string representing the body of the response. |
object |
Links
Debugging Scaffolder Actions
debug:log
✅️ Ready to use in Roadie
Use the debug:log
action to print some information to the task console.
Inputs:
message
: Text to log in the Backstage UI. You can log variables like so: ‘Hello, ${{ parameters.name }}’listWorkspace
: List all files in the workspace. If used with “with-contents”, also the file contents are listed.- values:
with-filenames
,with-contents
- values:
Examples
steps:
- action: debug:log
id: debug-log
name: Log Hello World
input:
message: 'Hello, World!'
Outputs
The debug:log
action does not have any outputs.
debug:wait
Waits for a certain period of time.
Inputs
key | description | value | example |
---|---|---|---|
minutes |
Minutes to wait | number |
2 |
seconds |
Seconds to wait | number |
30 |
miliseconds |
Miliseconds to wait | number |
3000 |
Outputs
None
debug:fs:read:plus
Logs file content.
Inputs
key | description | type | example |
---|---|---|---|
files |
A list of files and directories that will be deleted. | array |
- somefile.js |
Examples
steps:
- action: debug:fs:read:plus
id: debug-fs-read
name: Read files
input:
files:
- ./catalog-info.yaml
- some-file.txt
Outputs
Key | Description | Type |
---|---|---|
results |
Array of files and their contents. | array<{file: string, content: string}> |
Links
File Operation Scaffolder Actions
fs:delete
✅️ Ready to use in Roadie
This action deletes the given files or directories in the workspace. It has one input parameter files
that can be provided an array of file paths or directory paths to delete.
Inputs
key | description | type | example |
---|---|---|---|
files |
A list of files and directories that will be deleted. | array |
- somefile.js |
Examples
steps:
- action: fs:delete
id: delete-filds
name: Delete files
input:
files:
- files/deleteme
- otherfiletodelete
Outputs
The fs:delete
action does not have any outputs.
Links
fs:rename
✅️ Ready to use in Roadie
This action allows you to move files
within the workspace. The files
option takes an array of objects containing from
and to
options.
Inputs
key | description | type | example |
---|---|---|---|
files |
A list of objects with a from and to field representing file paths. |
object |
{‘from’: ‘a/file.yaml’, ‘to’: ‘b/file.yaml’ } |
Examples
steps:
- action: fs:rename
id: rename-files
name: Rename files
input:
files:
- from: copyfrom
to: copyto
- from: copyfrom1
to: copyto1
Outputs
None
Links
`fs:rename:plus
Defines a file renaming action for Backstage, allowing users to rename files and directories within a workspace.
Inputs
Key | Description | Type | Example |
---|---|---|---|
from |
The source location of the file to be renamed | string |
|
to |
The destination of the new file | string |
|
overwrite |
Overwrite existing file or directory, default is false |
boolean? |
|
files |
Array of files to rename, each using commonParams |
Array<object> |
|
commonParams |
Optional shared parameters for all files | object? |
Examples
steps:
- action: fs:rename:plus
id: renameFiles
name: Rename files
input:
commonParams:
overwrite: true
files:
- from: file1.txt
to: file1Renamed.txt
overwrite: false
- from: file2.txt
to: file2Renamed.txt
overwrite: false
- from: file3.txt
to: file3Renamed.txt
Outputs
Key | Description | Type |
---|---|---|
results |
Array of results of the rename actions | Array<any> |
Links
roadiehq:utils:fs:replace
✅️ Ready to use in Roadie
This action replaces found string in files with content defined in input.
Inputs
key | description | type | example |
---|---|---|---|
files * |
Array of files and their replacing configuration. | array |
[{‘file’: ‘./backstage/catalog-info.yaml’, ‘find’: ‘Component’, ‘replaceWith’: ‘Resource’}] |
files[].file |
Path to the file to be modified | string |
./backstage/catalog-info.yaml |
files[].find |
The string to be replaced. A Regex can be used if matchRegex is true. |
string |
‘Component’ |
files[].matchRegex |
Specifies if the find value should be used as a Regex expression. Defaults to false. | boolean |
true |
files[].replaceWith |
The string to be used to replace above | string |
‘Resource’ |
Examples
steps:
- id: Replace text in file
name: Replace
action: roadiehq:utils:fs:replace
input:
files:
- file: './file.1'
find: 'i_want_to_replace_this'
replaceWith: ${{ parameters.templated_text }}
Outputs
None
Links
roadiehq:utils:fs:parse
✅️ Ready to use in Roadie
Reads a file from the workspace and optionally parses it.
Inputs
key | description | type | example |
---|---|---|---|
path * |
Path to the file to read. | string |
./backstage/catalog-info.yaml |
parser |
Select a parser for the matching content type. | string |
‘yaml’, ‘json’, ‘multiyaml’ |
Examples
spec:
owner: roadie
type: service
parameters:
- title: Path
properties:
path:
title: Path to the file
type: string
description: The path you want to get on your backstage instance
parser:
type: 'string'
enum: ['yaml', 'json', 'multiyaml']
steps:
- id: roadiehq-utils-fs-parse
name: backstage request
action: roadiehq:utils:fs:parse
input:
path: ${{ parameters.path }}
parser: ${{ parameters.parser }}
Outputs
The roadiehq:utils:fs:parse
action produces one output.
Key | Description | type |
---|---|---|
content | Content of the file | string / object |
Links
roadiehq:utils:fs:write
✅️ Ready to use in Roadie
Creates a file with the content on the given path
Inputs
Name | Description | Type | Example |
---|---|---|---|
path* | Relative path to the file | string |
’./content/manifest.json’ |
content* | Content of the file | string |
’{“a”:“b”}’ |
preserveFormatting | Preserve formatting for JSON content. Defaults to false. | boolean |
true |
Example
steps:
- id: create
name: Create file
action: roadiehq:utils:fs:write
input:
path: foo
content: bar
Outputs
The roadiehq:utils:fs:write
action produces one output.
Name | Description | Type |
---|---|---|
path | Path to the newly created file | string |
Links
roadiehq:utils:fs:append
✅️ Ready to use in Roadie
Append content to the end of the given file, it will create the file if it does not exist.
Inputs
Name | Description |
---|---|
path* | Path to existing file to append. |
content* | This will be appended to the file |
Example
steps:
- id: append
name: Append to file
action: roadiehq:utils:fs:append
input:
path: foo
content: bar
Outputs
The roadiehq:utils:fs:append
action produces one output.
Name | Description |
---|---|
path* | Path to the file that got appended to |
Links
roadiehq:utils:merge
Merges data into an existing structured file.
Inputs
Key | Description | Type | Example |
---|---|---|---|
path* | Path to existing file of JSON or YAML content. | string |
|
content* | This will be merged into to the file. | string / object |
{ ‘a’: ‘thing’ } |
mergeArrays* | When the file content is an array will attempt to concatenate the provided value with the array in the file. Defaults to false. | boolean |
true |
preserveYamlComments* | Will preserve standalone and inline comments in YAML files. Defaults to false. | boolean |
true |
options* | YAML stringify options (for YAML output only) | boolean |
true |
options:
Name | Description |
---|---|
indent* | (default: 2) - indentation width to use (in spaces) |
noArrayIndent | (default: false) - when true, will not add an indentation level to array elements |
skipInvalid | (default: false) - do not throw on invalid types (like function in the safe schema) and skip pairs and single values with such types |
flowLevel | (default: -1) - specifies level of nesting, when to switch from block to flow style for collections. -1 means block style everwhere |
sortKeys | (default: false) - if true, sort keys when dumping YAML. If a function, use the function to sort the keys |
lineWidth | (default: 80) - set max line width. Set -1 for unlimited width |
noRefs | (default: false) - if true, don’t convert duplicate objects into references |
noCompatMode | (default: false) - if true don’t try to be compatible with older yaml versions. Currently: don’t quote “yes”, “no” and so on, as required for YAML 1.1 |
condenseFlow | (default: false) - if true flow sequences will be condensed, omitting the space between a, b. Eg. ‘[a,b]’, and omitting the space between key: value and quoting the key. Eg. ’{“a”:b}’ Can be useful when using yaml for pretty URL query params as spaces are %-encoded. |
quotingType | (’ or ”, default: ’) - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. |
forceQuotes | (default: false) - if true, all non-key strings will be quoted even if they normally don’t need to. |
Example
steps:
- id: merge
name: JSON merge
action: roadiehq:utils:merge
input:
path: foo
content: bar
options:
noArrayIndent: true
Outputs
The roadiehq:utils:merge
action produces one output.
Name | Description | Type |
---|---|---|
path | Path to the file that got updated. | string |
Links
roadiehq:utils:zip
✅️ Ready to use in Roadie
Compresses the content found in the Scaffolder workspace at the path specified, to a new compressed file in the workspace.
Input
Name | Description | Type | Example |
---|---|---|---|
path* | Relative path to the file or directory. | string |
./error_logs.txt |
outputPath* | Path of the new zip file that will be saved to the workspace. | string |
./error_logs.zip |
Examples
steps:
- id: zip
name: Zip the workspace
action: roadiehq:utils:zip
input:
path: ./error_logs.txt
outputPath: ./error_logs.zip
Outputs
The roadiehq:utils:zip
action produces one output.
Name | Description | Type |
---|---|---|
outputPath | Path to the newly created zip file in the workspace. | string |
Links
zip:decompress:plus
Decompress ZIP files from various sources, such as base64, files, or URLs, and saves them to specified destinations while handling errors.
Inputs
Key | Description | Type | Example |
---|---|---|---|
content |
Zip File Content. | string |
|
destination |
Relative path of destination files. | string |
|
encoding |
Indicate if input “content” field has encoded in “base64”, “file” or “url”. | `‘base64’ | ‘file’ |
skipErrors |
Not throw on errors, allowing next actions to proceed. | boolean |
Examples
steps:
- action: zip:decompress:plus
id: zip-decompress
name: Decompress multiple files.
input:
commonParams:
encoding: file
sources:
- content: ./compressed-1.zip
destination: ./tmp.zip-1/
- content: ./compressed-2.zip
destination: ./tmp.zip-2/
Defines a workflow step that decompresses multiple ZIP files (from local file paths) into specified destination directories using a custom zip:decompress:plus action.
Outputs
Key | Description | Type |
---|---|---|
results |
List of results for each source input. | Array<OutputFields> |
success |
Indicates if the decompression was successful. | boolean |
files |
List of decompressed files. | array |
mode |
File permissions mode. | number |
mtime |
Modification time of the file. | string |
path |
Path of the decompressed file. | string |
type |
Type of the decompressed file (file/directory). | string |
errorMessage |
Error message if decompression failed. | string |
Links
glob:plus
Allows users to match files using glob patterns and various options for customizing the file search.
Inputs
Key | Description | Type | Example |
---|---|---|---|
patterns * |
List of glob patterns to match files. | array[string] |
|
options.absolute |
Return the absolute path for entries. | boolean |
|
options.baseNameMatch |
If set to true , patterns without slashes will be matched against the basename of the path if it contains slashes. |
boolean |
|
options.braceExpansion |
Enables Bash-like brace expansion. | boolean |
|
options.caseSensitiveMatch |
Enables a case-sensitive mode for matching files. | boolean |
|
options.concurrency |
Specifies the maximum number of concurrent requests from a reader to read directories. | number |
|
options.deep |
Specifies the maximum depth of a read directory relative to the start directory. | number |
|
options.dot |
Allow patterns to match entries that begin with a period (. ). |
boolean |
|
options.extglob |
Enables Bash-like extglob functionality. |
boolean |
|
options.followSymbolicLinks |
Indicates whether to traverse descendants of symbolic link directories. | boolean |
|
options.globstar |
Enables recursively repeating a pattern containing ** . |
boolean |
|
options.ignore |
An array of glob patterns to exclude matches. | array[string] |
|
options.markDirectories |
Mark the directory path with the final slash. | boolean |
|
options.objectMode |
Returns objects (instead of strings) describing entries. | boolean |
|
options.onlyDirectories |
Return only directories. | boolean |
|
options.onlyFiles |
Return only files. | boolean |
|
options.stats |
Enables object mode (objectMode ) with an additional stats field. |
boolean |
|
options.suppressErrors |
Suppresses only ENOENT errors by default. Set to true to suppress any error. |
boolean |
|
options.throwErrorOnBrokenSymbolicLink |
Throw an error when symbolic link is broken if true , or safely return lstat call if false . |
boolean |
|
options.unique |
Ensures that the returned entries are unique. | boolean |
|
options.gitignore |
Respect ignore patterns in .gitignore files that apply to the globbed files. |
boolean |
Examples
steps:
- action: glob:plus
id: glob
name: List files
input:
patterns:
- "**/*.y[a?]ml"
This step uses the glob:plus
action to list all files matching the pattern "**/*.y[a?]ml"
, which includes .yaml
and .yml
files.
Outputs
Key | Description | Type |
---|---|---|
results |
Array of matched file paths | array[string] |
Links
Parsing and Serialization Actions
json
Process JSON data from various encoded content sources such as Base64, files, raw data, or URLs.
Inputs
Key | Description | Type | Example |
---|---|---|---|
content * |
JSON source content | string |
|
encoding * |
Indicates if input content field is encoded in base64 , file , raw , or url . |
string |
|
sources |
An array of fields containing the source JSON data and encoding information. | array of object |
|
commonParams |
(Optional) Common parameters shared by multiple sources for content and encoding | Partial<FieldsType> |
Examples
steps:
- action: json
id: json-parse
name: Parse Json files
input:
commonParams:
encoding: raw
sources:
- content: '{"key": "value"}'
This uses the json
action to parse a raw JSON object from a content source with a common parameter of encoding set to “raw”.
Outputs
Key | Description | Type |
---|---|---|
results |
Array of parsed JSON objects | array of object |
Links
roadiehq:utils:serialize:json
✅️ Ready to use in Roadie
Converts JSON to a string format.
Inputs
Name | Description | Type | Example |
---|---|---|---|
data* | Input data to perform serialization on. | object / array |
{ a: “a”, b: { c: “c” } } |
replacer | Array of keys that should be included in output. If specified, keys not in this array will be excluded. | array |
[‘a’, ‘b’, ‘c’] |
space | The number of spaces to add after each property. If >=1 it adds newlines after each property. If a string it adds that string instead. | number / string |
1 |
Examples
steps:
- id: roadiehq-utils-serialize-json
name: serialize json
action: roadiehq:utils:serialize:json
input:
data: { a: "a", b: { c: "c" } }
replacer:
- a
- b
- c
space: 1
Outputs
The roadiehq:utils:serialize:json
action produces one output.
Name | Description | Type |
---|---|---|
serialized | Output result from serialization | string |
Links
xml
Parse XML into JSON using various options and processing pipes, utilizing the xml-js
library for conversion.
Inputs
Key | Description | Type | Example |
---|---|---|---|
content* | XML source content | string |
|
encoding* | Indicate if input “content” field has encoded in “base64”, “file”, “raw” or “url”. | string |
|
options.pipes | Ordered pipes to transform nodes values by type. | object |
|
options.compact | Whether to produce detailed object or compact object. | boolean |
|
options.trim | Whether to trim whitespace characters that may exist before and after the text. | boolean |
|
options.nativeType | Whether to attempt converting text of numerals or boolean values to native type. | boolean |
|
options.nativeTypeAttributes | Whether to attempt converting attributes of numerals or boolean values to native type. | boolean |
|
options.addParent | Whether to add parent property in each element object that points to parent object. | boolean |
|
options.alwaysArray | Whether to always put sub elements as an item inside an array. | boolean |
|
options.alwaysChildren | Whether to always generate elements property even when there are no actual sub elements. | boolean |
|
options.instructionHasAttributes | Whether to parse contents of Processing Instruction as attributes or not. | boolean |
|
options.ignoreDeclaration | Whether to ignore parsing declaration property. | boolean |
|
options.ignoreInstruction | Whether to ignore parsing processing instruction property. | boolean |
|
options.ignoreAttributes | Whether to ignore parsing attributes of elements. | boolean |
|
options.ignoreComment | Whether to ignore parsing comments of the elements. | boolean |
|
options.ignoreCdata | Whether to ignore parsing CData of the elements. | boolean |
|
options.ignoreDoctype | Whether to ignore parsing Doctype of the elements. | boolean |
|
options.ignoreText | Whether to ignore parsing texts of the elements. | boolean |
Examples
steps:
- action: xml
id: xml-parse
name: Parse xml files
input:
commonParams:
encoding: raw
sources:
- content: "<books><book>nature calls</book></books>"
Parse multiple Xmls contents from various sources types.
Outputs
Key | Description | Type |
---|---|---|
results | Array of parsed XML objects. | array |
Links
yaml
Parse YAML content from various sources using the Backstage scaffolder framework.
Inputs
Key | Description | Type | Example |
---|---|---|---|
content * |
YAML source content | string |
|
encoding * |
Indicates if input “content” is encoded in “base64”, “file”, “raw”, or “url” | string |
Examples
steps:
- action: YAML_ID
id: yaml-parse
name: Parse yaml files
input:
commonParams:
encoding: raw
sources:
- content: |
key: value
- content: |
anotherkey: another value
This YAML defines a pipeline step that parses two YAML files using the action identified by YAML_ID
, with raw
encoding for the content.
Outputs
Key | Description | Type |
---|---|---|
results |
Array of parsed YAML content | array[] |
Links
roadiehq:utils:serialize:yaml
✅️ Ready to use in Roadie
Converts valid YAML to a string format.
Inputs
Name | Description | Type | Example |
---|---|---|---|
data* | Input YAML object to perform serialization on. | object |
{ ‘a’: ‘b’ } |
options | YAML stringify options | object |
{ ‘skipInvalid’: ‘true’ |
options:
Name | Description |
---|---|
indent* | (default: 2) - indentation width to use (in spaces) |
noArrayIndent | (default: false) - when true, will not add an indentation level to array elements |
skipInvalid | (default: false) - do not throw on invalid types (like function in the safe schema) and skip pairs and single values with such types |
flowLevel | (default: -1) - specifies level of nesting, when to switch from block to flow style for collections. -1 means block style everwhere |
sortKeys | (default: false) - if true, sort keys when dumping YAML. If a function, use the function to sort the keys |
lineWidth | (default: 80) - set max line width. Set -1 for unlimited width |
noRefs | (default: false) - if true, don’t convert duplicate objects into references |
noCompatMode | (default: false) - if true don’t try to be compatible with older yaml versions. Currently: don’t quote “yes”, “no” and so on, as required for YAML 1.1 |
condenseFlow | (default: false) - if true flow sequences will be condensed, omitting the space between a, b. Eg. ‘[a,b]’, and omitting the space between key: value and quoting the key. Eg. ’{“a”:b}’ Can be useful when using yaml for pretty URL query params as spaces are %-encoded. |
quotingType | (’ or ”, default: ’) - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. |
forceQuotes | (default: false) - if true, all non-key strings will be quoted even if they normally don’t need to. |
Examples
steps:
- id: roadiehq-utils-serialize-yaml
name: serialize yaml
action: roadiehq:utils:serialize:yaml
input:
data: { 'foo': 'bar' }
options:
noArrayIndent: true
Outputs
The roadiehq:utils:serialize:yaml
action produces one output.
Name | Description | Type |
---|---|---|
serialized | Output result from serialization | string |
Links
Content Manipulation Scaffolder Actions
roadiehq:utils:jsonata
✅️ Ready to use in Roadie
Allows performing JSONata operations and transformations on input objects and produces the output result as a step output.
Inputs
Name | Description | Type | Example |
---|---|---|---|
data* | Input data to be transformed | object / array |
{ a: "a" } |
expression* | JSONata expression to perform on the input | string |
users[0].email |
Examples
steps:
- id: transform
name: Transform with jsonata
action: roadiehq:utils:jsonata
input:
data: { users: [{ email: '[email protected]', name: 'a' }] }
expression: 'users[0].email'
Outputs
The roadiehq:utils:jsonata
action produces one output.
Name | Description | Type |
---|---|---|
result | Output result from JSONata | object / array / string / number |
roadiehq:utils:jsonata:yaml:transform
✅️ Ready to use in Roadie
Allows performing JSONata operations and transformations on a YAML file in the workspace. The result can be read from the result step output.
Inputs
Name | Description | Type | Example |
---|---|---|---|
path* | Input path to read yaml file | string |
‘backstage/catalog-info.yaml’ |
expression* | JSONata expression to perform on the input | string |
‘metadata.annotations.backstage.io/kubernetes-id ’ |
options | YAML stringify options | object |
{ ‘indent’: 4 } |
options:
Name | Description |
---|---|
indent* | (default: 2) - indentation width to use (in spaces) |
noArrayIndent | (default: false) - when true, will not add an indentation level to array elements |
skipInvalid | (default: false) - do not throw on invalid types (like function in the safe schema) and skip pairs and single values with such types |
flowLevel | (default: -1) - specifies level of nesting, when to switch from block to flow style for collections. -1 means block style everwhere |
sortKeys | (default: false) - if true, sort keys when dumping YAML. If a function, use the function to sort the keys |
lineWidth | (default: 80) - set max line width. Set -1 for unlimited width |
noRefs | (default: false) - if true, don’t convert duplicate objects into references |
noCompatMode | (default: false) - if true don’t try to be compatible with older yaml versions. Currently: don’t quote “yes”, “no” and so on, as required for YAML 1.1 |
condenseFlow | (default: false) - if true flow sequences will be condensed, omitting the space between a, b. Eg. ‘[a,b]’, and omitting the space between key: value and quoting the key. Eg. ’{“a”:b}’ Can be useful when using yaml for pretty URL query params as spaces are %-encoded. |
quotingType | (’ or ”, default: ’) - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. |
forceQuotes | (default: false) - if true, all non-key strings will be quoted even if they normally don’t need to. |
steps:
- id: transform
name: Transform YAML
action: roadiehq:utils:jsonata:yaml:transform
input:
path: a/b/test.txt
expression: <JSONata expression to perform on the input>
options:
noArrayIndent: true
Outputs
The roadiehq:utils:jsonata:yaml:transform
action produces one output.
Name | Description |
---|---|
result | Output result from JSONata yaml transform |
roadiehq:utils:jsonata:json:transform
✅️ Ready to use in Roadie
Allows performing JSONata operations and transformations on a JSON file in the workspace. The result can be read from the result step output.
Inputs
Name | Description | Type | Example |
---|---|---|---|
path* | Input path to read json file | string |
‘backstage/package.json’ |
expression* | JSONata expression to perform on the input | string |
‘engines.node’ |
as | Returns result as a JSON string or an object | string |
‘string’ / ‘object’ |
replacer | If string is specified for the as field, this filters the output by specifiying an array of keys that should be included in output. If specified, keys not in this array will be excluded. |
array |
[‘a’, ‘b’, ‘c’] |
space | If string is specified for the as field, this defines the number of spaces to add after each property in the resulting string. If >=1 it adds newlines after each property. If a string it adds that string instead. |
number / string |
1 |
Examples
steps:
- id: transform
name: Transform JSON
action: roadiehq:utils:jsonata:json:transform
input:
path: a/b/test.json
expression: 'users[0]'
as: 'object'
steps:
- id: transform
name: Transform JSON
action: roadiehq:utils:jsonata:json:transform
input:
path: a/b/test.json
expression: 'users[0]'
as: 'string'
replacer:
- email
- name
- prefix
space: 1
Outputs
The roadiehq:utils:jsonata:json:transform
action produces one output.
Name | Description | Type |
---|---|---|
result | Output result from JSONata json transform | string / object |
json:merge-file
Merges JSON files into a single JSON object stored in a new file in the workspace.
Inputs
Name | Description | Type | Example |
---|---|---|---|
inputFile* | The file in the working directory to merge. | string |
‘package.json’ |
outputFileName* | The name of the file to write to. | string |
‘package.json.updated’ |
outputFilePath | The directory path to output the file to. This is combined with the file name to form the full path. Defaults to the task’s working directory. | string |
‘updates’ |
jsonMergeOptions | Options to pass to the JSON mergeFiles function. See options here. | object |
{ ‘defaultArrayMergeOperation’: ‘concat’ } |
Examples
- id: merge-files
name: Merge files
action: json:merge-file
input:
inputFile: "file-1.json"
outputFileName: results.json
outputFilePath: updated
jsonMergeOptions:
defaultArrayMergeOperation: "concat"
Outputs
None
json:merge-files
Merges JSON files into a single JSON object stored in a new file in the workspace.
Inputs
Name | Description | Type | Example |
---|---|---|---|
inputFiles* | The file in the working directory to merge. | array |
[‘package1.json’, ‘package2.json’] |
outputFileName* | The name of the file to write to. | string |
‘package3.json’ |
outputFilePath | The directory path to output the file to. This is combined with the file name to form the full path. Defaults to the task’s working directory. | string |
‘updates’ |
jsonMergeOptions | Options to pass to the JSON mergeFiles function. See options here. | object |
{ ‘defaultArrayMergeOperation’: ‘concat’ } |
Examples
- id: merge-files
name: Merge files
action: json:merge-file
input:
inputFiles: ['file-1.json', 'file-2.json']
outputFileName: result.json
outputFilePath: updated
jsonMergeOptions:
defaultArrayMergeOperation: "concat"
Outputs
None
roadiehq:utils:json:merge
✅️ Ready to use in Roadie
Merge new data into an existing JSON file.
Inputs
Name | Description | Type | Example |
---|---|---|---|
path* | Path to existing file to append. | string |
‘package.json’ |
content* | This will be merged into to the file. Can be either an object or a string. | string / object |
{ ‘workspaces’: { ‘packages’: [‘packages/’, ‘plugins/’] } } |
mergeArrays | Where a value is an array the merge function should concatenate the provided array value with the target array. | boolean |
true |
matchFileIndent | Make the output file indentation match that of the specified input file. | boolean |
true |
Examples
steps:
- id: merge
name: JSON merge
action: json:merge
input:
path: 'package.json'
content:
engines:
node: '18'
steps:
- id: merge
name: JSON merge
action: roadiehq:utils:json:merge
input:
path: 'package.json'
mergeArrays: true
matchFileIndent: true
content:
workspaces:
packages:
- 'packages/*'
- 'plugins/*'
Outputs
The roadiehq:utils:json:merge
action produces one output.
Name | Description | Type |
---|---|---|
path | Path to the file that got appended to | string |
regex:replace
Validate an input structure using the zod
library.
Inputs
Key | Description | Type | Example |
---|---|---|---|
regExps * |
Array of regex objects with patterns, flags, replacements, and values | array |
|
pattern * |
The regex pattern to match the value, like in String.prototype.replace() |
string |
|
flags |
Optional array of regex flags (g , m , i , y , u , s , d ) |
array |
|
replacement * |
The replacement value for the regex, like in String.prototype.replace() |
string |
|
values * |
Array of objects containing key-value pairs for regex input values | array |
|
key * |
Key to access the regex value | string |
|
value * |
Input value of the regex | string |
|
##### Examples | |||
```yaml | |||
steps: |
- id: regexValues action: regex:replace name: Regex Values input: regExps: - pattern: ‘dog’ replacement: ‘monkey’ values: - key: ‘eg1’ value: exampleValue
Defines a workflow step that processes regex values by replacing instances of "dog" with "monkey" in the provided input value.
##### **Outputs**
| Key | Description | Type |
|------------|------------------------------------------------------------------------|----------|
| `pattern` | A validated regex pattern that can be passed to the RegExp constructor | `string` |
| `flags` | A validated set of flags that modify regex behavior | `array` |
| `values` | Validated key-value pairs of regex input | `array` |
##### **Links**
- [Code](https://github.com/janus-idp/backstage-plugins/blob/main/plugins/regex-actions/src/actions/regex/replace.ts)
- [npm package](https://www.npmjs.com/package/@janus-idp/backstage-scaffolder-backend-module-regex)
-----
#### `regex:fs:replace:plus`
Enable regex-based search and replacement across files using glob patterns.
##### **Inputs**
| **Key** | **Description** | **Type** | **Example** |
|-----------------|-----------------------------------------------------------------------------|-------------|-------------|
| `pattern`* | Regex expression to evaluate in file contents from `file`. | `string` | |
| `glob` * | Expression glob to find files to evaluate | `string` | |
| `replacement`* | Replacement expression based on the `pattern` field | `string` | |
| `flags` | Regex flags like d, g, i, m, s, u, v or y (optional) | `string` | |
##### **Examples**
Replace in files using Regex and Glob
```yaml
steps:
- action: regex:fs:replace:plus
id: regex-fs-replace
name: Replace in files
input:
glob: "**/*.y[a?]ml"
pattern: a
replacement: b
flags: g
Replace on xml keeping original indentarion useful to Yaml, Json and XML formats.
steps:
- action: regex:fs:replace:plus
id: regex-fs-replace
name: Append spring-kafka
input:
pattern: ([\t ]+)</dependencies>
glob: pom.xml
replacement: |-
$1 <dependency>
$1 <!-- added from backstage -->
$1 <groupId>org.springframework.kafka</groupId>
$1 <artifactId>spring-kafka</artifactId>
$1 </dependency>
$1</dependencies>
Outputs
Key | Description | Type |
---|---|---|
results |
Array containing objects with the results of the regex operation | array<object> |
Links
Other utils
uuid:v4:gen:plus
Generates a list of UUIDv4 values, with inputs for specifying the number of UUIDs and outputs in the form of an array of generated UUID strings.
Inputs
Key | Description | Type | Example |
---|---|---|---|
amount * |
Amount of UUIDs to generate | number |
Examples
Generate 3 UUID’s
steps:
- action: uuid:v4:gen:plus
id: uuid-v4-gen
name: UUID gen
input:
amount: 3
Outputs
Key | Description | Type |
---|---|---|
results |
List of generated UUIDs (UUIDv4) | array<string> |
Links
roadiehq:utils:sleep
✅️ Ready to use in Roadie
Halts the scaffolding for the given amount of seconds
Inputs
Key | Description | Type | Example |
---|---|---|---|
amount * |
Number of seconds to sleep | number |
3 |
Outputs
None
Links
vars:plus
Handle and log input variables, and return the same input as the output in a formatted structure.
Inputs
Key | Description | Type | Example |
---|---|---|---|
input * |
The input object passed to the action | object |
Examples
Proxy vars to reuse on next actions
steps:
- action: vars:plus
id: reusable-vars
name: Proxy vars
input:
foo: my-prefixed-${{ parameters.name | lower }}-foo
bar: bar-${{ parameters.value | lower }}
Outputs
Key | Description | Type |
---|---|---|
result |
Parsed input parameters | object |
Links
Backstage Specific
Catalog Scaffolder Actions
catalog:register
✅️ Ready to use in Roadie
This action manually registers an entity in the catalog.
You may want to do this if you haven’t enabled autodiscovery of components or if you’re using a filename which doesn’t match your autodiscovery pattern.
It has two sets of options. The first allows you to configure the location as a complete url through catalogInfoUrl
.
The second allows you to configure the repo containing the catalog file through repoContentsUrl
and optionally a filepath through catalogInfoPath
. You might use this along with the publish:github action.
In both cases you can pass an optional
flag which determines if the location can be created before the catalog files exists.
Examples
steps:
- action: catalog:register
id: register-with-catalog
name: Manually register with the catalog
input:
catalogInfoUrl: https://github.com/RoadieHQ/sample-service/blob/master/catalog-info-1.yaml
# optional: false # default
steps:
- action: catalog:register
id: register-with-catalog
name: Manually register with the catalog
input:
repoContentsUrl: ${{ steps["publish-repository"].output.repoContentsUrl }}
# catalogInfoPath: catalog-info.yaml # default
# optional: false # default
Inputs
Either catalogInfoUrl
must be specified or repoContentsUrl
must be specified.
key | description | value | example |
---|---|---|---|
catalogInfoUrl |
An absolute URL pointing to the catalog info file location | string |
GET |
optional |
Permit the registered location to optionally exist. Default: false | boolean |
‘/proxy/snyk/org/${{ parameters.orgName }}/projects/${{ parameters.projectId }}’ |
repoContentsUrl |
An absolute URL pointing to the root of a repository directory tree | string |
Accept: application/json |
catalogInfoPath |
A relative path from the repo root pointing to the catalog info file, defaults to /catalog-info.yaml’ | string |
kind: Component |
Outputs
None
Links
catalog:register:plus
Registers entities from a catalog descriptor file in the software catalog.
Inputs
Key | Description | Type | Example |
---|---|---|---|
catalogInfoUrl |
An absolute URL pointing to the catalog info file location | string |
|
optional |
Permit the registered location to optionally exist. Default: false |
boolean |
Examples
steps:
- action: catalog:register:plus
id: register-with-catalog
name: Register with the catalog
input:
infos:
- catalogInfoUrl: http://github.com/backstage/backstage/blob/master/catalog-info.yaml
Outputs
Key | Description | Type |
---|---|---|
entityRef |
Reference to the entity that was registered | string |
catalogInfoUrl |
The URL of the catalog info that was registered | string |
Links
catalog:write
✅️ Ready to use in Roadie
This action creates a catalog-info.yaml
file into the workspace directory. It takes an object that will be serialized as YAML into the body of the file.
Inputs
key | description | value | example |
---|---|---|---|
filePath |
Defaults to catalog-info.yaml | string |
backstage/catalog-info.yaml |
entity * |
A full entiy definition matching the entity schema | object |
Examples
steps:
- action: catalog:write
id: create-catalog-info-file
name: Create catalog file
input:
entity:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: test
annotations: {}
spec:
type: service
lifecycle: production
owner: default/owner
If you would like to create the catalog file in a custom location you can do that with the filePath
option.
steps:
- action: catalog:write
id: create-catalog-info-file
name: Create catalog file
input:
filePath: '.backstage/catalog-info.yaml'
entity:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: test
annotations: {}
spec:
type: service
lifecycle: production
owner: default/owner
Outputs
None
Links
catalog:fetch
This action fetches an entity or entities from the catalog by entity reference(s).
Inputs
key | description | value | example |
---|---|---|---|
entityRef |
An entity reference for the entity you want to fetch. | string |
component:default/test-service |
Examples
steps:
- action: catalog:fetch
id: catalog-entity-fetch
name: Fetch Catalog Entity
input:
entityRef: component:default/customer-service
You can also use default input parameters for kind and namespace defaultKind
, defaultNamespace
and specify optional: true
if you want the step to continue if the entity or entities do not exist.
steps:
- action: catalog:fetch
id: catalog-entity-fetch
name: Fetch Catalog Entity
input:
entityRef: component:default/customer-service
This action can be combined with parameter values from EntityPicker
like so:
...
parameters:
properties:
entity:
type: string
ui:field: EntityPicker
steps:
- action: catalog:fetch
id: catalog-entity-fetch
name: Fetch Catalog Entity
input:
entityRef: ${{ parameters.entity }}
Outputs
An entity
object following the schema of Backstage entities or entities
which is an array of entity objects.
Links
catalog:query:plus
Queries the catalog using provided filters, fields, and ordering parameters. It utilizes Backstage’s CatalogApi
for fetching catalog entities and allows customization through a schema for input and output data.
Inputs
Key | Description | Type | Example |
---|---|---|---|
fields |
Fields to be retrieved | array of string |
|
limit |
Limit for query results | number |
|
filter |
Filter query for entities | any |
|
orderFields.field |
Field to order by | string |
|
orderFields.order |
Sort order | string , enum: asc , desc |
|
fullTextFilter.term |
Search term for full-text filtering | string |
|
fullTextFilter.fields |
Fields for full-text filtering | array of string |
Examples
steps:
- action: catalog:query:plus
id: query-in-catalog
name: Query in catalog
input:
queries:
- limit: 2
fields:
- metadata.name
filter:
metadata.annotations.backstage.io/template-origin: template:default/java-api
relations.dependsOn: ${{ parameters.component_ref }}
This step queries the catalog for up to 2 entities, retrieving only the metadata.name
field, filtered by a specific template origin annotation and a dependency relation based on the provided component_ref
parameter.
Outputs
Key | Description | Type |
---|---|---|
results |
The queried catalog results | array of array of Entity |
Links
catalog:relation:plus
Query entities based on relations. It uses a schema-based validation approach for input and output.
Inputs
Key | Description | Type | Example |
---|---|---|---|
relations |
List of entity relations. | array of object |
|
relations.type |
The type of the relation. | string |
|
relations.targetRef |
The entity reference of the target for this relation. | string |
|
optional |
Optional flag indicating whether the property is optional. | boolean or undefined |
|
defaultKind |
Default kind for the entity. | string or undefined |
|
defaultNamespace |
Default namespace for the entity. | string or undefined |
|
relationType |
The type of relation for the entity. | string or undefined |
Examples
steps:
- action: catalog:relation:plus
id: query-in-relations
name: Query in relations
input:
queries:
- relations:
- type: apiProvidedBy
targetRef: component/default:customers-service
- type: ownedBy
targetRef: group/default:dream-devs
optional: true
relationType: apiProvidedBy
This step defines an action catalog:relation:plus
to query entity relations, filtering by the apiProvidedBy relation type, with optional entities related to customers-service and dream-devs.
Outputs
Key | Description | Type |
---|---|---|
results |
List of entities (or null) matching the query. | array of array of Entity or null |
Links
catalog:timestamping
Adds the backstage.io/createdAt
annotation containing the current timestamp to your entity object
Inputs
None
Examples
steps:
- id: timestamp
name: Add Timestamp to catalog-info.yaml
action: catalog:timestamping
Outputs
None
Links
catalog:scaffolded-from
Adds scaffoldedFrom
spec containing the template entityRef to your entity object
Inputs
None
Examples
steps:
- id: append-templateRef
name: Append the entityRef of this template to the entityRef
action: catalog:scaffolded-from
Outputs
None
Links
catalog:annotate
Allows you to annotate your entity object with specified label(s), annotation(s) and spec property(ies).
Inputs
Examples
steps:
- id: add-fields-to-catalog-info
name: Add a few fields into `catalog-info.yaml` using the generic action
action: catalog:annotate
input:
labels:
custom: ${{ parameters.label }}
other: "test-label"
annotations:
custom.io/annotation: ${{ parameters.label }}
custom.io/other: "value"
Outputs
Links
Notifications Scaffolder Actions
notification:send
Sends notifications via the Backstage Notification Service. It takes in recipients, severity, and other optional parameters, then sends notifications with the specified payload and error handling.
Inputs
Key | Description | Type | Example |
---|---|---|---|
recipients |
The recipient of the notification, either broadcast or entity. If using entity, entityRef must be provided |
string (enum: ‘broadcast’, ‘entity’) |
|
entityRefs |
The entity references to send the notification to, required if using recipient of entity | string[] |
|
title |
Notification title | string |
|
info |
Notification description | string |
|
link |
Notification link | string |
|
severity |
Notification severity | string (enum: ‘low’, ‘normal’, ‘high’, ‘critical’) |
|
scope |
Notification scope | string |
|
optional |
Do not fail the action if the notification sending fails | boolean |
Examples
steps:
- id: sendNotification
action: notification:send
name: Send Notification
input:
recipients: broadcast
title: Test notification
This triggers the “send notification” action with a broadcast recipient and a title “Test notification”
Outputs
None
Links
Language / protocol / infrastructure
Git Scaffolder Actions
git
Allows execution of Git commands within a specified working directory.
Inputs
Key | Description | Type | Example |
---|---|---|---|
command * |
The Git command to run | string |
|
workingDirectory * |
Working directory within the scaffolder workspace to execute the command in | string |
|
args |
Arguments to pass to the Git command | string[] |
Examples
steps:
- id: git
name: git
action: git
input:
command: ${{ parameters.command }} # ex: 'commit' - will make the scaffolder run the `git commit` command
workingDirectory: ${{ parameters.workingDirectory }} # ex: './my-working-directory' - will execute the command in the specified directory relative to the scaffolder workspace
args: ${{ parameters.args }} # ex: ['-m', 'My commit message'] - will add '-m My commit message' to the arguments passed to the git command
Example of using the generic git action.
Outputs
None
Links
HCL/Terraform Scaffolder Actions
hcl:merge
Create an action for merging two HCL contents.
Inputs
Key | Description | Type | Example |
---|---|---|---|
aSourceContent * |
The HCL content to be merged | string |
|
bSourceContent * |
The HCL content to be merged | string |
Examples
Outputs
Key | Description | Type |
---|---|---|
hcl |
The merged HCL content | string |
Links
hcl:merge:write
Merge two HCL content strings and write the merged result to a specified output path.
Inputs
Key | Description | Type | Example |
---|---|---|---|
aSourceContent * |
The HCL content to be merged | string |
|
source content * |
The HCL content to be merged | string |
|
outputPath |
The path to write the merged HCL content to | string |
Examples
Outputs
None
Links
hcl:merge:files
Merge two HCL files specified by their paths.
Inputs
Key | Description | Type | Example |
---|---|---|---|
aSourcePath * |
The path to the HCL file to be merged | string |
|
bSourcePath * |
The path to the HCL file to be merged | string |
Examples
Outputs
Key | Description | Type |
---|---|---|
hcl |
The merged HCL content from the two files | string |
Links
hcl:merge:files:write
Merge two HCL files and writing the merged content to a specified output path, with input validation using Zod.
Inputs
Key | Description | Type | Example |
---|---|---|---|
aSourcePath * |
The path to the HCL file to be merged | string |
|
bSourcePath * |
The path to the HCL file to be merged | string |
|
outputPath |
The path to write the merged HCL content to | string |
Outputs
None
Links
Kubernetes Scaffolder Actions
kubernetes:create-namespace
Creates a Kubernetes namespace, leveraging Kubernetes API and Backstage’s catalog client to fetch cluster information.
Inputs
Key | Description | Type | Example |
---|---|---|---|
namespace * |
Name of the namespace to be created | string |
|
clusterRef |
Cluster resource entity reference from the catalog | string |
|
url |
URL of the Kubernetes API, used if clusterRef is not provided |
string |
|
token * |
Bearer token to authenticate with | string |
|
skipTLSVerify |
Skip TLS certificate verification, not recommended for production use, defaults to false | boolean |
|
caData |
Certificate Authority base64 encoded certificate | string |
|
labels |
Labels that will be applied to the namespace. | string |
Examples
steps:
- id: create-kubernetes-namespace
name: Create kubernetes namespace
action: kubernetes:create-namespace
input:
namespace: ${{ parameters.namespace }}
clusterRef: ${{ parameters.clusterRef }}
url: ${{ parameters.url }}
token: ${{ parameters.token }}
skipTLSVerify: ${{ parameters.skipTLSVerify }}
caData: ${{ parameters.caData }}
labels: ${{ parameters.labels }}
This example creates a Kubernetes namespace using the kubernetes:create-namespace
action, with inputs sourced from specified parameters.
Outputs
None
Links
deploy:kubernetes
Action for deploying Kubernetes manifests within a Backstage application, using the Kubernetes API to apply the provided YAML or JSON resources.
In this format, the Inputs table summarizes the parameters required for the action, while the Outputs table outlines the expected output from the action.
Inputs
Key | Description | Type | Example |
---|---|---|---|
manifest * |
YAML or JSON manifest for the Kubernetes resource to be applied | any |
|
clusterUrl * |
URL of the Kubernetes API | string |
|
authToken * |
Bearer token to authenticate with the Kubernetes API | string |
Outputs
Key | Description | Type |
---|---|---|
result |
Result of the applied Kubernetes manifest | KubernetesObject |
Links
kube:apply
Action for applying Kubernetes manifests in a Backstage application.
Inputs
Key | Description | Type | Example |
---|---|---|---|
manifest * |
The resource manifest to apply in the Platform cluster | string |
|
namespaced * |
Whether the API is namespaced or not | boolean |
Examples
steps:
- action: kube:apply
id: k-apply
name: Create a Resouce
input:
namespaced: true
manifest: |
apiVersion: example.group.bar/v1
kind: Foo
metadata:
name: ${{ parameters.name }}
namespace: default
Outputs
Key | Description | Type |
---|---|---|
metadata |
Metadata about the applied resource | object |
namespace |
The namespace of the applied resource | string |
name |
The name of the applied resource | string |
response |
The response object from the Kubernetes API | object |
Links
kube:delete
Action for deleting Kubernetes resources.
Inputs
Key | Description | Type | Example |
---|---|---|---|
apiVersion * |
The apiVersion of the resource | string |
|
kind * |
The kind of the resource | string |
|
name * |
The name of the resource | string |
|
namespace |
The namespace of the resource | string |
Examples
steps:
- action: kube:delete
id: k-delete
name: Delete
input:
apiVersion: example.group.bar/v1
kind: Foo
namespace: ${{parameters.namespace}}
name: ${{ parameters.name }}
Outputs
None
Links
kube:job:wait
Action that waits for a Kubernetes job to complete based on specified labels and a namespace.
Note: The output properties for conditions
have been generalized; you may want to specify the exact structure depending on your use case.
Inputs
Key | Description | Type | Example |
---|---|---|---|
labels* | The labels of the job resource to wait on | Record<string, string> |
|
namespace | The namespace of the resource to wait on, e.g. default | string |
Examples
steps:
- action: kube:job:wait
id: k-wait
name: Wait for a Job to complete
input:
labels:
job-name: foo-bar
# more labels
This is a step example that waits for a Kubernetes job with the label job-name: foo-bar
to complete, using the kube:job:wait
action and assigning it the ID k-wait
.
Outputs
Key | Description | Type |
---|---|---|
conditions | The conditions of the job once it has completed | Array<{ type: string; status: string; ... }> |
Links
Maven Scaffolder Actions
maven
Runs Maven commands in a specified working directory with optional arguments.
Inputs
Key | Description | Type | Example |
---|---|---|---|
command * |
The Maven command to execute | string |
|
workingDirectory |
Directory within the scaffolder workspace to run the command | string |
|
args |
Arguments to pass to the command | string[] |
Examples
steps:
- id: maven
name: maven
action: maven
input:
command: ${{ parameters.command }} # ex: 'clean package'
workingDirectory: ${{ parameters.workingDirectory }} # ex: './my-working-directory' - will execute the command in the specified directory relative to the scaffolder workspace
args: ${{ parameters.args }} # ex: ['-P', 'Profile'] - will add '-P Profile' to the arguments passed to the maven command
Outputs
None
Links
NPM Scaffolder Actions
npm:init
Action that automates running the npm init -y
command in a specified workspace directory.
Inputs
Key | Description | Type | Example |
---|---|---|---|
ctx.workspacePath |
The path of the workspace directory where npm init will be run |
string |
|
ctx.logStream |
The stream used to log the execution of the shell command | Stream |
|
ctx.logger.info |
Method for logging informational messages | function |
|
ctx.logger.error |
Method for logging error messages | function |
Examples
steps:
- id: npm-init
name: init
action: npm:init
Outputs
Key | Description | Type |
---|---|---|
npm:init |
Action ID for identifying this template action | string |
npm |
Command for running npm init retrieved via getNpmCommand |
string |
executeShellCommand |
Function executing the npm command in the shell | function |
Links
- Code)
npm:install
Action for a Backstage Scaffolder plugin that installs an npm package quietly based on the provided package name.
Inputs
Key | Description | Type | Example |
---|---|---|---|
packageToInstall * |
Name of the package to install | string |
Examples
- id: npm-install
name: install
action: npm:install
input:
packageToInstall: ${{ parameters.packageToInstall }}
Outputs
None
Links
- Code)
npm:exec
Action for executing npm exec
commands in a task workspace directory, using specific arguments provided in the input.
Inputs:
Key | Description | Type | Example |
---|---|---|---|
arguments |
The arguments to pass to the npm exec command | array |
|
arguments.items |
The individual string arguments in the array | string |
Examples
- id: npm-exec
name: exec
action: npm:exec
input:
args: ${{ parameters.execArgs }}
Outputs
None
Links
- Code)
npm:config
For the Backstage scaffolder plugin that runs an npm config
command with specified arguments in a task’s workspace directory.
Inputs
Key | Description | Type | Example |
---|---|---|---|
arguments * |
The arguments to pass to the npm config command | array of strings |
Examples
- id: npm-config
name: config
action: npm:config
input:
args: ${{ parameters.execArgs }}
Outputs
None
Links
- Code)
Odo Scaffolder Actions
devfile:odo:command
Action for executing OpenShift Do (odo) commands in a workspace.
Inputs
Key | Description | Type | Example |
---|---|---|---|
command * |
The odo command to run from the scaffolder workspace | string |
|
args |
Arguments to pass to the command | array |
Examples
steps:
- id: generic-odo-command
name: Execute odo command
action: devfile:odo:command
input:
command: ${{ parameters.command }} # e.g.: 'analyze'
args: ${{ parameters.args }} # e.g.: ['-o', 'json']
Outputs
Key | Description | Type |
---|---|---|
GLOBALODOCONFIG |
Path to the temporary odo config file | string |
ODO_TRACKING_CONSENT |
Telemetry tracking consent setting for odo | string |
TELEMETRY_CALLER |
Caller context for telemetry (set to backstage ) |
string |
Links
devfile:odo:component:init
Action to initialize an ODO (OpenShift Do) component using a Devfile within a Backstage scaffolder template.
Inputs
Key | Description | Type | Example |
---|---|---|---|
devfile * |
The Devfile to use | string |
|
version * |
The Devfile Stack version | string |
|
starter_project |
The starter project | string |
|
name * |
The new component name | string |
Examples
steps:
- id: odo-init
name: Generate
action: devfile:odo:component:init
input:
name: ${{ parameters.name }}
devfile: ${{ parameters.devfile_data.devfile }}
version: ${{ parameters.devfile_data.version }}
starter_project: ${{ parameters.devfile_data.starter_project }}
Outputs
None
Links
Pulumi Scaffolder Actions
pulumi:new
Action for creating a new Pulumi project, including input validation and execution of necessary commands to set up the project.
Inputs
Key | Description | Type | Example |
---|---|---|---|
template * |
The Pulumi template to use, this can be a built-in template or a URL to a template | string |
|
stack * |
The name of the Pulumi stack | string |
|
organization * |
The organization to which the Pulumi stack belongs | string |
|
name * |
The name of the Pulumi project | string |
|
description |
The Pulumi project description to use | string |
|
config |
The Pulumi project config to use | object |
|
secretConfig |
The Pulumi project secret config to use | object |
|
args |
The Pulumi command arguments to run | string[] |
|
folder * |
The folder to run Pulumi in | string |
Examples
steps:
- id: pulumi-new-component
name: Cookie cut the component Pulumi project
action: pulumi:new
input:
name: "${{ parameters.component_id }}-infrastructure"
description: ${{ parameters.description | dump }}
organization: ediri
stack: ${{ parameters.stack }}
template: "https://github.com/my-silly-organisation/microservice-civo/tree/main/infrastructure-${{ parameters.cloud }}-${{ parameters.language }}"
config:
"node:node_count": "${{ parameters.nodeCount }}"
folder: .
This example creates a new Pulumi project for a component, using specified parameters such as name, description, organization, stack, template URL, configuration settings, and folder.
Outputs
None
Links
pulumi:up
Runs Pulumi to manage cloud resources, either in a local or remote workspace based on the provided configuration.
Inputs
Key | Description | Type | Example |
---|---|---|---|
stack * |
The name of the Pulumi stack. | string |
|
organization * |
The organization name for the Pulumi stack. | string |
|
name * |
The name of the Pulumi project. | string |
|
deployment * |
This flag indicates that Pulumi Deployment will be used. | boolean |
|
repoUrl |
The Pulumi project repo URL to use, when using Pulumi Deployment. | string |
|
repoBranch |
The Pulumi project repo branch to use, when using Pulumi Deployment. | string |
|
repoProjectPath |
The Pulumi project repo path to use, when using Pulumi Deployment. | string |
|
config |
The Pulumi project config to use. | object |
|
providerCredentialsFromEnv |
The Pulumi project provider credentials to use. | array of string |
|
secretConfig |
The Pulumi project secret config to use. | object |
|
outputs |
The Pulumi project outputs to return. | array of string |
|
preRunCommands |
The Pulumi project pre-run commands to execute. | array of string |
|
suppressProgress |
Suppress progress output. | boolean |
Examples
steps:
- id: pulumi-deploy-infrastructure
name: Deploy the infrastructure using Pulumi CLI
action: pulumi:up
input:
deployment: false
name: "${{ parameters.component_id }}-infrastructure"
repoUrl: "https://github.com/${{ (parameters.repoUrl | parseRepoUrl)['owner'] }}/${{ (parameters.repoUrl | parseRepoUrl)['repo'] }}"
repoProjectPath: .
organization: ediri
outputs:
- kubeconfig
- ClusterId
stack: ${{ parameters.stack }}
This example uses the Pulumi CLI to deploy infrastructure, specifying parameters such as the deployment type, project details, organization name, stack, and the expected outputs.
Outputs
Key | Description | Type |
---|---|---|
(dynamic) | The Pulumi project outputs to return. | record of { [key: string]: { value: any; } } |
Links
3rd Party Tools
Ansible Scaffolder Actions
ansible:jobTemplate:launch
Action for launching an Ansible job template and waiting for it to complete.
Inputs
Key | Description | Type | Example |
---|---|---|---|
ansibleConfig |
Configuration for Ansible, including URL and token. | object |
|
jobTemplateId * |
The ID of the Ansible job template to be launched. | number |
Outputs
Key | Description | Type |
---|---|---|
job |
Information for the Ansible job that was run. | object |
Links
ansible-controller:job_template:launch
Triggers the launch of an Ansible job template via the Ansible controller API.
Inputs
Key | Description | Type | Example |
---|---|---|---|
controller * |
Specifies the controller to be used | string |
|
job_template * |
Name of the job template to be executed | string |
|
extra_vars |
Additional variables passed to the job | object |
Examples
steps:
- id: call-ansible
name: Calling ansible to launch
action: ansible-controller:job_template:launch
input:
controller: my-controller
job_template: Demo Job Template
extra_vars:
execution_count: ${{ parameters.execution_count }}
fail_execution: ${{ parameters.fail_execution }}
Configure your template call to ansible.
Outputs
Key | Description | Type |
---|---|---|
job |
Status and details of the job | object |
Links
ArgoCD Scaffolder Actions
argocd:create-resources
Action for creating Argo CD resources using Backstage’s scaffolding plugin.
Inputs
Key | Description | Type | Example |
---|---|---|---|
projectName |
The name of the project as it will show up in Argo CD. By default, it uses the application name. | string |
|
appName * |
The name of the app as it will show up in Argo CD. | string |
|
argoInstance * |
The name of the Argo CD Instance to deploy to. | string |
|
namespace * |
The namespace Argo CD will target for resource deployment. | string |
|
repoUrl * |
The Repo URL that will be programmed into the Argo CD project and application. | string |
|
path * |
The path of the resources Argo CD will watch in the mentioned repository. | string |
|
labelValue |
The label Backstage will use to find applications in Argo CD. | string |
Examples
steps:
- id: create-argocd-resources
name: Create ArgoCD Resources
action: argocd:create-resources
input:
appName: ${{ parameters.name }}-nonprod
argoInstance: ${{ parameters.argoinstance }}
namespace: ${{ parameters.namespace }}
repoUrl: ${{ steps.publish.output.remoteUrl }}
labelValue: ${{ parameters.name }}
path: "kubernetes/nonprod"
This creates Argo CD resources by invoking the argocd:create-resources
action, using specified parameters for application name, Argo CD instance, namespace, repository URL, label value, and resource path.
Outputs
Key | Description | Type |
---|---|---|
argoInstance |
The Argo CD instance to which resources are deployed. | string |
appName |
The name of the application in Argo CD. | string |
projectName |
The name of the project in Argo CD. | string |
namespace |
The namespace where resources are deployed. | string |
sourceRepo |
The repository URL for the application resources. | string |
sourcePath |
The path within the repository where resources are located. | string |
labelValue |
The label used to identify the application in Argo CD. | string |
Links
AWS Scaffolder Actions
roadiehq:aws:s3:cp
Action that uploads files from a local directory to an AWS S3 bucket using specified parameters.
Inputs
Key | Description | Type | Example |
---|---|---|---|
bucket * |
The bucket to copy the given path | string |
|
region * |
AWS region | string |
|
path |
A Glob pattern that lists the files to upload. Defaults to everything in the workspace | string |
|
prefix |
Prefix to use in the s3 key. | string |
|
endpoint |
The fully qualified endpoint of the web service. | string |
|
s3ForcePathStyle |
Whether to force path style URLs for S3 objects | boolean |
Examples
steps:
- id: uploadToS3
name: Upload to S3
action: roadiehq:aws:s3:cp
input:
region: eu-west-1
bucket: ${{ parameters.bucket }}
Outputs
Key | Description | Type |
---|---|---|
files |
List of files that were successfully uploaded | array |
error |
Error message if the upload fails | string |
Links
roadiehq:aws:ecr:create
This TypeScript code defines a Backstage template action for creating an AWS Elastic Container Registry (ECR) repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoName * |
The name of the ECR repository. | string | |
tags |
List of tags. | array | |
imageMutability |
Set image mutability to true or false. | boolean | |
scanOnPush |
The image scanning configuration for the repository. This determines whether images are scanned for known vulnerabilities after being pushed to the repository. | boolean | |
region * |
AWS region to create ECR on. | string |
Examples
steps:
- id: create-ecr
name: Create ECR Rrepository
action: roadiehq:aws:ecr:create
input:
repoName: ${{ parameters.RepoName }}
tags: ${{parameters.Tags}}
imageMutability: ${{parameters.ImageMutability}}
scanOnPush: ${{parameters.ScanOnPush}}
region: ${{parameters.Region}}
This creates an AWS Elastic Container Registry (ECR) repository by utilizing the roadiehq:aws:ecr:create
action and passing in parameters for the repository name, tags, image mutability, scan-on-push setting, and AWS region.
Outputs
Key | Description | Type |
---|---|---|
repository.repositoryUri |
URI of the created ECR repository. | string |
Links
roadiehq:aws:secrets-manager:create
Action for creating a new secret in AWS Secrets Manager using the Backstage scaffolder plugin.
Inputs
Key | Description | Type | Example |
---|---|---|---|
name * |
The name of the secret to be created | string |
|
description |
The description of the secret to be created | string |
|
value |
The string value to be encrypted in the new secret | string |
|
tags |
AWS tags to be added to the secret | array |
|
profile |
AWS profile to use | string |
|
region * |
AWS region to create the secret on | string |
Examples
steps:
- id: createSecret
name: create secret - prod
action: roadiehq:aws:secrets-manager:create
input:
name: ${{ parameters.Name }}
description: ${{ parameters.Description }}
value: ${{ parameters.Value }}
tags: ${{parameters.Tags}}
profile: ${{parameters.Profile}}
region: ${{parameters.Region}}
Outputs
Key | Description | Type |
---|---|---|
secretArn |
The ARN of the created secret | string |
name |
The name of the created secret | string |
description |
The description of the created secret | string |
tags |
The tags associated with the created secret | array |
Links
opa:get-env-providers
Action that retrieves AWS environment provider data based on a reference to an AWS environment entity from the Backstage catalog.
Inputs
Key | Description | Type | Example |
---|---|---|---|
environmentRef * |
The entity reference identifier for an AWS Environment | string |
Outputs
Key | Description | Type |
---|---|---|
envName * |
The AWS environment name | string |
envShortName * |
The short AWS environment name (e.g., dev, qa, prod) | string |
envRef * |
The entity reference ID of the environment | string |
envDeployManualApproval * |
Whether manual approval is required for deploying to the environment | boolean |
envProviders * |
The AWS environment providers, including details such as name, type, account, region, VPC, and subnets | array |
Links
opa:create-secret
Action that creates secrets in AWS Secrets Manager.
Inputs
Key | Description | Type | Example |
---|---|---|---|
secretName * |
The name of the secret to create in Secrets Manager | string |
|
description |
An optional description of the secret | string |
|
region |
The AWS region where the new secret should be created | string |
|
tags |
Key/value pairs to apply as tags to any created AWS resources | array of object |
|
tags.Key |
The tag key to apply to the resource | string |
|
tags.Value |
The tag value to apply to the resource | string , number , boolean |
|
secretName*, description, region, tags |
Outputs
Key | Description | Type |
---|---|---|
secretARN |
The ARN of the created secret | string |
Links
opa:createRepoAccessToken:gitlab
Action for creating a GitLab repository access token and storing it in AWS Secrets Manager.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string | |
projectId * |
Project Id | number | |
secretArn * |
Arn of the SecretsManager secret where the access token will be stored | string | |
region |
AWS Region (defaults to backend.platformRegion if not provided) |
string |
Outputs
Key | Description | Type |
---|---|---|
token |
The generated repository access token | string |
expirationDate |
The expiration date of the access token | string |
Links
opa:get-platform-metadata
Action that retrieves metadata about the OPA (Open Policy Agent) on AWS platform, specifically fetching the AWS region where the solution is deployed.
Inputs
Key | Description | Type | Example |
---|---|---|---|
envConfig * |
Configuration options for the action | Config |
Outputs
Key | Description | Type |
---|---|---|
platformRegion * |
The AWS region where the OPA on AWS solution is deployed | string |
Links
opa:get-ssm-parameters
Action that retrieves AWS SSM parameter values for specified environment providers.
Inputs
Key | Description | Type | Example |
---|---|---|---|
paramKeys* | The SSM parameter keys to look up | string[] |
|
envProviders* | The AWS environment providers containing account and region info | EnvironmentProvider[] |
Outputs
Key | Description | Type |
---|---|---|
params | Map of SSM parameters, keyed off of the environment provider name | object |
Links
aws:cloudcontrol:create
This action creates AWS resources using the AWS Cloud Control API.
Inputs
Key | Description | Type | Example |
---|---|---|---|
typeName* | The AWS resource type | string |
‘AWS::ECR::Repository’ |
desiredState* | string |
’{“RepositoryName”: ”${{ parameters.name }}-ecr-repository”}’ | |
wait* | boolean |
true | |
maxWaitTime* | number |
20 |
Examples
steps:
- id: create-ecr-repository
name: Create ECR Repository
action: aws:cloudcontrol:create
input:
typeName: 'AWS::ECR::Repository'
desiredState: '{"RepositoryName": "${{ parameters.name }}-ecr-repository"}'
wait: true
maxWaitTime: 20
Outputs
Unknown
Links
Azure Scaffolder Actions
publish:azure
✅️ Ready to use in Roadie
Action to initialize a Git repository and publish it to Azure DevOps.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string |
|
description |
Repository Description | string |
|
defaultBranch |
Sets the default branch on the repository. The default value is ‘master’. | string |
|
gitCommitMessage |
Sets the commit message on the repository. The default value is ‘initial commit’. | string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is ‘Scaffolder’. | string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
|
sourcePath |
Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published. | string |
|
token |
The token to use for authorization to Azure. | string |
Examples
steps:
- id: publish
action: publish:azure
name: Publish to Azure
input:
repoUrl: 'dev.azure.com?organization=organization&project=project&repo=repo'
description: 'Initialize a git repository'
This performs an action to publish content to Azure DevOps by initializing a Git repository with a specified URL and description.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
A URL to the repository with the provider | string |
repoContentsUrl |
A URL to the root of the repository | string |
repositoryId |
The Id of the created repository | string |
commitHash |
The git commit hash of the initial commit | string |
Links
git:clone:azure
This action clones repositories from Azure DevOps.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repo URL to be parsed with parseRepoUrl |
string |
|
fromRef |
Git references (branch, tag, or commit ID) to checkout; default is 'master' |
string |
|
targetPath |
Relative path on the workspace to store repository contents; default is './' |
string |
Examples
steps:
- action: GIT_CLONE_AZURE
id: git-azure-clone
name: Clone from azure repo same ref
input:
commonParams:
fromRef: ref/heads/main
params:
- repoUrl: dev.azure.com?owner=backstage-demo&organization=k3tech&repo=my-repo-1
targetPath: ./repo-1
- repoUrl: dev.azure.com?owner=backstage-demo&organization=k3tech&repo=my-repo-2
targetPath: ./repo-2
This clones two Azure DevOps repositories using the same Git reference (main
).
Outputs
Key | Description | Type |
---|---|---|
results |
Array of results containing repository clone details | array<object> |
Links
git:commit:azure
Action for committing and pushing changes to an Azure DevOps Git repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
toBranch * |
New branch to commit and push. | string |
|
commitMessage * |
Commit message string. | string |
|
targetPath |
Relative path on workspace where repository contents are stored, default is './' . |
string |
Examples
steps:
- action: GIT_COMMIT_AZURE
id: git-azure-commit
name: Commit to azure repo same ref
input:
commonParams:
toBranch: ref/heads/main
commitMessage: "Add some files"
params:
- targetPath: ./repo-1
- targetPath: ./repo-2
Step to commit and push changes to an Azure DevOps Git repository on the main
branch for two different repositories (./repo-1
and ./repo-2
) using the specified commit message.
Outputs
Key | Description | Type |
---|---|---|
results |
Array of objects containing the results of the commit operation. | array |
Links
pipeline:create:azure
Automates the creation of Azure DevOps pipelines from Git repositories.
Inputs
Key | Description | Type | Example |
---|---|---|---|
pipelinePath |
Path to the pipeline in the repository | string |
|
yamlFilename |
Path to pipeline YAML file (default: .azuredevops/azure-pipelines.yaml ) |
string |
|
pipelineName |
Name of the pipeline | string |
|
defaultBranch |
Default branch reference (default: refs/heads/main ) |
string |
|
repoUrl * |
Repository URL to be parsed with parseRepoUrl |
string |
pipelinePath, yamlFilename, pipelineName, defaultBranch, repoUrl*
Examples
steps:
- action: PIPELINE_CREATE_AZURE
id: pipeline-create-azure
name: Create pipelines
input:
commonParams:
defaultBranch: 'ref/heads/main'
pipelinePath: 'my-microsservices'
yamlFilename: '.azure-pipeline.yaml'
params:
- repoUrl: './repo-1'
pipelineName: 'repo-1'
- repoUrl: './repo-2'
pipelineName: 'repo-2'
This creates Azure pipelines for two repositories (repo-1
and repo-2
), using common parameters such as the default branch, pipeline path, and YAML filename.
Outputs
Key | Description | Type |
---|---|---|
results |
The result array with pipeline creation responses | array<object> |
Links
azure:pipeline:create
This creates an Azure Pipeline through the Azure DevOps REST API using Backstage’s scaffolding plugin.
Inputs
Key | Description | Type | Example |
---|---|---|---|
createApiVersion |
The Azure Create Pipeline API version to use. Defaults to 6.1-preview.1. | string |
|
server |
The host of Azure DevOps. Defaults to dev.azure.com. | string |
|
organization * |
The name of the Azure DevOps organization. | string |
|
project * |
The name of the Azure project. | string |
|
folder * |
The name of the folder of the pipeline. | string |
|
name |
The name of the pipeline. | string |
|
repositoryId |
The ID of the repository. | string |
|
repositoryName |
The name of the repository. | string |
|
yamlPath |
The location of the Azure DevOps Pipeline definition file. Defaults to /azure-pipelines.yaml. | string |
|
token |
Optional. Token for Azure API authentication. If not provided, uses credentials from integration. | string |
Examples
- id: createAzurePipeline
name: Create Azure Pipeline
action: azure:pipeline:create
input:
organization: ${{ (parameters.repoUrl | parseRepoUrl)['organization'] }}
project: ${{ (parameters.repoUrl | parseRepoUrl)['owner'] }}
folder: "my-azure-pipelines-folder"
name: ${{ parameters.name }}
repositoryId: ${{ steps.publish.output.repositoryId }}
repositoryName: ${{ (parameters.repoUrl | parseRepoUrl)['repo'] }}
yamlPath: <optional value to your azure pipelines yaml file, defaults to ./azure-pipelines.yaml>
Outputs
Key | Description | Type |
---|---|---|
pipelineId |
The ID of the created Azure pipeline. | string |
pipelineUrl |
The URL to the created Azure pipeline in Azure DevOps. | string |
Links
azure:pipeline:run
Defines an Azure DevOps pipeline runner action using Backstage’s scaffolder plugin.
Inputs
Key | Description | Type | Example |
---|---|---|---|
runApiVersion |
The Azure Run Pipeline API version to use. Defaults to 7.0 | string |
|
buildApiVersion |
The Builds API version to use. Defaults to 6.1-preview.6 | string |
|
server |
The host of Azure DevOps. Defaults to dev.azure.com | string |
|
organization |
The name of the Azure DevOps organization | string |
|
pipelineId * |
The pipeline ID | string |
|
project * |
The name of the Azure project | string |
|
branch |
The branch of the pipeline’s repository | string |
|
pipelineParameters |
The values needed as parameters to start a build | object |
Examples
- id: runAzurePipeline
name: Run Azure Pipeline
action: azure:pipeline:run
input:
organization: ${{ (parameters.repoUrl | parseRepoUrl)['organization'] }}
pipelineId: ${{ steps.createAzurePipeline.output.pipelineId }}
project: ${{ (parameters.repoUrl | parseRepoUrl)['owner'] }}
Outputs
Key | Description | Type |
---|---|---|
pipelineRunId |
ID of the initiated Azure pipeline run | number |
pipelineUrl |
URL to the Azure pipeline run | string |
status |
Status of the pipeline run (e.g., inProgress, completed) | string |
Links
azure:pipeline:permit
Defines an Azure DevOps pipeline permission management action for Backstage scaffolding.
Inputs
Key | Description | Type | Example |
---|---|---|---|
permitsApiVersion |
The Azure Permits Pipeline API version to use. Defaults to 7.1-preview.1 . |
string |
|
server |
The host of Azure DevOps. Defaults to dev.azure.com . |
string |
|
organization * |
The name of the Azure DevOps organization. | string |
|
project * |
The name of the Azure DevOps project. | string |
|
resourceId * |
The resource ID for which permissions are being changed. | string |
|
resourceType * |
The type of the resource (e.g., endpoint ). |
string |
|
authorized * |
A boolean indicating whether to authorize (true ) or unauthorize (false ) the pipeline. |
boolean |
|
pipelineId * |
The ID of the Azure pipeline to be authorized/unauthorized. | string |
|
token |
An optional token for Azure DevOps API authentication. If not provided, it uses the credentials from the integration. | string |
Examples
- id: permitAzurePipeline
name: Change Azure Pipeline Permissions
action: azure:pipeline:permit
input:
organization: ${{ (parameters.repoUrl | parseRepoUrl)['organization'] }}
project: ${{ (parameters.repoUrl | parseRepoUrl)['owner'] }}
resourceId: <serviceEndpointId>
resourceType: endpoint
authorized: true
pipelineId: ${{ steps.createAzurePipeline.output.pipelineId }}
Outputs
Key | Description | Type |
---|---|---|
response.ok |
A boolean indicating if the pipeline permissions were successfully changed. | boolean |
response.status |
The HTTP status code of the pipeline permissions change request. | number |
Links
azure:repo:clone
✅️ Ready to use in Roadie
Action for cloning an Azure DevOps repository into a specified workspace directory, handling authentication via personal access tokens or bearer tokens.
Inputs
Key | Description | Type | Example |
---|---|---|---|
remoteUrl * |
The Git URL to the repository. | string |
|
branch |
The branch to checkout to. | string |
|
targetPath |
The subdirectory of the working directory to clone the repository into. | string |
|
server |
The hostname of the Azure DevOps service. Defaults to dev.azure.com . |
string |
|
token |
The token to use for authorization. | string |
Examples
- id: cloneAzureRepo
name: Clone Azure Repo
action: azure:repo:clone
input:
remoteUrl: "https://<MY_AZURE_ORGANIZATION>@dev.azure.com/<MY_AZURE_ORGANIZATION>/<MY_AZURE_PROJECT>/_git/<MY_AZURE_REPOSITORY>"
branch: "main"
targetPath: ./sub-directory
Outputs
Key | Description | Type |
---|---|---|
repositoryId |
The ID of the cloned repository. | string |
Links
azure:repo:push
✅️ Ready to use in Roadie
Action that pushes content from a local workspace to a remote Azure repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
branch * |
The branch to checkout to. | string |
|
sourcePath |
The subdirectory of the working directory containing the repository. | string |
|
gitCommitMessage |
Sets the commit message on the repository. The default value is ‘Initial commit’. | string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is ‘Scaffolder’. | string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
Examples
- id: pushAzureRepo
name: Push to Remote Azure Repo
action: azure:repo:push
input:
branch: <MY_AZURE_REPOSITORY_BRANCH>
sourcePath: ./sub-directory
gitCommitMessage: Add ${{ parameters.name }} project files
Outputs
None
Links
azure:repo:pr
✅️ Ready to use in Roadie
Action for creating a pull request in Azure DevOps.
Inputs
Key | Description | Type | Example |
---|---|---|---|
organization | The name of the organization in Azure DevOps. | string | |
sourceBranch | The branch to merge into the source. | string | |
targetBranch | The branch to merge into (default: main). | string | |
title* | The title of the pull request. | string | |
description | The description of the pull request. | string | |
repoId* | Repo ID of the pull request. | string | |
project | The Project in Azure DevOps. | string | |
supportsIterations | Whether or not the PR supports iterations. | boolean | |
server | The hostname of the Azure DevOps service. Defaults to dev.azure.com | string | |
token | The token to use for authorization. | string | |
autoComplete | Enable auto-completion of the pull request once policies are met | boolean |
Examples
- id: pullRequestAzureRepo
name: Create a Pull Request to Azure Repo
action: azure:repo:pr
input:
sourceBranch: <MY_AZURE_REPOSITORY_BRANCH>
targetBranch: "main"
repoId: <MY_AZURE_REPOSITORY>
title: ${{ parameters.name }}
project: <MY_AZURE_PROJECT>
organization: <MY_AZURE_ORGANIZATION>
supportsIterations: false
Outputs
Key | Description | Type |
---|---|---|
pullRequestId | The ID of the created pull request | number |
Links
Bitbucket Scaffolder Actions
publish:bitbucket
This action creates a new Bitbucket repository and publishes the files in the workspace directory to the repository. There is one mandatory parameter repoUrl
. The repo url picker described in the string
parameter description above.
Input
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string |
|
description |
Repository Description | string |
|
repoVisibility |
Repository Visibility (private or public) | string |
|
defaultBranch |
Sets the default branch on the repository. The default value is ‘master’ | string |
|
sourcePath |
Path within the workspace that will be used as the repository root. If omitted, the entire workspace is used. | string |
|
enableLFS |
Enable LFS for the repository (only available for hosted Bitbucket). | boolean |
|
token |
The token to use for authorization to BitBucket | string |
|
gitCommitMessage |
Sets the commit message on the repository. The default value is ‘initial commit’ | string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is ‘Scaffolder’ | string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
Examples
The repoUrl
must be in the format bitbucket.org?repo=<project name>&workspace=<workspace name>&project=<project name>
steps:
- action: publish:bitbucket
id: publish-repository
name: Publish Repository to Bitbucket
input:
repoUrl: 'bitbucket.org?repo=newprojectname&workspace=workspacename&project=projectname'
You can optionally add a description
to the new repository.
steps:
- action: publish:bitbucket
id: publish-repository
name: Publish Repository to Bitbucket
input:
repoUrl: 'bitbucket.org?repo=newprojectname&workspace=workspacename&project=projectname'
description: 'My new project'
By default the project will be created as a private repository. It can be made public using the repoVisibility
option.
steps:
- action: publish:bitbucket
id: publish-repository
name: Publish Repository to Bitbucket
input:
repoUrl: 'bitbucket.org?repo=newprojectname&workspace=workspacename&project=projectname'
repoVisibility: 'public'
By default the repository is created with a “master” branch. If you would like to use “main” instead you can us the defaultBranch
option.
steps:
- action: publish:bitbucket
id: publish-repository
name: Publish Repository to Bitbucket
input:
repoUrl: 'bitbucket.org?repo=newprojectname&workspace=workspacename&project=projectname'
defaultBranch: 'main'
By default the repository will be populated with the files contained in the workspace directory. If you need to use a subdirectory, you can use the sourcePath
option.
steps:
- action: publish:bitbucket
id: publish-repository
name: Publish Repository to Bitbucket
input:
repoUrl: 'bitbucket.org?repo=newprojectname&workspace=workspacename&project=projectname'
sourcePatch: './repoRoot'
Outputs
The publish:bitbucket
action produces the following outputs.
Name | Description |
---|---|
remoteUrl | Url for the newly created repository |
repoContentsUrl | Url that shows the contents of the repository |
Links
publish:bitbucketCloud
Action that creates and initializes a Bitbucket Cloud repository and publishes content to it from a workspace.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository location | string |
|
description |
Repository description | string |
|
repoVisibility |
Repository visibility (private or public) | string |
|
defaultBranch |
Sets the default branch on the repository (default is ‘master’) | string |
|
gitCommitMessage |
Sets the commit message on the repository (default is ‘initial commit’) | string |
|
sourcePath |
Path within the workspace to use as the repository root | string |
|
token |
Authentication token for Bitbucket Cloud | string |
Examples
steps:
- id: publish
action: publish:bitbucketCloud
name: Publish to Bitbucket Cloud
input:
repoUrl: bitbucket.org?repo=repo&workspace=workspace&project=project
description: Initialize a git repository
This publishes content to Bitbucket Cloud by initializing a repository, providing the repository URL, workspace, project, and a description for the repository.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
URL to the repository with the provider | string |
repoContentsUrl |
URL to the root of the repository | string |
commitHash |
Git commit hash of the initial commit | string |
Links
bitbucket:pipelines:run
Triggers a run of a Bitbucket Cloud pipeline using the Backstage framework.
Inputs
Key | Description | Type | Example |
---|---|---|---|
workspace * |
The Bitbucket workspace to run the pipeline in | string |
|
repo_slug * |
The repository identifier where the pipeline is triggered | string |
|
body |
Optional body to pass to the pipeline trigger request | object |
|
token |
Optional authorization token for Bitbucket API requests | string |
Examples
steps:
- action: bitbucket:pipelines:run
id: run-bitbucket-pipeline
name: Run an example bitbucket pipeline
input:
workspace: test-workspace
repo_slug: test-repo-slug
body:
target:
commit:
type: commit
hash: a3c4e02c9a3755eccdc3764e6ea13facdf30f923
selector:
type: custom
pattern: Deploy to production
type: pipeline_ref_target
ref_name: master
ref_type: branch
Outputs
Key | Description | Type |
---|---|---|
buildNumber |
The build number of the triggered pipeline | number |
repoUrl |
A URL to the repository where the pipeline was triggered | string |
repoContentsUrl |
A URL to view the pipeline in Bitbucket Cloud | string |
Links
publish:bitbucketCloud:pull-request
Action for publishing a pull request to a Bitbucket Cloud repository using Backstage’s scaffolding system.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string |
|
title * |
Pull Request title | string |
|
description |
The description of the pull request | string |
|
targetBranch |
Branch to apply changes to. Default is ‘master’. | string |
|
sourceBranch * |
Branch to copy changes from | string |
|
token |
Token for authorization to Bitbucket Cloud | string |
|
gitAuthorName |
Author name for the commit. Default is ‘Scaffolder’. | string |
|
gitAuthorEmail |
Author email for the commit | string |
Examples
steps:
- action: 'publish:bitbucketCloud:pull-request'
id: 'publish-bitbucket-cloud-pull-request-target-branch'
name: 'Creating pull request on bitbucket cloud'
input:
repoUrl: 'bitbucket.org?workspace=workspace&project=project&repo=repo'
title: 'My pull request'
sourceBranch: 'my-feature-branch'
targetBranch: 'development'
Outputs
Key | Description | Type |
---|---|---|
pullRequestUrl |
A URL to the pull request with the provider | string |
Links
publish:bitbucketServer
Creates a new repository in Bitbucket Server.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string |
|
description |
Repository Description | string |
|
repoVisibility |
Repository Visibility | string (enum: ['private', 'public']) |
|
defaultBranch |
Default branch on the repository (default value is ‘master’) | string |
|
sourcePath |
Path within the workspace used as the repository root | string |
|
enableLFS |
Enable Git Large File Storage (LFS) for the repository | boolean |
|
token |
Authentication token for Bitbucket Server | string |
|
gitCommitMessage |
Git commit message (default value is ‘initial commit’) | string |
|
gitAuthorName |
Author name for the commit (default value is ‘Scaffolder’) | string |
|
gitAuthorEmail |
Author email for the commit | string |
Examples
steps:
- action: publish:bitbucketServer
id: publish-bitbucket-server-minimal
name: Publish To Bitbucket Server
input:
repoUrl: 'hosted.bitbucket.com?project=project&repo=repo'
description: 'This is a test repository'
repoVisibility: 'private'
defaultBranch: 'main'
sourcePath: 'packages/backend'
enableLFS: false
token: 'test-token'
gitCommitMessage: 'Init check commit'
gitAuthorName: 'Test User'
gitAuthorEmail: '[email protected]'
This publishes a repository to Bitbucket Server, specifying repository details, visibility, commit information, and optional configuration like enabling LFS.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
A URL to the repository with the provider | string |
repoContentsUrl |
A URL to the root of the repository | string |
commitHash |
The git commit hash of the initial commit | string |
Links
publish:bitbucketServer:pull-request
Opens a pull request on a Bitbucket Server repository to merge two existing branches.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location (URL) | string |
|
title * |
The title for the pull request | string |
|
description |
The description of the pull request | string |
|
targetBranch |
Branch of repository to apply changes to. Defaults to ‘master’ | string |
|
sourceBranch * |
Branch of repository to copy changes from | string |
|
token |
Authorization token for Bitbucket Server | string |
|
gitAuthorName |
Author name for the commit. Defaults to ‘Scaffolder’ | string |
|
gitAuthorEmail |
Author email for the commit | string |
Examples
steps:
- action: publish:bitbucketServer:pull-request
id: publish-bitbucket-server-pull-request-minimal
name: Creating pull request on bitbucket server
input:
repoUrl: hosted.bitbucket.com?project=project&repo=repo
title: My pull request
sourceBranch: my-feature-branch
description: This is a detailed description of my pull request
This example creates a pull request on a Bitbucket Server, including action type, identification, name, and input parameters like repository URL, title, source branch, and description.
Outputs
Key | Description | Type |
---|---|---|
pullRequestUrl |
A URL to the pull request created in the Bitbucket Server | string |
Links
CNEO Scaffolder Actions
cnoe:kubernetes:apply
Action for applying Kubernetes manifests using kubectl
, either from a string, an object, or a file path, with support for namespaced configurations and cluster authentication.
Inputs
Key | Description | Type | Example |
---|---|---|---|
manifestString |
The manifest to apply in the cluster. Must be a string. | string |
|
manifestObject |
The manifest to apply in the cluster. Must be an object. | object |
|
manifestPath |
The path to the manifest file. | string |
|
namespaced * |
Whether the API is namespaced or not. | boolean |
|
clusterName |
The name of the cluster to apply this. | string |
Outputs
Key | Description | Type |
---|---|---|
The object returned by Kubernetes by performing this operation | object |
Links
cnoe:verify:dependency
Verify resource dependencies for CNOE.
Inputs
Key | Description | Type | Example |
---|---|---|---|
verifiers* | The list of verifiers | array of string |
Outputs
None
Links
cnoe:utils:sanitize
Action for sanitizing resources defined in a YAML document by removing empty fields, before further processing.
Inputs
Key | Description | Type | Example |
---|---|---|---|
document * |
The document to be sanitized | string |
Outputs
Key | Description | Type |
---|---|---|
sanitized |
The sanitized document | string |
Links
Codacy Scaffolder Actions
codacy:add-repo
Action for adding a repository to Codacy using its API.
Inputs
Key | Description | Type | Example |
---|---|---|---|
provider |
The name of the code hosting provider. | string |
|
owner |
The username or organization name that owns the repository. | string |
|
repository |
The name of the repository to add. | string |
Examples
steps:
- id: add-repo
name: Add Repository to Codacy
action: codacy:add-repo
input:
provider: gh|gl|bb
owner: your-organization-or-username
repository: ${{ parameters.repoName }}
This example adds a specified repository from a given code hosting provider (GitHub, GitLab, or Bitbucket) to Codacy, using the organization or username as the owner and a parameter for the repository name.
Outputs
Key | Description | Type |
---|---|---|
data |
Response data from Codacy upon successful addition of the repository. | object |
Links
Confluence Scaffolder Actions
confluence:transform:markdown
Action that transforms Confluence content into Markdown format and updates a GitHub repository with the new Markdown files and modified mkdocs.yml
configuration.
Inputs
Key | Description | Type | Example |
---|---|---|---|
confluenceUrls |
Paste your Confluence URL. Ensure it follows this format: https://{confluence+base+url}/display/{spacekey}/{page+title} or https://{confluence+base+url}/spaces/{spacekey}/pages/1234567/{page+title} for Confluence Cloud. |
array | |
repoUrl |
GitHub Repo URL, specifying the location of the mkdocs.yml file inside the GitHub repository where you want to store the document. |
string |
Outputs
Key | Description | Type |
---|---|---|
repo |
The name of the repository. | string |
owner |
The owner of the repository. | string |
Links
Cue Scaffolder Actions
cue:cueflow
This action fetches some template content, runs a Cue command on it, and copies output files to a specified directory.
Inputs
Key | Description | Type | Example |
---|---|---|---|
url * |
Relative path or absolute URL pointing to the directory tree to fetch | string |
|
cuePkg |
Cue package name, default is “config” | string |
|
cueCmd |
Cue command name, default is “run” | string |
|
cueOutDir |
Cue output dir, default is “out” | string |
|
values |
Values to pass on to the templating engine | object |
|
targetPath |
Target path within the working directory to generate contents to. Defaults to the working directory root. | string |
Outputs
Key | Description | Type |
---|---|---|
out |
Output directory containing generated files | string |
Links
Gerrit Scaffolder Actions
publish:gerrit:review
Action for creating a new Gerrit review by committing and pushing changes to a Git repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string |
|
branch |
Branch of the repository the review will be created on | string |
|
sourcePath |
Subdirectory of working directory containing the repository | string |
|
gitCommitMessage * |
Sets the commit message on the repository. | string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is ‘Scaffolder’ | string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
Examples
steps:
- id: publish
action: publish:gerrit:review
name: Publish new gerrit review
input:
repoUrl: gerrithost.org?repo=repo&owner=owner
gitCommitMessage: Initial Commit Message
branch: develop
This publishes a new Gerrit review, specifying the repository URL, commit message, and branch to use.
Outputs
Key | Description | Type |
---|---|---|
reviewUrl |
A URL to the review | string |
repoContentsUrl |
A URL to the root of the repository | string |
Links
publish:gerrit
Action that initializes a Git repository with content from the workspace and publishes it to a Gerrit repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl |
Repository Location | string |
|
description |
Repository Description | string |
|
defaultBranch |
Sets the default branch on the repository. The default value is ‘master’ | string |
|
gitCommitMessage |
Sets the commit message on the repository. The default value is ‘initial commit’ | string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is ‘Scaffolder’ | string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
|
sourcePath |
Path within the workspace that will be used as the repository root. | string |
Examples
steps:
- id: publish
action: publish:gerrit
name: Publish to Gerrit
input:
repoUrl: 'gerrit.com?repo=repo&owner=owner'
description: 'Initialize a gerrit repository'
This publishes content to a Gerrit repository.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl * |
A URL to the repository with the provider | string |
repoContentsUrl |
A URL to the root of the repository | string |
commitHash |
The git commit hash of the initial commit | string |
Links
Gitea Scaffolder Actions
publish:gitea
This action initializes a git repository from workspace content and publishes it to a Gitea repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location | string |
|
description |
Repository Description | string |
|
defaultBranch |
Sets the default branch on the repository. The default value is ‘main’ | string |
|
repoVisibility |
Sets the visibility of the repository. The default value is ‘public’. | string |
|
gitCommitMessage |
Sets the commit message on the repository. The default value is ‘initial commit’ | string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is ‘Scaffolder’ | string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
|
sourcePath |
Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published as the repository. | string |
Examples
steps:
- id: publish
action: publish:gitea
name: Publish to Gitea
input:
repoUrl: 'gitea.com?repo=repo&owner=owner'
defaultBranch: 'main'
repoVisibility: 'private'
This publishes a repository to Gitea.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
A URL to the repository with the provider | string |
repoContentsUrl |
A URL to the root of the repository | string |
commitHash |
The git commit hash of the initial commit | string |
Links
GitHub Scaffolder Actions
publish:github
✅️ Ready to use in Roadie
This action creates a new GitHub repository and publishes the files in the workspace directory to the repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
The URL of the repository where the content will be published. | string |
|
description |
Optional description of the repository. | string |
|
homepage |
Optional homepage URL for the repository. | string |
|
access |
The access level for the repository (private/public/internal). | string |
|
defaultBranch |
The default branch for the repository (e.g., master or main). | string |
|
protectDefaultBranch |
Whether to protect the default branch. | boolean |
|
protectEnforceAdmins |
Whether to enforce branch protection for admins. | boolean |
|
deleteBranchOnMerge |
Whether to delete the branch after merging pull requests. | boolean |
|
gitCommitMessage |
Custom commit message for the initial commit. | string |
|
gitAuthorName |
Author name for the initial commit. | string |
|
gitAuthorEmail |
Author email for the initial commit. | string |
|
allowRebaseMerge |
Whether to allow rebase merging. | boolean |
|
allowSquashMerge |
Whether to allow squash merging. | boolean |
|
squashMergeCommitTitle |
Title for squash merge commits, can be either ‘PR_TITLE’ or ‘COMMIT_OR_PR_TITLE’. | `‘PR_TITLE’ | ‘COMMIT_OR_PR_TITLE’` |
squashMergeCommitMessage |
Message for squash merge commits, can be ‘PR_BODY’, ‘COMMIT_MESSAGES’, or ‘BLANK’. | `‘PR_BODY’ | ‘COMMIT_MESSAGES’ |
allowMergeCommit |
Whether to allow regular merge commits. | boolean |
|
allowAutoMerge |
Whether to allow auto-merging pull requests. | boolean |
|
sourcePath |
Path to the source code to be pushed to the repository. | string |
|
bypassPullRequestAllowances |
Users, teams, or apps that can bypass pull request requirements. | object |
|
requiredApprovingReviewCount |
Number of required approving reviews for pull requests. | number |
|
restrictions |
Restrictions on which users, teams, or apps can push to the branch. | object |
|
requireCodeOwnerReviews |
Whether to require code owner reviews for pull requests. | boolean |
|
dismissStaleReviews |
Whether to dismiss stale reviews when new commits are pushed. | boolean |
|
requiredStatusCheckContexts |
Status checks required to pass before merging. | string[] |
|
requireBranchesToBeUpToDate |
Whether branches must be up to date with the base branch before merging. | boolean |
|
requiredConversationResolution |
Whether to require conversation resolution before merging. | boolean |
|
requireLastPushApproval |
Whether to require approval of the last push in a pull request. | boolean |
|
repoVisibility |
The visibility of the repository (private, internal, or public). | `‘private’ | ‘internal’ |
collaborators |
List of users or teams with specific access to the repository. | Array<object> |
|
hasProjects |
Whether to enable GitHub Projects for the repository. | boolean |
|
hasWiki |
Whether to enable GitHub Wiki for the repository. | boolean |
|
hasIssues |
Whether to enable GitHub Issues for the repository. | boolean |
|
token |
GitHub access token for authentication. | string |
|
topics |
List of topics to apply to the repository. | string[] |
|
repoVariables |
Custom variables to set for the repository. | object |
|
secrets |
Secret values to store in the repository. | object |
|
oidcCustomization |
Customization for OIDC tokens used in the repository. | object |
|
requiredCommitSigning |
Whether to require commit signing. | boolean |
|
customProperties |
Additional custom properties for repository creation. | object |
Examples
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
By default it will create a repository with a master
branch. If you prefer to use main
you can do the following:
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
defaultBranch: main
The access
input parameter adds an admin collaborator to the repository. It can be a reference to a GitHub user or a team in GitHub.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
access: AcmeInc/engineering
You can protect the default branch from being pushed to directly by using protectDefaultBranch
if your repository is part of a Github Pro account.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
protectDefaultBranch: true
You can enable code owner reviews using the requireCodeOwnerReviews
option:
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
requireCodeOwnerReviews: true
The repoVisibility
option allows the repository to be made public. By default it will be a private repository.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
repoVisibility: 'public'
To cause merges to delete the source branch, you can enable the deleteBranchOnMerge
setting.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
deleteBranchOnMerge: true
If you want to disable merge commits, squash merge and rebase merge you can do that with the settings allowMergeCommit
, allowSquashMerge
and allowRebaseMerge
. By default, these are enabled.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
allowMergeCommit: false
allowSquashMerge: false
allowRebaseMerge: false
By default the repository will be populated with the files contained in the workspace directory. If you need to use a subdirectory, you can use the sourcePath
option.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
sourcePatch: './repoRoot'
Collaborators can be added to the repository using the collaborators
option. It takes an array of username
or team
and access
. username
is the GitHub username to allow collaboration.
The access
option gives the user specific type of permissions. The options are pull
, push
, admin
, maintain
or triage
. these equate to:
- pull (read)
- push (write)
- triage (triage)
- admin (admin)
- maintain (maintain - only for public repos)
The team
value should be the Github team slug and should not include the org-name as a prefix.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
collaborators:
- user: user1
access: admin
- team: github-team-name
access: pull
The topics
allows adding topics to the created repository when its created.
steps:
- action: publish:github
id: publish-repository
name: Publish Repository to Github
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
topics:
- java
- ruby
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
The remote URL of the repository where the content is published. | string |
repoContentsUrl |
The URL to view the contents of the repository. | string |
commitHash |
The hash of the initial commit pushed to the repository. | string |
Links
publish:github:pull-request
✅️ Ready to use in Roadie
This action creates a pull request against a pre-existing repository using the files contained in the workspace directory.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Accepts the format ‘github.com?repo=reponame&owner=owner’ where ‘reponame’ is the repository name and ‘owner’ is an organization or username. | string |
|
branchName * |
The name for the branch. | string |
|
targetBranchName |
The target branch name of the merge request. | string |
|
title * |
The name for the pull request. | string |
|
description * |
The description of the pull request. | string |
|
draft |
Create a draft pull request. | boolean |
|
sourcePath |
Subdirectory of the working directory to copy changes from. | string |
|
targetPath |
Subdirectory of the repository to apply changes to. | string |
|
token |
The token to use for authorization to GitHub. | string |
|
reviewers |
The users that will be added as reviewers to the pull request. | array |
|
teamReviewers |
The teams that will be added as reviewers to the pull request. | array |
|
commitMessage |
The commit message for the pull request commit. | string |
|
update |
Update pull request if it already exists. | boolean |
|
forceFork |
Create pull request from a fork. | boolean |
|
gitAuthorName |
Sets the default author name for the commit. The default value is the authenticated user or ‘Scaffolder’. | string |
|
gitAuthorEmail |
Sets the default author email for the commit. The default value is the authenticated user or ’[email protected]‘. | string |
|
forceEmptyGitAuthor |
Forces the author to be empty. This is useful when using a Github App, allowing the commit to be verified on Github. | boolean |
Examples
The most basic example is:
steps:
- action: publish:github:pull-request
id: create-pull-request
name: Create a pull request
input:
repoUrl: 'github.com?repo=reponame&owner=AcmeInc'
branchName: ticketNumber-123
title: 'Make some changes to the files'
description: 'This pull request makes changes to the files in the reponame repository in the AcmeInc organization'
If the updated code is contained in a subdirectory to the workspace directory, you can use the sourcePath
to select it. If the files you want to target to update are in a subdirectory of the repository you can use the targetPath
option.
steps:
- action: publish:github:pull-request
id: create-pull-request
name: Create a pull request
input:
repoUrl: 'github.com?repo=reponame&owner=AcmeInc'
branchName: ticketNumber-123
title: 'Make some changes to the files'
description: 'This pull request makes changes to the files in the reponame repository in the AcmeInc organization'
sourcePath: ./subdirectory
targetPath: ./subdirectory
You can use the user that runs the scaffolder template to open the PR rather than opening it on behalf of the Roadie Github App by specifying the token field. The token can be injected by the RepoUrlPicker parameter as documented here
parameters:
- title: Choose a location
required:
- repoUrl
properties:
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
# Here's the option you can pass to the RepoUrlPicker
requestUserCredentials:
secretsKey: USER_OAUTH_TOKEN
additionalScopes:
github:
- workflow
allowedHosts:
- github.com
steps:
- action: publish:github:pull-request
id: create-pull-request
name: Create a pull request
input:
repoUrl: 'github.com?repo=reponame&owner=AcmeInc'
branchName: ticketNumber-123
title: 'Make some changes to the files'
description: 'This pull request makes changes to the files in the reponame repository in the AcmeInc organization'
# here's where the secret can be used
token: ${{ secrets.USER_OAUTH_TOKEN }}
NB: The branch you use for the pull request must be a new branch for the repo.
Outputs
The publish:github:pull-request
action produces two outputs.
Name | Description |
---|---|
remoteUrl | Url to the new pull request |
pullRequestNumber | Shows the number of the pull request |
They can be accessed in subsequent steps as follows:
steps:
- id: log-message
name: Log Message
action: debug:log
input:
message: 'RemoteURL: ${{ steps["create-pull-request.output.remoteUrl }}, ${{ steps["create-pull-request"].output.pullRequestNumber }}!'
Links
github:actions:dispatch
✅️ Ready to use in Roadie
This action allows you to trigger the execution of a GitHub action on a repository. The repoUrl
option is a repo url for GitHub. The RepoUrlPicker
documented above can generate this value. The workflowId
can be the workflow id from the GitHub API or you can just use the filename for the workflow file itself. The branchOrTagName
indicates which commit to run the workflow against.
Examples
This example will run the workflow defined in the “my-workflow-file.yaml” file on the “newreponame” repository on the “main” branch.
steps:
- action: github:actions:dispatch
id: trigger-build
name: Trigger Build
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
workflowId: 'my-workflow-file.yaml'
branchOrTagName: 'main'
If the workflow takes additional inputs, you can pass these along with the workflowInputs
option.
steps:
- action: github:actions:dispatch
id: trigger-build
name: Trigger Build
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
workflowId: 'my-workflow-file.yaml'
branchOrTagName: 'main'
workflowInputs:
parameter1: value1
parameter2: value2
Outputs
The github:actions:dispatch
action does not have any outputs.
Links
github:webhook
✅️ Ready to use in Roadie
You can configure a webhook on an existing repository in GitHub using this action. It takes repoUrl
and webhookUrl
. The repoUrl
option needs to be in a GitHub repo format. The RepoUrlPicker
documented above will generate a URL in the correct format.
Examples
steps:
- action: github:webhook
id: add-webhook
name: Add Webhook
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
webhookUrl: 'https://webhook-handler-service.abc/handle-webhook'
You can configure a webhook secret using the webhookSecret
option. You will likely want to provide this via an output from a previous step.
steps:
- action: github:webhook
id: add-webhook
name: Add Webhook
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
webhookUrl: 'https://webhook-handler-service.abc/handle-webhook'
webhookSecret: 'mysupersecretwebhooksecret'
You can configure the types of events
that trigger the webhook. For a full list of options see here
steps:
- action: github:webhook
id: add-webhook
name: Add Webhook
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
webhookUrl: 'https://webhook-handler-service.abc/handle-webhook'
events:
- push
- pull_request
If you would like the webhook to receive every event, you can set the events to contain ”*“.
steps:
- action: github:webhook
id: add-webhook
name: Add Webhook
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
webhookUrl: 'https://webhook-handler-service.abc/handle-webhook'
events:
- '*'
By default the payload of the webhook is form encoded, if you prefer json you can use contentType: json
steps:
- action: github:webhook
id: add-webhook
name: Add Webhook
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
webhookUrl: 'https://webhook-handler-service.abc/handle-webhook'
contentType: json
You can disable SSL on the webhook request using the insecureSsl
option, but it is not advised.
steps:
- action: github:webhook
id: add-webhook
name: Add Webhook
input:
repoUrl: 'github.com?repo=newreponame&owner=AcmeInc'
webhookUrl: 'https://webhook-handler-service.abc/handle-webhook'
insecureSsl: true
Outputs
The github:webhook
action does not have any outputs.
Links
github:autolinks:create
Action to create autolink references for GitHub repositories, which automatically link certain keywords to specific URLs in issues, pull requests, or commits.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl |
Accepts the format ‘github.com?repo=reponame&owner=owner’ where ‘reponame’ is the new repository name and ‘owner’ is an organization or username. | string |
|
keyPrefix |
This prefix appended by certain characters will generate a link any time it is found in an issue, pull request, or commit. | string |
|
urlTemplate |
The URL must contain <num> for the reference number. <num> matches different characters depending on the value of isAlphanumeric . |
string |
|
isAlphanumeric |
Whether this autolink reference matches alphanumeric characters. If true, the <num> parameter of the urlTemplate matches alphanumeric characters A-Z (case insensitive), 0-9, and -. If false, this autolink reference only matches numeric characters. Default: true |
boolean |
|
token |
The token to use for authorization to GitHub. | string |
Examples
steps:
- action: 'github:autolinks:create'
name: 'Create an autolink reference'
input:
repoUrl: 'github.com?repo=repo&owner=owner'
keyPrefix: 'TICKET-'
urlTemplate: 'https://example.com/TICKET?query=<num>'
isAlphanumeric: false
This performs the autolink creation action in a GitHub repository.
Outputs
None
Links
github:deployKey:create
Action for Backstage that creates and stores GitHub Deploy Keys, including the ability to encrypt and store the associated private key as a GitHub secret.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Accepts the format ‘github.com?repo=reponame&owner=owner’ where ‘reponame’ is the new repository name and ‘owner’ is an organization or username | string |
|
publicKey * |
Generated from ssh-keygen. Begins with ‘ssh-rsa’, ‘ecdsa-sha2-nistp256’, ‘ecdsa-sha2-nistp384’, ‘ecdsa-sha2-nistp521’, ‘ssh-ed25519’, ’[email protected]’, or ’[email protected]‘. | string |
|
privateKey * |
SSH Private Key generated from ssh-keygen | string |
|
deployKeyName * |
Name of the Deploy Key | string |
|
privateKeySecretName |
Name of the GitHub Secret to store the private key related to the Deploy Key. Defaults to: ‘KEY_NAME_PRIVATE_KEY’ where ‘KEY_NAME’ is the name of the Deploy Key | string |
|
token |
The token to use for authorization to GitHub | string |
Examples
The YAML representation of the provided steps describes a process for creating and storing a GitHub Deploy Key, specifying the necessary inputs such as repository URL, public key, private key, and the deploy key name.
steps:
- action: github:deployKey:create
name: Create and store a Deploy Key
input:
repoUrl: github.com?repo=repository&owner=owner
publicKey: pubkey
privateKey: privkey
deployKeyName: Push Tags
This is for creating and storing a GitHub Deploy Key, specifying the necessary inputs such as repository URL, public key, private key, and the deploy key name.
Outputs
Key | Description | Type |
---|---|---|
privateKeySecretName |
The GitHub Action Repo Secret Name for the Private Key | string |
Links
github:environment:create
Action for creating deployment environments on GitHub.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Accepts the format ‘github.com?repo=reponame&owner=owner’ where ‘reponame’ is the new repository name and ‘owner’ is an organization or username | string |
|
name * |
Name of the deployment environment to create | string |
|
deploymentBranchPolicy |
The type of deployment branch policy for this environment. To allow all branches to deploy, set to null. | object |
|
customBranchPolicyNames |
The name pattern that branches must match in order to deploy to the environment. | array |
|
customTagPolicyNames |
The name pattern that tags must match in order to deploy to the environment. | array |
|
environmentVariables |
Environment variables attached to the deployment environment | object |
|
secrets |
Secrets attached to the deployment environment | object |
|
token |
The token to use for authorization to GitHub | string |
|
waitTimer |
The time to wait before creating or updating the environment (in milliseconds) | integer |
|
preventSelfReview |
Whether to prevent self-review for this environment | boolean |
|
reviewers |
Reviewers for this environment | array |
Outputs
None
Links
github:issues:label
✅️ Ready to use in Roadie
Action to add labels to pull requests or issues on GitHub.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Accepts the format 'github.com?repo=reponame&owner=owner' where ‘reponame’ is the repository name and ‘owner’ is an organization or username |
string |
|
number * |
The pull request or issue number to add labels to | number |
|
labels * |
The labels to add to the pull request or issue | string[] |
|
token |
The GitHub token to use for authorization | string |
Examples
steps:
- action: 'github:issues:label'
name: 'Add labels to pull request or issue with token'
input:
repoUrl: 'github.com?repo=repo&owner=owner'
number: '1'
labels:
- 'bug'
- 'documentation'
token: 'gph_YourGitHubToken'
This action adds the labels “bug” and “documentation” to issue or pull request #1 in a GitHub repository, using a provided GitHub token for authentication.
Outputs
None
Links
github:pages:enable
Action for enabling GitHub Pages for a specified repository, with various customization options such as the build type, source branch, and source path.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Accepts the format ‘github.com?repo=reponame&owner=owner’ where ‘reponame’ is the repository name and ‘owner’ is an organization or username | string |
|
buildType |
The GitHub Pages build type - “legacy” or “workflow”. Default is “workflow” | string |
|
sourceBranch |
The GitHub Pages source branch. Default is “main” | string |
|
sourcePath |
The GitHub Pages source path - ”/” or “/docs”. Default is ”/” | string |
|
token |
The token to use for authorization to GitHub | string |
Examples
steps:
- action: 'github:pages:enable'
id: 'github-pages-custom-path'
name: 'Enable GitHub Pages with Custom Source Path'
input:
repoUrl: 'github.com?repo=customPathRepo&owner=customOwner'
sourcePath: '/docs'
token: 'gph_YourGitHubToken'
This YAML specifies a step that enables GitHub Pages for the repository customPathRepo
owned by customOwner
, using the source path /docs
and an authorization token.
Outputs
None
Links
github:repo:create
The code defines a Backstage action for creating GitHub repositories programmatically, allowing customization of repository settings, collaborators, and configurations.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
The URL of the repository | string |
|
description |
Description of the repository | string |
|
homepage |
The homepage URL for the repository | string |
|
access |
Access level for the repository | string |
|
deleteBranchOnMerge |
Whether to delete branch after merging | boolean |
|
gitAuthorName |
Name of the git author | string |
|
gitAuthorEmail |
Email of the git author | string |
|
allowRebaseMerge |
Allow rebase merging | boolean |
|
allowSquashMerge |
Allow squash merging | boolean |
|
squashMergeCommitTitle |
Title for squash merge commits | 'PR_TITLE' | 'COMMIT_OR_PR_TITLE' |
|
squashMergeCommitMessage |
Message for squash merge commits | 'PR_BODY' | 'COMMIT_MESSAGES' | 'BLANK' |
|
allowMergeCommit |
Allow merge commits | boolean |
|
allowAutoMerge |
Enable automatic merging | boolean |
|
requireCodeOwnerReviews |
Require code owner reviews | boolean |
|
bypassPullRequestAllowances |
Bypass pull request restrictions | object |
|
requiredApprovingReviewCount |
Number of required reviews for approval | number |
|
restrictions |
Restrictions on who can push to branches | object |
|
requiredStatusCheckContexts |
Required status checks before merging | string[] |
|
requireBranchesToBeUpToDate |
Require branches to be up to date | boolean |
|
requiredConversationResolution |
Require conversations to be resolved before merging | boolean |
|
repoVisibility |
Visibility of the repository | 'private' | 'internal' | 'public' |
|
collaborators |
List of collaborators for the repository | Array<object> |
|
hasProjects |
Whether the repository has GitHub Projects enabled | boolean |
|
hasWiki |
Whether the repository has a Wiki | boolean |
|
hasIssues |
Whether the repository has Issues enabled | boolean |
|
token |
Access token for GitHub authentication | string |
|
topics |
List of topics for the repository | string[] |
|
repoVariables |
Repository-level environment variables | object |
|
secrets |
Secrets to store in the repository | object |
|
oidcCustomization |
OIDC customization settings | object |
|
requireCommitSigning |
Require commit signing | boolean |
|
customProperties |
Custom properties for the repository | object |
Examples
steps:
- action: 'github:repo:create'
name: 'Create a new GitHub repository with a description'
input:
repoUrl: 'github.com?repo=repo&owner=owner'
description: 'My new repository'
Creates a new GitHub repository with a specified URL and description.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
The remote URL of the newly created GitHub repository | string |
repoContentsUrl |
URL to the repository contents | string |
Links
github:repo:push
Action that initializes a git repository in a workspace and pushes it to GitHub, with options to configure branch protection, commit rules, and other repository settings.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl 8 |
Repository URL (GitHub repository in the format: owner/repo ) |
string |
|
requireCodeOwnerReviews |
Whether to require code owner reviews for pull requests | boolean |
|
dismissStaleReviews |
Whether to dismiss stale reviews when new commits are pushed | boolean |
|
requiredStatusCheckContexts |
The list of status checks that must pass before a merge | string[] |
|
bypassPullRequestAllowances |
Allows bypassing pull request requirements for specified users, teams, or apps | object |
|
requiredApprovingReviewCount |
The number of approving reviews required for pull requests | number |
|
restrictions |
Restricts who can push to the protected branch (users, teams, and apps) | object |
|
requireBranchesToBeUpToDate |
Whether branches need to be up to date before merging | boolean |
|
requiredConversationResolution |
Whether to require conversation resolution before merging | boolean |
|
requireLastPushApproval |
Whether the last push must be approved before merging | boolean |
|
defaultBranch |
The default branch name for the repository | string |
|
protectDefaultBranch |
Whether to protect the default branch from being force-pushed | boolean |
|
protectEnforceAdmins |
Whether to enforce protections for admin users | boolean |
|
gitCommitMessage |
The commit message for the initial commit | string |
|
gitAuthorName |
The name of the author for the git commit | string |
|
gitAuthorEmail |
The email of the author for the git commit | string |
|
sourcePath |
The path to the content to push to the repository | string |
|
token |
The token for GitHub authentication (if not provided via integration) | string |
|
requiredCommitSigning |
Whether commit signing is required | boolean |
Examples
steps:
- action: github:repo:push
name: Create test repo with testuser as owner.
input:
repoUrl: github.com?repo=test&owner=testuser
This create a test repository with a specified owner.
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
The clone URL of the repository | string |
repoContentsUrl |
URL to the repository contents (e.g., on the default branch) | string |
commitHash |
The hash of the commit made | string |
Links
parse:repo-url:plus
Action that parses repository URLs and extracts relevant metadata based on a specified schema.
Inputs
Key | Description | Type | Example |
---|---|---|---|
reposUrls | An array of repository URLs to parse | array |
Examples
Parse Repo Url like “host?owner=any&organization=any&workspace=any&project=any”
steps:
- action: parse:repo-url:plus
id: parse-repos-url
name: Parse Repos URLs
input:
reposUrls:
- host?owner=any&organization=any&workspace=any&project=any
Outputs
Key | Description | Type |
---|---|---|
results | An array of objects containing parsed repo specifications | array |
results.repo | The name of the repository | string |
results.host | The host of the repository | string |
results.owner | The owner of the repository | string |
results.organization | The organization associated with the repository | string |
results.workspace | The workspace associated with the repository | string |
results.project | The project associated with the repository | string |
Links
Gitlab Scaffolder Actions
publish:gitlab
Initializes a git repository of the content in the workspace, and publishes it to GitLab. See input options in the application
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Accepts the format 'gitlab.com?repo=project_name&owner=group_name' where ‘project_name’ is the repository name and ‘group_name’ is a group or username |
string |
|
repoVisibility |
Sets the visibility of the repository. The default value is 'private' . (deprecated, use settings.visibility instead) |
string |
|
defaultBranch |
Sets the default branch on the repository. The default value is 'master' . |
string |
|
gitCommitMessage |
Sets the commit message on the repository. The default value is 'initial commit' . |
string |
|
gitAuthorName |
Sets the default author name for the commit. The default value is 'Scaffolder' . |
string |
|
gitAuthorEmail |
Sets the default author email for the commit. | string |
|
sourcePath |
Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published. | string |
|
token |
The token to use for authorization to GitLab. | string |
|
setUserAsOwner |
Set the token user as owner of the newly created repository. | boolean |
|
topics |
Topic labels to apply on the repository. (deprecated, use settings.topics instead) | array<string> |
|
settings.path |
Repository name for new project. Generated based on name if not provided (generated as lowercase with dashes). | string |
|
settings.auto_devops_enabled |
Enable Auto DevOps for this project. | boolean |
|
settings.ci_config_path |
Custom CI config path for this project. | string |
|
settings.description |
Short project description. | string |
|
settings.merge_method |
Merge Methods (merge, rebase_merge, ff). | string |
|
settings.squash_option |
Set squash option for the project (never, always, default_on, default_off). | string |
|
settings.topics |
Topic labels to apply on the repository. | array<string> |
|
settings.visibility |
The visibility of the project. Can be private, internal, or public. The default value is private. | string |
|
branches.name |
Branch name. | string |
|
branches.protect |
Will mark branch as protected. The default value is 'false' . |
boolean |
|
branches.create |
If branch does not exist, it will be created from the provided ref. The default value is 'false' . |
boolean |
|
branches.ref |
Branch reference to create branch from. The default value is 'master' . |
string |
|
projectVariables.key |
The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed. | string |
|
projectVariables.value |
The value of a variable. | string |
|
projectVariables.description |
The description of the variable. The default value is null . |
string |
|
projectVariables.variable_type |
The type of a variable. The default value is 'env_var' . |
string |
|
projectVariables.protected |
Whether the variable is protected. The default value is 'false' . |
boolean |
|
projectVariables.raw |
Whether the variable is in raw format. The default value is 'false' . |
boolean |
|
projectVariables.environment_scope |
The environment scope of the variable. The default value is ' * ' . |
string |
Examples
- id: publish
name: Publish
action: publish:gitlab
input:
description: This is ${{ parameters.name }}
repoUrl: ${{ parameters.repoUrl }}?owner=${{ steps.createGitlabGroup.output.groupId }}
sourcePath: pimcore
defaultBranch: main
Outputs
Key | Description | Type |
---|---|---|
remoteUrl |
A URL to the repository with the provider. | string |
repoContentsUrl |
A URL to the root of the repository. | string |
projectId |
The ID of the project. | string |
commitHash |
The git commit hash of the initial commit. | string |
Links
publish:gitlab:merge-request
Action for creating a GitLab merge request.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
Repository Location in the format 'gitlab.com?repo=project_name&owner=group_name' |
string |
|
projectid |
Project ID/Name(slug) of the GitLab project (deprecated) | string |
|
title |
The name for the merge request | string |
|
description |
The description of the merge request | string |
|
branchName * |
Source branch name of the merge request | string |
|
targetBranchName |
Target branch name of the merge request | string |
|
sourcePath |
Subdirectory of the working directory to copy changes from | string |
|
targetPath |
Subdirectory of the repository to apply changes to | string |
|
token |
Authentication token for authorization to GitLab | string |
|
commitAction |
Action for the git commit: create , update , delete , or auto (automatic commit action based on file existence) |
string |
|
removeSourceBranch |
Option to delete the source branch after the merge request is merged (default: false ) |
boolean |
|
assignee |
User to whom the merge request will be assigned | string |
Examples
steps:
- id: createMergeRequest
action: publish:gitlab:merge-request
name: Create a Merge Request
input:
repoUrl: gitlab.com?repo=repo&owner=owner
title: Create my new MR
description: This MR is really good
sourcePath: ./path/to/my/changes
branchName: new-mr
assignee: my-assignee
Outputs
Key | Description | Type |
---|---|---|
targetBranchName |
Target branch name of the merge request | string |
projectid |
GitLab Project ID/Name(slug) | string |
projectPath |
GitLab Project path | string |
mergeRequestUrl |
URL link to the merge request in GitLab | string |
Links
gitlab:repo:push
Action that automates the process of pushing commits to a GitLab repository.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl * |
The GitLab repository location in the format 'gitlab.com?repo=project_name&owner=group_name' . |
string |
|
branchName * |
The name of the branch where the commit will be applied. | string |
|
commitMessage * |
The message to use for the commit. | string |
|
sourcePath |
Subdirectory of the working directory to copy changes from. | string |
|
targetPath |
Subdirectory of the repository to apply changes to. | string |
|
token |
The authentication token used for GitLab authorization. | string |
|
commitAction |
The action to use for the commit (create , update , or delete ). Defaults to create . |
string (enum) |
Examples
steps:
- id: pushChanges
action: gitlab:repo:push
name: Push changes to gitlab repository
input:
repoUrl: gitlab.com?repo=repo&owner=owner
commitMessage: Initial Commit
branchName: feature-branch
commitAction: update
This YAML defines a step that updates a specific branch in a GitLab repository with an initial commit using the gitlab:repo:push
action.
Outputs
Key | Description | Type |
---|---|---|
projectid |
The GitLab project ID or name (slug). | string |
projectPath |
The GitLab project path. | string |
commitHash |
The commit hash of the latest commit. | string |
Links
gitlab:group:ensureExists
For ensuring that a GitLab group or sub-groups exist, creating them if they do not.
Inputs
Key | Description | Type | Example |
---|---|---|---|
host |
The GitLab host URL | string |
|
repoUrl |
The repository URL to use | string |
|
token |
The token to authenticate with GitLab | string |
|
path |
A path of group names that are ensured to exist | string[] (array of strings) |
Examples
- id: createGitlabGroup
name: Ensure Gitlab group exists
action: gitlab:group:ensureExists
input:
repoUrl: ${{ parameters.repoUrl }}
path:
- path
- to
- group
Outputs
Key | Description | Type |
---|---|---|
groupId |
The id of the innermost sub-group | number? |
Links
gitlab:issues:create
Action to create GitLab issues, including the input validation using Zod, GitLab API calls, and error handling.
Inputs
Key | Description | Type | Example |
---|---|---|---|
projectId |
Project ID | number |
|
title |
Title of the issue | string |
|
assignees |
IDs of the users to assign the issue to | array<number> |
|
confidential |
Issue confidentiality | boolean |
|
description |
Issue description (max 1,048,576 characters) | string |
|
createdAt |
Creation date/time in format YYYY-MM-DDTHH:mm:ssZ |
string |
|
dueDate |
Due date/time in format YYYY-MM-DDTHH:mm:ssZ |
string |
|
discussionToResolve |
ID of a discussion to resolve (with merge request option) | string |
|
epicId |
ID of the linked Epic | number |
|
labels |
Labels to apply | string |
|
issueType |
Type of the issue (based on IssueType enum) |
nativeEnum<IssueType> |
|
mergeRequestToResolveDiscussionsOf |
IID of a merge request to resolve all issues | number |
|
milestoneId |
Global ID of a milestone to assign the issue | number |
|
weight |
The issue weight | number |
Examples
- id: gitlabIssue
name: Issues
action: gitlab:issues:create
input:
repoUrl: ${{ parameters.repoUrl }}
token: ${{ secrets.USER_OAUTH_TOKEN }}
projectId: 1111111
title: Test Issue
assignees:
- 2222222
description: This is the description of the issue
confidential: true
createdAt: 2022-09-27 18:00:00.000
dueDate: 2024-09-28 12:00:00.000
epicId: 3333333
labels: phase1:label1,phase2:label2
Outputs
Key | Description | Type |
---|---|---|
issueUrl |
URL of the created issue | string |
issueId |
ID of the created issue | number |
issueIid |
IID of the created issue | number |
Links
gitlab:issue:edit
This uses schemas to validate the input and output data using zod
and interacts with GitLab’s API to edit issue properties such as labels, assignees, and other metadata.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl |
The URL of the GitLab repository. | string |
|
projectId |
The global ID or URL-encoded path of the project owned by the authenticated user. | number |
|
issueIid |
The internal ID of a project’s issue. | number |
|
addLabels |
Comma-separated label names to add to an issue. If a label does not already exist, this creates a new project label and assigns it to the issue. | string (optional) |
|
assignees |
IDs of the users to assign the issue to. | array<number> (optional) |
|
confidential |
Updates an issue to be confidential. | boolean (optional) |
|
description |
The description of an issue. Limited to 1,048,576 characters. | string (optional) |
|
discussionLocked |
Flag indicating if the issue’s discussion is locked. Only project members can add or edit comments when locked. | boolean (optional) |
|
dueDate |
The due date in the format YYYY-MM-DD. | string (optional) |
|
epicId |
ID of the epic to add the issue to. Valid values are greater than or equal to 0. | number (optional) |
|
issueType |
Updates the type of issue (e.g., issue, incident, test_case, or task). | enum (optional) |
|
labels |
Comma-separated label names for an issue. Set to an empty string to unassign all labels. | string (optional) |
|
milestoneId |
The global ID of a milestone to assign the issue to. Set to 0 or provide an empty value to unassign a milestone. | number (optional) |
|
removeLabels |
Comma-separated label names to remove from an issue. | string (optional) |
|
stateEvent |
The state event of an issue (e.g., close, reopen). | enum (optional) |
|
title |
The title of an issue. | string (optional) |
|
updatedAt |
When the issue was updated. Date-time string, ISO 8601 formatted (e.g., YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss.SSSZ). | string (optional) |
|
weight |
The issue weight. Valid values are from 0 to 10. | number (optional) |
|
token |
The token used for GitLab API authentication. | string |
Examples
steps:
- id: gitlabIssue
name: EditIssues
action: gitlab:issue:edit
input:
# commonGitlabConfigExample
projectId: 12
title: Test Issue
assignees:
- 18
description: This is the edited description of the issue
updatedAt: '2024-05-10T18:00:00.000Z'
dueDate: '2024-09-28'
Outputs
Key | Description | Type |
---|---|---|
issueUrl |
The web URL of the issue. | string |
projectId |
The project ID the issue belongs to. | number |
issueId |
The unique ID of the issue. | number |
issueIid |
The internal ID of a project’s issue. | number |
state |
The state event of the issue (e.g., open, closed). | string |
title |
The title of the issue. | string |
updatedAt |
The last updated time of the issue (ISO 8601 format). | string |
Links
gitlab:pipeline:trigger
This automates the creation and triggering of a GitLab pipeline using specific input parameters and outputs the result.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl |
Repository URL containing the project | string |
|
projectId |
Project Id | number |
|
tokenDescription |
Pipeline token description | string |
|
token |
Token used for authenticating with GitLab API | string |
|
branch |
Project branch on which the pipeline is triggered | string |
|
variables |
A record of key-value pairs containing the pipeline variables (optional) | record<string, string> |
Examples
steps:
- id: 'triggerPipeline'
name: 'Trigger Project Pipeline'
action: 'gitlab:pipeline:trigger'
input:
projectId: 12
tokenDescription: 'This is the text that will appear in the pipeline token'
token: 'glpt-xxxxxxxxxxxx'
branch: 'main'
variables:
var_one: 'one'
var_two: 'two'
# Include commonGitlabConfigExample if needed
# Add any other common properties here
Outputs
Key | Description | Type |
---|---|---|
pipelineUrl |
Pipeline URL | string |
Links
gitlab:projectAccessToken:create
Action that creates a project access token in GitLab.
Inputs
Key | Description | Type | Example |
---|---|---|---|
projectId |
Project ID/Name(slug) of the GitLab Project | number or string |
|
token |
The token to use for authorization to GitLab | string |
|
name |
Name of Access Key | string |
|
repoUrl |
URL to GitLab instance | string |
|
accessLevel |
Access Level of the Token, 10 (Guest), 20 (Reporter), 30 (Developer), 40 (Maintainer), and 50 (Owner) | number |
|
scopes |
Scopes for a project access token | string[] |
|
expiresAt |
Expiration date of the access token in ISO format (YYYY-MM-DD). If Empty, it will set to the maximum of 365 days. | string |
Examples
- id: gitlab-access-token
name: Gitlab Project Access Token
action: gitlab:projectAccessToken:create
input:
repoUrl: ${{ parameters.repoUrl }}
projectId: "${{ steps['publish-manifest'].output.projectId }}"
name: ${{ parameters.name }}-access-token
accessLevel: 40
scopes: ['read_repository', 'write_repository']
Outputs
Key | Description | Type |
---|---|---|
access_token |
Access Token | string |
Links
gitlab:projectVariable:create
Action for creating project variables in GitLab.
Inputs
Key | Description | Type | Example |
---|---|---|---|
repoUrl |
The URL of the GitLab repository | string |
|
projectId |
Project ID | `number | string` |
key |
The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed | string |
|
value |
The value of a variable | string |
|
variableType |
Variable Type (env_var or file) | string |
|
variableProtected |
Whether the variable is protected | boolean |
|
masked |
Whether the variable is masked | boolean |
|
raw |
Whether the variable is expandable | boolean |
|
environmentScope |
The environment_scope of the variable | string |
|
token |
The token for authentication | string |
Examples
- id: gitlab-project-variable
name: Gitlab Project Variable
action: gitlab:projectVariable:create
input:
repoUrl: ${{ parameters.repoUrl }}
projectId: "${{ steps['publish'].output.projectId }}"
key: 'VARIABLE_NAME'
value: "${{ steps['gitlab-access-token'].output.access_token }}"
variableType: 'env_var'
masked: true
variableProtected: false
raw: false
environmentScope: '*'
Outputs
None
Links
gitlab:projectDeployToken:create
Action that creates a GitLab project deploy token.
Inputs
Key | Description | Type | Example |
---|---|---|---|
projectId | Project ID | number or string |
|
name | Deploy Token Name | string |
|
username | Deploy Token Username | string (optional) |
|
scopes | Scopes | array of string (optional) |
Examples
- id: gitlab-deploy-token
name: Create Deploy Token
action: gitlab:projectDeployToken:create
input:
repoUrl: ${{ parameters.repoUrl }}
projectId: "${{ steps['publish'].output.projectId }}"
name: ${{ parameters.name }}-secret
username: ${{ parameters.name }}-secret
scopes: ['read_registry']
Outputs
Key | Description | Type |
---|---|---|
deploy_token | Deploy Token | string |
user | User | string |
Links
Humanitec Scaffolder Actions
humanitec:create-app
Action for creating applications in Humanitec, using a YAML setup file to define application properties.
Inputs
Key | Description | Type | Example |
---|---|---|---|
appId* | The unique identifier for the application | string |
|
setupFile | The path to the YAML file containing app setup information | string |
Outputs
None
Links
Microsoft Teams Scaffolder Actions
ms-teams:sendMessage
Action that sends messages to a Microsoft Teams channel using a specified webhook URL.
Inputs
Key | Description | Type | Example |
---|---|---|---|
message |
The message to send via webhook | string | |
webhookUrl |
The Microsoft Teams webhook URL to send the request to. The URL must either be specified here or in the Backstage config | string |
Examples
steps:
- id: send-ms-teams-message
name: Send message
action: ms-teams:sendMessage
input:
message: "Hello, world!"
webhookUrl: "https://your-url.com" # optional if the URL is supplied in the app-config.yaml
Outputs
None
Links
Pagerduty Scaffolder Actions
pagerduty:service:create
Action that allows users to create a PagerDuty service.
Inputs
Key | Description | Type | Example |
---|---|---|---|
name * |
Name of the service | string |
|
description * |
Description of the service | string |
|
escalationPolicyId * |
Escalation policy ID for the service | string |
|
alertGrouping |
Alert grouping parameters (optional) | string |
Outputs
Key | Description | Type |
---|---|---|
serviceUrl |
PagerDuty Service URL | string |
serviceId |
PagerDuty Service ID | string |
integrationKey |
Backstage Integration Key | string |
Links
Quay Scaffolder Actions
quay:create-repository
Action for creating a repository in Quay.io.
Input
Parameter Name | Type | Required | Description | Example |
---|---|---|---|---|
name | string | Yes | Quay repository name | foo |
visibility | string | Yes | Visibility setting for the created repository, either public or private | public |
description | string | Yes | Description for the created repository | This if foo repository |
token | string | Yes | Authentication token, see docs | UW1dLVdCTj8uZWNuIW97K1k0XiBkSmppVU9MYzFT |
baseUrl | string | No | Base url of a quay instance, defaults to https://quay.io | https://foo.quay.io |
namespace | string | No | Namespace to create repository in, defaults to the namespace the token belongs to | bar |
repoKind | string | No | Created repository kind, either image or application, if empty defaults to image | image |
Examples
action: quay:create-repository
id: create-quay-repo
name: Create quay repo
input:
baseUrl: https://quay.io
token: UW1dLVdCTj8uZWNuIW97K1k0XiBkSmppVU9MYzFT
name: foo
visibility: public
description: This is a foo repository
namespace: bar
repoKind: image
Output
Name | Type | Description |
---|---|---|
repositoryUrl | string | Quay repository URL created by this action |
Links
- @janus-idp/backstage-scaffolder-backend-module-quay
- [Code](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay-actions
Sonarqube Scaffolder Actions
sonarqube:create-project
Action for creating a project in SonarQube via the Backstage Scaffolder plugin.
Inputs
Key | Description | Type | Example |
---|---|---|---|
baseUrl * |
SonarQube server base URL. Example: "https://sonar-server.com" |
string |
|
name * |
Name of the project to be created in SonarQube. Example: "My Project" |
string |
|
key * |
Key of the project to identify the project in SonarQube. Example: "my-project" |
string |
|
branch |
Name of the main branch of the project. If not provided, the default main branch will be used | string |
|
visibility |
Whether the project should be visible to everyone or specific groups. Values: "public" , "private" |
string |
|
token |
SonarQube authentication token. Use instead of username and password | string |
|
username |
SonarQube username. Required if no token is provided | string |
|
password |
SonarQube password. Required if no token is provided | string |
Examples
steps:
- id: create-sonar-project
name: Create SonarQube project
action: sonarqube:create-project
input:
baseUrl: ${{ parameters.baseUrl }}
token: ${{ parameters.authParams.token }}
username: ${{ parameters.authParams.username }}
password: ${{ parameters.authParams.password }}
name: ${{ parameters.name }}
key: ${{ parameters.key }}
branch: ${{ parameters.branch }}
visibility: ${{ parameters.visibility }}
Outputs
Key | Description | Type |
---|---|---|
projectUrl |
SonarQube project URL created by this action | string |
Links
ServiceNow Scaffolder Actions
servicenow:now:table:createRecord
Action for Backstage’s Scaffolder, allowing users to insert a record into a specified ServiceNow.
Input
Parameter Name | Type | Required | Description |
---|---|---|---|
tableName |
string |
Yes | Name of the table in which to save the record |
requestBody |
Record<PropertyKey, unknown> |
No | Field name and the associated value for each parameter to define in the specified record |
sysparmDisplayValue |
enum("true", "false", "all") |
No | Return field display values (true), actual values (false), or both (all) (default: false) |
sysparmExcludeReferenceLink |
boolean |
No | True to exclude Table API links for reference fields (default: false) |
sysparmFields |
string[] |
No | An array of fields to return in the response |
sysparmInputDisplayValue |
boolean |
No | Set field values using their display value (true) or actual value (false) (default: false) |
sysparmSuppressAutoSysField |
boolean |
No | True to suppress auto generation of system fields (default: false) |
sysparmView |
string |
No | Render the response according to the specified UI view (overridden by sysparm_fields) |
Output
Name | Type | Description |
---|---|---|
result |
Record<PropertyKey, unknown> |
The response body of the request |
Links
servicenow:now:table:deleteRecord
Action for deleting a record from a ServiceNow table.
Inputs
Parameter Name | Type | Required | Description |
---|---|---|---|
tableName |
string |
Yes | Name of the table in which to delete the record |
sysId |
string |
Yes | Unique identifier of the record to delete |
sysparmQueryNoDomain |
boolean |
No | True to access data across domains if authorized (default: false) |
Outputs
None
Links
servicenow:now:table:modifyRecord
Action handler that modifies a record in a ServiceNow table.
Input
Parameter Name | Type | Required | Description |
---|---|---|---|
tableName |
string |
Yes | Name of the table in which to modify the record |
sysId |
string |
Yes | Unique identifier of the record to modify |
requestBody |
Record<PropertyKey, unknown> |
No | Field name and the associated value for each parameter to define in the specified record |
sysparmDisplayValue |
enum("true", "false", "all") |
No | Return field display values (true), actual values (false), or both (all) (default: false) |
sysparmExcludeReferenceLink |
boolean |
No | True to exclude Table API links for reference fields (default: false) |
sysparmFields |
string[] |
No | An array of fields to return in the response |
sysparmInputDisplayValue |
boolean |
No | Set field values using their display value (true) or actual value (false) (default: false) |
sysparmSuppressAutoSysField |
boolean |
No | True to suppress auto generation of system fields (default: false) |
sysparmView |
string |
No | Render the response according to the specified UI view (overridden by sysparm_fields) |
sysparmQueryNoDomain |
boolean |
No | True to access data across domains if authorized (default: false) |
Output
Name | Type | Description |
---|---|---|
result |
Record<PropertyKey, unknown> |
The response body of the request |
Links
servicenow:now:table:retrieveRecord
Action handler that retrieves a record in a ServiceNow table.
Input
Parameter Name | Type | Required | Description |
---|---|---|---|
tableName |
string |
Yes | Name of the table from which to retrieve the record |
sysId |
string |
Yes | Unique identifier of the record to retrieve |
sysparmDisplayValue |
enum("true", "false", "all") |
No | Return field display values (true), actual values (false), or both (all) (default: false) |
sysparmExcludeReferenceLink |
boolean |
No | True to exclude Table API links for reference fields (default: false) |
sysparmFields |
string[] |
No | An array of fields to return in the response |
sysparmView |
string |
No | Render the response according to the specified UI view (overridden by sysparm_fields) |
sysparmQueryNoDomain |
boolean |
No | True to access data across domains if authorized (default: false) |
Output
Name | Type | Description |
---|---|---|
result |
Record<PropertyKey, unknown> |
The response body of the request |
servicenow:now:table:retrieveRecords
Action handler that retrieves records in a ServiceNow table.
Inputs
Parameter Name | Type | Required | Description |
---|---|---|---|
tableName |
string |
Yes | Name of the table from which to retrieve the records |
sysparmQuery |
string |
No | An encoded query string used to filter the results |
sysparmDisplayValue |
enum("true", "false", "all") |
No | Return field display values (true), actual values (false), or both (all) (default: false) |
sysparmExcludeReferenceLink |
boolean |
No | True to exclude Table API links for reference fields (default: false) |
sysparmSuppressPaginationHeader |
boolean |
No | True to suppress pagination header (default: false) |
sysparmFields |
string[] |
No | An array of fields to return in the response |
sysparmLimit |
int |
No | The maximum number of results returned per page (default: 10,000) |
sysparmView |
string |
No | Render the response according to the specified UI view (overridden by sysparm_fields) |
sysparmQueryCategory |
string |
No | Name of the query category (read replica category) to use for queries |
sysparmQueryNoDomain |
boolean |
No | True to access data across domains if authorized (default: false) |
sysparmNoCount |
boolean |
No | Do not execute a select count(*) on table (default: false) |
Outputs
Name | Type | Description |
---|---|---|
result |
Record<PropertyKey, unknown> |
The response body of the request |
Links
servicenow:now:table:updateRecord
Action handler that updates a record in a ServiceNow table.
Inputs
Parameter Name | Type | Required | Description |
---|---|---|---|
tableName |
string |
Yes | Name of the table in which to update the record |
sysId |
string |
Yes | Unique identifier of the record to update |
requestBody |
Record<PropertyKey, unknown> |
No | Field name and the associated value for each parameter to define in the specified record |
sysparmDisplayValue |
enum("true", "false", "all") |
No | Return field display values (true), actual values (false), or both (all) (default: false) |
sysparmExcludeReferenceLink |
boolean |
No | True to exclude Table API links for reference fields (default: false) |
sysparmFields |
string[] |
No | An array of fields to return in the response |
sysparmInputDisplayValue |
boolean |
No | Set field values using their display value (true) or actual value (false) (default: false) |
sysparmSuppressAutoSysField |
boolean |
No | True to suppress auto generation of system fields (default: false) |
sysparmView |
string |
No | Render the response according to the specified UI view (overridden by sysparm_fields) |
sysparmQueryNoDomain |
boolean |
No | True to access data across domains if authorized (default: false) |
Outputs
Name | Type | Description |
---|---|---|
result |
Record<PropertyKey, unknown> |
The response body of the request |
Links
Slack Scaffolder Actions
slack:sendMessage:conversation
Action for sending Slack messages to a specific conversation using the Slack API.
Inputs
Key | Description | Type | Example |
---|---|---|---|
message * |
The message to send via webhook. | string |
|
conversationId |
The ID of the conversation to send the message to. If both conversation ID and name are specified, the ID will be used. | string |
|
conversationName |
The name of the conversation to send the message to. Used only if the conversation ID is not specified. | string |
|
token |
The token to authenticate with the Slack API. This can be specified in the app config or the input. | string |
Examples
- id: send-slack-message
name: Send slack message via Slack API
action: slack:sendMessage:conversation
input:
message: "Hello, world!"
conversationId: "abc123" # optional if the conversationId is supplied in the app-config.yaml, or the conversationName is supplied at all
conversationName: "general" # optional if the conversationName is supplied in the app-config.yaml, or the conversationId is supplied at all
Outputs
Key | Description | Type |
---|---|---|
conversationIdToUse |
The ID of the conversation that the message is being sent to. | string |
result |
The result object containing the response from Slack’s postMessage API. |
ChatPostMessageResponse |
Links
slack:sendMessage:webhook
Action that sends a message to Slack via a webhook URL.
Inputs
Key | Description | Type | Example |
---|---|---|---|
message * |
The message to send via the webhook | string |
|
webhookUrl |
The webhook URL to send the request to. Can be passed as input or from the config. | string |
Examples
steps:
# this step is an example of using the webhook action
- id: send-slack-message
name: Send slack message via Slack webhook
action: slack:sendMessage:webhook
input:
message: "Hello, world!"
webhookUrl: "https://example.com" # optional if the URL is supplied in the app-config.yaml
Outputs
None
Links
Sentry Scaffolder Actions
sentry:create-project
Action to create a new project in Sentry.
Inputs
Key | Description | Type | Example |
---|---|---|---|
organizationSlug * |
The slug of the organization the team belongs to | string | |
teamSlug * |
The slug of the team to create a new project for | string | |
name * |
The name for the new project | string | |
slug |
Optional slug for the new project. If not provided, a slug is generated from the name | string | |
authToken |
Authenticate via bearer auth token. Requires scope: project:write | string |
Examples
steps:
- id: create-sentry-project
action: sentry:project:create
name: Create a Sentry project with provided project slug.
input:
organizationSlug: my-org
teamSlug: team-a
name: Scaffolded project A
slug: scaff-proj-a
authToken: a14711beb516e1e910d2ede554dc1bf725654ef3c75e5a9106de9aec13d5df96
This YAML configuration outlines a step for creating a Sentry project.
Outputs
Key | Description | Type |
---|---|---|
id |
The ID of the created project in Sentry | string |
result |
The result object returned from Sentry | object |
Links
- [Code](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-sentry
- Code)
Torque Scaffolder Actions
torque:create-app
Action for managing applications in Torque.
Inputs
Key | Description | Type | Example |
---|---|---|---|
serviceName * |
The name of the service that will be created in Torque | string |
|
assetRepo * |
The asset repo that will be connected to Torque | string |
|
blueprintRepo * |
The blueprints repo that will be connected to Torque | string |
|
namespace * |
The namespace of the environment runner | string |
|
blueprintName * |
The name of a blueprint that will be a source for sandbox environment | string |
|
serviceAccount |
A service account to be used for connecting to the execution host | string |
|
repoType |
The type of repository (e.g., GitHub or Bitbucket) | string |
Examples
- name: Deploy with Torque
id: torque-app-id
action: torque:create-app
input:
serviceName: ${{ parameters.componentName }} # The name of service that will be created in Torque.
# Will be used as space, assets repo, blueprint repo and grain names
assetRepo: ${{ steps.publish.output.remoteUrl }} # The asset repo that will be connected to Torque
blueprintRepo: ${{ steps.publish.output.remoteUrl }} # The blueprints repo that will be connected to Torque
serviceAccount: 'default' # A k8s service account to assign to agent
namespace: default # A k8s namespace to assign to agent
blueprintName: ${{ parameters.componentName }} # The name of a blueprint you that will be a source for sandbox environment
Outputs
Key | Description | Type |
---|---|---|
success |
Indicates whether the operation was successful | boolean |
error |
Contains error details if the operation failed | `string |
environmentId |
The ID of the created sandbox environment | string |
spaceName |
The name of the created space | string |
Links
Webex Scaffolder Actions
webex:webhooks:sendMessage
Action that sends messages to Webex Incoming Webhooks.
Inputs
Key | Description | Type | Example |
---|---|---|---|
format | The message content format | enum (‘text’, ‘markdown’) |
|
message* | The message to send via webhook(s) | string |
|
webhooks* | The Webex Incoming Webhooks to send a message to | string[] (non-empty array) |
Examples
Once the action is registered, you can use it in your scaffolder templates to send messages via Webex Incoming Webhooks.
Here’s an example template:
spec:
steps:
- id: send-webex-message
name: Send Webex Message
action: webex:webhooks:sendMessage
input:
format: "markdown"
message: "# This Could Be Us"
webhooks:
- "https://webexapis.com/v1/webhooks/incoming/<SPACE_ID>"
- "https://webexapis.com/v1/webhooks/incoming/<SPACE_ID>" # optional ability to message multiple spaces
Outputs
Key | Description | Type |
---|---|---|
failedMessages | List of messages that failed to send | string[] |
Links
Yeoman Scaffolder Actions
run:yeoman
Action that runs a Yeoman generator.
Inputs
Key | Description | Type | Example |
---|---|---|---|
namespace * |
Yeoman generator namespace, e.g: node:app | string |
|
args |
Arguments to pass on to Yeoman for templating | array |
|
options |
Options to pass on to Yeoman for templating | object |
Examples
steps:
- id: 'run:yeoman'
action: 'run:yeoman'
name: 'Running a yeoman generator'
input:
namespace: 'node:app'
options:
option1: 'value1'
option2: 'value2'
This example defines a step in a process that involves running a Yeoman generator.
The input to this action includes the namespace
set to 'node:app'
, indicating which Yeoman generator to use.
Outputs
None