.github/workflows | ||
.lune | ||
.vscode | ||
src | ||
.gitignore | ||
.luaurc | ||
aftman.toml | ||
Cargo.lock | ||
Cargo.toml | ||
CHANGELOG.md | ||
LICENSE.txt | ||
lune.yml | ||
luneTypes.d.luau | ||
README.md | ||
selene.toml | ||
stylua.toml |
Lune 🌙
A Luau script runner
🚀 Use the ergonomics and readability of Luau instead of shell scripts 🚀
⚙️ Installation
The preferred way of installing Lune is using Aftman.
This will add lune
to an aftman.toml
file in the current directory, or create one if it does not exist:
$ aftman add filiptibell/lune
You can also download pre-built binaries for most systems directly from the linked GitHub Releases page.
✏️ Writing Lune Scripts
Check out the examples of how to write a script in the .lune folder !
🔎 Full list of APIs
fs
- Filesystem
type fs = {
readFile: (path: string) -> string,
readDir: (path: string) -> { string },
writeFile: (path: string, contents: string) -> (),
writeDir: (path: string) -> (),
removeFile: (path: string) -> (),
removeDir: (path: string) -> (),
isFile: (path: string) -> boolean,
isDir: (path: string) -> boolean,
}
json
- JSON
type json = {
encode: (value: any, pretty: boolean?) -> string,
decode: (encoded: string) -> any,
}
process
- Current process & child processes
type process = {
getEnvVars: () -> { string },
getEnvVar: (key: string) -> string?,
setEnvVar: (key: string, value: string) -> (),
exit: (code: number?) -> (),
spawn: (program: string, params: { string }?) -> {
ok: boolean,
code: number,
stdout: string,
stderr: string,
},
}
🔀 Example translation from Bash to Luau
Before:
#!/bin/bash
VALID=true
COUNT=1
while [ $VALID ]
do
echo $COUNT
if [ $COUNT -eq 5 ];
then
break
fi
((COUNT++))
done
After:
local valid = true
local count = 1
while valid do
print(count)
if count == 5 then
break
end
count += 1
end
🧑💻 Configuring VSCode for Lune
Lune puts developer experience first, and as such provides type definitions and configurations for several tools out of the box.
Luau LSP
- Use
lune --download-luau-types
to download Luau types (luneTypes.d.luau
) to the current directory - Set your definition files setting to include
luneTypes.d.luau
, an example can be found in the .vscode folder in this repository
Selene
- Use
lune --download-selene-types
to download Selene types (lune.yml
) to the current directory - Use either
std = "roblox-lune"
orstd = "luau+lune"
in yourselene.toml
configuration file
NOTE: It is highly recommended to add any type definition files to your .gitignore
and to only download them using these commands, since this guarantees that you have type definitions compatible with your installed version of Lune.
🏃 Running Lune Scripts
When you've written a script with either a .lua
or .luau
extension, you can run it:
$ lune script-name
This will look for the script script_name
in a few locations:
- The current directory
- The folder
lune
in the current directory, if it exists - The folder
.lune
in the current directory, if it exists
If you don't want Lune to look in sub-directories you can provide a full file path with the file extension included, instead of only the file name.