Bug 2998

Summary: [RFE] Automatically generate appdata and include it in a package to be shipped in the repository
Product: Infrastructure Reporter: Ankur Sinha "FranciscoD" <sanjay.ankur>
Component: Build SystemAssignee: Nicolas Chauvet <kwizart>
Status: ASSIGNED ---    
Severity: enhancement CC: elad, fierce.brake, leamas.alec, lxtnow, matthias, mike, xsaipc0d
Priority: P5    
Version: NA   
Hardware: All   
OS: GNU/Linux   
namespace:
Bug Depends on: 3023, 3657, 3658    
Bug Blocks:    
Attachments: script to run on packages
Python file that downloads cache

Description Ankur Sinha "FranciscoD" 2013-10-23 05:20:06 CEST
Hi,

As per the discussion on the devel list:

It'll be nice to be able to automatically generate appdata on the builder itself and ship this out as either a separate package or as part of the release rpm so rpmfusion packages can also be listed in gnome-software.

For F20, I can maintain a package for this and update it as required. 

For example:
http://ankursinha.in/rpmfusion-gnome-software/

I heard we're thinking of moving to koji in the future. It might be good to see how Fedora goes about generating appdata from it's packages and implementing a similar methodology. 

Thanks,
Ankur
Comment 1 Nicolas Chauvet 2014-07-31 16:53:20 CEST
How is this is implemented in fedora ? (ansible infrastructure module) ?

Is there any RPM fusion packages known to implement appdata ?
Comment 2 Michael Cronenworth 2014-07-31 17:32:06 CEST
Fedora requires packages to ship an AppData file. You can find the file specification here:
http://people.freedesktop.org/~hughsient/appdata/

