apple listing: asking for the version that is in review says it is locked (it said "already exists; a new version needs a higher number"); play images: a listing language missing from languages[] is skipped with the fix instead of stopping the run (play listing pushes its text). Both found by the live dry-run sweep; tests

This commit is contained in:
CRTkafa 2026-10-14 08:43:59 +08:00
parent 9d6f741092
commit b29f1c407c
4 changed files with 28 additions and 1 deletions

View file

@ -75,6 +75,10 @@ export function planVersion(rows: { id: string; attributes: Record<string, unkno
const base = { existing, first, changes: [] as FieldDiff[], attributes: {} as Record<string, string> };
const refuse = (reason: string): VersionPlan => ({ ...base, action: 'refuse', reason });
const taken = others.find(v => v.versionString === want);
// the version asked for is in review / pending release: it exists and is locked; "needs a higher number" would send
// the owner off to make a second version while the first is still in review
if (taken && IN_PROGRESS.has(taken.state))
return refuse(`version ${want} is ${taken.state}: App Store Connect locks its texts and build while it is in review or pending release (remove it from review in App Store Connect to change it, or wait for the release and then make the next version)`);
if (taken) return refuse(`version ${want} already exists (${taken.state}); a new version needs a higher number`);
const higher = others.filter(v => compareVersions(v.versionString, want) >= 0).sort((a, b) => compareVersions(b.versionString, a.versionString))[0];
if (higher && (!editable || editable.versionString !== want))

View file

@ -141,7 +141,9 @@ export async function run(ctx: Ctx): Promise<void> {
const errors: string[] = [];
for (const code of codes) {
const l = langOf.get(code);
if (!l) throw new Error(`${code}: no entry in languages[] has this Play code`);
// the listing file has a section for a language the config does not list (play listing still pushes its text):
// there is no renders folder for it, so its images are skipped with the fix, not the whole run stopped
if (!l) { skipped.push(`skipped ${code}: in the listing file but no entry in languages[] has play: '${code}' (add it to upload its images)`); continue; }
const li = langImages(code, join(src, l.id), icon, tablets);
errors.push(...li.errors);
sets.set(code, li);