Merge pull request #812 from GitTools/bug/prerelease

Made possible to install a pre-release version
This commit is contained in:
Artur
2023-03-11 04:32:23 +01:00
committed by GitHub
60 changed files with 197738 additions and 63230 deletions

View File

@@ -8,6 +8,7 @@ end_of_line = lf
charset = utf-8 charset = utf-8
trim_trailing_whitespace = true trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true
max_line_length = off
[*.yml] [*.yml]
indent_size = 2 indent_size = 2

2
.gitignore vendored
View File

@@ -4,3 +4,5 @@ node_modules/
*.js *.js
!dist/**/*.js !dist/**/*.js
*.vsix *.vsix
.idea/

View File

@@ -1,5 +1,5 @@
{ {
"printWidth": 80, "printWidth": 160,
"tabWidth": 4, "tabWidth": 4,
"useTabs": false, "useTabs": false,
"semi": false, "semi": false,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

246
package-lock.json generated
View File

@@ -16,13 +16,14 @@
"azure-pipelines-task-lib": "^4.3.0", "azure-pipelines-task-lib": "^4.3.0",
"azure-pipelines-tool-lib": "^1.3.2", "azure-pipelines-tool-lib": "^1.3.2",
"inversify": "^6.0.1", "inversify": "^6.0.1",
"semver": "^7.3.8",
"typed-rest-client": "^1.8.9", "typed-rest-client": "^1.8.9",
"uuid": "^9.0.0" "uuid": "^9.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^18.15.0", "@types/node": "^18.15.0",
"@types/q": "^1.5.5", "@types/q": "^1.5.5",
"@types/semver-compare": "^1.0.1", "@types/semver": "^7.3.13",
"@types/uuid": "^9.0.1", "@types/uuid": "^9.0.1",
"minimist": "^1.2.8", "minimist": "^1.2.8",
"prettier": "^2.8.4", "prettier": "^2.8.4",
@@ -286,14 +287,9 @@
"integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==" "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA=="
}, },
"node_modules/@types/semver": { "node_modules/@types/semver": {
"version": "5.5.0", "version": "7.3.13",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
},
"node_modules/@types/semver-compare": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/semver-compare/-/semver-compare-1.0.1.tgz",
"integrity": "sha512-wx2LQVvKlEkhXp/HoKIZ/aSL+TvfJdKco8i0xJS3aR877mg4qBHzNT6+B5a61vewZHo79EdZavskGnRXEC2H6A==",
"dev": true "dev": true
}, },
"node_modules/@types/uuid": { "node_modules/@types/uuid": {
@@ -662,6 +658,14 @@
"uuid": "^3.0.1" "uuid": "^3.0.1"
} }
}, },
"node_modules/azure-pipelines-task-lib/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/azure-pipelines-task-lib/node_modules/uuid": { "node_modules/azure-pipelines-task-lib/node_modules/uuid": {
"version": "3.4.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -684,6 +688,11 @@
"uuid": "^3.3.2" "uuid": "^3.3.2"
} }
}, },
"node_modules/azure-pipelines-tool-lib/node_modules/@types/semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
},
"node_modules/azure-pipelines-tool-lib/node_modules/@types/uuid": { "node_modules/azure-pipelines-tool-lib/node_modules/@types/uuid": {
"version": "3.4.9", "version": "3.4.9",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.9.tgz", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.9.tgz",
@@ -708,6 +717,14 @@
"resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
"integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
}, },
"node_modules/azure-pipelines-tool-lib/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/azure-pipelines-tool-lib/node_modules/uuid": { "node_modules/azure-pipelines-tool-lib/node_modules/uuid": {
"version": "3.4.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -2118,39 +2135,6 @@
"validate-npm-package-license": "^3.0.1" "validate-npm-package-license": "^3.0.1"
} }
}, },
"node_modules/normalize-package-data/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/normalize-package-data/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/normalize-package-data/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/normalize-path": { "node_modules/normalize-path": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
@@ -2532,6 +2516,15 @@
"validate-npm-package-license": "^3.0.1" "validate-npm-package-license": "^3.0.1"
} }
}, },
"node_modules/read-pkg/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
"bin": {
"semver": "bin/semver"
}
},
"node_modules/read-pkg/node_modules/type-fest": { "node_modules/read-pkg/node_modules/type-fest": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
@@ -2674,11 +2667,17 @@
} }
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "5.7.1", "version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": { "bin": {
"semver": "bin/semver" "semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
} }
}, },
"node_modules/semver-compare": { "node_modules/semver-compare": {
@@ -2686,6 +2685,22 @@
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
}, },
"node_modules/semver/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/semver/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/serialize-javascript": { "node_modules/serialize-javascript": {
"version": "6.0.1", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
@@ -3249,33 +3264,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/ts-loader/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/ts-loader/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/ts-loader/node_modules/supports-color": { "node_modules/ts-loader/node_modules/supports-color": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -3288,12 +3276,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/ts-loader/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/tunnel": { "node_modules/tunnel": {
"version": "0.0.6", "version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
@@ -3977,14 +3959,9 @@
"integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==" "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA=="
}, },
"@types/semver": { "@types/semver": {
"version": "5.5.0", "version": "7.3.13",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
},
"@types/semver-compare": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/semver-compare/-/semver-compare-1.0.1.tgz",
"integrity": "sha512-wx2LQVvKlEkhXp/HoKIZ/aSL+TvfJdKco8i0xJS3aR877mg4qBHzNT6+B5a61vewZHo79EdZavskGnRXEC2H6A==",
"dev": true "dev": true
}, },
"@types/uuid": { "@types/uuid": {
@@ -4312,6 +4289,11 @@
"uuid": "^3.0.1" "uuid": "^3.0.1"
}, },
"dependencies": { "dependencies": {
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"uuid": { "uuid": {
"version": "3.4.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -4333,6 +4315,11 @@
"uuid": "^3.3.2" "uuid": "^3.3.2"
}, },
"dependencies": { "dependencies": {
"@types/semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
},
"@types/uuid": { "@types/uuid": {
"version": "3.4.9", "version": "3.4.9",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.9.tgz", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.9.tgz",
@@ -4357,6 +4344,11 @@
"resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
"integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
}, },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"uuid": { "uuid": {
"version": "3.4.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -5514,32 +5506,6 @@
"resolve": "^1.20.0", "resolve": "^1.20.0",
"semver": "^7.3.4", "semver": "^7.3.4",
"validate-npm-package-license": "^3.0.1" "validate-npm-package-license": "^3.0.1"
},
"dependencies": {
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
} }
}, },
"normalize-path": { "normalize-path": {
@@ -5815,6 +5781,12 @@
"validate-npm-package-license": "^3.0.1" "validate-npm-package-license": "^3.0.1"
} }
}, },
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"type-fest": { "type-fest": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
@@ -5947,9 +5919,27 @@
} }
}, },
"semver": { "semver": {
"version": "5.7.1", "version": "7.3.8",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"requires": {
"lru-cache": "^6.0.0"
},
"dependencies": {
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
}
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
}, },
"semver-compare": { "semver-compare": {
"version": "1.0.0", "version": "1.0.0",
@@ -6397,24 +6387,6 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true "dev": true
}, },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
"yallist": "^4.0.0"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
},
"supports-color": { "supports-color": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6423,12 +6395,6 @@
"requires": { "requires": {
"has-flag": "^4.0.0" "has-flag": "^4.0.0"
} }
},
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
} }
} }
}, },

