Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ include/assets.luau
Rocket.rbxm
roblox.d.luau
src/_OLD_

.lute/typedefs/*
!.lute/typedefs/.luaurc
4 changes: 3 additions & 1 deletion .luaurc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
"aliases": {
"src": "src",
"include": "include",
"pkgs": "roblox_packages"
"pkgs": "roblox_packages",
"modules": "modules",
"monorepo": ".lute/lib/monorepo"
},
"lint": {
"*": true
Expand Down
7 changes: 3 additions & 4 deletions .lute/.luaurc
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@
"aliases": {
"batteries": "./batteries",
"lib": "./lib",
"include": "../include",

"std": "~/.lute/typedefs/0.1.0/std",
"lint": "~/.lute/typedefs/0.1.0/lint",
"lute": "~/.lute/typedefs/0.1.0/lute"
"std": "./typedefs/std",
"lint": "./typedefs/lint",
"lute": "./typedefs/lute"
}
}
33 changes: 0 additions & 33 deletions .lute/analyze.luau

This file was deleted.

10 changes: 7 additions & 3 deletions .lute/batteries/toml.luau
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,14 @@ local function tableToToml(tbl: {}, parent: string)
for k, v in tbl do
if typeof(v) == "table" and next(v) ~= nil then
if #v > 0 then
for _, entry in v do
result ..= "\n[[" .. (parent and parent .. "." or "") .. k .. "]]\n"
result ..= tableToToml(entry, nil)
result ..= k .. "=" .. "["
for i, entry in v do
result ..= serializeValue(entry)
if i < #v then
result ..= ", "
end
end
result ..= "]\n"
else
subTables[k] = v
end
Expand Down
167 changes: 167 additions & 0 deletions .lute/build-pesde.luau
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
local cli = require("@batteries/cli")
local fs = require("@std/fs")
local path = require("@std/path")
local process = require("@lute/process")
local tableext = require("@std/tableext")
local types = require("@monorepo/types")
local useForwardedModules = require("@monorepo/useForwardedModules")
local useModules = require("@monorepo/useModules")
local useRepository = require("@monorepo/useRepository")

local BASE_INCLUDE = { "pesde.toml", "src/*", "LICENSE.md", "README.md" }
local BASE_BUILD_FILES = { "src" }
local PESDE_MANIFEST_FOOTER = [[
[indices]
default = "https://github.com/pesde-pkg/index"

[scripts]
roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau"
sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau"

[dev_dependencies]
scripts = { name = "pesde/scripts_rojo", version = "^0.2.0", target = "lune" }
rojo = { name = "pesde/rojo", version = "^7.5.1", target = "lune" }

[engines]
pesde = "^0.7.2"
lune = "^0.10.2"
]]

local args = cli.parser()
args:add("script", "positional", { help = "This script-" })
args:add("help", "flag", { help = "Shows this message" })
args:add("repoconfig", "option", { help = "Path from the CWD to repository config" })
args:parse({ ... })

if args:has("help") then
print("Builds pesde packages from the repository's modules")
print()
print("To build all modules:")
print("\tlute build-pesde")
print()
print("To build a specific module, specify it in forwarded args:")
print("\tlute build-pesde boba")
print()
args:help()
return
end

local repository = useRepository(args:get("repoconfig"))
local registries = repository.modules.registries
if not registries then
print("Registeries unspecified in repository config, aborting")
return
end
local pesdeRegistry = registries.pesde
if not pesdeRegistry then
print("pesde registery unspecified in repository config")
return
end

local allModules = useModules(repository)
local buildModules = useForwardedModules(allModules, args:forwarded())
local buildDir = path.join(repository.build.output, "pesde")
local modulesBuilt: { [types.Module]: true } = {}

local function quote(str: string)
return string.format("%q", str)
end

local function getModuleVersion(module: types.Module)
return module.config.version or repository.metadata.version
end

local function getModuleFullname(moduleName: string)
local formattedName = string.format(pesdeRegistry.moduleFormat :: any, moduleName)
return (string.gsub(`{pesdeRegistry.scope}/{formattedName}`, "%-", "_"))
end

local function buildModule(module: types.Module)
if modulesBuilt[module] then
return
end

modulesBuilt[module] = true

local builtRoot = path.join(buildDir, module.name)
local builtSrc = path.join(builtRoot, "src")
local builtManifest = path.join(builtRoot, "pesde.toml")
local builtPesde = path.join(builtRoot, ".pesde")
local builtPesdeScripts = path.join(builtPesde, "scripts")

local manifest = {}
table.insert(manifest, `# {repository.metadata.copyright}`)
table.insert(manifest, "# This file was @autogenerated and not intended for manual editing.")
table.insert(manifest, "")
table.insert(manifest, `name = {quote(getModuleFullname(module.config.name))}`)
table.insert(manifest, `version = {quote(module.config.version or repository.metadata.version)}`)
table.insert(manifest, `description = {quote(module.config.description)}`)
table.insert(manifest, `license = {quote(module.config.license or repository.metadata.license)}`)
local authors = {}
for i, author in module.config.authors or repository.metadata.authors do
authors[i] = quote(author)
end
table.insert(manifest, `authors = [{table.concat(authors, ", ")}]`)
table.insert(manifest, `repository = {quote(repository.metadata.repository)}`)

local includeFiles, buildFiles = table.clone(BASE_INCLUDE), table.clone(BASE_BUILD_FILES)

if module.config.dependencies then
table.insert(manifest, "")
table.insert(manifest, "[dependencies]")

for dependency in module.config.dependencies do
local dependentModule = allModules.nameToModule[dependency]
if not dependentModule then
print(`Got invalid dependency "{dependentModule}" in module "{module.name}"`)
process.exit(1)
return
end

buildModule(dependentModule)
table.insert(
manifest,
dependency
.. " = { workspace = "
.. quote(getModuleFullname(dependency))
.. ", version = "
.. quote(getModuleVersion(module))
.. " }"
)

local linkerFilename = `{dependency}.luau`
table.insert(includeFiles, linkerFilename)
table.insert(buildFiles, linkerFilename)
end
end

table.insert(manifest, 4, `include = [{table.concat(tableext.map(includeFiles, quote), ", ")}]`)
table.insert(manifest, "")
table.insert(manifest, "[target]")
table.insert(manifest, 'environment = "roblox"')
table.insert(manifest, 'lib = "src/init.luau"')
table.insert(manifest, `build_files = [{table.concat(tableext.map(buildFiles, quote), ", ")}]`)

table.insert(manifest, "")
table.insert(manifest, PESDE_MANIFEST_FOOTER)

fs.createdirectory(builtRoot)
fs.createdirectory(builtSrc)
fs.createdirectory(builtPesde)
fs.createdirectory(builtPesdeScripts)

fs.writestringtofile(builtManifest, table.concat(manifest, "\n"))

for _, entry in fs.listdirectory(".pesde/scripts") do
if entry.type == "file" then
fs.copy(path.join(".pesde", "scripts", entry.name), path.join(builtRoot, ".pesde", "scripts", entry.name))
end
end
end

pcall(fs.removedirectory, buildDir, { recursive = true })
fs.createdirectory(buildDir, { recursive = true })

for _, module in buildModules do
buildModule(module)
end
15 changes: 0 additions & 15 deletions .lute/build-release.luau

This file was deleted.

Loading