If you have come accross
eclint in Azure Devops or in other scenarios, you might want to run this in local development instead to get your linting return an error, possible crashing the build pipeline in Azure Devops.
Eclints checks the .editorconfig file of your VS solution and reports if your code is badly formatted according to this file code style rules.
Here is a typical
eclint setup written with
YAML
# Runs ECLINT CHECK. This verfies that code conforms to editor config file.
parameters:
lintingResultArtifactName: 'LINTING' # Name of published artifact with results.
steps:
- task: Bash@3
displayName: 'Template steps-linting'
inputs:
targetType: 'inline'
script: 'echo Template steps linting'
- task: Bash@3
displayName: 'Install ECLINT'
inputs:
targetType: 'inline'
script: |
sudo npm install -g eclint
failOnStderr: false
- task: Bash@3
displayName: 'ECLINT check'
inputs:
targetType: 'inline'
script: |
eclint check $(git ls-files -- . ':!:*.sln' . ':!:*.sln.DotSettings') > $(Build.ArtifactStagingDirectory)/eclint.txt 2>&1
file=$(Build.ArtifactStagingDirectory)/eclint.txt
if [ -s "$file" ]
then
echo " ECLint reported errors - build failed π" 1>&2
cat $file
exit 1
else
echo " No errors found. You did good π "
exit 0
fi
failOnStderr: false
- task: PublishBuildArtifacts@1
displayName: 'Publish artifact'
condition: succeededOrFailed()
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: ${{ parameters.lintingResultArtifactName }}
publishLocation: 'Container'
The following shell script can be run with
Git Bash in for example Windows environments to run
eclint locally.
#!/bin/bash
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
exists() {
command -v "$1" > /dev/null 2>&1
}
runEcLint(){
echo -e "Starting up eclint linting the files of the solution! ${GREEN}[SUCCESS]${NC} Current folder:"
pwd
eclint check $(git ls-files -- . ':!:*.sln' . ':!:*.sln.DotSettings') > eclint.txt 2>&1
file=eclint.txt
if [ -s "$file" ]
then
echo " ECLint reported errors - build failed π" 1>&2
cat $file
echo -e "ECLint command reported a ${RED}[FAIL]${NC}. Correct the errors."
rm eclint.txt
exit 1
else
echo " No errors found. You did good π "
echo -e "ECLint command reported a ${GREEN}][SUCCESS]${NC}"
rm eclint.txt
exit 0
fi
}
echo "Running eclint locally to check the solution. Checking LOCALDEV environment.."
echo "Checking that npm is installed globally.. "
if ! [[ "exists npm" ]]; then
echo -e "Npm is not installed globally. ${RED} [FAIL]${NC}"
echo "Install npm globally first before running this script! See: https://nodejs.org/en/download/"
echo "Recommended next step: Install LTS of jnodejs together with npm"
exit 1
else
echo -e "You have already installed npm (globally). ${GREEN} [SUCCESS]${NC}"
fi
echo "Checking that eclint is installed globally.. "
if ! [[ "exists eclint" ]]; then
echo -e "eclint is not installed globally. ${RED} [FAIL]${NC}"
echo "Make sure you run this script with sufficient access : Attempting to install eclint globally next."
echo "Trying to run this command to install eclint: npm install eclint -g"
npm install -g eclint
echo -e "\neclint should now be installed. Continuing! ${GREEN} [SUCCESS]${NC}"
else
echo -e "You have already installed eclint (globally). ${GREEN} [SUCCESS]${NC}"
fi
echo "Switching up a folder to run at root folder of the source.."
pushd ..
echo -e "Switched to parent folder ${GREEN}[SUCCESS]${NC}"
runEcLint
popd #back to the eclint folder
In case you are running WSL, chances are that you must check if a command is available like this:
if ! [ -x "$(command -v npm)" ]; then
Also, you might need to add 'sudo' before the
npm install -g command.
The following
launch.json file shows how you can debug inside VsCode Bash scripts, using extension
Bash Debug for VsCode.
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "bashdb",
"request": "launch",
"name": "Bash-Debug",
"cwd": "${workspaceFolder}",
"program": "${file}",
"args": []
}
]
}
I tested the script against a solution at work and it spotted the intended eclint warnings for multiple files, as a proof of concept.
This makes it easier to fix up eclint errors before pushing them to Azure Devops !