View File

@@ -33,13 +33,14 @@
"azure-pipelines-task-lib": "^4.3.0", "azure-pipelines-task-lib": "^4.3.0",
"azure-pipelines-tool-lib": "^1.3.2", "azure-pipelines-tool-lib": "^1.3.2",
"inversify": "^6.0.1", "inversify": "^6.0.1",
"semver": "^7.3.8",
"typed-rest-client": "^1.8.9", "typed-rest-client": "^1.8.9",
"uuid": "^9.0.0" "uuid": "^9.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^18.15.0", "@types/node": "^18.15.0",
"@types/q": "^1.5.5", "@types/q": "^1.5.5",
"@types/semver-compare": "^1.0.1", "@types/semver": "^7.3.13",
"@types/uuid": "^9.0.1", "@types/uuid": "^9.0.1",
"minimist": "^1.2.8", "minimist": "^1.2.8",
"prettier": "^2.8.4", "prettier": "^2.8.4",

View File

@@ -24,12 +24,7 @@ class BuildAgent implements IBuildAgent {
return toolLib.findLocalTool(toolName, versionSpec, arch) return toolLib.findLocalTool(toolName, versionSpec, arch)
} }
public cacheDir( public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string> {
sourceDir: string,
tool: string,
version: string,
arch?: string
): Promise<string> {
return toolLib.cacheDir(sourceDir, tool, version, arch) return toolLib.cacheDir(sourceDir, tool, version, arch)
} }

View File

