Release 1.0.7: Linux AppImage (x64/arm64) CI, merge update feed, docs
Release / release (push) Failing after 7m3s
Release / release (push) Failing after 7m3s
- electron-builder linux + qemu cross arm64 on ubuntu-22.04 job - sync-update-feed: merge copy, ARTIFACT_LINUX, .appimage - GITEA_AUTO_UPDATE + MANUAL_MAC_UPDATE_UPLOAD Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,13 +1,17 @@
|
||||
/**
|
||||
* Складывает артефакты electron-builder (win + mac) в публичный репозиторий,
|
||||
* Складывает артефакты electron-builder (win + mac + linux) в публичный репозиторий,
|
||||
* ветка `updates`, чтобы generic URL …/raw/branch/updates/ указывал на актуальные latest*.yml и установщики.
|
||||
*
|
||||
* Переменные окружения (имена без префикса GITEA_ — в Gitea секреты GITEA_* зарезервированы):
|
||||
* Копирование **merge**: существующие файлы в ветке (другие ОС) не удаляются — обновляются только
|
||||
* те имена, которые пришли из переданных каталогов артефактов.
|
||||
*
|
||||
* Переменные окружения:
|
||||
* DND_UPDATES_SERVER — https://git.example.com (без слэша в конце)
|
||||
* UPDATES_REPO — owner/repo (публичный репозиторий «только релизы»)
|
||||
* UPDATES_REPO — owner/repo (публичный репозиторий)
|
||||
* DND_UPDATES_PUSH_TOKEN — PAT с правом push в UPDATES_REPO
|
||||
* ARTIFACT_WIN — каталог с файлами сборки Windows
|
||||
* ARTIFACT_MAC — каталог с файлами сборки macOS
|
||||
* ARTIFACT_WIN — каталог с файлами Windows (можно пустой / отсутствует — пропуск)
|
||||
* ARTIFACT_MAC — каталог с файлами macOS
|
||||
* ARTIFACT_LINUX — каталог с файлами Linux (AppImage и т.д.)
|
||||
* GIT_COMMIT_TAG — опционально, для сообщения коммита
|
||||
*/
|
||||
import { execFileSync } from 'node:child_process';
|
||||
@@ -18,7 +22,7 @@ import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const ALLOWED_EXT = new Set(['.yml', '.yaml', '.exe', '.blockmap', '.zip', '.dmg', '.pkg']);
|
||||
const ALLOWED_EXT = new Set(['.yml', '.yaml', '.exe', '.blockmap', '.zip', '.dmg', '.pkg', '.appimage']);
|
||||
|
||||
function mustEnv(name) {
|
||||
const v = process.env[name]?.trim();
|
||||
@@ -26,9 +30,14 @@ function mustEnv(name) {
|
||||
return v;
|
||||
}
|
||||
|
||||
function optionalDir(name) {
|
||||
const v = process.env[name]?.trim();
|
||||
return v && v.length > 0 ? v : '';
|
||||
}
|
||||
|
||||
function copyFlatReleaseFiles(fromDir, toDir) {
|
||||
if (!fs.existsSync(fromDir)) {
|
||||
console.warn(`[sync-update-feed] skip missing dir: ${fromDir}`);
|
||||
if (!fromDir || !fs.existsSync(fromDir)) {
|
||||
console.warn(`[sync-update-feed] skip missing dir: ${fromDir || '(empty)'}`);
|
||||
return 0;
|
||||
}
|
||||
let n = 0;
|
||||
@@ -47,19 +56,13 @@ function runGit(args, cwd) {
|
||||
execFileSync('git', args, { cwd, stdio: 'inherit' });
|
||||
}
|
||||
|
||||
function emptyWorkingTreeExceptGit(cwd) {
|
||||
for (const ent of fs.readdirSync(cwd)) {
|
||||
if (ent === '.git') continue;
|
||||
fs.rmSync(path.join(cwd, ent), { recursive: true, force: true });
|
||||
}
|
||||
}
|
||||
|
||||
function main() {
|
||||
const server = mustEnv('DND_UPDATES_SERVER').replace(/\/+$/u, '');
|
||||
const updatesRepo = mustEnv('UPDATES_REPO');
|
||||
const token = mustEnv('DND_UPDATES_PUSH_TOKEN');
|
||||
const winDir = mustEnv('ARTIFACT_WIN');
|
||||
const macDir = mustEnv('ARTIFACT_MAC');
|
||||
const winDir = optionalDir('ARTIFACT_WIN');
|
||||
const macDir = optionalDir('ARTIFACT_MAC');
|
||||
const linuxDir = optionalDir('ARTIFACT_LINUX');
|
||||
|
||||
const u = new URL(server);
|
||||
const host = u.host;
|
||||
@@ -78,11 +81,14 @@ function main() {
|
||||
runGit(['config', 'user.email', 'ci@gitea-actions.local'], work);
|
||||
runGit(['config', 'user.name', 'gitea-actions'], work);
|
||||
|
||||
emptyWorkingTreeExceptGit(work);
|
||||
|
||||
const copied = copyFlatReleaseFiles(winDir, work) + copyFlatReleaseFiles(macDir, work);
|
||||
const copied =
|
||||
copyFlatReleaseFiles(winDir, work) +
|
||||
copyFlatReleaseFiles(macDir, work) +
|
||||
copyFlatReleaseFiles(linuxDir, work);
|
||||
if (copied === 0) {
|
||||
throw new Error('[sync-update-feed] no release files copied (check ARTIFACT_WIN / ARTIFACT_MAC)');
|
||||
throw new Error(
|
||||
'[sync-update-feed] no release files copied (check ARTIFACT_WIN / ARTIFACT_MAC / ARTIFACT_LINUX)',
|
||||
);
|
||||
}
|
||||
|
||||
const tag = process.env.GIT_COMMIT_TAG?.trim() || 'ci';
|
||||
@@ -96,7 +102,7 @@ function main() {
|
||||
}
|
||||
|
||||
fs.rmSync(tmp, { recursive: true, force: true });
|
||||
console.log(`[sync-update-feed] done (${String(copied)} file(s) staged)`);
|
||||
console.log(`[sync-update-feed] done (${String(copied)} file(s) copied)`);
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
Reference in New Issue
Block a user