Publier un jeu Godot sur Flathub

Cet article vous montre comment publier un jeu Godot sur Flathub, je n'aborde pas ici d'autre moteur de jeu, mais ce tuto peut vous aider à comprendre la mécanique utilisée.

Créer un compte github

Vous allez avoir besoin d'un compte github dans cet article, si ce n'est pas déjà fait, je vous invite à en créer un sur https://github.com

J'y ferais réference dans cet article avec le nom "votre_identifiant_github"

Créer un projet pour votre jeu

Sur github, créez un projet pour votre jeu, vous y stoquerez la version compilé de celui-ci pour linux

Une fois ce dépot créé, nous l'appelrons ici github.com/votre_identifiant_github/votre_jeu

Sur votre ordinateur

mkdir github
cd github
git clone github.com/votre_identifiant_github/votre_jeu.git
cd votre_jeu

nous allons ici créer l'arborescence suivante, histoire d'organiser le tout proprement

mkdir -p export/linux/flatpak
mkdir -p export/linux/screenshots

Exporter votre jeu vers Linux

Dans Godot, export

  • Linux / X11

et définissez comme destination le répertoire export/linux que l'on vient de créer

Vous pouvez en profitez pour faire quelques screenshots et les déposer dans export/linux/screenshots

Finissons le setup sur notre dépot Github

Nous revenons sur notre dépot github du jeu

Vous avez donc dans export/linux 2 fichiers: votre_jeu.x86_64 et votre_jeu.pck

Il nous faut créer 3 autres fichiers:

cd votre_jeu
touch export/linux/flatpack/512x512.png
touch export/linux/flatpack/com.domain.votre_jeu.desktop
touch export/linux/flatpack/com.domain.votre_jeu.appdata.xml

Pour l'image 512x512, je vous laisse utiliser vos outils préféré (Gimp,Krita,Inkscape...) pour faire l'icone le plus sympa

Contenu de votre_jeu.desktop

[Desktop Entry]
Name=Votre jeu
Exec=votre_jeu.x86_64
Type=Application
Icon=com.domain.votre_jeu
Categories=Game

Contenu de votre_jeu.appdata.xml

<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
  <id>com.domain.votre_jeu</id>
  <metadata_license>CC0-1.0</metadata_license>
  <project_license>Votre_licence</project_license>
  <name>Votre jeu</name>
  <summary>Résume court de votre jeu</summary>
  <description>
    <p>
  Description de votre jeu
    </p>
  </description>

   <screenshots>
    <screenshot type="default">
      <image>https://raw.githubusercontent.com/votre_identifiant_github/votre_jeu/identifiant_commit/export/linux/screenshots/le_nom_de_votre_screenshot.png</image>
    </screenshot>

<url type="homepage">https://votre.site.web</url>
  <url type="vcs-browser">https://github.com/votre_identifiant_github/votre_jeu/</url>
  <update_contact>votre@email.com</update_contact>
  <content_rating type="oars-1.1"/>
  <releases>

    <release date="2023-10-03" version="1.0"/>
  </releases>

</component>

Faites un commit + push, récupéré le commit id pour venir le remplacer dans l'url des screenshots

Faites un second commit + push, et cette fois copier le commit ID, nous allons en avoir besoin

nous l'appelerons identifiant_du_dernier_commit

Forker le dépot flathub

Sur votre ordinateur,

mkdir github
cd github
git clone --branch=new-pr git@github.com:votre_identifiant_github/flathub.git

Vous avez forké le dépot flathub sur votre compte github, allez dedans pour créer une branche pour votre jeu

cd flathub
git checkout -b identifiant_de_votre_jeu

Par convention, on nomme les jeux avec un id qui ressemble à un nom de domaine inversé, par exemple j'ai ici un nom de domaine dupot.org et je nomme mes jeux: org.dupot.mon_jeu

Si vous n'avez pas de nom de domaine, vous pouvez utiliser celui de github com.github.votre_identifiant_github.votre_jeu

Donc ici il faut faire une création de branche de ce nom complet

cd flathub
git checkout -b com.github.votre_identifiant_github.votre_jeu

j'utiliserais pour y faire réference dans cet article com.domain.votre_jeu

Créer la fiche d'identité Flathub

Vous allez créer ici 2 fichiers flathub.json et com.domain.votre_jeu.yml

touch flathub.json
touch com.domain.votre_jeu.yml

Contenu de flathub.json

{
  "only-arches": ["x86_64"]
}

Contenu de com.domain.votre_jeu.yml

id: com.domain.votre_jeu.yml
runtime: org.freedesktop.Platform
runtime-version: "23.08"
sdk: org.freedesktop.Sdk
command: votre_jeu
finish-args:
  - --share=ipc
  - --socket=pulseaudio
  - --socket=x11
  - --device=dri
  - --persist=.local/share/godot/app_userdata/votre_jeu

modules:
  - name: VotreJeu
    buildsystem: simple
    sources:
      - type: git
        url: https://github.com/votre_identifiant_github/votre_jeu/
        commit: identifiant_du_dernier_commit

    build-commands:
      - install -Dm755 export/linux/votre_jeu.x86_64 $FLATPAK_DEST/bin/votre_jeu.x86_64
      - install -Dm555 export/linux/votre_jeu.pck $FLATPAK_DEST/bin/votre_jeu.pck
      - install -Dm644 export/linux/flatpack/512x512.png $FLATPAK_DEST/share/icons/hicolor/512x512/apps/com.domain.votre_jeu.png
      - install -Dm644 export/linux/flatpack/com.domain.votre_jeu.desktop $FLATPAK_DEST/share/applications/com.domain.votre_jeu.desktop
      - install -Dm644 export/linux/flatpack/com.domain.votre_jeu.appdata.xml $FLATPAK_DEST/share/metainfo/com.domain.votre_jeu.appdata.xml      

Ici on indiquer que l'on va récuperer notre jeu sur notre dépot github au dernier commit ID

Une fois la récupération de nos sources faite, on va installer le fichier présent sur notre github

  • le fichier du jeu .x86_64 et .pck dans l'espace où sont stoqués les binaries flathub
  • l'icone du jeu en 512x512
  • le fichier desktop, qui est l'identité de notre jeu, une fois installé chez l'utilisateur (dans quel menu..)
  • le fichier appdata qui stoque d'autres informations come le changelog, les screenshots..

Vous pouvez commit, push (sur votre branch com.github.votre_identifiant_github.votre_jeu )

Ensuite, rendez vous sur https://github.com/flathub/flathub/branches

et faites un pull request de votre branche de jeu vers "new-pr"

S'ensuite une phase de validation de votre envoi, avec souvent un chat avec les mainteneurs du projet

Une fois que tout est validé, flathub devrait créer une branche de votre jeu sur son dépôt

Conclusion

Comme vous avez pu le voir, c'est ici très simple de packager votre jeu sur Flathub

C'est impressionnant de voir la mécanique totalement automatisé de gestion de nouveaux paquets, les builds...