From 55a2e3c3f04fa794baa4bf19a8d253f72908f3b3 Mon Sep 17 00:00:00 2001 From: Slava-Shchipunov Date: Sat, 4 Oct 2025 00:04:18 +0700 Subject: [PATCH] feat: add manual start for build --- .github/workflows/build-module.yml | 24 ++++++++++++++-- index.js | 46 ++++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-module.yml b/.github/workflows/build-module.yml index 8c0742c..bc9b0b0 100644 --- a/.github/workflows/build-module.yml +++ b/.github/workflows/build-module.yml @@ -9,6 +9,20 @@ on: tag_name: required: true type: string + workflow_dispatch: + inputs: + version: + description: 'OpenWRT version (e.g., 24.10.3)' + required: true + type: string + targets: + description: 'Targets (comma-separated, e.g., "stm32,ramips")' + required: true + type: string + subtargets: + description: 'Subtargets (comma-separated, e.g., "stm32mp1,mt7621")' + required: true + type: string jobs: generate-config: @@ -27,8 +41,12 @@ jobs: - name: Get OpenWRT version from tag id: get_version run: | - if [ "${{ github.event_name }}" == "workflow_call" ]; then - echo "VERSION=${{ inputs.tag_name }}" >> $GITHUB_ENV + if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then + echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV + echo "TARGETS=${{ inputs.targets }}" >> $GITHUB_ENV + echo "SUBTARGETS=${{ inputs.subtargets }}" >> $GITHUB_ENV + elif [ "${{ github.event_name }}" == "workflow_call" ]; then + VERSION="${{ inputs.tag_name }}" echo "VERSION=${VERSION#v}" >> $GITHUB_ENV else echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV @@ -39,7 +57,7 @@ jobs: - name: Generate Job Config id: generate-config - run: node index.js ${{ env.VERSION }} + run: node index.js ${{ env.VERSION }} "${{ env.TARGETS }}" "${{ env.SUBTARGETS }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/index.js b/index.js index 8528dae..cc0bdcf 100644 --- a/index.js +++ b/index.js @@ -3,16 +3,19 @@ const cheerio = require('cheerio'); const core = require('@actions/core'); const version = process.argv[2]; // Получение версии OpenWRT из аргумента командной строки +const filterTargetsStr = process.argv[3] || ''; // Фильтр по targets (опционально, через запятую) +const filterSubtargetsStr = process.argv[4] || ''; // Фильтр по subtargets (опционально, через запятую) -const SNAPSHOT_TARGETS_TO_BUILD = ['mediatek', 'ramips', 'x86', 'armsr']; -const SNAPSHOT_SUBTARGETS_TO_BUILD = ['filogic', 'mt7622', 'mt7623', 'mt7629', 'mt7620', 'mt7621', 'mt76x8', '64', 'generic', 'armv8']; +// Преобразуем строки с запятыми в массивы +const filterTargets = filterTargetsStr ? filterTargetsStr.split(',').map(t => t.trim()).filter(t => t) : []; +const filterSubtargets = filterSubtargetsStr ? filterSubtargetsStr.split(',').map(s => s.trim()).filter(s => s) : []; 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/`; +const url = `https://downloads.openwrt.org/releases/${version}/targets/`; async function fetchHTML(url) { try { @@ -74,19 +77,38 @@ async function main() { const jobConfig = []; for (const target of targets) { + // Пропускаем target, если указан массив фильтров и target не входит в него + if (filterTargets.length > 0 && !filterTargets.includes(target)) { + continue; + } + const subtargets = await getSubtargets(target); for (const subtarget of subtargets) { + // Пропускаем subtarget, если указан массив фильтров и subtarget не входит в него + if (filterSubtargets.length > 0 && !filterSubtargets.includes(subtarget)) { + continue; + } + + // Добавляем в конфигурацию только если: + // 1. Оба массива пустые (автоматическая сборка по тегу) - собираем всё + // 2. Оба массива НЕ пустые (ручной запуск) - target И subtarget должны быть в своих массивах + const isAutomatic = filterTargets.length === 0 && filterSubtargets.length === 0; + const isManualMatch = filterTargets.length > 0 && filterSubtargets.length > 0 && + filterTargets.includes(target) && filterSubtargets.includes(subtarget); + + if (!isAutomatic && !isManualMatch) { + continue; + } + const { vermagic, pkgarch } = await getDetails(target, subtarget); - if (version !== 'SNAPSHOT' || (SNAPSHOT_SUBTARGETS_TO_BUILD.includes(subtarget) && SNAPSHOT_TARGETS_TO_BUILD.includes(target))) { - jobConfig.push({ - tag: version, - target, - subtarget, - vermagic, - pkgarch, - }); - } + jobConfig.push({ + tag: version, + target, + subtarget, + vermagic, + pkgarch, + }); } }