diff --git a/README.md b/README.md index 3d0cdff30b..35794e48b6 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,27 @@ with: +### `install-only` + +(optional) + +If set to `true`, the action will only install golangci-lint. +It does not run golangci-lint. + +The default value is `false`. + +
+Example + +```yml +uses: golangci/golangci-lint-action@v8 +with: + install-only: true + # ... +``` + +
+ ### `github-token` (optional) diff --git a/action.yml b/action.yml index 4922368fc6..059839294b 100644 --- a/action.yml +++ b/action.yml @@ -15,6 +15,10 @@ inputs: description: "The mode to install golangci-lint. It can be 'binary', 'goinstall', or 'none'." default: "binary" required: false + install-only: + description: "Only install golangci-lint. It does not run golangci-lint." + default: 'false' + required: false working-directory: description: "golangci-lint working directory. The default is the project root." required: false diff --git a/dist/post_run/index.js b/dist/post_run/index.js index 69d587d65b..b58793d141 100644 --- a/dist/post_run/index.js +++ b/dist/post_run/index.js @@ -97343,11 +97343,14 @@ const cache_1 = __nccwpck_require__(7377); const install_1 = __nccwpck_require__(232); const patch_1 = __nccwpck_require__(7161); const execShellCommand = (0, util_1.promisify)(child_process_1.exec); -async function prepareEnv() { +async function prepareEnv(installOnly) { const startedAt = Date.now(); // Prepare cache, lint and go in parallel. await (0, cache_1.restoreCache)(); const binPath = await (0, install_1.install)(); + if (installOnly) { + return { binPath, patchPath: `` }; + } const patchPath = await (0, patch_1.fetchPatch)(); core.info(`Prepared env in ${Date.now() - startedAt}ms`); return { binPath, patchPath }; @@ -97483,8 +97486,14 @@ async function getConfigPath(binPath, userArgsMap, cmdArgs) { } async function run() { try { - const { binPath, patchPath } = await core.group(`prepare environment`, prepareEnv); + const installOnly = core.getBooleanInput(`install-only`, { required: true }); + const { binPath, patchPath } = await core.group(`prepare environment`, () => { + return prepareEnv(installOnly); + }); core.addPath(path.dirname(binPath)); + if (installOnly) { + return; + } await core.group(`run golangci-lint`, () => runLint(binPath, patchPath)); } catch (error) { diff --git a/dist/run/index.js b/dist/run/index.js index 8e1918ecf1..77757fb76f 100644 --- a/dist/run/index.js +++ b/dist/run/index.js @@ -97343,11 +97343,14 @@ const cache_1 = __nccwpck_require__(7377); const install_1 = __nccwpck_require__(232); const patch_1 = __nccwpck_require__(7161); const execShellCommand = (0, util_1.promisify)(child_process_1.exec); -async function prepareEnv() { +async function prepareEnv(installOnly) { const startedAt = Date.now(); // Prepare cache, lint and go in parallel. await (0, cache_1.restoreCache)(); const binPath = await (0, install_1.install)(); + if (installOnly) { + return { binPath, patchPath: `` }; + } const patchPath = await (0, patch_1.fetchPatch)(); core.info(`Prepared env in ${Date.now() - startedAt}ms`); return { binPath, patchPath }; @@ -97483,8 +97486,14 @@ async function getConfigPath(binPath, userArgsMap, cmdArgs) { } async function run() { try { - const { binPath, patchPath } = await core.group(`prepare environment`, prepareEnv); + const installOnly = core.getBooleanInput(`install-only`, { required: true }); + const { binPath, patchPath } = await core.group(`prepare environment`, () => { + return prepareEnv(installOnly); + }); core.addPath(path.dirname(binPath)); + if (installOnly) { + return; + } await core.group(`run golangci-lint`, () => runLint(binPath, patchPath)); } catch (error) { diff --git a/src/run.ts b/src/run.ts index 8f79b998d6..52ea0f0876 100644 --- a/src/run.ts +++ b/src/run.ts @@ -16,13 +16,18 @@ type Env = { patchPath: string } -async function prepareEnv(): Promise { +async function prepareEnv(installOnly: boolean): Promise { const startedAt = Date.now() // Prepare cache, lint and go in parallel. await restoreCache() const binPath = await install() + + if (installOnly) { + return { binPath, patchPath: `` } + } + const patchPath = await fetchPatch() core.info(`Prepared env in ${Date.now() - startedAt}ms`) @@ -196,8 +201,18 @@ async function getConfigPath(binPath: string, userArgsMap: Map, export async function run(): Promise { try { - const { binPath, patchPath } = await core.group(`prepare environment`, prepareEnv) + const installOnly = core.getBooleanInput(`install-only`, { required: true }) + + const { binPath, patchPath } = await core.group(`prepare environment`, () => { + return prepareEnv(installOnly) + }) + core.addPath(path.dirname(binPath)) + + if (installOnly) { + return + } + await core.group(`run golangci-lint`, () => runLint(binPath, patchPath)) } catch (error) { core.error(`Failed to run: ${error}, ${error.stack}`)