@@ -12,10 +12,7 @@ import * as toolCache from '@actions/tool-cache'
import { injectable } from 'inversify' import { injectable } from 'inversify'
import { IBuildAgent, IExecResult } from '../../core/models' import { IBuildAgent, IExecResult } from '../../core/models'
import { import { IRequestOptions, IProxyConfiguration } from 'typed-rest-client/Interfaces'
IRequestOptions,
IProxyConfiguration
} from 'typed-rest-client/Interfaces'
@injectable() @injectable()
class BuildAgent implements IBuildAgent { class BuildAgent implements IBuildAgent {
@@ -58,12 +55,7 @@ class BuildAgent implements IBuildAgent {
return undefined return undefined
} }
let proxyURL = let proxyURL = process.env.HTTP_PROXY || process.env.http_proxy || process.env.HTTPS_PROXY || process.env.https_proxy || null
process.env.HTTP_PROXY ||
process.env.http_proxy ||
process.env.HTTPS_PROXY ||
process.env.https_proxy ||
null
if (proxyURL) { if (proxyURL) {
let url = new urlApi.URL(requestedUrl) let url = new urlApi.URL(requestedUrl)
@@ -78,12 +70,7 @@ class BuildAgent implements IBuildAgent {
return undefined return undefined
} }
public cacheDir( public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string> {
sourceDir: string,
tool: string,
version: string,
arch?: string
): Promise<string> {
return toolCache.cacheDir(sourceDir, tool, version, arch) return toolCache.cacheDir(sourceDir, tool, version, arch)
} }

View File

@@ -19,12 +19,7 @@ class BuildAgent implements IBuildAgent {
return 'find' return 'find'
} }
public cacheDir( public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string> {
sourceDir: string,
tool: string,
version: string,
arch?: string
): Promise<string> {
console.log('cacheDir') console.log('cacheDir')
return Promise.resolve('cacheDir') return Promise.resolve('cacheDir')
} }

View File

@@ -4,16 +4,13 @@ import * as path from 'path'
import * as http from 'typed-rest-client/HttpClient' import * as http from 'typed-rest-client/HttpClient'
import { inject, injectable } from 'inversify' import { inject, injectable } from 'inversify'
import { TYPES, IExecResult, IBuildAgent, ISetupSettings } from './models' import { TYPES, IExecResult, IBuildAgent } from './models'
import { IVersionManager } from './versionManager' import { IVersionManager } from './versionManager'
import { ISetupSettings } from '../tools/common/models'
export interface IDotnetTool { export interface IDotnetTool {
disableTelemetry(): void disableTelemetry(): void
toolInstall( toolInstall(toolName: string, checkLatest: boolean, setupSettings: ISetupSettings): Promise<string>
toolName: string,
checkLatest: boolean,
setupSettings: ISetupSettings
): Promise<string>
} }
@injectable() @injectable()
@@ -22,20 +19,12 @@ export class DotnetTool implements IDotnetTool {
protected versionManager: IVersionManager protected versionManager: IVersionManager
private httpClient: http.HttpClient private httpClient: http.HttpClient
private static readonly nugetRoot: string = private static readonly nugetRoot: string = 'https://azuresearch-usnc.nuget.org/'
'https://api-v2v3search-0.nuget.org/'
constructor( constructor(@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent, @inject(TYPES.IVersionManager) versionManager: IVersionManager) {
@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent,
@inject(TYPES.IVersionManager) versionManager: IVersionManager
) {
this.buildAgent = buildAgent this.buildAgent = buildAgent
this.versionManager = versionManager this.versionManager = versionManager
this.httpClient = new http.HttpClient( this.httpClient = new http.HttpClient('dotnet', undefined, this.buildAgent.proxyConfiguration(DotnetTool.nugetRoot))
'dotnet',
undefined,
this.buildAgent.proxyConfiguration(DotnetTool.nugetRoot)
)
} }
public disableTelemetry(): void { public disableTelemetry(): void {
@@ -48,20 +37,16 @@ export class DotnetTool implements IDotnetTool {
return this.buildAgent.exec(cmd, args) return this.buildAgent.exec(cmd, args)
} }
public async toolInstall( public async toolInstall(toolName: string, checkLatest: boolean, setupSettings: ISetupSettings): Promise<string> {
toolName: string,
checkLatest: boolean,
setupSettings: ISetupSettings
): Promise<string> {
console.log('') console.log('')
console.log('--------------------------') console.log('--------------------------')
console.log( console.log(`Acquiring ${toolName} version spec: ${setupSettings.versionSpec}`)
`Installing ${toolName} version ` + setupSettings.versionSpec
)
console.log('--------------------------') console.log('--------------------------')
let version: string
if (this.versionManager.isExplicitVersion(setupSettings.versionSpec)) { if (this.versionManager.isExplicitVersion(setupSettings.versionSpec)) {
checkLatest = false // check latest doesn't make sense when explicit version checkLatest = false // check latest doesn't make sense when explicit version
version = setupSettings.versionSpec
} }
let toolPath: string let toolPath: string
@@ -73,10 +58,7 @@ export class DotnetTool implements IDotnetTool {
} }
if (!toolPath) { if (!toolPath) {
let version: string if (this.versionManager.isExplicitVersion(setupSettings.versionSpec)) {
if (
this.versionManager.isExplicitVersion(setupSettings.versionSpec)
) {
// //
// Explicit version was specified. No need to query for list of versions. // Explicit version was specified. No need to query for list of versions.
// //
@@ -88,15 +70,9 @@ export class DotnetTool implements IDotnetTool {
// If your tool doesn't offer a mechanism to query, // If your tool doesn't offer a mechanism to query,
// then it can only support exact version inputs. // then it can only support exact version inputs.
// //
version = await this.queryLatestMatch( version = await this.queryLatestMatch(toolName, setupSettings.versionSpec, setupSettings.includePrerelease)
toolName,
setupSettings.versionSpec,
setupSettings.includePrerelease
)
if (!version) { if (!version) {
throw new Error( throw new Error(`Unable to find ${toolName} version '${setupSettings.versionSpec}'.`)
`Unable to find ${toolName} version '${setupSettings.versionSpec}'.`
)
} }
// //
@@ -108,24 +84,20 @@ export class DotnetTool implements IDotnetTool {
// //
// Download, extract, cache // Download, extract, cache
// //
toolPath = await this.acquireTool( toolPath = await this.acquireTool(toolName, version, setupSettings.ignoreFailedSources)
toolName,
version,
setupSettings.ignoreFailedSources
)
} }
} }
console.log('--------------------------')
console.log(`${toolName} version: ${version} installed.`)
console.log('--------------------------')
// //
// Prepend the tools path. This prepends the PATH for the current process and // Prepend the tools path. This prepends the PATH for the current process and
// instructs the agent to prepend for each task that follows. // instructs the agent to prepend for each task that follows.
// //
this.buildAgent.debug(`toolPath: ${toolPath}`) this.buildAgent.debug(`toolPath: ${toolPath}`)
if ( if (os.platform() !== 'win32' && !this.buildAgent.getVariable('DOTNET_ROOT')) {
os.platform() !== 'win32' &&
!this.buildAgent.getVariable('DOTNET_ROOT')
) {
let dotnetPath = await this.buildAgent.which('dotnet') let dotnetPath = await this.buildAgent.which('dotnet')
dotnetPath = fs.readlinkSync(dotnetPath) || dotnetPath dotnetPath = fs.readlinkSync(dotnetPath) || dotnetPath
const dotnetRoot = path.dirname(dotnetPath) const dotnetRoot = path.dirname(dotnetPath)
@@ -136,22 +108,14 @@ export class DotnetTool implements IDotnetTool {
return toolPath return toolPath
} }
private async queryLatestMatch( private async queryLatestMatch(toolName: string, versionSpec: string, includePrerelease: boolean): Promise<string> {
toolName: string,
versionSpec: string,
includePrerelease: boolean
): Promise<string> {
this.buildAgent.debug( this.buildAgent.debug(
`querying tool versions for ${toolName}${ `querying tool versions for ${toolName}${versionSpec ? `@${versionSpec}` : ''} ${includePrerelease ? 'including pre-releases' : ''}`
versionSpec ? `@${versionSpec}` : ''
} ${includePrerelease ? 'including pre-releases' : ''}`
) )
const downloadPath = `${ const toolNameParam = encodeURIComponent(toolName.toLowerCase())
DotnetTool.nugetRoot const prereleaseParam = includePrerelease ? 'true' : 'false'
}query?q=${encodeURIComponent(toolName.toLowerCase())}&prerelease=${ const downloadPath = `${DotnetTool.nugetRoot}query?q=${toolNameParam}&prerelease=${prereleaseParam}&semVerLevel=2.0.0&take=1`
includePrerelease ? 'true' : 'false'
}&semVerLevel=2.0.0`
const res = await this.httpClient.get(downloadPath) const res = await this.httpClient.get(downloadPath)
@@ -162,23 +126,19 @@ export class DotnetTool implements IDotnetTool {
const body: string = await res.readBody() const body: string = await res.readBody()
const data = JSON.parse(body).data const data = JSON.parse(body).data
const versions = (data[0].versions as { version: string }[]).map( const versions = (data[0].versions as { version: string }[]).map(x => x.version)
x => x.version
)
if (!versions || !versions.length) { if (!versions || !versions.length) {
return null return null
} }
this.buildAgent.debug(`got versions: ${versions.join(', ')}`) this.buildAgent.debug(`got versions: ${versions.join(', ')}`)
return this.versionManager.evaluateVersions(versions, versionSpec) return this.versionManager.evaluateVersions(versions, versionSpec, {
includePrerelease
})
} }
private async acquireTool( private async acquireTool(toolName: string, version: string, ignoreFailedSources: boolean): Promise<string> {
toolName: string,
version: string,
ignoreFailedSources: boolean
): Promise<string> {
const tempDirectory = await this.buildAgent.createTempDir() const tempDirectory = await this.buildAgent.createTempDir()
let args = ['tool', 'install', toolName, '--tool-path', tempDirectory] let args = ['tool', 'install', toolName, '--tool-path', tempDirectory]

View File

@@ -5,19 +5,9 @@ export const TYPES = {
IDotnetTool: Symbol.for('DotnetTool'), IDotnetTool: Symbol.for('DotnetTool'),
IGitVersionTool: Symbol.for('GitVersionTool'), IGitVersionTool: Symbol.for('GitVersionTool'),
IGitReleaseManagerTool: Symbol.for('GitReleaseManagerTool'), IGitReleaseManagerTool: Symbol.for('GitReleaseManagerTool'),
IVersionManager: Symbol.for('VersionManager') IVersionManager: Symbol.for('VersionManager'),
} IGitVersionSettingsProvider: Symbol.for('GitVersionSettingsProvider'),
IGitReleaseManagerSettingsProvider: Symbol.for('GitReleaseManagerSettingsProvider')
export enum SetupFields {
includePrerelease = 'includePrerelease',
versionSpec = 'versionSpec',
ignoreFailedSources = 'ignoreFailedSources'
}
export interface ISetupSettings {
[SetupFields.versionSpec]: string
[SetupFields.includePrerelease]: boolean
[SetupFields.ignoreFailedSources]: boolean
} }
export interface IExecResult { export interface IExecResult {
@@ -26,17 +16,11 @@ export interface IExecResult {
code: number code: number
error: Error error: Error
} }
export interface IBuildAgent { export interface IBuildAgent {
agentName: string agentName: string
proxyConfiguration(url: string): IRequestOptions proxyConfiguration(url: string): IRequestOptions
find(toolName: string, versionSpec: string, arch?: string): string find(toolName: string, versionSpec: string, arch?: string): string
cacheDir( cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string>
sourceDir: string,
tool: string,
version: string,
arch?: string
): Promise<string>
createTempDir(): Promise<string> createTempDir(): Promise<string>
debug(message: string): void debug(message: string): void
setFailed(message: string, done?: boolean): void setFailed(message: string, done?: boolean): void

View File

@@ -1,19 +0,0 @@
import { IBuildAgent, SetupFields, ISetupSettings } from './models'
export class Settings {
public static getSetupSettings(buildAgent: IBuildAgent): ISetupSettings {
const versionSpec = buildAgent.getInput(SetupFields.versionSpec)
const includePrerelease = buildAgent.getBooleanInput(
SetupFields.includePrerelease
)
const ignoreFailedSources = buildAgent.getBooleanInput(
SetupFields.ignoreFailedSources
)
return {
versionSpec,
includePrerelease,
ignoreFailedSources
}
}
}

View File

@@ -1,4 +1,3 @@
import cmp from 'semver-compare'
import * as semver from 'semver' import * as semver from 'semver'
import { injectable, inject } from 'inversify' import { injectable, inject } from 'inversify'
@@ -6,7 +5,7 @@ import { IBuildAgent, TYPES } from './models'
export interface IVersionManager { export interface IVersionManager {
isExplicitVersion(versionSpec: string): boolean isExplicitVersion(versionSpec: string): boolean
evaluateVersions(versions: string[], versionSpec: string): string evaluateVersions(versions: string[], versionSpec: string, optionsOrLoose?: boolean | semver.RangeOptions): string
cleanVersion(version: string): string cleanVersion(version: string): string
} }
@@ -27,13 +26,13 @@ export class VersionManager implements IVersionManager {
return valid return valid
} }
public evaluateVersions(versions: string[], versionSpec: string): string { public evaluateVersions(versions: string[], versionSpec: string, optionsOrLoose?: boolean | semver.RangeOptions): string {
let version: string let version: string
this.buildAgent.debug('evaluating ' + versions.length + ' versions') this.buildAgent.debug('evaluating ' + versions.length + ' versions')
versions = versions.sort(cmp) versions = semver.sort(versions)
for (let i = versions.length - 1; i >= 0; i--) { for (let i = versions.length - 1; i >= 0; i--) {
const potential: string = versions[i] const potential: string = versions[i]
const satisfied: boolean = semver.satisfies(potential, versionSpec) const satisfied: boolean = semver.satisfies(potential, versionSpec, optionsOrLoose)
if (satisfied) { if (satisfied) {
version = potential version = potential
break break

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { addAsset } from './main' import { addAsset } from './main'
addAsset() await addAsset()

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { close } from './main' import { close } from './main'
close() await close()

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { create } from './main' import { create } from './main'
create() await create()

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { discard } from './main' import { discard } from './main'
discard() await discard()

View File

@@ -1,34 +1,26 @@
import { IBuildAgent, TYPES } from '../../core/models' import { IBuildAgent, TYPES } from '../../core/models'
import { import { IGitReleaseManagerTool, GitReleaseManagerTool } from '../../tools/gitreleasemanager/tool'
IGitReleaseManagerTool, import { IGitReleaseManagerSettingsProvider } from '../../tools/gitreleasemanager/models'
GitReleaseManagerTool import { GitReleaseManagerSettingsProvider } from '../../tools/gitreleasemanager/settings'
} from '../../tools/gitreleasemanager/tool'
import { Settings as CommonSettings } from '../../core/settings'
import { Settings } from '../../tools/gitreleasemanager/settings'
import container from '../../core/ioc' import container from '../../core/ioc'
container container.bind<IGitReleaseManagerTool>(TYPES.IGitReleaseManagerTool).to(GitReleaseManagerTool)
.bind<IGitReleaseManagerTool>(TYPES.IGitReleaseManagerTool) container.bind<IGitReleaseManagerSettingsProvider>(TYPES.IGitReleaseManagerSettingsProvider).to(GitReleaseManagerSettingsProvider)
.to(GitReleaseManagerTool)
const gitReleaseManagerTool = container.get<IGitReleaseManagerTool>(
TYPES.IGitReleaseManagerTool
)
const buildAgent = container.get<IBuildAgent>(TYPES.IBuildAgent) const buildAgent = container.get<IBuildAgent>(TYPES.IBuildAgent)
const gitReleaseManagerTool = container.get<IGitReleaseManagerTool>(TYPES.IGitReleaseManagerTool)
const settingsProvider = container.get<IGitReleaseManagerSettingsProvider>(TYPES.IGitReleaseManagerSettingsProvider)
export async function setup() { export async function setup() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = CommonSettings.getSetupSettings(buildAgent) const settings = settingsProvider.getSetupSettings()
await gitReleaseManagerTool.install(settings) await gitReleaseManagerTool.install(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager installed successfully', true)
'GitVersionManager installed successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }
@@ -38,14 +30,11 @@ export async function create() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = Settings.getCreateSettings(buildAgent) const settings = settingsProvider.getCreateSettings()
await gitReleaseManagerTool.create(settings) await gitReleaseManagerTool.create(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager created release successfully', true)
'GitVersionManager created release successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }
@@ -55,14 +44,11 @@ export async function discard() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = Settings.getDiscardSettings(buildAgent) const settings = settingsProvider.getDiscardSettings()
await gitReleaseManagerTool.discard(settings) await gitReleaseManagerTool.discard(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager discarded release successfully', true)
'GitVersionManager discarded release successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }
@@ -72,14 +58,11 @@ export async function close() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = Settings.getCloseSettings(buildAgent) const settings = settingsProvider.getCloseSettings()
await gitReleaseManagerTool.close(settings) await gitReleaseManagerTool.close(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager closed release successfully', true)
'GitVersionManager closed release successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }
@@ -89,14 +72,11 @@ export async function open() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = Settings.getOpenSettings(buildAgent) const settings = settingsProvider.getOpenSettings()
await gitReleaseManagerTool.open(settings) await gitReleaseManagerTool.open(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager opened release successfully', true)
'GitVersionManager opened release successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }
@@ -106,14 +86,11 @@ export async function publish() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = Settings.getPublishSettings(buildAgent) const settings = settingsProvider.getPublishSettings()
await gitReleaseManagerTool.publish(settings) await gitReleaseManagerTool.publish(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager published release successfully', true)
'GitVersionManager published release successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }
@@ -123,14 +100,11 @@ export async function addAsset() {
try { try {
gitReleaseManagerTool.disableTelemetry() gitReleaseManagerTool.disableTelemetry()
const settings = Settings.getAddAssetSettings(buildAgent) const settings = settingsProvider.getAddAssetSettings()
await gitReleaseManagerTool.addAsset(settings) await gitReleaseManagerTool.addAsset(settings)
buildAgent.setSucceeded( buildAgent.setSucceeded('GitVersionManager added assets to release successfully', true)
'GitVersionManager added assets to release successfully',
true
)
} catch (error) { } catch (error) {
buildAgent.setFailed(error.message, true) buildAgent.setFailed(error.message, true)
} }

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { open } from './main' import { open } from './main'
open() await open()

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { publish } from './main' import { publish } from './main'
publish() await publish()

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { setup } from './main' import { setup } from './main'
setup() await setup()

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { run } from './main' import { run } from './main'
run() await run()

View File

@@ -1,24 +1,23 @@
import { IBuildAgent, TYPES } from '../../core/models' import { IBuildAgent, TYPES } from '../../core/models'
import { Settings as CommonSettings } from '../../core/settings'
import { Settings } from '../../tools/gitversion/settings'
import { IGitVersionTool, GitVersionTool } from '../../tools/gitversion/tool' import { IGitVersionTool, GitVersionTool } from '../../tools/gitversion/tool'
import { import { GitVersionSettings, GitVersionOutput, IGitVersionSettingsProvider } from '../../tools/gitversion/models'
GitVersionSettings, import { GitVersionSettingsProvider } from '../../tools/gitversion/settings'
GitVersionOutput
} from '../../tools/gitversion/models'
import container from '../../core/ioc' import container from '../../core/ioc'
container.bind<IGitVersionTool>(TYPES.IGitVersionTool).to(GitVersionTool) container.bind<IGitVersionTool>(TYPES.IGitVersionTool).to(GitVersionTool)
container.bind<IGitVersionSettingsProvider>(TYPES.IGitVersionSettingsProvider).to(GitVersionSettingsProvider)
const gitVersionTool = container.get<IGitVersionTool>(TYPES.IGitVersionTool)
const buildAgent = container.get<IBuildAgent>(TYPES.IBuildAgent) const buildAgent = container.get<IBuildAgent>(TYPES.IBuildAgent)
const gitVersionTool = container.get<IGitVersionTool>(TYPES.IGitVersionTool)
const settingsProvider = container.get<IGitVersionSettingsProvider>(TYPES.IGitVersionSettingsProvider)
export async function setup() { export async function setup() {
try { try {
gitVersionTool.disableTelemetry() gitVersionTool.disableTelemetry()
console.log(`Agent: '${buildAgent.agentName}'`)
const settings = CommonSettings.getSetupSettings(buildAgent) const settings = settingsProvider.getSetupSettings()
await gitVersionTool.install(settings) await gitVersionTool.install(settings)
@@ -31,17 +30,13 @@ export async function setup() {
export async function run() { export async function run() {
try { try {
gitVersionTool.disableTelemetry() gitVersionTool.disableTelemetry()
console.log(`Agent: '${buildAgent.agentName}'`)
const settings: GitVersionSettings = Settings.getGitVersionSettings( const settings: GitVersionSettings = settingsProvider.getGitVersionSettings()
buildAgent
)
const result = await gitVersionTool.run(settings) const result = await gitVersionTool.run(settings)
const { stdout } = result const { stdout } = result
const jsonOutput = stdout.substring( const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1)
stdout.lastIndexOf('{'),
stdout.lastIndexOf('}') + 1
)
const gitversion = JSON.parse(jsonOutput) as GitVersionOutput const gitversion = JSON.parse(jsonOutput) as GitVersionOutput
gitVersionTool.writeGitVersionToAgent(gitversion) gitVersionTool.writeGitVersionToAgent(gitversion)

View File

@@ -1,4 +1,4 @@
import 'reflect-metadata' import 'reflect-metadata'
import { setup } from './main' import { setup } from './main'
setup() await setup()

View File

@@ -0,0 +1,15 @@
export enum SetupFields {
includePrerelease = 'includePrerelease',
versionSpec = 'versionSpec',
ignoreFailedSources = 'ignoreFailedSources'
}
export interface ISetupSettings {
[SetupFields.versionSpec]: string
[SetupFields.includePrerelease]: boolean
[SetupFields.ignoreFailedSources]: boolean
}
export interface ISettingsProvider {
getSetupSettings(): ISetupSettings
}

View File

@@ -0,0 +1,20 @@
import { injectable } from 'inversify'
import { ISettingsProvider, ISetupSettings, SetupFields } from './models'
import { IBuildAgent } from '../../core/models'
@injectable()
export class SettingsProvider implements ISettingsProvider {
constructor(protected buildAgent: IBuildAgent) {}
public getSetupSettings(): ISetupSettings {
const versionSpec = this.buildAgent.getInput(SetupFields.versionSpec)
const includePrerelease = this.buildAgent.getBooleanInput(SetupFields.includePrerelease)
const ignoreFailedSources = this.buildAgent.getBooleanInput(SetupFields.ignoreFailedSources)
return {
versionSpec,
includePrerelease,
ignoreFailedSources
}
}
}

View File

@@ -1,3 +1,5 @@
import { ISettingsProvider } from '../common/models'
export enum CommonFields { export enum CommonFields {
repository = 'repository', repository = 'repository',
owner = 'owner', owner = 'owner',
@@ -35,6 +37,22 @@ export enum AddAssetFields {
assets = 'assets' assets = 'assets'
} }
export interface IGitReleaseManagerSettingsProvider extends ISettingsProvider {
getCreateSettings(): GitReleaseManagerCreateSettings
getDiscardSettings(): GitReleaseManagerDiscardSettings
getCloseSettings(): GitReleaseManagerCloseSettings
getOpenSettings(): GitReleaseManagerOpenSettings
getPublishSettings(): GitReleaseManagerPublishSettings
getAddAssetSettings(): GitReleaseManagerAddAssetSettings
getCommonSettings(): GitReleaseManagerSettings
}
export interface GitReleaseManagerSettings { export interface GitReleaseManagerSettings {
[CommonFields.repository]: string [CommonFields.repository]: string
[CommonFields.owner]: string [CommonFields.owner]: string
@@ -42,8 +60,7 @@ export interface GitReleaseManagerSettings {
[CommonFields.targetDirectory]: string [CommonFields.targetDirectory]: string
} }
export interface GitReleaseManagerCreateSettings export interface GitReleaseManagerCreateSettings extends GitReleaseManagerSettings {
extends GitReleaseManagerSettings {
[CreateFields.milestone]: string [CreateFields.milestone]: string
[CreateFields.name]: string [CreateFields.name]: string
[CreateFields.inputFileName]: string [CreateFields.inputFileName]: string
@@ -52,28 +69,23 @@ export interface GitReleaseManagerCreateSettings
[CreateFields.assets]?: string[] [CreateFields.assets]?: string[]
} }
export interface GitReleaseManagerDiscardSettings export interface GitReleaseManagerDiscardSettings extends GitReleaseManagerSettings {
extends GitReleaseManagerSettings {
[DiscardFields.milestone]: string [DiscardFields.milestone]: string
} }
export interface GitReleaseManagerCloseSettings export interface GitReleaseManagerCloseSettings extends GitReleaseManagerSettings {
extends GitReleaseManagerSettings {
[CloseFields.milestone]: string [CloseFields.milestone]: string
} }
export interface GitReleaseManagerOpenSettings export interface GitReleaseManagerOpenSettings extends GitReleaseManagerSettings {
extends GitReleaseManagerSettings {
[OpenFields.milestone]: string [OpenFields.milestone]: string
} }
export interface GitReleaseManagerPublishSettings export interface GitReleaseManagerPublishSettings extends GitReleaseManagerSettings {
extends GitReleaseManagerSettings {
[PublishFields.tagName]: string [PublishFields.tagName]: string
} }
export interface GitReleaseManagerAddAssetSettings export interface GitReleaseManagerAddAssetSettings extends GitReleaseManagerSettings {
extends GitReleaseManagerSettings {
[AddAssetFields.tagName]: string [AddAssetFields.tagName]: string
[AddAssetFields.assets]: string[] [AddAssetFields.assets]: string[]
} }

View File

@@ -1,35 +1,39 @@
import { IBuildAgent } from '../../core/models' import { IBuildAgent, TYPES } from '../../core/models'
import { import {
GitReleaseManagerSettings, AddAssetFields,
CloseFields,
CommonFields, CommonFields,
CreateFields, CreateFields,
DiscardFields, DiscardFields,
CloseFields, GitReleaseManagerAddAssetSettings,
OpenFields, GitReleaseManagerCloseSettings,
PublishFields,
AddAssetFields,
GitReleaseManagerCreateSettings, GitReleaseManagerCreateSettings,
GitReleaseManagerDiscardSettings, GitReleaseManagerDiscardSettings,
GitReleaseManagerCloseSettings,
GitReleaseManagerOpenSettings, GitReleaseManagerOpenSettings,
GitReleaseManagerPublishSettings, GitReleaseManagerPublishSettings,
GitReleaseManagerAddAssetSettings GitReleaseManagerSettings,
IGitReleaseManagerSettingsProvider,
OpenFields,
PublishFields
} from './models' } from './models'
import { SettingsProvider } from '../common/settings'
import { inject, injectable } from 'inversify'
export class Settings { @injectable()
public static getCreateSettings( export class GitReleaseManagerSettingsProvider extends SettingsProvider implements IGitReleaseManagerSettingsProvider {
buildAgent: IBuildAgent constructor(@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent) {
): GitReleaseManagerCreateSettings { super(buildAgent)
const milestone = buildAgent.getInput(CreateFields.milestone) }
const name = buildAgent.getInput(CreateFields.name)
const inputFileName = buildAgent.getInput(CreateFields.inputFileName)
const isPreRelease = buildAgent.getBooleanInput(
CreateFields.isPreRelease
)
const commit = buildAgent.getInput(CreateFields.commit)
const assets = buildAgent.getListInput(CreateFields.assets)
const commonSettings = Settings.getCommonSettings(buildAgent) getCreateSettings(): GitReleaseManagerCreateSettings {
const milestone = this.buildAgent.getInput(CreateFields.milestone)
const name = this.buildAgent.getInput(CreateFields.name)
const inputFileName = this.buildAgent.getInput(CreateFields.inputFileName)
const isPreRelease = this.buildAgent.getBooleanInput(CreateFields.isPreRelease)
const commit = this.buildAgent.getInput(CreateFields.commit)
const assets = this.buildAgent.getListInput(CreateFields.assets)
const commonSettings = this.getCommonSettings()
return { return {
...commonSettings, ...commonSettings,
milestone, milestone,
@@ -41,61 +45,51 @@ export class Settings {
} }
} }
public static getDiscardSettings( getDiscardSettings(): GitReleaseManagerDiscardSettings {
buildAgent: IBuildAgent const milestone = this.buildAgent.getInput(DiscardFields.milestone)
): GitReleaseManagerDiscardSettings {
const milestone = buildAgent.getInput(DiscardFields.milestone)
const commonSettings = Settings.getCommonSettings(buildAgent) const commonSettings = this.getCommonSettings()
return { return {
...commonSettings, ...commonSettings,
milestone milestone
} }
} }
public static getCloseSettings( getCloseSettings(): GitReleaseManagerCloseSettings {
buildAgent: IBuildAgent const milestone = this.buildAgent.getInput(CloseFields.milestone)
): GitReleaseManagerCloseSettings {
const milestone = buildAgent.getInput(CloseFields.milestone)
const commonSettings = Settings.getCommonSettings(buildAgent) const commonSettings = this.getCommonSettings()
return { return {
...commonSettings, ...commonSettings,
milestone milestone
} }
} }
public static getOpenSettings( getOpenSettings(): GitReleaseManagerOpenSettings {
buildAgent: IBuildAgent const milestone = this.buildAgent.getInput(OpenFields.milestone)
): GitReleaseManagerOpenSettings {
const milestone = buildAgent.getInput(OpenFields.milestone)
const commonSettings = Settings.getCommonSettings(buildAgent) const commonSettings = this.getCommonSettings()
return { return {
...commonSettings, ...commonSettings,
milestone milestone
} }
} }
public static getPublishSettings( getPublishSettings(): GitReleaseManagerPublishSettings {
buildAgent: IBuildAgent const tagName = this.buildAgent.getInput(PublishFields.tagName)
): GitReleaseManagerPublishSettings {
const tagName = buildAgent.getInput(PublishFields.tagName)
const commonSettings = Settings.getCommonSettings(buildAgent) const commonSettings = this.getCommonSettings()
return { return {
...commonSettings, ...commonSettings,
tagName tagName
} }
} }
public static getAddAssetSettings( getAddAssetSettings(): GitReleaseManagerAddAssetSettings {
buildAgent: IBuildAgent const tagName = this.buildAgent.getInput(AddAssetFields.tagName)
): GitReleaseManagerAddAssetSettings { const assets = this.buildAgent.getListInput(AddAssetFields.assets)
const tagName = buildAgent.getInput(AddAssetFields.tagName)
const assets = buildAgent.getListInput(AddAssetFields.assets)
const commonSettings = Settings.getCommonSettings(buildAgent) const commonSettings = this.getCommonSettings()
return { return {
...commonSettings, ...commonSettings,
tagName, tagName,
@@ -103,15 +97,11 @@ export class Settings {
} }
} }
private static getCommonSettings( getCommonSettings(): GitReleaseManagerSettings {
buildAgent: IBuildAgent const owner = this.buildAgent.getInput(CommonFields.owner, true)
): GitReleaseManagerSettings { const repository = this.buildAgent.getInput(CommonFields.repository, true)
const owner = buildAgent.getInput(CommonFields.owner, true) const token = this.buildAgent.getInput(CommonFields.token, true)
const repository = buildAgent.getInput(CommonFields.repository, true) const targetDirectory = this.buildAgent.getInput(CommonFields.targetDirectory)
const token = buildAgent.getInput(CommonFields.token, true)
const targetDirectory = buildAgent.getInput(
CommonFields.targetDirectory
)
return { return {
owner, owner,

View File

@@ -1,19 +1,20 @@
import path = require('path') import * as path from 'path'
import { TYPES, IBuildAgent, IExecResult, ISetupSettings } from '../../core/models' import { IBuildAgent, IExecResult, TYPES } from '../../core/models'
import { injectable, inject } from 'inversify' import { inject, injectable } from 'inversify'
import { DotnetTool, IDotnetTool } from '../../core/dotnet-tool' import { DotnetTool, IDotnetTool } from '../../core/dotnet-tool'
import { IVersionManager } from '../../core/versionManager' import { IVersionManager } from '../../core/versionManager'
import { import {
GitReleaseManagerSettings, GitReleaseManagerAddAssetSettings,
GitReleaseManagerCloseSettings,
GitReleaseManagerCreateSettings, GitReleaseManagerCreateSettings,
GitReleaseManagerDiscardSettings, GitReleaseManagerDiscardSettings,
GitReleaseManagerCloseSettings,
GitReleaseManagerOpenSettings, GitReleaseManagerOpenSettings,
GitReleaseManagerPublishSettings, GitReleaseManagerPublishSettings,
GitReleaseManagerAddAssetSettings GitReleaseManagerSettings
} from './models' } from './models'
import { ISetupSettings } from '../common/models'
export interface IGitReleaseManagerTool extends IDotnetTool { export interface IGitReleaseManagerTool extends IDotnetTool {
install(setupSettings: ISetupSettings): Promise<void> install(setupSettings: ISetupSettings): Promise<void>
@@ -26,43 +27,28 @@ export interface IGitReleaseManagerTool extends IDotnetTool {
} }
@injectable() @injectable()
export class GitReleaseManagerTool export class GitReleaseManagerTool extends DotnetTool implements IGitReleaseManagerTool {
extends DotnetTool constructor(@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent, @inject(TYPES.IVersionManager) versionManager: IVersionManager) {
implements IGitReleaseManagerTool {
constructor(
@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent,
@inject(TYPES.IVersionManager) versionManager: IVersionManager
) {
super(buildAgent, versionManager) super(buildAgent, versionManager)
} }
public async install(setupSettings: ISetupSettings): Promise<void> { public async install(setupSettings: ISetupSettings): Promise<void> {
await this.toolInstall( await this.toolInstall('GitReleaseManager.Tool', false, setupSettings)
'GitReleaseManager.Tool',
false,
setupSettings
)
} }
public create( public create(settings: GitReleaseManagerCreateSettings): Promise<IExecResult> {
settings: GitReleaseManagerCreateSettings
): Promise<IExecResult> {
const args = this.getCreateArguments(settings) const args = this.getCreateArguments(settings)
return this.execute('dotnet-gitreleasemanager', args) return this.execute('dotnet-gitreleasemanager', args)
} }
public discard( public discard(settings: GitReleaseManagerDiscardSettings): Promise<IExecResult> {
settings: GitReleaseManagerDiscardSettings
): Promise<IExecResult> {
const args = this.getDiscardArguments(settings) const args = this.getDiscardArguments(settings)
return this.execute('dotnet-gitreleasemanager', args) return this.execute('dotnet-gitreleasemanager', args)
} }
public close( public close(settings: GitReleaseManagerCloseSettings): Promise<IExecResult> {
settings: GitReleaseManagerCloseSettings
): Promise<IExecResult> {
const args = this.getCloseArguments(settings) const args = this.getCloseArguments(settings)
return this.execute('dotnet-gitreleasemanager', args) return this.execute('dotnet-gitreleasemanager', args)
@@ -74,17 +60,13 @@ export class GitReleaseManagerTool
return this.execute('dotnet-gitreleasemanager', args) return this.execute('dotnet-gitreleasemanager', args)
} }
public publish( public publish(settings: GitReleaseManagerPublishSettings): Promise<IExecResult> {
settings: GitReleaseManagerPublishSettings
): Promise<IExecResult> {
const args = this.getPublishArguments(settings) const args = this.getPublishArguments(settings)
return this.execute('dotnet-gitreleasemanager', args) return this.execute('dotnet-gitreleasemanager', args)
} }
public addAsset( public addAsset(settings: GitReleaseManagerAddAssetSettings): Promise<IExecResult> {
settings: GitReleaseManagerAddAssetSettings
): Promise<IExecResult> {
const args = this.getAddAssetArguments(settings) const args = this.getAddAssetArguments(settings)
return this.execute('dotnet-gitreleasemanager', args) return this.execute('dotnet-gitreleasemanager', args)
@@ -104,9 +86,7 @@ export class GitReleaseManagerTool
return args return args
} }
private getCreateArguments( private getCreateArguments(settings: GitReleaseManagerCreateSettings): string[] {
settings: GitReleaseManagerCreateSettings
): string[] {
const args: string[] = ['create', ...this.getCommonArguments(settings)] const args: string[] = ['create', ...this.getCommonArguments(settings)]
if (settings.milestone) { if (settings.milestone) {
@@ -123,10 +103,7 @@ export class GitReleaseManagerTool
if (this.buildAgent.fileExists(settings.inputFileName)) { if (this.buildAgent.fileExists(settings.inputFileName)) {
args.push('--inputFilePath', settings.inputFileName) args.push('--inputFilePath', settings.inputFileName)
} else { } else {
throw new Error( throw new Error('GitReleaseManager inputFilePath not found at ' + settings.inputFileName)
'GitReleaseManager inputFilePath not found at ' +
settings.inputFileName
)
} }
} }
if (settings.isPreRelease) { if (settings.isPreRelease) {
@@ -143,9 +120,7 @@ export class GitReleaseManagerTool
return args return args
} }
private getDiscardArguments( private getDiscardArguments(settings: GitReleaseManagerDiscardSettings): string[] {
settings: GitReleaseManagerDiscardSettings
): string[] {
const args: string[] = ['discard', ...this.getCommonArguments(settings)] const args: string[] = ['discard', ...this.getCommonArguments(settings)]
if (settings.milestone) { if (settings.milestone) {
@@ -155,9 +130,7 @@ export class GitReleaseManagerTool
return args return args
} }
private getCloseArguments( private getCloseArguments(settings: GitReleaseManagerCloseSettings): string[] {
settings: GitReleaseManagerCloseSettings
): string[] {
const args: string[] = ['close', ...this.getCommonArguments(settings)] const args: string[] = ['close', ...this.getCommonArguments(settings)]
if (settings.milestone) { if (settings.milestone) {
@@ -167,9 +140,7 @@ export class GitReleaseManagerTool
return args return args
} }
private getOpenArguments( private getOpenArguments(settings: GitReleaseManagerOpenSettings): string[] {
settings: GitReleaseManagerOpenSettings
): string[] {
const args: string[] = ['open', ...this.getCommonArguments(settings)] const args: string[] = ['open', ...this.getCommonArguments(settings)]
if (settings.milestone) { if (settings.milestone) {
@@ -179,9 +150,7 @@ export class GitReleaseManagerTool
return args return args
} }
private getPublishArguments( private getPublishArguments(settings: GitReleaseManagerPublishSettings): string[] {
settings: GitReleaseManagerPublishSettings
): string[] {
const args: string[] = ['publish', ...this.getCommonArguments(settings)] const args: string[] = ['publish', ...this.getCommonArguments(settings)]
if (settings.tagName) { if (settings.tagName) {
@@ -191,13 +160,8 @@ export class GitReleaseManagerTool
return args return args
} }
private getAddAssetArguments( private getAddAssetArguments(settings: GitReleaseManagerAddAssetSettings): string[] {
settings: GitReleaseManagerAddAssetSettings const args: string[] = ['addasset', ...this.getCommonArguments(settings)]
): string[] {
const args: string[] = [
'addasset',
...this.getCommonArguments(settings)
]
if (settings.tagName) { if (settings.tagName) {
args.push('--tagName', settings.tagName) args.push('--tagName', settings.tagName)

View File

@@ -1,3 +1,5 @@
import { ISettingsProvider } from '../common/models'
export enum ExecuteFields { export enum ExecuteFields {
targetPath = 'targetPath', targetPath = 'targetPath',
useConfigFile = 'useConfigFile', useConfigFile = 'useConfigFile',
@@ -18,6 +20,10 @@ export interface GitVersionSettings {
[ExecuteFields.srcDir]: string [ExecuteFields.srcDir]: string
} }
export interface IGitVersionSettingsProvider extends ISettingsProvider {
getGitVersionSettings(): GitVersionSettings
}
export interface GitVersionOutput { export interface GitVersionOutput {
Major: number Major: number
Minor: number Minor: number

View File

@@ -1,30 +1,27 @@
import { IBuildAgent } from '../../core/models' import { IBuildAgent, TYPES } from '../../core/models'
import { GitVersionSettings, ExecuteFields } from './models' import { ExecuteFields, GitVersionSettings, IGitVersionSettingsProvider } from './models'
import { SettingsProvider } from '../common/settings'
import { inject, injectable } from 'inversify'
export class Settings { @injectable()
public static getGitVersionSettings( export class GitVersionSettingsProvider extends SettingsProvider implements IGitVersionSettingsProvider {
buildAgent: IBuildAgent constructor(@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent) {
): GitVersionSettings { super(buildAgent)
const targetPath = buildAgent.getInput(ExecuteFields.targetPath) }
const useConfigFile = buildAgent.getBooleanInput( public getGitVersionSettings(): GitVersionSettings {
ExecuteFields.useConfigFile const targetPath = this.buildAgent.getInput(ExecuteFields.targetPath)
)
const configFilePath = buildAgent.getInput(ExecuteFields.configFilePath)
const updateAssemblyInfo = buildAgent.getBooleanInput( const useConfigFile = this.buildAgent.getBooleanInput(ExecuteFields.useConfigFile)
ExecuteFields.updateAssemblyInfo const configFilePath = this.buildAgent.getInput(ExecuteFields.configFilePath)
)
const updateAssemblyInfoFilename = buildAgent.getInput(
ExecuteFields.updateAssemblyInfoFilename
)
const additionalArguments = buildAgent.getInput( const updateAssemblyInfo = this.buildAgent.getBooleanInput(ExecuteFields.updateAssemblyInfo)
ExecuteFields.additionalArguments const updateAssemblyInfoFilename = this.buildAgent.getInput(ExecuteFields.updateAssemblyInfoFilename)
)
const srcDir = buildAgent.getSourceDir()?.replace(/\\/g, '/') const additionalArguments = this.buildAgent.getInput(ExecuteFields.additionalArguments)
const srcDir = this.buildAgent.getSourceDir()?.replace(/\\/g, '/')
return { return {
targetPath, targetPath,

View File

@@ -1,10 +1,9 @@
import path = require('path') import { inject, injectable } from 'inversify'
import { IBuildAgent, IExecResult, TYPES } from '../../core/models'
import { injectable, inject } from 'inversify'
import { IExecResult, IBuildAgent, TYPES, ISetupSettings } from '../../core/models'
import { DotnetTool, IDotnetTool } from '../../core/dotnet-tool' import { DotnetTool, IDotnetTool } from '../../core/dotnet-tool'
import { GitVersionSettings, GitVersionOutput } from './models' import { GitVersionOutput, GitVersionSettings } from './models'
import { IVersionManager } from '../../core/versionManager' import { IVersionManager } from '../../core/versionManager'
import { ISetupSettings } from '../common/models'
export interface IGitVersionTool extends IDotnetTool { export interface IGitVersionTool extends IDotnetTool {
install(setupSettings: ISetupSettings): Promise<void> install(setupSettings: ISetupSettings): Promise<void>
@@ -14,19 +13,12 @@ export interface IGitVersionTool extends IDotnetTool {
@injectable() @injectable()
export class GitVersionTool extends DotnetTool implements IGitVersionTool { export class GitVersionTool extends DotnetTool implements IGitVersionTool {
constructor( constructor(@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent, @inject(TYPES.IVersionManager) versionManager: IVersionManager) {
@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent,
@inject(TYPES.IVersionManager) versionManager: IVersionManager
) {
super(buildAgent, versionManager) super(buildAgent, versionManager)
} }
public async install(setupSettings: ISetupSettings): Promise<void> { public async install(setupSettings: ISetupSettings): Promise<void> {
await this.toolInstall( await this.toolInstall('GitVersion.Tool', false, setupSettings)
'GitVersion.Tool',
false,
setupSettings
)
} }
public run(options: GitVersionSettings): Promise<IExecResult> { public run(options: GitVersionSettings): Promise<IExecResult> {
@@ -52,33 +44,16 @@ export class GitVersionTool extends DotnetTool implements IGitVersionTool {
return workDir.replace(/\\/g, '/') return workDir.replace(/\\/g, '/')
} }
private getArguments( private getArguments(workDir: string, options: GitVersionSettings): string[] {
workDir: string,
options: GitVersionSettings
): string[] {
let args = [workDir, '/output', 'json', '/output', 'buildserver'] let args = [workDir, '/output', 'json', '/output', 'buildserver']
const { const { useConfigFile, configFilePath, updateAssemblyInfo, updateAssemblyInfoFilename, additionalArguments } = options
useConfigFile,
configFilePath,
updateAssemblyInfo,
updateAssemblyInfoFilename,
additionalArguments
} = options
if (useConfigFile) { if (useConfigFile) {
if ( if (this.buildAgent.isValidInputFile('configFilePath', configFilePath)) {
this.buildAgent.isValidInputFile(
'configFilePath',
configFilePath
)
) {
args.push('/config', configFilePath) args.push('/config', configFilePath)
} else { } else {
throw new Error( throw new Error('GitVersion configuration file not found at ' + configFilePath)
'GitVersion configuration file not found at ' +
configFilePath
)
} }
} }
if (updateAssemblyInfo) { if (updateAssemblyInfo) {
@@ -86,18 +61,10 @@ export class GitVersionTool extends DotnetTool implements IGitVersionTool {
// You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'. // You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'.
if (updateAssemblyInfoFilename?.length > 0) { if (updateAssemblyInfoFilename?.length > 0) {
if ( if (this.buildAgent.isValidInputFile('updateAssemblyInfoFilename', updateAssemblyInfoFilename)) {
this.buildAgent.isValidInputFile(
'updateAssemblyInfoFilename',
updateAssemblyInfoFilename
)
) {
args.push(updateAssemblyInfoFilename) args.push(updateAssemblyInfoFilename)
} else { } else {
throw new Error( throw new Error('AssemblyInfoFilename file not found at ' + updateAssemblyInfoFilename)
'AssemblyInfoFilename file not found at ' +
updateAssemblyInfoFilename
)
} }
} }
} }
@@ -182,12 +149,9 @@ export class GitVersionTool extends DotnetTool implements IGitVersionTool {
} }
private toCamelCase(input: string): string { private toCamelCase(input: string): string {
return input.replace( return input.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) {
/(?:^\w|[A-Z]|\b\w|\s+)/g, if (+match === 0) return '' // or if (/\s+/.test(match)) for white spaces
function (match, index) { return index == 0 ? match.toLowerCase() : match.toUpperCase()
if (+match === 0) return '' // or if (/\s+/.test(match)) for white spaces })
return index == 0 ? match.toLowerCase() : match.toUpperCase()
}
)
} }
} }

View File

@@ -1,13 +1,13 @@
{ {
"compilerOptions": { "compilerOptions": {
"module": "CommonJS", "module": "ES2022",
"moduleResolution": "node", "moduleResolution": "node",
"target": "ES2016", "target": "es2017",
"noImplicitAny": true, "noImplicitAny": true,
"sourceMap": true, "sourceMap": true,
"lib": ["ES2016"], "lib": [ "ES2016" ],
"types": ["reflect-metadata"], "types": [ "reflect-metadata" ],
"esModuleInterop":true, "esModuleInterop": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"emitDecoratorMetadata": true "emitDecoratorMetadata": true
} }

View File

@@ -7,7 +7,7 @@ function getConfig(mode, agent, entry) {
entry: entry, entry: entry,
target: 'node', target: 'node',
mode: mode, mode: mode,
devtool: mode == 'development' ? 'inline-source-map' : false, devtool: mode === 'development' ? 'inline-source-map' : false,
module: { module: {
rules: [{ rules: [{
test: /\.tsx?$/, test: /\.tsx?$/,
@@ -43,7 +43,10 @@ function getConfig(mode, agent, entry) {
replace: 'let pkg = { version: "1.2.3" };' replace: 'let pkg = { version: "1.2.3" };'
}] }]
}]) }])
] ],
experiments: {
topLevelAwait: true
}
} }
} }
@@ -62,10 +65,10 @@ const entryPoints = [
module.exports = (env) => { module.exports = (env) => {
const task = env.task || 'compile'; const task = env.task || 'compile';
const agent = env.agent || 'mock'; const agent = env.agent || 'mock';
const mode = task == 'compile' ? 'development' : 'production'; const mode = task === 'compile' ? 'development' : 'production';
const entry = {}; const entry = {};
entryPoints.forEach(key => { entryPoints.forEach(key => {
const resource = task == 'compile' ? `src/tasks/${key}.ts` : `dist/${agent}/${key}/bundle.js`; const resource = task === 'compile' ? `src/tasks/${key}.ts` : `dist/${agent}/${key}/bundle.js`;
entry[key] = path.resolve(__dirname, resource); entry[key] = path.resolve(__dirname, resource);
}); });