aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/installer/managers/build.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-04-18 10:36:25 +0200
committerGitHub <noreply@github.com>2023-04-18 10:36:25 +0200
commit75e64d20c31f8d032916e3990d568a6e38a9d18b (patch)
treee6dbbd462c1b64706dccc38f05a299b8d48c4e56 /lua/mason-core/installer/managers/build.lua
parentrefactor(expr): remove redundant core filters and always stringify reduced va... (diff)
downloadmason-75e64d20c31f8d032916e3990d568a6e38a9d18b.tar
mason-75e64d20c31f8d032916e3990d568a6e38a9d18b.tar.gz
mason-75e64d20c31f8d032916e3990d568a6e38a9d18b.tar.bz2
mason-75e64d20c31f8d032916e3990d568a6e38a9d18b.tar.lz
mason-75e64d20c31f8d032916e3990d568a6e38a9d18b.tar.xz
mason-75e64d20c31f8d032916e3990d568a6e38a9d18b.tar.zst
mason-75e64d20c31f8d032916e3990d568a6e38a9d18b.zip
feat(installer): add generic build provider (#1228)
Diffstat (limited to 'lua/mason-core/installer/managers/build.lua')
-rw-r--r--lua/mason-core/installer/managers/build.lua48
1 files changed, 48 insertions, 0 deletions
diff --git a/lua/mason-core/installer/managers/build.lua b/lua/mason-core/installer/managers/build.lua
new file mode 100644
index 00000000..a1549a28
--- /dev/null
+++ b/lua/mason-core/installer/managers/build.lua
@@ -0,0 +1,48 @@
+local _ = require "mason-core.functional"
+local a = require "mason-core.async"
+local async_uv = require "mason-core.async.uv"
+local installer = require "mason-core.installer"
+local log = require "mason-core.log"
+local platform = require "mason-core.platform"
+local powershell = require "mason-core.managers.powershell"
+
+local M = {}
+
+---@class BuildInstruction
+---@field target? Platform | Platform[]
+---@field run string
+---@field staged? boolean
+---@field env? table<string, string>
+
+---@async
+---@param build BuildInstruction
+---@return Result
+---@nodiscard
+function M.run(build)
+ log.fmt_debug("build: run %s", build)
+ local ctx = installer.context()
+ if build.staged == false then
+ ctx:promote_cwd()
+ end
+ return platform.when {
+ unix = function()
+ return ctx.spawn.bash {
+ on_spawn = a.scope(function(_, stdio)
+ local stdin = stdio[1]
+ async_uv.write(stdin, "set -euxo pipefail;\n")
+ async_uv.write(stdin, build.run)
+ async_uv.shutdown(stdin)
+ async_uv.close(stdin)
+ end),
+ env = build.env,
+ }
+ end,
+ win = function()
+ return powershell.command(build.run, {
+ env = build.env,
+ }, ctx.spawn)
+ end,
+ }
+end
+
+return M