Skip to content

Instantly share code, notes, and snippets.

@rajbos
Last active February 7, 2024 12:45
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rajbos/b148e9833a5d08165188dbe00cc32301 to your computer and use it in GitHub Desktop.
Save rajbos/b148e9833a5d08165188dbe00cc32301 to your computer and use it in GitHub Desktop.
Use dotnet tool to find out if a specific tool is installed on an environment
# Preface:
# dotnet tool install -g will return an error code when the tool is already installed in the system (at the same location)
# adding a test like below, will prevent the error
# this is mostly needed in a CI/CD environment where you don't want to break your pipeline if the tool was installed already.
# find if stryker is installed
$list = (dotnet tool list -g)
# echo the list
# $list
$strykerFound = ($list | Where-Object {$_.Split(' ')[0] -eq "dotnet-stryker"})
if ($null -ne $StrykerFound) {
Write-Host "Installing Stryker"
dotnet tool install dotnet-stryker -g
}
else {
Write-Host "Stryker is already installed"
}
# stop powershell from reporting an error code
$global:LASTEXITCODE = 0
@rajbos
Copy link
Author

rajbos commented Jul 8, 2021

The thing is, if it is already installed, installing it again returns an error, which is not helpful in a CI/CD pipeline.
That's why I'm checking it first.

Added that reasoning to the gist. Thanks!

@benmccallum
Copy link

Yea 100% understood, I came from a similar problem and your blog post.

To be clear, I meant install it into a local path that is unique (e.g. created/destroyed by your CI/CD pipeline) each run, therefore avoiding all the additional check you're doing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment