'use strict'; const logger = require('./logger'); const { loadConfig } = require('./config'); const { fetchReleases } = require('./releases'); const { calculateVersion } = require('./version'); const { writeOutput } = require('./output'); /** * Action 進入點:協調設定載入、release 取得、版本號計算與輸出寫出。 * * 流程:印出「參數檢查」區段並呼叫 loadConfig() 載入設定(失敗則以 logger.fail * 回報並結束);印出設定值(token 以 *** 或「未提供」顯示);組出 release URL 並 * 以 fetchReleases() 取得 release 清單(失敗則以 logger.fail 回報並結束);以 * calculateVersion() 計算最新版與新版號,最後以 writeOutput('version', version) * 寫出 version 輸出。 * * Side effects:透過 logger 輸出至 stdout/stderr、失敗時使 process 以失敗狀態 * 結束、並寫入 GITHUB_OUTPUT。此函式於模組載入時即被呼叫。 * * @returns {Promise} */ async function main() { logger.section('參數檢查'); let config; try { config = loadConfig(); } catch (error) { logger.fail(error.message); return; } logger.info(`GITEA_SERVER_URL=${config.serverUrl}`); logger.info(`GITEA_REPOSITORY=${config.repository}`); logger.info(config.token ? 'GITEA_TOKEN=***' : 'GITEA_TOKEN=未提供'); logger.info(`IS_BETA=${config.isBeta}`); logger.section('取得版本資料'); const releaseUrl = `${config.serverUrl}/api/v1/repos/${config.repository}/releases`; logger.info(`RELEASE_URL=${releaseUrl}`); let releases; try { releases = await fetchReleases(releaseUrl, { token: config.token, logger }); } catch (error) { logger.fail(error.message); return; } const { latest, version } = calculateVersion(releases, config.isBeta); logger.info(`LATEST_VERSION=${latest}`); logger.section('計算版本號'); logger.info(`NEW_VERSION=${version}`); writeOutput('version', version); } main();