Check your Cloud Integration naming conventions with CPILint 1.0.4
Version 1.0.4 of CPILint is out and you can get your free copy over on GitHub. What is CPILInt, you ask? CPILint is an open source, command-line tool for SAP Cloud Integration that lets you automate the governance of your integration flows. You do so by choosing rules that you want your iflows to adhere to. The tool then does the heavy lifting of checking your iflows for compliance. CPILint ships with rules covering best practices, security, scripting, connectivity and more. For a lengthier introduction to CPILint, please see this blog post.
The NamingConventions rule is finally here
The main feature of the new release is the NamingConventions rule, which lets you check that your naming conventions for channels, flow steps etc. are being followed. This is the number one most requested CPILint feature, and I’m really happy to finally release it! Let’s jump right in and take a look at some examples.
SAP’s Integration Flow Design Guidelines suggest a number of different naming conventions. One of them states that all HTTP receiver channel names must start with
HTTP_RCV_. This is what that naming convention looks like using CPILint’s new NamingConventions rule:
<naming> <scheme> <starts-with>HTTP_RCV_</starts-with> </scheme> <message>HTTP receiver channel names must start with HTTP_RCV_</message> <apply-to>http-receiver-channel.name</apply-to> </naming>
Straightforward, right? Add this to your rules file, and CPILint will check all your HTTP receiver channels and verify that their names are compliant.
A NamingConventions rule consists of three things:
- A naming scheme (i.e. the naming convention that must be followed)
- The error message that will be displayed, if the naming convention is not followed
- Which names to check
The same naming rule can be applied to multiple names, and the
<apply-to> element can therefore occur more than once. At the moment, there are 55 different names you can check, but not all flow step names are supported yet, for instance. Even more names will be added in future versions of CPILint.
Here’s a slightly more complex example. SAP’s guidelines also state that the names of all participants (that is, senders and receivers) must start with
CP_ (for on-premise systems, business partners and cloud providers, respectively). Here’s how to implement that naming convention in CPILint:
<naming> <scheme> <or> <starts-with>OP_</starts-with> <starts-with>B2B_</starts-with> <starts-with>CP_</starts-with> </or> </scheme> <message>Participant names must start with OP_, B2B_ or CP_</message> <apply-to>sender.name</apply-to> <apply-to>receiver.name</apply-to> </naming>
My last example uses the regular expression naming scheme to make sure that Message Mapping steps don’t use the default name:
<naming> <scheme> <not> <regex>Message Mapping \d+</regex> </not> </scheme> <message>Don't use the default Message Mapping step names</message> <apply-to>message-mapping.name</apply-to> </naming>
For the details of the supported naming schemes and a list of all the names you can check using the NamingConventions rule, please see the CPILint wiki.
Other bits and pieces
CPILint now automatically checks whether you are running the latest version of the tool. When a new version is released, you will be notified that there is an upgrade available.
Previous versions of CPILint did some validation of the rules file, but from version 1.0.4 and onwards, the rules file XML document is properly validated using an XML Schema.
-tmn-host command-line option, which you use to point the tool at your Cloud Integration tenant, is now simply called
-host. If you run CPILint from a script, please make sure to update it accordingly.
There was, unfortunately, a bug in the DuplicateResourcesNotAllowed rule. It would crash the tool at the end of a session if no iflows had been inspected. This has been fixed in version 1.0.4.
To get you started, CPILint now also ships with two sample rules files. You can find them in the
samples directory in the root of the installation.
The CPILint project by the numbers
This is the fifth release of CPILint so far. There has been 55 commits to the GitHub repository since the initial commit of version 1.0.0 back in September, 2019. As of version 1.0.4, the tool’s code consists of 116 Java source files containing a total of 4513 lines of code (not counting comments). There are a couple hundred more lines of code in there, most of them XQuery, XML Schema and XSLT.
That’s it for version 1.0.4 of CPILint. I’m really looking forward to hearing your feedback, especially about the NamingConventions rule! So please give the new version a download, and feel free to share your thoughts in the comments below.
Great blog post.
I am building an azure pipeline and using CPILint.
I see currently it is supporting basic authentication. Any plan to include OAuth authentication?
Really interesting with the Azure pipeline!
As for OAuth, it's something I want to add, but I can't really offer a time frame at the moment.
I was trying to use CPILint in Azure pipeline but I'm stuck in passing the variables, Could you provide any useful link or any doc on the steps to execute?
Please, find below an example that may help you.
Thank you for your response, I'm quite new to Azure devops, have a question to ask, may be a silly one, do we need any other setting or runtime to set here, other done uploading the CPILINT code?
I'm exploring CPILINT functionality and I'm running the commands and using the sample rules(naming and misc-rules) that you have provided in the setup. I have couple of questions, I would really appreciate if you can answer those.
1. What is the format of the rules file to be provided as input and is there any specific location I need to place the file, because when I ran by providing the file path it shows below error.
2. What is the format of iflow file that it is expecting, is it .zip, .jar or .iflw in the command line?
1) You need to provide the path to where the rules file sits in your local file system. If that happens to be in the same directory that you are running the cpilint command from, you can simply refer to it by name. If not, you need to provide a path. In your case, the file would have to be in the root of the C: drive for that command to work.
2) The tool expects ZIP files directly exported from Cloud Integration. Also, if you want to point to a directory of files, use the -directory option instead of the -files option.
Let me know how it works out!
Thanks for the response. When I gave the extension of the rules file as well as the iflow file, the command got executed. 🙂
Is there any way I can write rules for naming convention to be followed in the groovy script?
Glad to hear it!
The naming conventions rule does not check Groovy code. It would be possible to have rules that do static analysis on Groovy scripts, but at this point it's not on the drawing board.
Thanks for the response.
Great Tool , wanted to try it out but getting this error
Do i need a latest version on Java on my system?
CPILint requires a Java 11 runtime to run, so yes, you need to upgrade your Java runtime.
Let me know how it works out!
CPILint is excellent tool. Thanks for your efforts! I saw naming.xml and misc_rules.xml file and wondering if there is any recent versions with more rules added to it? Please let me know.
Thank you for the kind words!
Those two files are just examples of what you can do. All the available rules are documented here.
Great! Thanks Morten.