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@3displayName:'Template steps-linting'inputs:targetType:'inline'script:'echo Template steps linting'-task:Bash@3displayName:'Install ECLINT'inputs:targetType:'inline'script:|
sudo npm install -g eclint
failOnStderr:false-task:Bash@3displayName:'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@1displayName:'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 Colorexists() {
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" ]
thenecho" ECLint reported errors - build failed 😔" 1>&2
cat$fileecho -e "ECLint command reported a ${RED}[FAIL]${NC}. Correct the errors."rm eclint.txt
exit 1
elseecho" 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" ]]; thenecho -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
elseecho -e "You have already installed npm (globally). ${GREEN} [SUCCESS]${NC}"fiecho"Checking that eclint is installed globally.. "if ! [[ "exists eclint" ]]; thenecho -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}"elseecho -e "You have already installed eclint (globally). ${GREEN} [SUCCESS]${NC}"fiecho"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 !
Here a full example of how I achieved running Integration tests using Sql Express in Azure Devops. I had to use the YAML based pipelines so I could use simonauner's approach using Chocolatey to install Sql Express. Make note that I had to install EF Core tools since I use .Net Core 3.1 in this pipeline. Also note that I generate an EF Code First migration SQL file on the fly so that the rigged SQL Express instance is filled with contents.
Deploy SQL Express instance in Azure Devops, install and generate and run EF Code first migration sql script to update database with schema and seed data using EF Code First tools.
# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
trigger:
- feature/testability
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- script: choco install sql-server-express
- task: NuGetToolInstaller@1
- task: VisualStudioTestPlatformInstaller@1
displayName: 'Visual Studio Test Platform Installer'
inputs:
versionSelector: latestStable
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration Debug' # Update this to match your need
- script: 'dotnet tool install --global dotnet-ef'
displayName: 'Generate EF Code First Migrations SQL Script Update script'
- script: 'dotnet ef migrations script -i -o %BUILD_ARTIFACTSTAGINGDIRECTORY%\migrate.sql --project .\SomeAcme\SomeAcme.csproj'
displayName: 'Generate EF Code First Migrations migrate.sql'
- script: 'sqlcmd -S .\SQLEXPRESS -Q "CREATE DATABASE [SomeAcmeDb]"'
displayName: 'Create database SomeAcmeDb in Azure Devops SQL EXPRESS'
- script: 'sqlcmd -i %BUILD_ARTIFACTSTAGINGDIRECTORY%\migrate.sql -S .\SQLEXPRESS -d SomeAcmeDb'
displayName: ' Run migrate.sql on SQL EXPRESS in Azure Devops'
# PowerShell
# Run a PowerShell script on Linux, macOS, or Windows
- task: PowerShell@2
inputs:
targetType: 'inline' # Optional. Options: filePath, inline
#filePath: # Required when targetType == FilePath
#arguments: # Optional
script: 'gci -recurse -filter *.dll' # Required when targetType == Inline
#errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue
#failOnStderr: false # Optional
#ignoreLASTEXITCODE: false # Optional
#pwsh: false # Optional
#workingDirectory: # Optional
- task: VSTest@2
displayName: 'VsTest - testAssemblies'
inputs:
testAssemblyVer2: |
**\*SomeAcme.Tests.dll
!**\*TestAdapter.dll
!**\obj\**
vsTestVersion: toolsInstaller
testFiltercriteria: 'Category=IntegrationTest'
runInParallel: false
codeCoverageEnabled: false
testRunTitle: 'XUnit tests SomeAcme solution integration test starting'
failOnMinTestsNotRun: true
rerunFailedTests: false