jecs-pesde/.lune/pull.luau

216 lines
5.1 KiB
Text

--!strict
local process = require("@lune/process")
local fs = require("@lune/fs")
local net = require("@lune/net")
local serde = require("@lune/serde")
print("-- 🟧 Starting pull of latest release...")
type wally_manifest = {
package: {
name: string,
version: string,
registry: string,
realm: string,
license: string?,
exclude: { string }?,
include: { string }?,
},
dependencies: {
[string]: string,
},
}
type environment = "luau" | "lune" | "roblox" | "roblox_server"
type pesde_dependency = {
name: string,
version: string,
index: string?,
target: environment?,
} | {
wally: string,
version: string,
index: string?,
} | {
repo: string,
rev: string,
path: string?,
}
type pesde_manifest = {
name: string,
version: string,
description: string?,
license: string?,
authors: { string }?,
repository: string?,
private: boolean?,
includes: { string }?,
pesde_version: string?,
workspace_members: { string }?,
target: {
environment: environment,
lib: string,
bin: string?,
build_files: { string }?,
},
scripts: {
roblox_sync_config_generator: string?,
sourcemap_generator: string?,
[string]: string,
}?,
indices: {
default: string,
[string]: string,
},
wally_indices: {
default: string,
[string]: string,
}?,
overrides: {
[string]: pesde_dependency,
}?,
patches: {
[string]: { [string]: string },
}?,
dependencies: {
[string]: pesde_dependency,
}?,
peer_dependencies: {
[string]: pesde_dependency,
}?,
dev_dependencies: {
[string]: pesde_dependency,
}?,
}
print("🟧 Fetching github token...")
local github_token: string = process.args[1]
if not github_token then
local env_exists = fs.metadata(".env").exists
if not env_exists then
error("Usage: lune run download-jecs [GITHUB_PAT]\nAlternatively, put the PAT in an .env file under GITHUB_PAT")
end
local env = serde.decode("toml", fs.readFile(".env"))
local pat = env.GITHUB_PAT or error("❌ Couldn't read GITHUB_PAT from .env")
github_token = pat
end
print("✅ Got github token.")
--local manifest_contents = fs.readFile("wally.toml") or error("Couldn't read manifest.")
print("🟧 Fetching latest jecs wally manifest...")
local pull_manifest_res = net.request("https://raw.githubusercontent.com/Ukendio/jecs/refs/heads/main/wally.toml")
if not pull_manifest_res.ok then
error(`❌ Couldn't download jecs manifest: {pull_manifest_res.statusCode} {pull_manifest_res.statusMessage}`)
end
local manifest_contents = pull_manifest_res.body
local manifest: wally_manifest = serde.decode("toml", manifest_contents) or error("Couldn't decode manifest.")
local jecs_version = manifest.package.version
print(`✅ Got latest manifest. Version: {jecs_version}`)
type gh_api_tag = {
ref: string,
node_id: string,
url: string,
object: {
sha: string,
type: string,
url: string,
},
}
print("🟧 Getting tag associated with version in manifest...")
local response = net.request({
url = `https://api.github.com/repos/ukendio/jecs/git/refs/tags/v{jecs_version}`,
method = "GET",
headers = {
Accept = "application/vnd.github+json",
Authorization = `Bearer {github_token}`,
["X-GitHub-Api-Version"] = "2022-11-28",
},
})
if not response.ok then
error(`❌ Github api response not ok:\n{response.statusCode} @ {response.statusMessage}\n{response.body}`)
end
local gh_api_tag: gh_api_tag = serde.decode("json", response.body)
print(`✅ Got associated tag: {gh_api_tag.object.sha}`)
local URL = `https://raw.githubusercontent.com/Ukendio/jecs/{gh_api_tag.object.sha}/`
local function download(path: string, output: string)
process.spawn("curl", { URL .. path, "-o", output })
end
local function download_list(list: { { path: string, output: string } })
local n = #list
print(`🟧 Downloading {n} files...`)
for idx = 1, n do
local file = list[idx]
print(`Downloading file {idx}/{n} - {file.path} -> {file.output}...`)
download(file.path, file.output)
end
print(`✅ Downloaded {n} files.`)
end
download_list({
{ path = "src/init.luau", output = "init.luau" },
{ path = ".luaurc", output = ".luaurc" },
{ path = "LICENSE", output = "LICENSE" },
{ path = "README.md", output = "README.md" },
})
print(`🟧 Modifying README.md to include repo info...`)
local readme_contents = fs.readFile("README.md")
local new_readme_contents = [[
An unofficial pesde package for [jecs](https://github.com/ukendio/jecs).
]] .. readme_contents
fs.writeFile("README.md", new_readme_contents)
print(`✅ Modified README.md.`)
local pesde_manifest: pesde_manifest = {
name = "mark_marks/jecs_pesde",
description = "A minimal copy of jecs published on the official pesde registry",
version = jecs_version,
authors = { "jecs authors" },
repository = "https://git.devmarked.win/marked/jecs-pesde",
license = "MIT",
includes = {
"init.luau",
"pesde.toml",
"README.md",
"LICENSE",
".luaurc",
},
target = {
environment = "luau",
lib = "init.luau",
},
indices = {
default = "https://github.com/daimond113/pesde-index",
},
}
print("🟧 Writing pesde manifest...")
local serialized_manifest = serde.encode("toml", pesde_manifest, true)
fs.writeFile("pesde.toml", serialized_manifest)
print("✅ Wrote pesde manifest.")
print("-- ✅ Finished pulling latest release.")