I suggest we create a list of all packages with a .desktop file and e-mail the package maintainers to request they add an AppData file. You could additionally open bugs against these packages and make this a tracker bug.
Comment 3 leigh scott 2014-08-01 12:24:50 CEST
(In reply to comment #2)
> Fedora requires packages to ship an AppData file. 

Does it?, can you provide the link to the guideline for this.
Comment 4 Ankur Sinha "FranciscoD" 2014-08-01 13:10:48 CEST
(In reply to comment #3)
> (In reply to comment #2)
> > Fedora requires packages to ship an AppData file. 
> 
> Does it?, can you provide the link to the guideline for this.

It isn't so much a guideline yet. It's a request from Richard, the gnome-software upstream. 

This is the draft:
https://fedoraproject.org/wiki/User:Rhughes/DraftAppDataGuidelines

This is his blog post explaining it:
http://people.freedesktop.org/~hughsient/appdata/

This is the fpc ticket which is approved:
https://fedorahosted.org/fpc/ticket/414

This is upstream's repository:
https://github.com/hughsie/fedora-appstream

At the moment, applications in Fedora that do not ship appdata have files upstream. For example, the file for vlc is submitted here at the moment. 

Richard takes all the appdata files from the Fedora repositories and the ones upstream and processes them to generate metadata. He's explained the complete process here:
http://blogs.gnome.org/hughsie/2013/10/16/how-to-generate-appstream-metadata-for-fedora/

I hope this helps clear up some queries.
Thanks,
Warm regards,
Ankur
Comment 5 Ankur Sinha "FranciscoD" 2014-08-06 10:37:40 CEST
(In reply to comment #2)
> Fedora requires packages to ship an AppData file. You can find the file
> specification here:
> http://people.freedesktop.org/~hughsient/appdata/
> 
> I suggest we create a list of all packages with a .desktop file and e-mail the
> package maintainers to request they add an AppData file. You could additionally
> open bugs against these packages and make this a tracker bug.

A list of packages in rpmfusion with desktop files shouldn't be too tough. I can do the bug filing if you folks think this is the best way to go. 

Note that: we'll have to confirm with Richard if he can generate the appdata for RPMFusion packages also or if it'll have to be done here elsewhere because of licensing concerns.
Comment 6 Ankur Sinha "FranciscoD" 2014-08-06 17:18:56 CEST
This is the list that I got. Of course, some may not require appdata files from this:

[asinha@ankur-laptop  ~]$ sudo repoquery --disablerepo=* --enablerepo=rpmfusion-nonfree --enablerepo=rpmfusion-free -f '/usr/share/applications/*.desktop' --qf "%-40{repoid} %{name}" | sort

rpmfusion-free                           acoustid-fingerprinter
rpmfusion-free                           amule
rpmfusion-free                           arcem
rpmfusion-free                           audacity-freeworld
rpmfusion-free                           avidemux-gtk
rpmfusion-free                           avidemux-qt
rpmfusion-free                           BasiliskII
rpmfusion-free                           bino
rpmfusion-free                           bombono-dvd
rpmfusion-free                           bsnes
rpmfusion-free                           bubbros
rpmfusion-free                           cairo-dock-core
rpmfusion-free                           desmume
rpmfusion-free                           desmume-glade
rpmfusion-free                           devede
rpmfusion-free                           dvbcut
rpmfusion-free                           dvd95
rpmfusion-free                           DVDAuthorWizard
rpmfusion-free                           dvdrip
rpmfusion-free                           DVDRipOMatic
rpmfusion-free                           dvdstyler
rpmfusion-free                           fakenes
rpmfusion-free                           fceux
rpmfusion-free                           freeguide
rpmfusion-free                           gambatte-qt
rpmfusion-free                           gltron
rpmfusion-free                           gmediafinder
rpmfusion-free                           gnome-mplayer
rpmfusion-free                           gtetrinet
rpmfusion-free                           guvcview
rpmfusion-free                           gxine
rpmfusion-free                           imagination
rpmfusion-free                           k9copy
rpmfusion-free                           kaffeine
rpmfusion-free                           kdenlive
rpmfusion-free                           kmediafactory
rpmfusion-free                           kplayer
rpmfusion-free                           lightspark
rpmfusion-free                           ltris
rpmfusion-free                           lxdream
rpmfusion-free                           megamario
rpmfusion-free                           minitube
rpmfusion-free                           mixxx
rpmfusion-free                           mplayer-gui
rpmfusion-free                           mpv
rpmfusion-free                           mythtv-frontend
rpmfusion-free                           mythtv-setup
rpmfusion-free                           Nestopia
rpmfusion-free                           ogmrip
rpmfusion-free                           openmw
rpmfusion-free                           openshot
rpmfusion-free                           osmose
rpmfusion-free                           oxine
rpmfusion-free                           pangzero
rpmfusion-free                           pcsxr
rpmfusion-free                           ProjectX
rpmfusion-free                           SheepShaver
rpmfusion-free                           smc
rpmfusion-free                           smplayer
rpmfusion-free                           sonic-visualiser-freeworld
rpmfusion-free                           stella
rpmfusion-free                           terminatorX
rpmfusion-free                           traverso
rpmfusion-free                           vagalume
rpmfusion-free                           vbam-gtk
rpmfusion-free                           VirtualBox
rpmfusion-free                           vlc
rpmfusion-free                           wormsofprey
rpmfusion-free                           xbill
rpmfusion-free                           xbmc
rpmfusion-free                           xine-ui
rpmfusion-free                           xmris
rpmfusion-free                           xmris-editor
rpmfusion-free                           xroar
rpmfusion-free                           xvid4conf
rpmfusion-free                           yabause
rpmfusion-free                           zsnes
rpmfusion-nonfree                        abuse
rpmfusion-nonfree                        assaultcube
rpmfusion-nonfree                        caja-dropbox
rpmfusion-nonfree                        d1x
rpmfusion-nonfree                        dolphin-emu
rpmfusion-nonfree                        doom-shareware
rpmfusion-nonfree                        e-uae
rpmfusion-nonfree                        freecad
rpmfusion-nonfree                        Frodo
rpmfusion-nonfree                        frogatto
rpmfusion-nonfree                        fuse-emulator-roms
rpmfusion-nonfree                        gens
rpmfusion-nonfree                        gmameui
rpmfusion-nonfree                        gnome-video-arcade
rpmfusion-nonfree                        gsview
rpmfusion-nonfree                        lpf-skype
rpmfusion-nonfree                        lpf-spotify-client
rpmfusion-nonfree                        mari0
rpmfusion-nonfree                        meka
rpmfusion-nonfree                        Mosaic
rpmfusion-nonfree                        OCE-draw
rpmfusion-nonfree                        pcsx2
rpmfusion-nonfree                        pgadmin3
rpmfusion-nonfree                        plus4emu
rpmfusion-nonfree                        pushover
rpmfusion-nonfree                        pyskool
rpmfusion-nonfree                        qchdman
rpmfusion-nonfree                        qmc2-sdlmame
rpmfusion-nonfree                        qmc2-sdlmess
rpmfusion-nonfree                        realcrypt
rpmfusion-nonfree                        roadfighter
rpmfusion-nonfree                        snes9x
rpmfusion-nonfree                        steam
rpmfusion-nonfree                        ufoai
rpmfusion-nonfree                        ufoai-server
rpmfusion-nonfree                        ufoai-uforadiant
rpmfusion-nonfree                        vice
rpmfusion-nonfree                        wolf4sdl-registered-apogee
rpmfusion-nonfree                        wolf4sdl-registered-id
rpmfusion-nonfree                        wolf4sdl-shareware
rpmfusion-nonfree                        wolf4sdl-spear
rpmfusion-nonfree                        wolf4sdl-spear-demo
rpmfusion-nonfree                        xcpc
rpmfusion-nonfree                        xorg-x11-drv-nvidia
rpmfusion-nonfree                        xorg-x11-drv-nvidia-173xx
rpmfusion-nonfree                        xorg-x11-drv-nvidia-304xx
rpmfusion-nonfree                        xrick
rpmfusion-nonfree                        xv
rpmfusion-nonfree                        yapeSDL

Should I send this list to the devel ML and request all maintainers to add appdata files as a first pass? We could then start filing bugs on packages that still don't have appdata files after a week or so?
Comment 7 Elad Alfassa 2014-08-11 17:14:14 CEST
Hi,

Any progress on this? I'm interested in helping too.

Getting this in time for Fedora 21 will vastly improve the RPM Fusion user experience.
Comment 8 Michael Cronenworth 2014-08-12 01:28:21 CEST
(In reply to comment #6)
> Should I send this list to the devel ML and request all maintainers to add
> appdata files as a first pass? We could then start filing bugs on packages that
> still don't have appdata files after a week or so?

Ideally the maintainers need to get upstream to create an AppData file and then we can ship it from the upstream tarball. I have started the RFE process with XBMC (Kodi) today.

I'm not sure how many maintainers are subscribed to the ML but feel free to send an e-mail out. Then we can approach the bug reports if no one is responding to the ML.
Comment 9 Elad Alfassa 2014-08-12 09:58:01 CEST
One thing worth mentioning is that you don't need to wait for packages to ship appdata: you can generate the metadata without any package shipping an appdata file. You won't have long descriptions or screenshots, but the apps will be shown in Software. Adding the appdata files should be the second step.
Comment 10 Ankur Sinha "FranciscoD" 2014-08-14 06:22:56 CEST
I went ahead and tried it out. I'll attach the scripts used. The actual metadata generation didn't take much time. Downloading the required packages did, but if the process is run on rpmfusion infra, this step won't be required:

[asinha@ankur-laptop  01_rpmfusion_appdata]$ ./rpmfusion.sh
Scanning packages...
Processing packages...
Merging applications...          Starting
Writing /home/asinha/dump/01_rpmfusion_appdata/contrib/metadata/rpmfusion-20.xml.gz...
Writing /home/asinha/dump/01_rpmfusion_appdata/contrib/metadata/rpmfusion-20-failed.xml.gz...
Writing /home/asinha/dump/01_rpmfusion_appdata/contrib/metadata/rpmfusion-20-icons.tar.gz...
WARNING: livna-amule.desktop and livna-alc.desktop share the package 'amule'
WARNING: livna-amulegui.desktop and livna-alc.desktop share the package 'amule'
WARNING: livna-wxcas.desktop and livna-alc.desktop share the package 'amule'
WARNING: skool_daze.desktop and back_to_skool.desktop share the package 'pyskool'
WARNING: assaultcube_server.desktop and assaultcube.desktop share the package 'assaultcube'
WARNING: assaultcube_server_lan.desktop and assaultcube.desktop share the package 'assaultcube'
WARNING: openmw.desktop and opencs.desktop share the package 'openmw'
WARNING: smtube.desktop and rpmfusion-smplayer.desktop share the package 'smplayer'
WARNING: k9copy_assistant.desktop and k9copy.desktop share the package 'k9copy'
WARNING: cairo-dock.desktop and cairo-dock-cairo.desktop share the package 'cairo-dock-core'
Done!

real    1m35.826s
user    3m42.963s
sys     0m25.560s

[asinha@ankur-laptop  contrib]$ du -hsc packages/
1.7G    packages/
1.7G    total
[asinha@ankur-laptop  contrib]$

The metadata is quite small at the moment:
[asinha@ankur-laptop  contrib]$ du -hsc metadata/
376K    metadata/
376K    total


[asinha@ankur-laptop  01_rpmfusion_appdata]$ pwd
/home/asinha/dump/01_rpmfusion_appdata
[asinha@ankur-laptop  01_rpmfusion_appdata]$ tree -d
.
├── cache
├── contrib
│   ├── cache
│   ├── logs
│   │   └── fedora-20
│   ├── metadata
│   ├── packages
│   └── screenshots
│       ├── 112x63
│       ├── 624x351
│       ├── 752x423
│       └── source
└── tmp
    └── fedora-20
        └── icons

15 directories


Of course, there aren't any screenshots in there, and no actual appdata files. This info has only been extracted from desktop files.
Comment 11 Ankur Sinha "FranciscoD" 2014-08-14 06:26:02 CEST
Created attachment 1322 [details]
script to run on packages

I've created a git repo here for extra appdata files: https://github.com/sanjayankur31/rpmfusion-appdata

Until maintainers add appdata files to their packages and send them upstream, we can maintain them externally here - it's what Richard is doing for Fedora.
Comment 12 Ankur Sinha "FranciscoD" 2014-08-14 06:27:28 CEST
Created attachment 1323 [details]
Python file that downloads cache

This probably won't be needed if the metadata generation is run on rpmfusion infra where all the packages are already available. Attaching it, nevertheless. It's almost the same as the helper script Richard uses: https://github.com/hughsie/appstream-glib/tree/master/contrib I've just disabled the rawhide part in the script.
Comment 13 Ankur Sinha "FranciscoD" 2014-08-14 06:49:13 CEST
I've placed the generated metadata files here if anyone wants to have a look:

https://ankursinha.fedorapeople.org/rpmfusion-appdata-metadata/

I created an rpm too. The spec/srpm/rpms are here:

https://ankursinha.fedorapeople.org/rpmfusion-appdata-metadata/rpms/rpmfusion-appstream-data-20.spec

https://ankursinha.fedorapeople.org/rpmfusion-appdata-metadata/rpms/rpmfusion-appstream-data-20-1-1.fc20.noarch.rpm

https://ankursinha.fedorapeople.org/rpmfusion-appdata-metadata/rpms/rpmfusion-appstream-data-20-1-1.fc20.src.rpm

It works as expected. For example, here's a gnome-software screenshot showing kdenlive:

https://ankursinha.fedorapeople.org/rpmfusion-appdata-metadata/rpms/kdenlive-rpmfusion-gnome-software.png

The rpm is quite small at the moment:
[asinha@ankur-laptop  noarch]$ du -hc rpmfusion-appstream-data-20-1-1.fc20.noarch.rpm
332K    rpmfusion-appstream-data-20-1-1.fc20.noarch.rpm


Similar to what Elad had suggested on the mailing list, we could have a metapackage: "rpmfusion-workstation" that pulls in the repo configs and this appdata file. That way, folks that don't want to have the appdata rpm aren't forced to use it - folks not using gnome-software, or using DEs other than gnome3.
Comment 14 Nicolas Chauvet 2014-08-16 14:59:01 CEST
I see lot of scripts but I fail to see appstream-builder from rpmfusion.sh in a package ? Is it unpackaged still ?
Also you seems to mix information about contributors to add support for appdata and for the infrastructure for the appdata to be provided in the repository.
(I would only focus on providing the appdata within the repository, not as packages).
Comment 15 Nicolas Chauvet 2014-08-16 15:08:15 CEST
Out of curiosity, would it be possible to extend the appdata specification to allow to provide 3rd repository information ? (such as the url of adobe-release.rpm or google-chrome.repo and gpg files ) ? That way it will be possible to provide the related package as soon as users add the related rpmfusion-free/nonfree-release.
Comment 16 Ankur Sinha "FranciscoD" 2014-08-17 05:51:24 CEST
(In reply to comment #14)
> I see lot of scripts but I fail to see appstream-builder from rpmfusion.sh in a
> package ? Is it unpackaged still ?

Hrm, no. I have it here:
[asinha@ankur-laptop  ~]$ rpm -qf /usr/bin/appstream-builder
libappstream-glib-builder-0.2.4-1.fc20.x86_64

It isn't in F20 stable, though. It's available in the Gnome 3.14 copr that the workstation sig hosts.

> Also you seems to mix information about contributors to add support for appdata
> and for the infrastructure for the appdata to be provided in the repository.
> (I would only focus on providing the appdata within the repository, not as
> packages).

Sorry - I'm not really sure what you're saying here. Are you referring to the github repo that I've set up? That's completely optional. At the moment, just building metadata from whatever we have in the packages is enough. Maintainers can improve this be including appdata files in their packages. 

The github repo is just another way of providing appdata for packages that is missing it. It isn't a must to use it at all.
Comment 17 Ankur Sinha "FranciscoD" 2014-08-17 06:00:47 CEST
(In reply to comment #15)
> Out of curiosity, would it be possible to extend the appdata specification to
> allow to provide 3rd repository information ? (such as the url of
> adobe-release.rpm or google-chrome.repo and gpg files ) ? That way it will be
> possible to provide the related package as soon as users add the related
> rpmfusion-free/nonfree-release.

I'm not sure. I'll have to ask Richard to get details on this. I remember there was a proposal where the workstation SIG wanted to include just repo info for third party repos to give users the ability to enable them - exactly like your question. However, there was a long discussion regarding whether this was in line with the Fedora foundation of being 100% open source and not promoting non free software in any way. The entire thread and the resulting FESCo ticket is here:

https://lists.fedoraproject.org/pipermail/board-discuss/2014-January/012275.html

https://fedorahosted.org/fesco/ticket/1201

I'll have to re-read the discussion to see if gnome-software and appstream include a way to make third party repositories available or not.

Elad, would you know the details on this off the top of your head?
Comment 18 Elad Alfassa 2014-08-17 09:35:01 CEST
I'm quite sure we don't have a way to do what you want to do with appstream. I also don't think specifying a URL to a -release rpm is the right way to go. You could build your own foo-release package in rpmfusion, after all it's just a repo configuration.

I'll discuss the details with Richard when he has time.
While it would be a fantastic thing (in terms of user experience) to add to rpmfusion, it shouldn't "block" the appdata efforts - we can always add that later.
Comment 19 Alec Leamas 2014-10-29 15:01:16 CET
I have added appdata support in the upstream packaging for lpf-spotify-make, i. e., http://github.com/leamas/spotify-make. I see no reason to push this to users which as of now doesn't get any benefit of it (?). I can build test packages if/when there is interest.
Comment 20 Ankur Sinha "FranciscoD" 2015-05-21 19:19:02 CEST
Until automation comes, I've generated the metadata and submitted two review tickets here:

https://bugzilla.rpmfusion.org/show_bug.cgi?id=3658 - nonfree
https://bugzilla.rpmfusion.org/show_bug.cgi?id=3657 - free

Cheers,
Ankur
Comment 21 Ankur Sinha "FranciscoD" 2015-05-22 16:30:25 CEST
The reviews are up and I've uploaded screenshots to my fedorapeople space for the time being. Very few apps have appdata at the moment. What is the right way to go here? Should I start filing bugreports asking maintainers to add appdata now?
Comment 22 David Valiente 2018-06-12 15:55:32 CEST
Hello!

I am getting the following when trying to install spotify using lpf. WHat should i do? i guess its related to Gtk.

Gtk-Message: 07:57:07.781: GtkDialog mapped without a transient parent. This is discouraged.
spotify-client: downloading sources
spotify-client: build failed
/usr/share/lpf/scripts/build_error.py:7: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
  from gi.repository import Gtk        # pylint:disable=no-name-in-module

(build_error:5319): Gtk-WARNING **: 07:57:09.968: Theme directory categories/24 of theme Arrongin-Suru has no size field


(build_error:5319): Gtk-WARNING **: 07:57:09.968: Theme directory mimetypes/32 of theme Arrongin-Suru has no size field

Gtk-Message: 07:57:09.979: GtkDialog mapped without a transient parent. This is discouraged.
Comment 23 Nicolas Chauvet 2018-06-12 16:02:09 CEST
(In reply to David Valiente from comment #22)
> Hello!
> 
> I am getting the following when trying to install spotify using lpf. WHat
> should i do? i guess its related to Gtk.
Please report an issue to the lpf spotify
Don't use unrelated report.
Thx