/sonar-loc-count

Primary LanguagePowerShellGNU Lesser General Public License v3.0LGPL-3.0

Shell Script

LoC Counting Scripts

This is a collection of shell scripts that demonstrate how to count lines of code from repositories and/or local directories.These scripts can be used to estimate LoC counts that would be produced by a Sonar analysis of these projects, without having to implement this analysis.

These scripts that connect to a DevOps platform must be run in a blank workspace (without data).

To exclude directories or files from the scan, you can insert the names of these exclusions into the .clocignore file in the environment where you run the scripts. Example :

bootstrap

test

architecture

Installation

Requirements:

  • bash version 4+
  • Git
  • curl
  • jq
  • cloc installed v1.96
  • For Mac OSX you need gnu-sed (brew install gnu-sed)

General usage

Most scripts will produce two reports of LoC by language (.lang) and by repository (.file).

github.com:

Counts lines of code from a GitHub.com organization. Requires to pass username, personal access token and the organization. The token must have repo scope.The script generates a report per project(File : ProjectName.txt) that indicates the number of lines of code per branch and indicates the branch that has the highest number of lines of code.As well as a Report_global.txt file that indicates the maximum line of code on the repository.

<github_com.sh> <user> <token> <organization>
github_com.sh myuser 1234567890abcdefgh myGitHubDotComOrg

or

<github_com.sh> <user> <token> <organization> <MyRepoName>
github_com.sh myuser 1234567890abcdefgh myGitHubDotComOrg MyRepoName

bitbucket.org:

Counts lines of code from a Bitbucket.org organization. Requires to pass username, App token password and the workspace slug. The token must have Repositories Read permissions.The script generates a report per project(File : ProjectName.txt) that indicates the number of lines of code per branch and indicates the branch that has the highest number of lines of code.As well as a Report_global.txt file that indicates the maximum line of code on the repository.

<bitbucket_org.sh> <user> <PassordToken> <myWorkspace>
bitbucket_org.sh myuser 1234567890abcdefgh myBBWorkspace

or

<bitbucket_org.sh> <user> <assordToken> <myWorkspace> <MyProjectName>
<bitbucket_org.sh> myuser 1234567890abcdefgh myBBWorkspace MyProjectName

If you have more than 100 repos , you need to change Value of parameter page=Number_of_page on line 53

   1 Page = 100 repos max
   Example for 150 repos : GetAPI="repositories/$wks?pagelen=100&page=2"

Azure DevOps Services:

Counts lines of code from a Azure DevOps Services organization. Requires to pass personal access token and the organization. The token must have Code > Read permissions. The script generates a report per project(File : ProjectName.txt) that indicates the number of lines of code per branch and indicates the branch that has the highest number of lines of code.As well as a Report_global.txt file that indicates the maximum line of code on the repository.

<azure_devops_services.sh> <token> <organization>
azure_devops_services.sh 1234567890abcdefgh myADOOrg 

or

<azure_devops_services.sh> <token> <organization> <MyProjectName>
azure_devops_services.sh 1234567890abcdefgh myADOOrg MyProjectName

Gitlab.com:

Counts lines of code from a GitLab.com Group or Project. Requires to pass personal access token and the group. The token must have read_api and read_repository scopes.The script generates a report per project(File : ProjectName.txt) that indicates the number of lines of code per branch and indicates the branch that has the highest number of lines of code.As well as a Report_global.txt file that indicates the maximum line of code on the repository.

<gitlab_com.sh> <token> <groupName>
gitlab_com.sh 1234567890abcdefgh myGitLabGroupName

or

<gitlab_com.sh> <token> <groupName//MyProjectName> 
gitlab_com.sh 1234567890abcdefgh myGitLabGroupName/MyProjectName

If you have more than 100 repos , you need to change Value of parameter page=Number_of_page on line 58 or 61

   1 Page = 100 repos max
   Example for 150 repos :  GetAPI="/projects/$groupname1?per_page=100&page=2"

Local Filesystem:

Counts lines of code from a local directory or file. The script generates a report file : Report_Name-of-Directory.txt

<filesystem.sh> PathToDirectory

Contributions and feedbacks

Contributions and feedbacks are welcome, as PRs or issues directly with this repository, or through your established Sonar communication channel.