Skip to content

Project: LuaRocks per project workflow

Hisham Muhammad edited this page May 16, 2018 · 7 revisions

LuaRocks per-project workflow

Pain point to fix

  • managing multiple rocks trees is complicated
    • LuaRocks is based on a 10+ year old design from when rubygems was the state of the art
    • new users expect a per-project behavior, npm-style

Proposed approach

  • a git-style .luarocks directory: if a .luarocks directory is found in the current directory (or any directories above it), it will become the "project root" directory
  • a new command, luarocks init sets up a project:
    • creates a .luarocks directory in the current directory
    • writes a template rockspec file if none exists
      • uses the machinery of luarocks write_rockspec, which does some git-specific detection, so the command should "do the right thing" when executed from inside a git clone
  • offer a bullet-proof way to run Lua and LuaRocks using the current project tree
    • Option 1:
      • creating lua and luarocks launcher scripts in the current directory that are hardcoded to use the project tree
    • Option 2:
  • luarocks build with no arguments acts like luarocks make
    • luarocks make is then deprecated?
  • Current multi-tree support remains available
    • Users who have the existing workflow in place won't need to change
    • With the current existence of ~/.luarocks in the $HOME directory, this means that LuaRocks will effectively become "--local-by-default"

Status

Open Questions

  • With Option 2, how do you use a different Lua interpreter (e.g. to test different Lua versions)

    • luarocks-5.1, luarocks-5.2, luarocks-5.3, luarocks-jit2.1, etc. binaries?
  • Where will the Lua modules themselves live? Inside .luarocks (this is compatible with the current ~/.luarocks or in a new lua_modules directory (copying npm)

    • lua_modules has better visibility (and familiarity for those used to npm); users will be able to inspect rocks more easily; .luarocks would be for config files, caches and other "hidden" things
      • inside lua_modules, a regular version rocks tree should exist: e.g. lua_modules/share/lua/5.3/foo.lua
    • using a rocks tree inside .luarocks itself should be supported too, for compatibility with ~/.luarocks
      • maybe it should be always the default when in $HOME, to avoid $HOME/lua_modules?

Clone this wiki locally