Files
py_publish/action.js
T
bryce ce57f7d88b
Push to main / Reset-Version-Tag (push) Successful in 5s
remove logs
2026-05-18 11:13:58 -06:00

66 lines
1.9 KiB
JavaScript

import { execSync } from "child_process";
import { readFileSync, mkdirSync, writeFileSync, readdirSync } from "fs";
const libName = process.env.PWD.split("/").slice(-1)[0];
const version = readFileSync("version", { encoding: "utf8" });
const repoBaseUrl = `${process.env.INPUT_REPO_URL}/${libName}/${version}`;
const packageJsonUrls = [];
const sendFile = async (urlPath, data) => {
let r = await fetch(`${repoBaseUrl}/${urlPath}`, {
method: "PUT",
headers: {
Authorization: `Basic ${Buffer.from(`${process.env.INPUT_REPO_USER}:${process.env.INPUT_REPO_PASS}`).toString("base64")}`,
},
body: data,
});
if (r.status > 399) {
throw `${r.status}: FAILED TO UPLOAD TO ${repoBaseUrl}/${urlPath}`;
}
};
const doIt = async () => {
// Get system utils
execSync("apt update", { encoding: "utf8" });
execSync("apt install -y pipx", { encoding: "utf8" });
execSync("pipx install mpy-cross", { encoding: "utf8" });
// Add base lib file to repo
await sendFile(`__init__.mpy`, new ArrayBuffer(0));
// Update urls
packageJsonUrls.push([`${libName}/__init__.mpy`, "__init__.mpy"]);
// Generate module folders/files
for (let moduleFile of readdirSync(".").filter((f) => f.slice(-2) == "py")) {
const modName = moduleFile.slice(0, -3);
const modInitPath = `${modName}/__init__.mpy`;
const modPyPath = `${modName}.mpy`;
// compile mpy file
execSync(`pipx run mpy-cross ${moduleFile}`, {
encoding: "utf8",
});
// Add module files to repo
await sendFile(modPyPath, readFileSync(`${modName}.mpy`).buffer);
// Update urls
packageJsonUrls.push([`${libName}/${modInitPath}`, "__init__.mpy"]);
packageJsonUrls.push([`${libName}/${modName}/${modPyPath}`, modPyPath]);
}
// Add package.json to repo
await sendFile(
`package.json`,
JSON.stringify({
urls: packageJsonUrls,
deps: [],
version: version,
}),
);
};
doIt();