mirror of
https://github.com/microsoft/setup-msbuild.git
synced 2024-11-21 19:11:08 +07:00
Initial developer commit
This commit is contained in:
parent
69090b5120
commit
ded5a39da6
3
.eslintignore
Normal file
3
.eslintignore
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dist/
|
||||||
|
lib/
|
||||||
|
node_modules/
|
58
.eslintrc.json
Normal file
58
.eslintrc.json
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["jest", "@typescript-eslint"],
|
||||||
|
"extends": ["plugin:github/es6"],
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 9,
|
||||||
|
"sourceType": "module",
|
||||||
|
"project": "./tsconfig.json"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"eslint-comments/no-use": "off",
|
||||||
|
"import/no-namespace": "off",
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"@typescript-eslint/no-unused-vars": "error",
|
||||||
|
"@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}],
|
||||||
|
"@typescript-eslint/no-require-imports": "error",
|
||||||
|
"@typescript-eslint/array-type": "error",
|
||||||
|
"@typescript-eslint/await-thenable": "error",
|
||||||
|
"@typescript-eslint/ban-ts-ignore": "error",
|
||||||
|
"camelcase": "off",
|
||||||
|
"@typescript-eslint/camelcase": "error",
|
||||||
|
"@typescript-eslint/class-name-casing": "error",
|
||||||
|
"@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}],
|
||||||
|
"@typescript-eslint/func-call-spacing": ["error", "never"],
|
||||||
|
"@typescript-eslint/generic-type-naming": ["error", "^[A-Z][A-Za-z]*$"],
|
||||||
|
"@typescript-eslint/no-array-constructor": "error",
|
||||||
|
"@typescript-eslint/no-empty-interface": "error",
|
||||||
|
"@typescript-eslint/no-explicit-any": "error",
|
||||||
|
"@typescript-eslint/no-extraneous-class": "error",
|
||||||
|
"@typescript-eslint/no-for-in-array": "error",
|
||||||
|
"@typescript-eslint/no-inferrable-types": "error",
|
||||||
|
"@typescript-eslint/no-misused-new": "error",
|
||||||
|
"@typescript-eslint/no-namespace": "error",
|
||||||
|
"@typescript-eslint/no-non-null-assertion": "warn",
|
||||||
|
"@typescript-eslint/no-object-literal-type-assertion": "error",
|
||||||
|
"@typescript-eslint/no-unnecessary-qualifier": "error",
|
||||||
|
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
||||||
|
"@typescript-eslint/no-useless-constructor": "error",
|
||||||
|
"@typescript-eslint/no-var-requires": "error",
|
||||||
|
"@typescript-eslint/prefer-for-of": "warn",
|
||||||
|
"@typescript-eslint/prefer-function-type": "warn",
|
||||||
|
"@typescript-eslint/prefer-includes": "error",
|
||||||
|
"@typescript-eslint/prefer-interface": "error",
|
||||||
|
"@typescript-eslint/prefer-string-starts-ends-with": "error",
|
||||||
|
"@typescript-eslint/promise-function-async": "error",
|
||||||
|
"@typescript-eslint/require-array-sort-compare": "error",
|
||||||
|
"@typescript-eslint/restrict-plus-operands": "error",
|
||||||
|
"semi": "off",
|
||||||
|
"@typescript-eslint/semi": ["error", "never"],
|
||||||
|
"@typescript-eslint/type-annotation-spacing": "error",
|
||||||
|
"@typescript-eslint/unbound-method": "error"
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"node": true,
|
||||||
|
"es6": true,
|
||||||
|
"jest/globals": true
|
||||||
|
}
|
||||||
|
}
|
28
.github/workflows/test.yml
vendored
Normal file
28
.github/workflows/test.yml
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
name: "build-test-dev"
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
paths-ignore:
|
||||||
|
- '*.md'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup MSBuild
|
||||||
|
id: setup_msbuild
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
vs-version: "[16.4,16.5]"
|
||||||
|
|
||||||
|
- name: echo msbuild path
|
||||||
|
run: echo ${{ steps.setup_msbuild.outputs.msbuildPath }}
|
||||||
|
|
||||||
|
- name: echo vswhere
|
||||||
|
run: vswhere.exe
|
||||||
|
|
||||||
|
- name: echo MSBuild
|
||||||
|
run: msbuild -version
|
391
.gitignore
vendored
391
.gitignore
vendored
@ -1,350 +1,99 @@
|
|||||||
## Ignore Visual Studio temporary files, build results, and
|
# Dependency directory
|
||||||
## files generated by popular Visual Studio add-ons.
|
node_modules
|
||||||
##
|
|
||||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
|
||||||
|
|
||||||
# User-specific files
|
# Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
|
||||||
*.rsuser
|
# Logs
|
||||||
*.suo
|
logs
|
||||||
*.user
|
|
||||||
*.userosscache
|
|
||||||
*.sln.docstates
|
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
|
||||||
*.userprefs
|
|
||||||
|
|
||||||
# Mono auto generated files
|
|
||||||
mono_crash.*
|
|
||||||
|
|
||||||
# Build results
|
|
||||||
[Dd]ebug/
|
|
||||||
[Dd]ebugPublic/
|
|
||||||
[Rr]elease/
|
|
||||||
[Rr]eleases/
|
|
||||||
x64/
|
|
||||||
x86/
|
|
||||||
[Aa][Rr][Mm]/
|
|
||||||
[Aa][Rr][Mm]64/
|
|
||||||
bld/
|
|
||||||
[Bb]in/
|
|
||||||
[Oo]bj/
|
|
||||||
[Ll]og/
|
|
||||||
[Ll]ogs/
|
|
||||||
|
|
||||||
# Visual Studio 2015/2017 cache/options directory
|
|
||||||
.vs/
|
|
||||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
|
||||||
#wwwroot/
|
|
||||||
|
|
||||||
# Visual Studio 2017 auto generated files
|
|
||||||
Generated\ Files/
|
|
||||||
|
|
||||||
# MSTest test Results
|
|
||||||
[Tt]est[Rr]esult*/
|
|
||||||
[Bb]uild[Ll]og.*
|
|
||||||
|
|
||||||
# NUnit
|
|
||||||
*.VisualState.xml
|
|
||||||
TestResult.xml
|
|
||||||
nunit-*.xml
|
|
||||||
|
|
||||||
# Build Results of an ATL Project
|
|
||||||
[Dd]ebugPS/
|
|
||||||
[Rr]eleasePS/
|
|
||||||
dlldata.c
|
|
||||||
|
|
||||||
# Benchmark Results
|
|
||||||
BenchmarkDotNet.Artifacts/
|
|
||||||
|
|
||||||
# .NET Core
|
|
||||||
project.lock.json
|
|
||||||
project.fragment.lock.json
|
|
||||||
artifacts/
|
|
||||||
|
|
||||||
# StyleCop
|
|
||||||
StyleCopReport.xml
|
|
||||||
|
|
||||||
# Files built by Visual Studio
|
|
||||||
*_i.c
|
|
||||||
*_p.c
|
|
||||||
*_h.h
|
|
||||||
*.ilk
|
|
||||||
*.meta
|
|
||||||
*.obj
|
|
||||||
*.iobj
|
|
||||||
*.pch
|
|
||||||
*.pdb
|
|
||||||
*.ipdb
|
|
||||||
*.pgc
|
|
||||||
*.pgd
|
|
||||||
*.rsp
|
|
||||||
*.sbr
|
|
||||||
*.tlb
|
|
||||||
*.tli
|
|
||||||
*.tlh
|
|
||||||
*.tmp
|
|
||||||
*.tmp_proj
|
|
||||||
*_wpftmp.csproj
|
|
||||||
*.log
|
*.log
|
||||||
*.vspscc
|
npm-debug.log*
|
||||||
*.vssscc
|
yarn-debug.log*
|
||||||
.builds
|
yarn-error.log*
|
||||||
*.pidb
|
lerna-debug.log*
|
||||||
*.svclog
|
|
||||||
*.scc
|
|
||||||
|
|
||||||
# Chutzpah Test files
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
_Chutzpah*
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
# Visual C++ cache files
|
# Runtime data
|
||||||
ipch/
|
pids
|
||||||
*.aps
|
*.pid
|
||||||
*.ncb
|
*.seed
|
||||||
*.opendb
|
*.pid.lock
|
||||||
*.opensdf
|
|
||||||
*.sdf
|
|
||||||
*.cachefile
|
|
||||||
*.VC.db
|
|
||||||
*.VC.VC.opendb
|
|
||||||
|
|
||||||
# Visual Studio profiler
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
*.psess
|
lib-cov
|
||||||
*.vsp
|
|
||||||
*.vspx
|
|
||||||
*.sap
|
|
||||||
|
|
||||||
# Visual Studio Trace Files
|
# Coverage directory used by tools like istanbul
|
||||||
*.e2e
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
# TFS 2012 Local Workspace
|
# nyc test coverage
|
||||||
$tf/
|
.nyc_output
|
||||||
|
|
||||||
# Guidance Automation Toolkit
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
*.gpState
|
.grunt
|
||||||
|
|
||||||
# ReSharper is a .NET coding add-in
|
# Bower dependency directory (https://bower.io/)
|
||||||
_ReSharper*/
|
bower_components
|
||||||
*.[Rr]e[Ss]harper
|
|
||||||
*.DotSettings.user
|
|
||||||
|
|
||||||
# TeamCity is a build add-in
|
# node-waf configuration
|
||||||
_TeamCity*
|
.lock-wscript
|
||||||
|
|
||||||
# DotCover is a Code Coverage Tool
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
*.dotCover
|
build/Release
|
||||||
|
|
||||||
# AxoCover is a Code Coverage Tool
|
# Dependency directories
|
||||||
.axoCover/*
|
jspm_packages/
|
||||||
!.axoCover/settings.json
|
|
||||||
|
|
||||||
# Visual Studio code coverage results
|
# TypeScript v1 declaration files
|
||||||
*.coverage
|
typings/
|
||||||
*.coveragexml
|
|
||||||
|
|
||||||
# NCrunch
|
# TypeScript cache
|
||||||
_NCrunch_*
|
*.tsbuildinfo
|
||||||
.*crunch*.local.xml
|
|
||||||
nCrunchTemp_*
|
|
||||||
|
|
||||||
# MightyMoose
|
# Optional npm cache directory
|
||||||
*.mm.*
|
.npm
|
||||||
AutoTest.Net/
|
|
||||||
|
|
||||||
# Web workbench (sass)
|
# Optional eslint cache
|
||||||
.sass-cache/
|
.eslintcache
|
||||||
|
|
||||||
# Installshield output folder
|
# Optional REPL history
|
||||||
[Ee]xpress/
|
.node_repl_history
|
||||||
|
|
||||||
# DocProject is a documentation generator add-in
|
# Output of 'npm pack'
|
||||||
DocProject/buildhelp/
|
*.tgz
|
||||||
DocProject/Help/*.HxT
|
|
||||||
DocProject/Help/*.HxC
|
|
||||||
DocProject/Help/*.hhc
|
|
||||||
DocProject/Help/*.hhk
|
|
||||||
DocProject/Help/*.hhp
|
|
||||||
DocProject/Help/Html2
|
|
||||||
DocProject/Help/html
|
|
||||||
|
|
||||||
# Click-Once directory
|
# Yarn Integrity file
|
||||||
publish/
|
.yarn-integrity
|
||||||
|
|
||||||
# Publish Web Output
|
# dotenv environment variables file
|
||||||
*.[Pp]ublish.xml
|
.env
|
||||||
*.azurePubxml
|
.env.test
|
||||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
|
||||||
# but database connection strings (with potential passwords) will be unencrypted
|
|
||||||
*.pubxml
|
|
||||||
*.publishproj
|
|
||||||
|
|
||||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
.cache
|
||||||
# in these scripts will be unencrypted
|
|
||||||
PublishScripts/
|
|
||||||
|
|
||||||
# NuGet Packages
|
# next.js build output
|
||||||
*.nupkg
|
.next
|
||||||
# NuGet Symbol Packages
|
|
||||||
*.snupkg
|
|
||||||
# The packages folder can be ignored because of Package Restore
|
|
||||||
**/[Pp]ackages/*
|
|
||||||
# except build/, which is used as an MSBuild target.
|
|
||||||
!**/[Pp]ackages/build/
|
|
||||||
# Uncomment if necessary however generally it will be regenerated when needed
|
|
||||||
#!**/[Pp]ackages/repositories.config
|
|
||||||
# NuGet v3's project.json files produces more ignorable files
|
|
||||||
*.nuget.props
|
|
||||||
*.nuget.targets
|
|
||||||
|
|
||||||
# Microsoft Azure Build Output
|
# nuxt.js build output
|
||||||
csx/
|
.nuxt
|
||||||
*.build.csdef
|
|
||||||
|
|
||||||
# Microsoft Azure Emulator
|
# vuepress build output
|
||||||
ecf/
|
.vuepress/dist
|
||||||
rcf/
|
|
||||||
|
|
||||||
# Windows Store app package directories and files
|
# Serverless directories
|
||||||
AppPackages/
|
.serverless/
|
||||||
BundleArtifacts/
|
|
||||||
Package.StoreAssociation.xml
|
|
||||||
_pkginfo.txt
|
|
||||||
*.appx
|
|
||||||
*.appxbundle
|
|
||||||
*.appxupload
|
|
||||||
|
|
||||||
# Visual Studio cache files
|
# FuseBox cache
|
||||||
# files ending in .cache can be ignored
|
.fusebox/
|
||||||
*.[Cc]ache
|
|
||||||
# but keep track of directories ending in .cache
|
|
||||||
!?*.[Cc]ache/
|
|
||||||
|
|
||||||
# Others
|
# DynamoDB Local files
|
||||||
ClientBin/
|
.dynamodb/
|
||||||
~$*
|
|
||||||
*~
|
|
||||||
*.dbmdl
|
|
||||||
*.dbproj.schemaview
|
|
||||||
*.jfm
|
|
||||||
*.pfx
|
|
||||||
*.publishsettings
|
|
||||||
orleans.codegen.cs
|
|
||||||
|
|
||||||
# Including strong name files can present a security risk
|
# OS metadata
|
||||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
.DS_Store
|
||||||
#*.snk
|
Thumbs.db
|
||||||
|
|
||||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
# Ignore built ts files
|
||||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
__tests__/runner/*
|
||||||
#bower_components/
|
lib/**/*
|
||||||
|
|
||||||
# RIA/Silverlight projects
|
|
||||||
Generated_Code/
|
|
||||||
|
|
||||||
# Backup & report files from converting an old project file
|
|
||||||
# to a newer Visual Studio version. Backup files are not needed,
|
|
||||||
# because we have git ;-)
|
|
||||||
_UpgradeReport_Files/
|
|
||||||
Backup*/
|
|
||||||
UpgradeLog*.XML
|
|
||||||
UpgradeLog*.htm
|
|
||||||
ServiceFabricBackup/
|
|
||||||
*.rptproj.bak
|
|
||||||
|
|
||||||
# SQL Server files
|
|
||||||
*.mdf
|
|
||||||
*.ldf
|
|
||||||
*.ndf
|
|
||||||
|
|
||||||
# Business Intelligence projects
|
|
||||||
*.rdl.data
|
|
||||||
*.bim.layout
|
|
||||||
*.bim_*.settings
|
|
||||||
*.rptproj.rsuser
|
|
||||||
*- [Bb]ackup.rdl
|
|
||||||
*- [Bb]ackup ([0-9]).rdl
|
|
||||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
|
||||||
|
|
||||||
# Microsoft Fakes
|
|
||||||
FakesAssemblies/
|
|
||||||
|
|
||||||
# GhostDoc plugin setting file
|
|
||||||
*.GhostDoc.xml
|
|
||||||
|
|
||||||
# Node.js Tools for Visual Studio
|
|
||||||
.ntvs_analysis.dat
|
|
||||||
node_modules/
|
|
||||||
|
|
||||||
# Visual Studio 6 build log
|
|
||||||
*.plg
|
|
||||||
|
|
||||||
# Visual Studio 6 workspace options file
|
|
||||||
*.opt
|
|
||||||
|
|
||||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
|
||||||
*.vbw
|
|
||||||
|
|
||||||
# Visual Studio LightSwitch build output
|
|
||||||
**/*.HTMLClient/GeneratedArtifacts
|
|
||||||
**/*.DesktopClient/GeneratedArtifacts
|
|
||||||
**/*.DesktopClient/ModelManifest.xml
|
|
||||||
**/*.Server/GeneratedArtifacts
|
|
||||||
**/*.Server/ModelManifest.xml
|
|
||||||
_Pvt_Extensions
|
|
||||||
|
|
||||||
# Paket dependency manager
|
|
||||||
.paket/paket.exe
|
|
||||||
paket-files/
|
|
||||||
|
|
||||||
# FAKE - F# Make
|
|
||||||
.fake/
|
|
||||||
|
|
||||||
# CodeRush personal settings
|
|
||||||
.cr/personal
|
|
||||||
|
|
||||||
# Python Tools for Visual Studio (PTVS)
|
|
||||||
__pycache__/
|
|
||||||
*.pyc
|
|
||||||
|
|
||||||
# Cake - Uncomment if you are using it
|
|
||||||
# tools/**
|
|
||||||
# !tools/packages.config
|
|
||||||
|
|
||||||
# Tabs Studio
|
|
||||||
*.tss
|
|
||||||
|
|
||||||
# Telerik's JustMock configuration file
|
|
||||||
*.jmconfig
|
|
||||||
|
|
||||||
# BizTalk build output
|
|
||||||
*.btp.cs
|
|
||||||
*.btm.cs
|
|
||||||
*.odx.cs
|
|
||||||
*.xsd.cs
|
|
||||||
|
|
||||||
# OpenCover UI analysis results
|
|
||||||
OpenCover/
|
|
||||||
|
|
||||||
# Azure Stream Analytics local run output
|
|
||||||
ASALocalRun/
|
|
||||||
|
|
||||||
# MSBuild Binary and Structured Log
|
|
||||||
*.binlog
|
|
||||||
|
|
||||||
# NVidia Nsight GPU debugger configuration file
|
|
||||||
*.nvuser
|
|
||||||
|
|
||||||
# MFractors (Xamarin productivity tool) working folder
|
|
||||||
.mfractor/
|
|
||||||
|
|
||||||
# Local History for Visual Studio
|
|
||||||
.localhistory/
|
|
||||||
|
|
||||||
# BeatPulse healthcheck temp database
|
|
||||||
healthchecksdb
|
|
||||||
|
|
||||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
|
||||||
MigrationBackup/
|
|
||||||
|
|
||||||
# Ionide (cross platform F# VS Code tools) working folder
|
|
||||||
.ionide/
|
|
3
.prettierignore
Normal file
3
.prettierignore
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dist/
|
||||||
|
lib/
|
||||||
|
node_modules/
|
11
.prettierrc.json
Normal file
11
.prettierrc.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"printWidth": 80,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"useTabs": false,
|
||||||
|
"semi": false,
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"bracketSpacing": false,
|
||||||
|
"arrowParens": "avoid",
|
||||||
|
"parser": "typescript"
|
||||||
|
}
|
43
README.md
43
README.md
@ -1,3 +1,46 @@
|
|||||||
|
# microsoft/setup-msbuild
|
||||||
|
You know how handy that 'Visual Studio Developer Command Prompt' is on your local machine? And how it adds several things to `PATH` to allow you to just issue commands like `msbuild` or otherwise? Use this action to setup similar flexibility in your Windows-based GitHub Actions runners. This will let you discover where those tool paths are and automatically add them to the `PATH` environment variables for you so future steps in your Actions workflow can just initiate commands without knowing the full path.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Specifying specific versions of Visual Studio
|
||||||
|
You may have a situation where your Actions runner has multiple versions of Visual Studio and you need to find a specific version of the tool. Simply add the `vs-version` input to specify the range of versions to find. If looking for a specific version, enter that version number twice as a range.
|
||||||
|
|
||||||
|
```
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.0
|
||||||
|
with:
|
||||||
|
vs-version: [16.4,16.5]
|
||||||
|
```
|
||||||
|
|
||||||
|
## How does this work?
|
||||||
|
This makes use of the vswhere tool which is a tool is delivered by Microsoft to help in identifying Visual Studio installs and various components. This tool is installed on the hosted Windows runners for GitHub Actions. If you are using a self-hosted runner, you either need to make sure vswhere.exe is in your agent's PATH or specify a full path to the location using:
|
||||||
|
|
||||||
|
```
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.0
|
||||||
|
with:
|
||||||
|
vswhere-path: 'C:\path\to\your\tools\'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building this repo
|
||||||
|
As with most GitHub Actions, this requires NodeJS development tools. After installing NodeJS, you can build this by executing:
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
npm run pack
|
||||||
|
```
|
||||||
|
|
||||||
|
which will modify/create the /dist folder with the final index.js output
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
Thank you to [Warren Buckley](https://github.com/warrenbuckley) for being a core contributor to this Action for the benefit of all developers!
|
||||||
|
|
||||||
# Contributing
|
# Contributing
|
||||||
|
|
||||||
|
20
action.yml
Normal file
20
action.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
name: 'setup-msbuild'
|
||||||
|
description: 'Helps set up MSBuild into PATH for later usage.'
|
||||||
|
author: 'Microsoft'
|
||||||
|
branding:
|
||||||
|
color: purple
|
||||||
|
icon: terminal
|
||||||
|
inputs:
|
||||||
|
vswhere-path:
|
||||||
|
required: false
|
||||||
|
description: 'Folder location of where vswhere.exe is located if a self-hosted agent'
|
||||||
|
vs-version:
|
||||||
|
description: 'Version of Visual Studio to search; defaults to latest if not specified'
|
||||||
|
required: false
|
||||||
|
outputs:
|
||||||
|
msbuildPath:
|
||||||
|
description: 'The resulting location of msbuild for your inputs'
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: 'node12'
|
||||||
|
main: 'dist/index.js'
|
4536
dist/index.js
vendored
Normal file
4536
dist/index.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11
jest.config.js
Normal file
11
jest.config.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
module.exports = {
|
||||||
|
clearMocks: true,
|
||||||
|
moduleFileExtensions: ['js', 'ts'],
|
||||||
|
testEnvironment: 'node',
|
||||||
|
testMatch: ['**/*.test.ts'],
|
||||||
|
testRunner: 'jest-circus/runner',
|
||||||
|
transform: {
|
||||||
|
'^.+\\.ts$': 'ts-jest'
|
||||||
|
},
|
||||||
|
verbose: true
|
||||||
|
}
|
6560
package-lock.json
generated
Normal file
6560
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
50
package.json
Normal file
50
package.json
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"name": "setup-msbuild",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"description": "Helps set up specific MSBuild tool into PATH for later usage.",
|
||||||
|
"main": "lib/main.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc",
|
||||||
|
"format": "prettier --write **/*.ts",
|
||||||
|
"format-check": "prettier --check **/*.ts",
|
||||||
|
"lint": "eslint src/**/*.ts",
|
||||||
|
"pack": "ncc build",
|
||||||
|
"test": "jest",
|
||||||
|
"all": "npm run build && npm run format && npm run lint && npm run pack && npm test"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/microsoft/setup-msbuild.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"actions",
|
||||||
|
"vs",
|
||||||
|
"setup",
|
||||||
|
"visual studio",
|
||||||
|
"msbuild",
|
||||||
|
"vstest"
|
||||||
|
],
|
||||||
|
"author": "Microsoft",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/core": "^1.2.0",
|
||||||
|
"@actions/exec": "^1.0.3",
|
||||||
|
"@actions/tool-cache": "^1.3.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jest": "^24.0.23",
|
||||||
|
"@types/node": "^12.12.25",
|
||||||
|
"@typescript-eslint/parser": "^2.8.0",
|
||||||
|
"@zeit/ncc": "^0.20.5",
|
||||||
|
"eslint": "^5.16.0",
|
||||||
|
"eslint-plugin-github": "^2.0.0",
|
||||||
|
"eslint-plugin-jest": "^22.21.0",
|
||||||
|
"jest": "^24.9.0",
|
||||||
|
"jest-circus": "^24.9.0",
|
||||||
|
"js-yaml": "^3.13.1",
|
||||||
|
"prettier": "^1.19.1",
|
||||||
|
"ts-jest": "^24.2.0",
|
||||||
|
"typescript": "^3.6.4"
|
||||||
|
}
|
||||||
|
}
|
115
src/main.ts
Normal file
115
src/main.ts
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
import * as core from '@actions/core'
|
||||||
|
import * as toolCache from '@actions/tool-cache'
|
||||||
|
import * as exec from '@actions/exec'
|
||||||
|
import * as path from 'path'
|
||||||
|
import {ExecOptions} from '@actions/exec/lib/interfaces'
|
||||||
|
|
||||||
|
const IS_WINDOWS = process.platform === 'win32'
|
||||||
|
const VS_VERSION = core.getInput('vs-version') || 'latest'
|
||||||
|
const VSWHERE_PATH = core.getInput('vswhere-path') || ''
|
||||||
|
const VSWHERE_VERSION = '2.8.4'
|
||||||
|
|
||||||
|
// if a specific version of VS is requested
|
||||||
|
let VSWHERE_EXEC = ''
|
||||||
|
if (VS_VERSION === 'latest') {
|
||||||
|
VSWHERE_EXEC += '-latest '
|
||||||
|
} else {
|
||||||
|
VSWHERE_EXEC += `-version ${VS_VERSION} `
|
||||||
|
}
|
||||||
|
VSWHERE_EXEC +=
|
||||||
|
'-requires Microsoft.Component.MSBuild -find MSBuild\\**\\Bin\\MSBuild.exe'
|
||||||
|
|
||||||
|
async function run(): Promise<void> {
|
||||||
|
try {
|
||||||
|
// exit if non Windows runner
|
||||||
|
if (IS_WINDOWS === false) {
|
||||||
|
core.setFailed('setup-msbuild can only be run on Windows runners')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if we are using a specific path for vswhere
|
||||||
|
let vswhereToolExe = ''
|
||||||
|
let cachedToolDirectory = ''
|
||||||
|
|
||||||
|
if (!VSWHERE_PATH) {
|
||||||
|
// specified a path for vswhere, use it and cache the location
|
||||||
|
vswhereToolExe = path.join(VSWHERE_PATH, 'vswhere.exe')
|
||||||
|
cachedToolDirectory = await toolCache.cacheDir(
|
||||||
|
VSWHERE_PATH,
|
||||||
|
'vswhere',
|
||||||
|
VSWHERE_VERSION
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
// using the tool on the runner
|
||||||
|
// check and see if we have a cache for the specified tool version
|
||||||
|
// eslint-disable-next-line @typescript-eslint/await-thenable
|
||||||
|
cachedToolDirectory = await toolCache.find('vswhere', VSWHERE_VERSION)
|
||||||
|
|
||||||
|
// TODO: Remove this when runner has proper tool
|
||||||
|
if (cachedToolDirectory) {
|
||||||
|
core.debug(`Found cached version of vswhere-${VSWHERE_VERSION}`)
|
||||||
|
} else {
|
||||||
|
cachedToolDirectory = await installTool()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add cache dir to PATH
|
||||||
|
core.addPath(cachedToolDirectory)
|
||||||
|
|
||||||
|
vswhereToolExe = path.join(cachedToolDirectory, 'vswhere.exe')
|
||||||
|
core.debug(`Full cached tool exe: ${vswhereToolExe}`)
|
||||||
|
|
||||||
|
let foundToolPath = ''
|
||||||
|
const options: ExecOptions = {}
|
||||||
|
options.listeners = {
|
||||||
|
stdout: (data: Buffer) => {
|
||||||
|
// eslint-disable-next-line prefer-const
|
||||||
|
let output = data.toString()
|
||||||
|
foundToolPath += output
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute the find putting the result of the command in the options foundToolPath
|
||||||
|
await exec.exec(`${vswhereToolExe} ${VSWHERE_EXEC}`, [], options)
|
||||||
|
|
||||||
|
if (!foundToolPath) {
|
||||||
|
core.setFailed('Unable to find msbuild.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract the folder location for the tool
|
||||||
|
const toolFolderPath = path.dirname(foundToolPath)
|
||||||
|
core.debug(`Tool Path: ${toolFolderPath}`)
|
||||||
|
|
||||||
|
// set the outputs for the action to the folder path of msbuild
|
||||||
|
core.setOutput('msbuildPath', toolFolderPath)
|
||||||
|
|
||||||
|
// add tool path to PATH
|
||||||
|
core.addPath(toolFolderPath)
|
||||||
|
} catch (error) {
|
||||||
|
core.setFailed(error.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function installTool(): Promise<string> {
|
||||||
|
// cached tool was not found, retrieve it
|
||||||
|
core.debug(`Downloading vswhere-${VSWHERE_VERSION}`)
|
||||||
|
|
||||||
|
// using choco install we get proper tool and it automatically puts in the PATH
|
||||||
|
await exec.exec(
|
||||||
|
`choco install vswhere -y --no-progress -force -v --version=${VSWHERE_VERSION}`
|
||||||
|
)
|
||||||
|
|
||||||
|
// add the tool to the cache
|
||||||
|
const newCachedToolDirectory = await toolCache.cacheDir(
|
||||||
|
'C:\\ProgramData\\chocolatey\\lib\\vswhere\\tools',
|
||||||
|
'vswhere',
|
||||||
|
VSWHERE_VERSION
|
||||||
|
)
|
||||||
|
|
||||||
|
core.debug(`New cached tool directory=${newCachedToolDirectory}`)
|
||||||
|
|
||||||
|
return newCachedToolDirectory
|
||||||
|
}
|
||||||
|
|
||||||
|
run()
|
12
tsconfig.json
Normal file
12
tsconfig.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
||||||
|
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
||||||
|
"outDir": "./lib", /* Redirect output structure to the directory. */
|
||||||
|
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||||
|
"strict": true, /* Enable all strict type-checking options. */
|
||||||
|
"noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||||
|
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||||
|
},
|
||||||
|
"exclude": ["node_modules", "**/*.test.ts"]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user