diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml
new file mode 100644
index 0000000000..c32506d6af
--- /dev/null
+++ b/.github/workflows/codeql.yaml
@@ -0,0 +1,44 @@
+name: "Code Scanning - Action"
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    # The branches below must be a subset of the branches above
+    branches: [ master ]
+  schedule:
+    - cron: '0 17 * * 5'
+
+jobs:
+  codeQL:
+    # CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v2
+        with:
+          # Must fetch at least the immediate parents so that if this is
+          # a pull request then we can checkout the head of the pull request.
+          # Only include this option if you are running this workflow on pull requests.
+          fetch-depth: 2
+
+      # If this run was triggered by a pull request event then checkout
+      # the head of the pull request instead of the merge commit.
+      # Only include this step if you are running this workflow on pull requests.
+      - run: git checkout HEAD^2
+        if: ${{ github.event_name == 'pull_request' }}
+
+      # Initializes the CodeQL tools for scanning.
+      - name: Initialize CodeQL
+        uses: github/codeql-action/init@v1
+        # Override language selection by uncommenting this and choosing your languages
+        with:
+          language: 'javascript'
+
+      - run: |
+          npm install
+          npm run all
+
+      - name: Perform CodeQL Analysis
+        uses: github/codeql-action/analyze@v1
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-lock.json b/package-lock.json
index 8661c85e9a..886b4b83b4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -417,9 +417,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "14.11.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz",
-      "integrity": "sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA=="
+      "version": "14.11.10",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz",
+      "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA=="
     },
     "@types/node-fetch": {
       "version": "2.5.7",
@@ -940,9 +940,9 @@
       }
     },
     "eslint-config-prettier": {
-      "version": "6.12.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.12.0.tgz",
-      "integrity": "sha512-9jWPlFlgNwRUYVoujvWTQ1aMO8o6648r+K7qU7K5Jmkbyqav1fuEZC0COYpGBxyiAJb65Ra9hrmFx19xRGwXWw==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.13.0.tgz",
+      "integrity": "sha512-LcT0i0LSmnzqK2t764pyIt7kKH2AuuqKRTtJTdddWxOiUja9HdG5GXBVF2gmCTvVYWVsTu8J2MhJLVGRh+pj8w==",
       "dev": true,
       "requires": {
         "get-stdin": "^6.0.0"
diff --git a/package.json b/package.json
index e5697d0dee..c1cbcc41bb 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",
@@ -36,13 +37,13 @@
     "tmp": "^0.2.1"
   },
   "devDependencies": {
-    "@types/node": "^14.11.2",
+    "@types/node": "^14.11.10",
     "@types/uuid": "^8.3.0",
     "@typescript-eslint/eslint-plugin": "^2.34.0",
     "@typescript-eslint/parser": "^2.34.0",
     "@zeit/ncc": "^0.22.3",
     "eslint": "^6.6.0",
-    "eslint-config-prettier": "^6.12.0",
+    "eslint-config-prettier": "^6.13.0",
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-prettier": "^3.1.4",
     "eslint-plugin-simple-import-sort": "^5.0.2",
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<Config> => {
 
 export async function findLintVersion(): Promise<VersionConfig> {
   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<VersionConfig> {
     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`)