From 957d6dc555084f7a36f4c5dfc0c76e1f88ba2ed0 Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Wed, 1 Jul 2026 13:35:06 +0300 Subject: [PATCH 1/8] Don't print `go: command not found` when Neovim is starting --- lua/gitlab/version.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/gitlab/version.lua b/lua/gitlab/version.lua index 90fe1d0c..3b68fad5 100644 --- a/lua/gitlab/version.lua +++ b/lua/gitlab/version.lua @@ -1,7 +1,7 @@ local M = {} M.is_go_valid = function() - local go_version = io.popen("go version"):read("*a") + local go_version = io.popen("go version 2>&1"):read("*a") if go_version then local major, minor, _ = go_version:match("(%d+)%.(%d+)%.?(%d*)") if major and tonumber(major) >= 1 and tonumber(minor) >= 25 then From 17278db3cf254225eeb865a32bd5dd5df9421904 Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Wed, 1 Jul 2026 13:36:16 +0300 Subject: [PATCH 2/8] Check `go` version only when building the server --- lua/gitlab/init.lua | 7 ------- lua/gitlab/server.lua | 15 +++++++++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lua/gitlab/init.lua b/lua/gitlab/init.lua index 7ddf357b..37bcbf1c 100644 --- a/lua/gitlab/init.lua +++ b/lua/gitlab/init.lua @@ -12,7 +12,6 @@ local summary = require("gitlab.actions.summary") local data = require("gitlab.actions.data") local assignees_and_reviewers = require("gitlab.actions.assignees_and_reviewers") local comment = require("gitlab.actions.comment") -local version = require("gitlab.version") local pipeline = require("gitlab.actions.pipeline") local create_mr = require("gitlab.actions.create_mr") local approvals = require("gitlab.actions.approvals") @@ -37,12 +36,6 @@ local function setup(args) args = {} end - local version_issue = version.check_go_version() - if version_issue ~= nil then - u.notify(version_issue, vim.log.levels.ERROR) - return - end - state.merge_settings(args) -- Merges user settings with default settings server.build() -- Builds the Go binary if it doesn't exist state.set_global_keymaps() -- Sets keymaps that are not bound to a specific buffer diff --git a/lua/gitlab/server.lua b/lua/gitlab/server.lua index c90863d5..a14373c0 100644 --- a/lua/gitlab/server.lua +++ b/lua/gitlab/server.lua @@ -4,6 +4,7 @@ local state = require("gitlab.state") local u = require("gitlab.utils") local job = require("gitlab.job") +local version = require("gitlab.version") local M = {} -- Builds the binary if it doesn't exist, and starts the server. If the pre-existing binary has an older @@ -23,8 +24,8 @@ M.build_and_start = function(callback) callback() return end - M.get_version(function(version) - if version.plugin_version ~= version.binary_version then + M.get_version(function(versions) + if versions.plugin_version ~= versions.binary_version then M.shutdown(function() if M.build(true) then M.start(callback) @@ -116,6 +117,12 @@ M.build = function(override) return end + local version_issue = version.check_go_version() + if version_issue ~= nil then + u.notify(version_issue, vim.log.levels.ERROR) + return + end + -- If the user did not provide a path, we build it and place it in either the data path, or the -- first writable path we find in the runtime. local datapath = vim.fn.stdpath("data") @@ -150,9 +157,9 @@ M.build = function(override) local version_output = vim .system({ "git", "describe", "--tags", "--always" }, { cwd = state.settings.root_path }) :wait() - local version = version_output.code == 0 and vim.trim(version_output.stdout) or "unknown" + local plugin_version = version_output.code == 0 and vim.trim(version_output.stdout) or "unknown" - local ldflags = string.format("-X main.Version=%s", version) + local ldflags = string.format("-X main.Version=%s", plugin_version) local res = vim .system( { "go", "build", "-buildvcs=false", "-ldflags", ldflags, "-o", state.settings.server.binary }, From d5fa4d460e77a43406aa826e6a04be31c5dc39a6 Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Thu, 2 Jul 2026 12:41:32 +0300 Subject: [PATCH 3/8] Check Go version using `vim.system` --- lua/gitlab/version.lua | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lua/gitlab/version.lua b/lua/gitlab/version.lua index 3b68fad5..6e03ec95 100644 --- a/lua/gitlab/version.lua +++ b/lua/gitlab/version.lua @@ -1,14 +1,15 @@ local M = {} M.is_go_valid = function() - local go_version = io.popen("go version 2>&1"):read("*a") - if go_version then - local major, minor, _ = go_version:match("(%d+)%.(%d+)%.?(%d*)") - if major and tonumber(major) >= 1 and tonumber(minor) >= 25 then - return true - else - return false - end + local has_go, go = pcall(vim.system, {"go", "version"}); + if not has_go then + return false + end + + local go_version = go:wait().stdout; + local major, minor, _ = go_version:match("(%d+)%.(%d+)%.?(%d*)") + if major and tonumber(major) >= 1 and tonumber(minor) >= 25 then + return true else return false end From f3771da0568cbd86cfc181e155dabb71f222d01a Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Fri, 3 Jul 2026 12:44:43 +0300 Subject: [PATCH 4/8] Use `vim.version` to compare verions --- lua/gitlab/version.lua | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lua/gitlab/version.lua b/lua/gitlab/version.lua index 6e03ec95..6f91da37 100644 --- a/lua/gitlab/version.lua +++ b/lua/gitlab/version.lua @@ -6,13 +6,8 @@ M.is_go_valid = function() return false end - local go_version = go:wait().stdout; - local major, minor, _ = go_version:match("(%d+)%.(%d+)%.?(%d*)") - if major and tonumber(major) >= 1 and tonumber(minor) >= 25 then - return true - else - return false - end + local go_version = vim.version.parse(go:wait().stdout, { strict = false }) + return vim.version.ge(go_version, { 1, 25, 0 }) end M.check_go_version = function() From 9b85491e898b644128f5d2380288884e3a1c829c Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Fri, 3 Jul 2026 12:45:40 +0300 Subject: [PATCH 5/8] Format code properly --- lua/gitlab/version.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/gitlab/version.lua b/lua/gitlab/version.lua index 6f91da37..678e2ac8 100644 --- a/lua/gitlab/version.lua +++ b/lua/gitlab/version.lua @@ -1,7 +1,7 @@ local M = {} M.is_go_valid = function() - local has_go, go = pcall(vim.system, {"go", "version"}); + local has_go, go = pcall(vim.system, { "go", "version" }) if not has_go then return false end From ee4eca1a1658b7c59449b01e428ebf57871a6359 Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Wed, 8 Jul 2026 12:34:52 +0300 Subject: [PATCH 6/8] Check that Go version parsed sucessfully --- lua/gitlab/version.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/gitlab/version.lua b/lua/gitlab/version.lua index 678e2ac8..6f9eb528 100644 --- a/lua/gitlab/version.lua +++ b/lua/gitlab/version.lua @@ -7,7 +7,7 @@ M.is_go_valid = function() end local go_version = vim.version.parse(go:wait().stdout, { strict = false }) - return vim.version.ge(go_version, { 1, 25, 0 }) + return go_version ~= nil and vim.version.ge(go_version, { 1, 25, 0 }) end M.check_go_version = function() From c7857766c105a2dcfba6fb2e80124207e2f8e1da Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Wed, 8 Jul 2026 13:21:10 +0300 Subject: [PATCH 7/8] Avoid logging errors directly --- lua/gitlab/health.lua | 16 +++++++++++++--- lua/gitlab/server.lua | 9 --------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lua/gitlab/health.lua b/lua/gitlab/health.lua index 2fdf9b97..5831806d 100644 --- a/lua/gitlab/health.lua +++ b/lua/gitlab/health.lua @@ -47,9 +47,19 @@ M.check = function(return_results) }, } - local go_version_problem = version.check_go_version() - if go_version_problem ~= nil then - table.insert(warnings, go_version_problem) + if state.settings.server.binary_provided then + local binary_exists = vim.loop.fs_stat(state.settings.server.binary) + if binary_exists == nil then + table.insert( + errors, + string.format("The user-provided server path (%s) does not exist", state.settings.server.binary) + ) + end + else + local go_version_problem = version.check_go_version() + if go_version_problem ~= nil then + table.insert(errors, go_version_problem) + end end for _, dep in ipairs(required_deps) do diff --git a/lua/gitlab/server.lua b/lua/gitlab/server.lua index a14373c0..c26407d3 100644 --- a/lua/gitlab/server.lua +++ b/lua/gitlab/server.lua @@ -106,20 +106,11 @@ M.build = function(override) -- If the user provided a path to the server, don't build it. if state.settings.server.binary_provided then - local binary_exists = vim.loop.fs_stat(state.settings.server.binary) - if binary_exists == nil then - u.notify( - string.format("The user-provided server path (%s) does not exist.", state.settings.server.binary), - vim.log.levels.ERROR - ) - return false - end return end local version_issue = version.check_go_version() if version_issue ~= nil then - u.notify(version_issue, vim.log.levels.ERROR) return end From 46a49be1f90a1fe5f8184d2bfbe0b4d15966a1d8 Mon Sep 17 00:00:00 2001 From: Artem Starikov Date: Mon, 13 Jul 2026 11:28:20 +0300 Subject: [PATCH 8/8] Move required Go version to a variable --- lua/gitlab/version.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/gitlab/version.lua b/lua/gitlab/version.lua index 6f9eb528..3f348847 100644 --- a/lua/gitlab/version.lua +++ b/lua/gitlab/version.lua @@ -1,5 +1,7 @@ local M = {} +local minimum_go_version = "1.25.1" + M.is_go_valid = function() local has_go, go = pcall(vim.system, { "go", "version" }) if not has_go then @@ -7,13 +9,16 @@ M.is_go_valid = function() end local go_version = vim.version.parse(go:wait().stdout, { strict = false }) - return go_version ~= nil and vim.version.ge(go_version, { 1, 25, 0 }) + return go_version ~= nil and vim.version.ge(go_version, minimum_go_version) end M.check_go_version = function() local has_version = M.is_go_valid() if not has_version then - return "Go is not installed, or version is older than 1.25.1. Please reinstall up-to-date Go version: https://go.dev/dl/" + return string.format( + "Go is not installed, or version is older than %s. Please reinstall up-to-date Go version: https://go.dev/dl/", + minimum_go_version + ) end end