diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index abe63e48f6..56f1ece914 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,3 +29,20 @@ jobs: version: latest args: --issues-exit-code=0 ./sample/... only-new-issues: true + + # Test with full version vX.Y.Z + test-full-version: + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - uses: ./ + with: + version: v1.28.3 + args: --issues-exit-code=0 ./sample/... + only-new-issues: true diff --git a/action.yml b/action.yml index 268942dde0..794da80b90 100644 --- a/action.yml +++ b/action.yml @@ -4,7 +4,7 @@ description: "Official golangci-lint action with line-attached annotations for f author: "golangci" inputs: version: - description: "version of golangci-lint to use in form of v1.2 or `latest` to use the latest version" + description: "version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version" required: false args: description: "golangci-lint command line arguments" diff --git a/dist/post_run/index.js b/dist/post_run/index.js index 332e8e39e5..f6cae10795 100644 --- a/dist/post_run/index.js +++ b/dist/post_run/index.js @@ -2099,9 +2099,6 @@ const getRequestedLintVersion = () => { if (parsedRequestedLintVersion == null) { return null; } - if (parsedRequestedLintVersion.patch !== null) { - throw new Error(`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`); - } if (isLessVersion(parsedRequestedLintVersion, minVersion)) { throw new Error(`requested golangci-lint version '${requestedLintVersion}' isn't supported: we support only ${exports.stringifyVersion(minVersion)} and later versions`); } @@ -2128,13 +2125,23 @@ const getConfig = () => __awaiter(void 0, void 0, void 0, function* () { function findLintVersion() { return __awaiter(this, void 0, void 0, function* () { core.info(`Finding needed golangci-lint version...`); + const reqLintVersion = getRequestedLintVersion(); + // if the patched version is passed, just use it + if ((reqLintVersion === null || reqLintVersion === void 0 ? void 0 : reqLintVersion.major) !== null && (reqLintVersion === null || reqLintVersion === void 0 ? void 0 : reqLintVersion.minor) != null && (reqLintVersion === null || reqLintVersion === void 0 ? void 0 : reqLintVersion.patch) !== null) { + return new Promise((resolve) => { + const versionWithoutV = `${reqLintVersion.major}.${reqLintVersion.minor}.${reqLintVersion.patch}`; + resolve({ + TargetVersion: `v${versionWithoutV}`, + AssetURL: `https://github.com/golangci/golangci-lint/releases/download/v${versionWithoutV}/golangci-lint-${versionWithoutV}-linux-amd64.tar.gz`, + }); + }); + } const startedAt = Date.now(); const config = yield getConfig(); if (!config.MinorVersionToConfig) { core.warning(JSON.stringify(config)); throw new Error(`invalid config: no MinorVersionToConfig field`); } - const reqLintVersion = getRequestedLintVersion(); const versionConfig = config.MinorVersionToConfig[exports.stringifyVersion(reqLintVersion)]; if (!versionConfig) { throw new Error(`requested golangci-lint version '${exports.stringifyVersion(reqLintVersion)}' doesn't exist`); diff --git a/dist/run/index.js b/dist/run/index.js index 73728aae98..1846984d8d 100644 --- a/dist/run/index.js +++ b/dist/run/index.js @@ -2099,9 +2099,6 @@ const getRequestedLintVersion = () => { if (parsedRequestedLintVersion == null) { return null; } - if (parsedRequestedLintVersion.patch !== null) { - throw new Error(`requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version`); - } if (isLessVersion(parsedRequestedLintVersion, minVersion)) { throw new Error(`requested golangci-lint version '${requestedLintVersion}' isn't supported: we support only ${exports.stringifyVersion(minVersion)} and later versions`); } @@ -2128,13 +2125,23 @@ const getConfig = () => __awaiter(void 0, void 0, void 0, function* () { function findLintVersion() { return __awaiter(this, void 0, void 0, function* () { core.info(`Finding needed golangci-lint version...`); + const reqLintVersion = getRequestedLintVersion(); + // if the patched version is passed, just use it + if ((reqLintVersion === null || reqLintVersion === void 0 ? void 0 : reqLintVersion.major) !== null && (reqLintVersion === null || reqLintVersion === void 0 ? void 0 : reqLintVersion.minor) != null && (reqLintVersion === null || reqLintVersion === void 0 ? void 0 : reqLintVersion.patch) !== null) { + return new Promise((resolve) => { + const versionWithoutV = `${reqLintVersion.major}.${reqLintVersion.minor}.${reqLintVersion.patch}`; + resolve({ + TargetVersion: `v${versionWithoutV}`, + AssetURL: `https://github.com/golangci/golangci-lint/releases/download/v${versionWithoutV}/golangci-lint-${versionWithoutV}-linux-amd64.tar.gz`, + }); + }); + } const startedAt = Date.now(); const config = yield getConfig(); if (!config.MinorVersionToConfig) { core.warning(JSON.stringify(config)); throw new Error(`invalid config: no MinorVersionToConfig field`); } - const reqLintVersion = getRequestedLintVersion(); const versionConfig = config.MinorVersionToConfig[exports.stringifyVersion(reqLintVersion)]; if (!versionConfig) { throw new Error(`requested golangci-lint version '${exports.stringifyVersion(reqLintVersion)}' doesn't exist`); diff --git a/package.json b/package.json index 18eb7acde7..0bcc3e3107 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "format": "prettier --write **/*.ts", "format-check": "prettier --check **/*.ts", "all": "npm run prepare-deps && npm run build && npm run format-check && npm run lint", - "local": "npm run build && act -j test -b" + "local": "npm run build && act -j test -b", + "local-full-version": "npm run build && act -j test-full-version -b" }, "repository": { "type": "git", diff --git a/src/version.ts b/src/version.ts index e693cd4802..c06580640d 100644 --- a/src/version.ts +++ b/src/version.ts @@ -61,11 +61,6 @@ const getRequestedLintVersion = (): Version => { if (parsedRequestedLintVersion == null) { return null } - if (parsedRequestedLintVersion.patch !== null) { - throw new Error( - `requested golangci-lint version '${requestedLintVersion}' was specified with the patch version, need specify only minor version` - ) - } if (isLessVersion(parsedRequestedLintVersion, minVersion)) { throw new Error( `requested golangci-lint version '${requestedLintVersion}' isn't supported: we support only ${stringifyVersion( @@ -109,6 +104,17 @@ const getConfig = async (): Promise => { export async function findLintVersion(): Promise { core.info(`Finding needed golangci-lint version...`) + const reqLintVersion = getRequestedLintVersion() + // if the patched version is passed, just use it + if (reqLintVersion?.major !== null && reqLintVersion?.minor != null && reqLintVersion?.patch !== null) { + return new Promise((resolve) => { + const versionWithoutV = `${reqLintVersion.major}.${reqLintVersion.minor}.${reqLintVersion.patch}` + resolve({ + TargetVersion: `v${versionWithoutV}`, + AssetURL: `https://github.com/golangci/golangci-lint/releases/download/v${versionWithoutV}/golangci-lint-${versionWithoutV}-linux-amd64.tar.gz`, + }) + }) + } const startedAt = Date.now() const config = await getConfig() @@ -117,7 +123,6 @@ export async function findLintVersion(): Promise { throw new Error(`invalid config: no MinorVersionToConfig field`) } - const reqLintVersion = getRequestedLintVersion() const versionConfig = config.MinorVersionToConfig[stringifyVersion(reqLintVersion)] if (!versionConfig) { throw new Error(`requested golangci-lint version '${stringifyVersion(reqLintVersion)}' doesn't exist`)