diff --git a/.github/workflows/mise_e2e_test.yaml b/.github/workflows/mise_e2e_test.yaml index f8bdd19..c8c1beb 100644 --- a/.github/workflows/mise_e2e_test.yaml +++ b/.github/workflows/mise_e2e_test.yaml @@ -3,9 +3,9 @@ name: mise E2E tests on: push: branches: [main] - paths: ['lib'] + paths: ['lib', '.github/workflows/mise_e2e_test.yaml'] pull_request: - paths: ['lib'] + paths: ['lib', '.github/workflows/mise_e2e_test.yaml'] workflow_dispatch: schedule: # Runs at 12am UTC @@ -14,6 +14,7 @@ on: jobs: mise_e2e_tests: strategy: + fail-fast: false matrix: # ref: https://github.com/actions/runner-images os: [ubuntu-22.04, macos-latest] @@ -34,6 +35,12 @@ jobs: export PATH="$HOME/.local/bin:$PATH" mise --version + - name: Add local Elixir plugin for mise E2E + if: runner.os != 'Windows' + run: | + export PATH="$HOME/.local/bin:$PATH" + mise plugins link vfox-elixir-ci "$GITHUB_WORKSPACE" + - name: Install Erlang/OTP & Elixir via mise (Linux) if: runner.os == 'Linux' run: | @@ -41,43 +48,34 @@ jobs: sudo apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk export MAKEFLAGS=-j4 export PATH="$HOME/.local/bin:$PATH" - - # Install via mise + mise install vfox:version-fox/vfox-erlang@26.2.3 mise use -g vfox:version-fox/vfox-erlang@26.2.3 - eval "$(mise activate bash --shims)" - which erl - echo "===============PATH===============" - echo $PATH - echo "===============PATH===============" - - mise install vfox:version-fox/vfox-elixir@1.16.2 - mise use -g vfox:version-fox/vfox-elixir@1.16.2 - eval "$(mise activate bash --shims)" + eval "$(mise env)" + which erl && which erlc + + mise install vfox-elixir-ci@1.16.2 + mise use -g vfox-elixir-ci@1.16.2 + eval "$(mise env)" elixirc -v cd assets elixir hello.ex - - name: Install Erlang/OTP & Elixir via mise (macOS) if: runner.os == 'macOS' run: | brew install autoconf libxslt fop wxwidgets openssl export MAKEFLAGS=-j4 export PATH="$HOME/.local/bin:$PATH" - - # Install via mise + mise install vfox:version-fox/vfox-erlang@26.2.3 mise use -g vfox:version-fox/vfox-erlang@26.2.3 - eval "$(mise activate bash)" - which erl - echo "===============PATH===============" - echo $PATH - echo "===============PATH===============" - - mise install vfox:version-fox/vfox-elixir@1.16.2 - mise use -g vfox:version-fox/vfox-elixir@1.16.2 - eval "$(mise activate bash)" + eval "$(mise env)" + which erl && which erlc + + mise install vfox-elixir-ci@1.16.2 + mise use -g vfox-elixir-ci@1.16.2 + eval "$(mise env)" elixirc -v cd assets elixir hello.ex \ No newline at end of file diff --git a/hooks/post_install.lua b/hooks/post_install.lua index 5e65cdc..efa1570 100644 --- a/hooks/post_install.lua +++ b/hooks/post_install.lua @@ -14,7 +14,12 @@ function PLUGIN:PostInstall(ctx) elseif os.getenv("VFOX_ELIXIR_MIRROR") == "hex" then return else - install_cmd = "cd " .. path .. " && make" + local erlang_bin = elixirUtils.find_erlang_bin() + if erlang_bin then + install_cmd = "cd " .. path .. " && PATH=" .. erlang_bin .. ":$PATH make" + else + install_cmd = "cd " .. path .. " && make" + end local status = os.execute(install_cmd) if status ~= 0 then error("Elixir install failed, please check the stdout for details.") diff --git a/lib/elixir_utils.lua b/lib/elixir_utils.lua index 42ed479..0fe48ca 100644 --- a/lib/elixir_utils.lua +++ b/lib/elixir_utils.lua @@ -65,12 +65,30 @@ function elixir_utils.check_version_existence(url) end end +function elixir_utils.find_erlang_bin() + local handle = io.popen("which erlc 2>/dev/null") + local result = handle:read("*l") + handle:close() + if result and result ~= "" then + return result:match("(.+)/") + end + local home = os.getenv("HOME") or "" + local mise_dir = os.getenv("MISE_DATA_DIR") or (home .. "/.local/share/mise") + handle = io.popen("find '" .. mise_dir .. "/installs' -name erlc -type f 2>/dev/null | head -1") + result = handle:read("*l") + handle:close() + if result and result ~= "" then + return result:match("(.+)/") + end + return nil +end + function elixir_utils.check_erlang_existence() print("Check Erlang/OTP existence...") - local status = os.execute("which erlc") - if status ~= 0 then - error("Please install Erlang/OTP before you install Elixir.") + if elixir_utils.find_erlang_bin() then + return end + error("Please install Erlang/OTP before you install Elixir.") end function elixir_utils.get_elixir_release_verions_in_linux() diff --git a/metadata.lua b/metadata.lua index 44282d4..8902121 100644 --- a/metadata.lua +++ b/metadata.lua @@ -14,6 +14,9 @@ PLUGIN.license = "Apache 2.0" PLUGIN.description = "Elixir vfox plugin, support for managing multiple Elixir language versions in Windows & Uinx-like system." +--- Erlang/OTP must be on PATH when compiling Elixir from source. +PLUGIN.depends = { "erlang" } + --- !!! OPTIONAL !!! --[[ NOTE: