shithub: puzzles

Download patch

ref: cc2e94ab2bbbcfcbb2eee58c5878917fadb721ab
parent: 1eba6388bfed72e21a4525ef7a1c6c18d857b703
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sun Dec 11 09:08:12 EST 2022

kaios: Put version numbers in manifest files

This only happens if something edits manifest.pl to provide a version
number, but Buildscr can do that.  KaiOS manifests are documented as
requiring dotted-decimal version numbers.  In fact, the restrictions are
much stricter than that, and unacceptable version numbers can break the
KaiStore developer portal. YY.MM.DD version numbers seem to be
acceptable.

--- a/kaios/manifest.pl
+++ b/kaios/manifest.pl
@@ -9,6 +9,9 @@
     die "usage: manifest.pl <name> <displayname> <description> <objective>";
 my ($name, $displayname, $description, $objective) = @ARGV;
 
+# This can be overridden by the build script.
+my $version = "Unidentified build";
+
 # Limits from
 # https://developer.kaiostech.com/docs/getting-started/main-concepts/manifest
 length($displayname) <= 20 or die "Name too long: $displayname";
@@ -17,6 +20,18 @@
 # https://developer.kaiostech.com/docs/distribution/submission-guideline
 length($objective) <= 220 or die "Description too long: $objective";
 
+my $decvers;
+if ($version =~ /^20(\d\d)(\d\d)(\d\d)\./) {
+    # Fabricate a dotted-decimal version number as required by KaiOS.
+    # The precise requirements are unclear and violating them leads to
+    # messes in the KaiStore that can only be resolved by Developer
+    # Support.  Specifically, uploading a bad version number as the
+    # first upload of an app can make it impossible to upload a new
+    # version.  I hope that three components of two digits each will
+    # be acceptable.
+    $decvers = join('.', $1+0, $2+0, $3+0);
+}
+
 print encode_json({
     name => $displayname,
     subtitle => $description,
@@ -31,6 +46,9 @@
         url => "https://bjh21.me.uk",
     },
     default_locale => "en-GB",
+    locales => [ ],
     categories => ["games"],
+    type => "web",
     cursor => JSON::PP::false,
+    $decvers ? (version => $decvers) : (),
 })