From fdc95d3678666da7e9a31345f774ee3964fd5479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tina=20M=C3=BCller?= Date: Tue, 19 Jan 2021 11:39:56 +0100 Subject: [PATCH] flatpak: Allow to specify #!BuildVersion The downloadable files need to have versions, but flatpak manifests don't have version fields. --- Build/Flatpak.pm | 32 ++++++++++++++++++++++++++++++-- build-recipe-flatpak | 3 +++ call-flatpak-builder | 4 ++-- t/data/flatpak.json | 1 + t/data/flatpak.yaml | 1 + t/flatpak.t | 7 ++++++- 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/Build/Flatpak.pm b/Build/Flatpak.pm index 0b3957d18..ceb05a1a0 100644 --- a/Build/Flatpak.pm +++ b/Build/Flatpak.pm @@ -62,7 +62,30 @@ sub _load_yaml_file { sub parse { my ($cf, $fn) = @_; + my $version = ''; my $data; + my @lines; + if (ref($fn) eq 'SCALAR') { + @lines = split m/(?<=\n)/, $$fn; + } + else { + open my $fh, '<', $fn or return { error => "Failed to open file '$fn'" }; + @lines = <$fh>; + close $fh; + } + + for my $line (@lines) { + if ($line =~ m/^#!BuildVersion: (\S+)/) { + my $string = $1; + if ($string =~ m/^[0-9.]+$/) { + $version = $string; + } + else { + return { error => "Invalid BuildVersion" }; + } + } + } + if ($fn =~ m/\.ya?ml\z/) { $data = _load_yaml_file($fn); return { error => "Failed to parse YAML file '$fn'" } unless defined $data; @@ -84,8 +107,8 @@ sub parse { } my $ret = {}; + $ret->{version} = $version if $version; $ret->{name} = $data->{'app-id'} or die "Flatpak file is missing 'app-id'"; - $ret->{version} = $data->{version} || "0"; my $runtime = $data->{runtime}; my $runtime_version = $data->{'runtime-version'}; my $sdk = $data->{sdk}; @@ -122,7 +145,12 @@ sub show { my $d = parse($cf, $fn); die "$d->{error}\n" if $d->{error}; my $value = $d->{ $field }; - print "$value\n"; + if (ref $value eq 'ARRAY') { + print "$_\n" for @$value; + } + else { + print "$value\n"; + } } 1; diff --git a/build-recipe-flatpak b/build-recipe-flatpak index 35c4e506e..4d287e812 100644 --- a/build-recipe-flatpak +++ b/build-recipe-flatpak @@ -82,11 +82,14 @@ recipe_build_flatpak() { local FLATPAK_FILE="$TOPDIR/SOURCES/$RECIPEFILE" local FLATPAK_APP=$(perl -I$BUILD_DIR -MBuild::Flatpak -e 'Build::Flatpak::show' -- "$BUILD_ROOT$FLATPAK_FILE" name) + local FLATPAK_APP_VERSION=$(perl -I$BUILD_DIR -MBuild::Flatpak -e 'Build::Flatpak::show' -- "$BUILD_ROOT$FLATPAK_FILE" version) + FLATPAK_APP_VERSION="${FLATPAK_APP_VERSION:-0}" local FLATPAK_REPO=/tmp/flatpakrepo local FLATPAK_REMOTE=https://dl.flathub.org/repo/flathub.flatpakrepo export FLATPAK_REPO export FLATPAK_REMOTE export FLATPAK_APP + export FLATPAK_APP_VERSION export FLATPAK_FILE export TOPDIR diff --git a/call-flatpak-builder b/call-flatpak-builder index 0e8befded..6f3fd76d5 100755 --- a/call-flatpak-builder +++ b/call-flatpak-builder @@ -49,8 +49,8 @@ test -e "$BUILD_ROOT/proc/self" || mount -n -tproc none $BUILD_ROOT/proc set -x # Build into repo -chroot "$BUILD_ROOT" bash -c "cd /usr/src/packages/FLATPAK_ROOT && flatpak-builder --force-clean --repo=$FLATPAK_REPO build-dir $FLATPAK_FILE" +chroot "$BUILD_ROOT" bash -c "cd /usr/src/packages/FLATPAK_ROOT && flatpak-builder --default-branch=$FLATPAK_APP_VERSION --force-clean --repo=$FLATPAK_REPO build-dir $FLATPAK_FILE" # Create bundle from repo -chroot "$BUILD_ROOT" bash -c "flatpak build-bundle --runtime-repo=$FLATPAK_REMOTE $FLATPAK_REPO $TOPDIR/OTHER/$FLATPAK_APP.flatpak $FLATPAK_APP" +chroot "$BUILD_ROOT" bash -c "flatpak build-bundle --runtime-repo=$FLATPAK_REMOTE $FLATPAK_REPO $TOPDIR/OTHER/$FLATPAK_APP-$FLATPAK_APP_VERSION.flatpak $FLATPAK_APP $FLATPAK_APP_VERSION" diff --git a/t/data/flatpak.json b/t/data/flatpak.json index 919aae60d..d26e014b9 100644 --- a/t/data/flatpak.json +++ b/t/data/flatpak.json @@ -1,3 +1,4 @@ +#!BuildVersion: 3.36.2 { "app-id": "org.gnome.Chess", "runtime": "org.gnome.Platform", diff --git a/t/data/flatpak.yaml b/t/data/flatpak.yaml index 477663c75..5484bd53a 100644 --- a/t/data/flatpak.yaml +++ b/t/data/flatpak.yaml @@ -1,3 +1,4 @@ +#!BuildVersion: 3.36.2 --- app-id: org.gnome.Chess runtime: org.gnome.Platform diff --git a/t/flatpak.t b/t/flatpak.t index b7b6edc08..72cccb2c6 100644 --- a/t/flatpak.t +++ b/t/flatpak.t @@ -22,7 +22,7 @@ sub capture_stdout { subtest parse => sub { my $expected = { name => 'org.gnome.Chess', - version => 0, + version => '3.36.2', sources => [ "phalanx-XXV-source.tgz", "stockfish-10-src.zip", @@ -49,11 +49,16 @@ subtest show => sub { local @ARGV = ("$path/flatpak.yaml", 'name'); my $data = capture_stdout(sub { Build::Flatpak::show() }); is $data, "org.gnome.Chess\n", 'Build::Flatpak::show name'; + + @ARGV = ("$path/flatpak.yaml", 'sources'); + $data = capture_stdout(sub { Build::Flatpak::show() }); + is $data, "phalanx-XXV-source.tgz\nstockfish-10-src.zip\ngnuchess-6.2.5.tar.gz\ngnome-chess-3.36.1.tar.xz\n", 'Build::Flatpak::show sources'; }; done_testing; __DATA__ +#!BuildVersion: 3.36.2 { "app-id": "org.gnome.Chess", "runtime": "org.gnome.Platform",