mirror of
https://github.com/Slava-Shchipunov/awg-openwrt.git
synced 2026-03-14 09:23:10 +00:00
100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
const axios = require('axios');
|
|
const cheerio = require('cheerio');
|
|
const core = require('@actions/core');
|
|
|
|
const version = process.argv[2]; // Получение версии OpenWRT из аргумента командной строки
|
|
|
|
// mediatek, ramips
|
|
const SNAPSHOT_SUBTARGETS_TO_BUILD = ['filogic', 'mt7622', 'mt7623', 'mt7629', 'mt7620', 'mt7621', 'mt76x8'];
|
|
|
|
if (!version) {
|
|
core.setFailed('Version argument is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
const url = version === 'SNAPSHOT' ? 'https://downloads.openwrt.org/snapshots/targets/' : `https://downloads.openwrt.org/releases/${version}/targets/`;
|
|
|
|
async function fetchHTML(url) {
|
|
try {
|
|
const { data } = await axios.get(url);
|
|
return cheerio.load(data);
|
|
} catch (error) {
|
|
console.error(`Error fetching HTML for ${url}: ${error}`);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async function getTargets() {
|
|
const $ = await fetchHTML(url);
|
|
const targets = [];
|
|
$('table tr td.n a').each((index, element) => {
|
|
const name = $(element).attr('href');
|
|
if (name && name.endsWith('/')) {
|
|
targets.push(name.slice(0, -1));
|
|
}
|
|
});
|
|
return targets;
|
|
}
|
|
|
|
async function getSubtargets(target) {
|
|
const $ = await fetchHTML(`${url}${target}/`);
|
|
const subtargets = [];
|
|
$('table tr td.n a').each((index, element) => {
|
|
const name = $(element).attr('href');
|
|
if (name && name.endsWith('/')) {
|
|
subtargets.push(name.slice(0, -1));
|
|
}
|
|
});
|
|
return subtargets;
|
|
}
|
|
|
|
async function getDetails(target, subtarget) {
|
|
const packagesUrl = `${url}${target}/${subtarget}/packages/`;
|
|
const $ = await fetchHTML(packagesUrl);
|
|
let vermagic = '';
|
|
let pkgarch = '';
|
|
|
|
$('a').each((index, element) => {
|
|
const name = $(element).attr('href');
|
|
if (name && name.startsWith('kernel_')) {
|
|
const vermagicMatch = name.match(/kernel_\d+\.\d+\.\d+(?:-\d+)?[-~]([a-f0-9]+)(?:-r\d+)?_([a-zA-Z0-9_-]+)\.ipk$/);
|
|
if (vermagicMatch) {
|
|
vermagic = vermagicMatch[1];
|
|
pkgarch = vermagicMatch[2];
|
|
}
|
|
}
|
|
});
|
|
|
|
return { vermagic, pkgarch };
|
|
}
|
|
|
|
async function main() {
|
|
try {
|
|
const targets = await getTargets();
|
|
const jobConfig = [];
|
|
|
|
for (const target of targets) {
|
|
const subtargets = await getSubtargets(target);
|
|
for (const subtarget of subtargets) {
|
|
const { vermagic, pkgarch } = await getDetails(target, subtarget);
|
|
|
|
if (version !== 'SNAPSHOT' || SNAPSHOT_SUBTARGETS_TO_BUILD.includes(subtarget)) {
|
|
jobConfig.push({
|
|
tag: version,
|
|
target,
|
|
subtarget,
|
|
vermagic,
|
|
pkgarch,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
core.setOutput('job-config', JSON.stringify(jobConfig));
|
|
} catch (error) {
|
|
core.setFailed(error.message);
|
|
}
|
|
}
|
|
|
|
main();
|