--!strict local task = require("@lune/task") 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, }, } 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("🟧 Writing pesde manifest...") local pesde_manifest = `name = "marked/jecs_pesde"\ndescription = "A minimal copy of jecs intended for adding as a Luau git dependency on pesde projects"\nversion = "{jecs_version}"\nrepository = "https://git.devmarked.win/marked/jecs-pesde"\n\nincludes = ["init.luau", "pesde.toml", "README.md", "LICENSE", ".luaurc"]\n\n[target]\nenvironment = "luau"\nlib = "init.luau"\n\n[indices]\ndefault = "https://github.com/daimond113/pesde-index"` fs.writeFile("pesde.toml", pesde_manifest) print("✅ Wrote pesde manifest.") print("-- ✅ Finished pulling latest release.")