Upload via GUI (202 Dateien)
This commit is contained in:
+25
-10
@@ -8,6 +8,15 @@
|
|||||||
* mit neuer Signatur – die bereits veröffentlichten EXEs würden dann nicht mehr
|
* mit neuer Signatur – die bereits veröffentlichten EXEs würden dann nicht mehr
|
||||||
* dazu passen und kein Launcher nähme das Update an.
|
* dazu passen und kein Launcher nähme das Update an.
|
||||||
*
|
*
|
||||||
|
* Außerdem sagt es, wie das Release in Gitea heißen muss:
|
||||||
|
*
|
||||||
|
* fertige Version 1.2.4 Tag 1.2.4
|
||||||
|
* Vorabfassung 1.2.4-beta.1 Tag 0.0.0-1.2.4-beta.1 + Haken "Pre-Release"
|
||||||
|
*
|
||||||
|
* Der Vorsatz "0.0.0-" bei Vorabfassungen ist Pflicht: Launcher bis 1.2.3 kennen
|
||||||
|
* das Pre-Release-Feld nicht und würden "1.2.4-beta.1" als normales Update an
|
||||||
|
* ALLE Nutzer verteilen (siehe src/updater.js).
|
||||||
|
*
|
||||||
* Ausnahme (z. B. Testbuild, der nie hochgeladen wird): AEROMC_GLEICHE_VERSION=1
|
* Ausnahme (z. B. Testbuild, der nie hochgeladen wird): AEROMC_GLEICHE_VERSION=1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -15,25 +24,31 @@ const path = require('path');
|
|||||||
|
|
||||||
const API = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/AeroMc-Launcher/releases?limit=50';
|
const API = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/AeroMc-Launcher/releases?limit=50';
|
||||||
const version = require(path.join(__dirname, '..', 'package.json')).version;
|
const version = require(path.join(__dirname, '..', 'package.json')).version;
|
||||||
|
const vorab = /^\d+(?:\.\d+){0,2}-/.test(version);
|
||||||
|
const tag = vorab ? `0.0.0-${version}` : version;
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
if (process.env.AEROMC_GLEICHE_VERSION === '1') return;
|
if (process.env.AEROMC_GLEICHE_VERSION !== '1') {
|
||||||
let releases;
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch(API, { headers: { 'User-Agent': 'AeroMC-Release', Accept: 'application/json' } });
|
const res = await fetch(API, { headers: { 'User-Agent': 'AeroMC-Release', Accept: 'application/json' } });
|
||||||
if (!res.ok) throw new Error('HTTP ' + res.status);
|
if (!res.ok) throw new Error('HTTP ' + res.status);
|
||||||
releases = await res.json();
|
const norm = (v) => String(v || '').trim().replace(/^v/i, '').replace(/^0\.0\.0-(?=\d)/, '');
|
||||||
} catch (err) {
|
const treffer = (await res.json() || []).find((r) => !r.draft && norm(r.tag_name) === version);
|
||||||
console.warn(`\n! Gitea nicht erreichbar (${err.message}) – Versionsprüfung übersprungen.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const norm = (v) => String(v || '').trim().replace(/^v/i, '');
|
|
||||||
const treffer = (releases || []).find((r) => !r.draft && norm(r.tag_name) === version);
|
|
||||||
if (treffer) {
|
if (treffer) {
|
||||||
console.error(`\n✖ Version ${version} ist bereits in Gitea veröffentlicht (${treffer.published_at}).`);
|
console.error(`\n✖ Version ${version} ist bereits in Gitea veröffentlicht (Tag ${treffer.tag_name}, ${treffer.published_at}).`);
|
||||||
console.error(' Bitte zuerst die Versionsnummer in package.json erhöhen – sonst passen die');
|
console.error(' Bitte zuerst die Versionsnummer in package.json erhöhen – sonst passen die');
|
||||||
console.error(' veröffentlichten Dateien nicht mehr zur Signatur.');
|
console.error(' veröffentlichten Dateien nicht mehr zur Signatur.');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(`\n! Gitea nicht erreichbar (${err.message}) – Versionsprüfung übersprungen.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
console.log(`» Version ${version} ist noch nicht veröffentlicht – Build läuft.`);
|
console.log(`» Version ${version} ist noch nicht veröffentlicht – Build läuft.`);
|
||||||
|
if (vorab) {
|
||||||
|
console.log(` VORABFASSUNG – in Gitea so veröffentlichen: Tag ${tag} und Haken bei "Als Pre-Release kennzeichnen".`);
|
||||||
|
console.log(' Niemals mit dem Tag der reinen Versionsnummer: Ältere Launcher würden die Beta sonst an alle verteilen.');
|
||||||
|
} else {
|
||||||
|
console.log(` In Gitea veröffentlichen mit dem Tag ${tag} (ohne Pre-Release-Haken).`);
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
+24
-3
@@ -64,6 +64,27 @@ function ladeZugang() {
|
|||||||
return { seite: z.seite, benutzer: z.benutzer, passwort: entschluesseln(z.passwort) };
|
return { seite: z.seite, benutzer: z.benutzer, passwort: entschluesseln(z.passwort) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Anfrage MIT Zugangsdaten an die WordPress-Seite.
|
||||||
|
* Weiterleitungen werden nie verfolgt: Sonst gingen die Kopfzeilen – vor allem
|
||||||
|
* der eigene X-AeroMC-Auth, den fetch bei einem Wechsel der Domain nicht von
|
||||||
|
* selbst entfernt – samt Anwendungspasswort an das Ziel der Weiterleitung.
|
||||||
|
* Gesendet wird außerdem nur über HTTPS und nur an die hinterlegte Seite.
|
||||||
|
*/
|
||||||
|
async function wordpressAnfrage(zugang, pfad, optionen) {
|
||||||
|
let ziel;
|
||||||
|
try { ziel = new URL(zugang.seite + pfad); } catch { throw new Error('Die hinterlegte WordPress-Adresse ist ungültig.'); }
|
||||||
|
if (ziel.protocol !== 'https:') throw new Error('Zugangsdaten werden nur über HTTPS gesendet – WordPress-Adresse prüfen.');
|
||||||
|
const res = await fetch(ziel, Object.assign({}, optionen, { headers: kopfzeilen(zugang), redirect: 'manual' }));
|
||||||
|
if (res.status >= 300 && res.status < 400) {
|
||||||
|
const wohin = res.headers.get('location') || 'unbekannt';
|
||||||
|
throw new Error(`Die Seite leitet weiter (HTTP ${res.status} → ${wohin}). Die Zugangsdaten wurden NICHT dorthin gesendet.
|
||||||
|
`
|
||||||
|
+ ' Bitte die genaue Adresse eintragen: node scripts/sign-release.js wordpress');
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
function kopfzeilen(zugang) {
|
function kopfzeilen(zugang) {
|
||||||
const daten = Buffer.from(`${zugang.benutzer}:${zugang.passwort}`).toString('base64');
|
const daten = Buffer.from(`${zugang.benutzer}:${zugang.passwort}`).toString('base64');
|
||||||
return {
|
return {
|
||||||
@@ -101,7 +122,7 @@ function zugangsFehler(d, benutzer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function pruefeZugang(zugang) {
|
async function pruefeZugang(zugang) {
|
||||||
const res = await fetch(`${zugang.seite}/wp-json/aeromc/v1/update-signatur/zugang`, { headers: kopfzeilen(zugang) });
|
const res = await wordpressAnfrage(zugang, '/wp-json/aeromc/v1/update-signatur/zugang', {});
|
||||||
if (res.status === 404) throw new Error('Die Seite kennt die Signatur-Schnittstelle nicht – ist das Plugin "AeroMC Freunde" (ab 1.5.4) installiert und aktiviert?');
|
if (res.status === 404) throw new Error('Die Seite kennt die Signatur-Schnittstelle nicht – ist das Plugin "AeroMC Freunde" (ab 1.5.4) installiert und aktiviert?');
|
||||||
let d = null;
|
let d = null;
|
||||||
try { d = await res.json(); } catch { /* keine JSON-Antwort */ }
|
try { d = await res.json(); } catch { /* keine JSON-Antwort */ }
|
||||||
@@ -189,8 +210,8 @@ async function hochladen(sig) {
|
|||||||
console.log('» Signatur liegt bereits unverändert auf WordPress.');
|
console.log('» Signatur liegt bereits unverändert auf WordPress.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const res = await fetch(`${zugang.seite}/wp-json/aeromc/v1/update-signatur`, {
|
const res = await wordpressAnfrage(zugang, '/wp-json/aeromc/v1/update-signatur', {
|
||||||
method: 'POST', headers: kopfzeilen(zugang), body: JSON.stringify(sig),
|
method: 'POST', body: JSON.stringify(sig),
|
||||||
});
|
});
|
||||||
let antwort = {};
|
let antwort = {};
|
||||||
try { antwort = await res.json(); } catch { /* leer */ }
|
try { antwort = await res.json(); } catch { /* leer */ }
|
||||||
|
|||||||
Reference in New Issue
Block a user