@@ -4,41 +4,12 @@ import { exec, ExecOptions } from "child_process"
44import os from "os"
55import path from "path"
66import { promisify } from "util"
7+ import which from "which"
78
8- import { VersionInfo } from "./version"
9+ import { getVersion , VersionInfo } from "./version"
910
1011const execShellCommand = promisify ( exec )
1112
12- const getAssetURL = ( versionInfo : VersionInfo ) : string => {
13- let ext = "tar.gz"
14-
15- let platform = os . platform ( ) . toString ( )
16- switch ( platform ) {
17- case "win32" :
18- platform = "windows"
19- ext = "zip"
20- break
21- }
22-
23- let arch = os . arch ( )
24- switch ( arch ) {
25- case "arm64" :
26- arch = "arm64"
27- break
28- case "x64" :
29- arch = "amd64"
30- break
31- case "x32" :
32- case "ia32" :
33- arch = "386"
34- break
35- }
36-
37- const noPrefix = versionInfo . TargetVersion . slice ( 1 )
38-
39- return `https://github.com/golangci/golangci-lint/releases/download/${ versionInfo . TargetVersion } /golangci-lint-${ noPrefix } -${ platform } -${ arch } .${ ext } `
40- }
41-
4213export enum InstallMode {
4314 Binary = "binary" ,
4415 GoInstall = "goinstall" ,
@@ -59,14 +30,35 @@ const printOutput = (res: ExecRes): void => {
5930 }
6031}
6132
33+ /**
34+ * Install golangci-lint.
35+ *
36+ * @returns path to installed binary of golangci-lint.
37+ */
38+ export async function install ( ) : Promise < string > {
39+ const mode = core . getInput ( "install-mode" ) . toLowerCase ( )
40+
41+ if ( mode === InstallMode . None ) {
42+ const binPath = await which ( "golangci-lint" , { nothrow : true } )
43+ if ( ! binPath ) {
44+ throw new Error ( "golangci-lint binary not found in the PATH" )
45+ }
46+ return binPath
47+ }
48+
49+ const versionInfo = await getVersion ( < InstallMode > mode )
50+
51+ return await installBinary ( versionInfo , < InstallMode > mode )
52+ }
53+
6254/**
6355 * Install golangci-lint.
6456 *
6557 * @param versionInfo information about version to install.
6658 * @param mode installation mode.
6759 * @returns path to installed binary of golangci-lint.
6860 */
69- export async function installLint ( versionInfo : VersionInfo , mode : InstallMode ) : Promise < string > {
61+ export async function installBinary ( versionInfo : VersionInfo , mode : InstallMode ) : Promise < string > {
7062 core . info ( `Installation mode: ${ mode } ` )
7163
7264 switch ( mode ) {
@@ -85,7 +77,7 @@ export async function installLint(versionInfo: VersionInfo, mode: InstallMode):
8577 * @param versionInfo information about version to install.
8678 * @returns path to installed binary of golangci-lint.
8779 */
88- export async function goInstall ( versionInfo : VersionInfo ) : Promise < string > {
80+ async function goInstall ( versionInfo : VersionInfo ) : Promise < string > {
8981 core . info ( `Installing golangci-lint ${ versionInfo . TargetVersion } ...` )
9082
9183 const startedAt = Date . now ( )
@@ -125,7 +117,7 @@ export async function goInstall(versionInfo: VersionInfo): Promise<string> {
125117 * @param versionInfo information about version to install.
126118 * @returns path to installed binary of golangci-lint.
127119 */
128- export async function installBin ( versionInfo : VersionInfo ) : Promise < string > {
120+ async function installBin ( versionInfo : VersionInfo ) : Promise < string > {
129121 core . info ( `Installing golangci-lint binary ${ versionInfo . TargetVersion } ...` )
130122
131123 const startedAt = Date . now ( )
@@ -158,3 +150,33 @@ export async function installBin(versionInfo: VersionInfo): Promise<string> {
158150
159151 return binPath
160152}
153+
154+ function getAssetURL ( versionInfo : VersionInfo ) : string {
155+ let ext = "tar.gz"
156+
157+ let platform = os . platform ( ) . toString ( )
158+ switch ( platform ) {
159+ case "win32" :
160+ platform = "windows"
161+ ext = "zip"
162+ break
163+ }
164+
165+ let arch = os . arch ( )
166+ switch ( arch ) {
167+ case "arm64" :
168+ arch = "arm64"
169+ break
170+ case "x64" :
171+ arch = "amd64"
172+ break
173+ case "x32" :
174+ case "ia32" :
175+ arch = "386"
176+ break
177+ }
178+
179+ const noPrefix = versionInfo . TargetVersion . slice ( 1 )
180+
181+ return `https://github.com/golangci/golangci-lint/releases/download/${ versionInfo . TargetVersion } /golangci-lint-${ noPrefix } -${ platform } -${ arch } .${ ext } `
182+ }
0 commit comments