feat: sign Android APK and generate icons from logo.png or favicon.ico
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
47
.github/scripts/generate-app-icons.mjs
vendored
Normal file
47
.github/scripts/generate-app-icons.mjs
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
import { execSync } from "node:child_process";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const root = path.resolve(__dirname, "../..");
|
||||
const distDir = path.join(root, "template", "dist");
|
||||
const templateDir = path.join(root, "template");
|
||||
|
||||
const ICON_PRIORITY = ["logo.png", "favicon.ico"];
|
||||
|
||||
function findIconSource(baseDir) {
|
||||
for (const name of ICON_PRIORITY) {
|
||||
const direct = path.join(baseDir, name);
|
||||
if (fs.existsSync(direct)) return direct;
|
||||
}
|
||||
|
||||
for (const entry of fs.readdirSync(baseDir, { withFileTypes: true })) {
|
||||
if (!entry.isDirectory()) continue;
|
||||
for (const name of ICON_PRIORITY) {
|
||||
const nested = path.join(baseDir, entry.name, name);
|
||||
if (fs.existsSync(nested)) return nested;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export function generateAppIcons() {
|
||||
if (!fs.existsSync(distDir)) {
|
||||
console.log("No dist directory, keeping default icons");
|
||||
return;
|
||||
}
|
||||
|
||||
const iconSource = findIconSource(distDir);
|
||||
if (!iconSource) {
|
||||
console.log("No logo.png or favicon.ico found, keeping default icons");
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Generating app icons from: ${path.relative(root, iconSource)}`);
|
||||
execSync(`npx tauri icon "${iconSource}"`, {
|
||||
cwd: templateDir,
|
||||
stdio: "inherit",
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user