Solution CLI
Introduction
The Command-Line Interface (CLI) is installed locally to give the user the ability to perform commands against projects modelled in the Solution Designer and support them during the implementation of these projects (i.e. implement services, commands and API operations). The Solution CLI, once installed, can be integrated into the IDE of your choice.
Installation
Prerequisites
As a prerequisite to use the Solution CLI on your local system, it is necessary to install Node.js on your machine. Currently Node.js version 18.16.0 or higher is supported. Therefore, please make sure that you've installed the a supported version before you continue with installing the Solution CLI.
Helping links:
Install Solution CLI
Go to Solution Designer and open your modelled project.
At the bottom you will find a menu bar, click on Solution CLI to expand the bar.
Inside this pane, click on Solution CLI Setup to expand the section. You will find instructions on how to install and set up the CLI.
Click on the provided link to download the CLI.tar file.
After successfully downloading the file, open a terminal on your machine and paste in the following code to install the CLI on your computer (replace
<download folder>
with the folder you have downloaded the CLI.tar to):npm install --location=global file:<download folder>/CLI.tar
If you are using a npm version < 8.11.0 or the k5 command is not found on your machine, try reinstall the CLI with the following command:
npm install -g file:<download folder>/CLI.tar
Switch back to the Solution CLI Setup section in Solution Designer and download
cli-config.json
by clicking on the provided linkRun the following command in your terminal to set up the CLI (replace
<download folder>
with the folder you have downloaded the cli-config.json to):k5 setup --file <download folder>/cli-config.json
Solution CLI commands
The Solution CLI offers various commands to support you in the local development of your service.
The following commands are available in the Solution CLI:
k5 checkout
Switches to another git branch in your local project and triggers model validation and code generation based on the content of the branch. This command is used to isolate and parallelize feature development in your project. For the initial checkout, it will get the latest pushed state on the remote branch, but if you have checked out your branch locally before, it will just switch to your local state of the branch (similar as the native git checkout
command). So it might be necessary to trigger a k5 pull
afterwards if you want to keep your branch update your branch to the remote state.
k5 checkout
again.k5 clone
Clones a project created in the Solution Designer to the local file system, validates the provided model and triggers code generation automatically. It requires two parameters:
The project which consists of the group key and the project acronym
The Git provider alias.
Command options:
Option | Description |
---|---|
-s, --solution <solution> | The identifier of the project you want to clone (containing the repository group key and repository slug) |
-p, --provider-alias <provider> | Alias of the Git provider in which the project repository resides |
-S, --stage <stage> | The stage name |
k5 validate-model
to ensure that no errors exist and trigger code generation again by using the command k5 generate-code
.k5 compile
Compile project files.
k5 help
Displays the documentation of the Solution CLI.
k5 install
Install or update all dependencies of the project.
k5 lint
Check project files for linting errors.
k5 login-envoy
Used to log in to Solution Envoy for local debug/test support. It will ask for the Solution Envoy credentials.
Command options:
Option | Description |
---|---|
-u, --username <username> | Username for login. Alternative: ENV var "K5_CLI_LOGIN_ENVOY_USERNAME" |
-p, --password <password> | Password for login. Alternative: ENV var "K5_CLI_LOGIN_ENVOY_PASSWORD" |
k5 login
It will ask for the same credentials as the Solution Designer, the login is usually valid for a longer period, as defined by your company policies.
Command options:
Option | Description |
---|---|
-u, --username <username> | Username for login. Alternative: ENV var "K5_CLI_LOGIN_USERNAME" |
-p, --password <password> | Password for login. Alternative: ENV var "K5_CLI_LOGIN_PASSWORD" |
k5 prepare-debug
Used to prepare debug sessions against the configured Solution Envoy environment. It will ask for the Solution Envoy credentials.
k5 pull
Pull in the latest changes of the current branch from the Git repository you are currently on, validate the model and generate code.
During the pull command, your local Git configurations will be applied automatically. If no value for the rebase strategy is set, pull.rebase=false
will be applied as a default (Please check the Git documentation for further information). You can list all your set Git configurations by running git config -l
.
k5 pull
again.k5 push
Add, commit and push changes to the Git repository.
Command options:
Option | Description |
---|---|
-m, --message <message> | Commit message |
-f, --force | Forcefully skip validation step. Be careful! Default is false |
k5 setup-envoy
Set up the Solution CLI to work with a Solution Envoy instance.
Command options:
Option | Description |
---|---|
-f, --file <file> | Path to the Solution Envoy setup file |
-n, --no-interactive | Skip interactive functionality like prompts. Default is false |
k5 setup
Used to set up the Solution CLI to work with a Solution Designer installation. It takes all configuration as a base64 encoded string.
Command options:
Option | Description |
---|---|
-f, --file <file> | Path to the Solution Designer setup file |
-n, --no-interactive | Skip interactive functionality like prompts. Default is false |
k5 test
Run unit tests and integration tests within this project.
k5 generate-code (upgrade-framework)
Generate code (solution framework and stub files) based on the design model files in the local directory {PROJECT_ROOT}/src-design
.
k5 validate-model
to ensure that no errors exist and trigger code generation again.k5 upgrade-cli
Upgrade the Solution CLI to the latest version.
k5 validate-model
Validates the design model files in the local directory {PROJECT_ROOT}/src-design
and displays all validation errors and warnings in the command line. Additionally, a log file will be written at {PROJECT_ROOT}/logs/validationErrors.log
which holds more information about the validation issues and how to fix them.
validationErrors.log
will always reflect the state of the last triggered validation and will be overwritten when validation is triggered again.There can be 2 different type of validation issues:
Invalid yaml content The yaml files in directory the
{PROJECT_ROOT}/src-design
need to be provided in a specific format (e.g. have required fields). If the format is not as expected, it will lead to unexpected behavior during your further development. In this case, the validation issues will mention all places where the format of the yaml files is invalid.Invalid design model Even if the structure of the yaml files is valid, it can be that the defined design model itself is invalid or doesn't follow best practices. E.g. if a selection element property is defined without any enum values. In this case, the validation issues will give an overview of what is expected from a logically valid design model and help you with fixing the issues.
k5 version
Displays the current version of the Solution CLI.
Usage patterns
Create a feature branch
If you want to use a local feature branch for your development, you can use native Git commands and Solution CLI commands. This can be a helpful approach in case that your feature only requires changes in the implementation and you do not plan to make any changes in the Solution Designer.
Please execute the following steps:
Run
git branch feature_01
to create a new local branch with the name "feature_01"Run
k5 checkout feature_01
to checkout the new branchImplement changes in project files
Run
k5 compile
to ensure that your code is not having any compile issuesPush your local branch to the remote Git
git push --set-upstream origin/feature_01
to make it available for everybody
Remote feature branch is ahead of local feature branch
During development, it keeps happening that the remote feature branch is ahead of your local branch. This especially occurs if changes in the Solution Designer were made and pushed or if multiple people are working on the same branch. In this situation, the command k5 push
might fail and will not allow you to push to the remote branch and you first need to merge the remote branch into your local branch.
Please execute the following steps:
Run
k5 pull
to pull the remote state of the feature branchIf Git detects conflicts within uncommited changes during the pull, you'll be asked to commit or stash your local changes first. You can resolve this by running native Git commands (e. g.
git add
,git commit
,git stash
) and triggeringk5 pull
again.
In case of merge conflicts in your files you will be asked to resolve them manually
After resolving all conflicts, it is required to trigger the command
k5 generate-code
, so that the code is generated based on the latest local state
If no conflicts happened, the
k5 pull
command already generated the code automaticallyIf validation errors occur during code generation, please fix them and trigger
k5 generate-code
againRun
k5 compile
to ensure that your code is not having any compile issues
Merging feature branch into default branch (via Pull request / Merge request)
For merging feature branches into default branches after development is done, it is recommended to use the native tools and processes set up in your Git provider. If the target branch is ahead of the feature branch, it might be necessary to merge those changes into your feature branch first.
To resolve this, please execute the following steps:
Run
git fetch --all
in your local terminalRun
git merge origin/<targetBranchName>
to merge the latest state of the target branch into your local feature branchIn case of conflicts that appear during merging, please resolve them manually
Run
k5 generate-code
to trigger code generation again by using the merged stateThis is neccessary to ensure that your implementation is still correct
If validation errors occur during code generation, please fix them and trigger
k5 generate-code
again
Run
k5 compile
to check for compilation issues and fix them if necessaryRun
k5 push
to push the local changes to your remote feature branch againYour remote feature branch should now be ready to be merged into the target branch
Prepare debugging
The Solution CLI allows you to communicate directly with the cluster in order to provide local debugging.
After your project has been successfully deployed at least once you can connect the Solution CLI with the Solution Envoy running inside the deployment target of your choice. Typically, this would be a DEV environment or stage.
To connect the CLI with the Solution Envoy follow the steps below:
In the navigation bar on the left click on CI/CD.
On the Pipeline Configurations tab select the deploy pipeline configuration that points to the deployment target you want to work on
Click on the link to the Solution Envoy inside the row. This will open a new tab and lead you to the Solution Envoy.
Log in to Solution Envoy with valid credentials.
In the left navigation bar, click on Infrastructure and use the Download button on the Solution CLI Setup card to download the configuration file.
Now cd into the root of your project folder
Run the following command to set up the CLI (replace with the folder you have downloaded the file to and replace with the actual name of the downloaded file):
k5 setup-envoy --file <download folder>/<filename>
After you have set up the CLI configuration you can connect to the cluster by executing the following command:
k5 prepare-debug
If you are not already logged in to this deployment target, you will be prompted to enter your credentials. The CLI will then request a token for authentication against the deployment target's endpoint.
After having successfully logged in, you can start debugging from your local machine without having to run the pipeline.