<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Johnny Jazeix on KDE Blogs</title><link>https://blogs.kde.org/authors/jjazeix/</link><description>Recent content in Johnny Jazeix on KDE Blogs</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Fri, 14 Aug 2026 17:14:25 -0400</lastBuildDate><atom:link href="https://blogs.kde.org/authors/jjazeix/index.xml" rel="self" type="application/rss+xml"/><item><title>GSoC: differences of expectations between students and organizations</title><link>https://blogs.kde.org/2026/01/28/gsoc-differences-of-expectations-between-students-and-organizations/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><author>Johnny Jazeix</author><guid>https://blogs.kde.org/2026/01/28/gsoc-differences-of-expectations-between-students-and-organizations/</guid><description>&lt;p&gt;I've been administering KDE's participation in the &lt;a href="https://summerofcode.withgoogle.com/"&gt;Google Summer of Code&lt;/a&gt; program for the last few years (and mentoring on some).
This post is just some personal thoughts on the differences between what the KDE organization expects and what &lt;em&gt;usually&lt;/em&gt; the applicants want (I'm not in everybody heads, it's assumptions from my experience). I don't provide any solution (because I don't have any) and there is no judgment (both point of views are valid), just a personal point of view.&lt;/p&gt;
&lt;h3 id="applicants-point-of-view"&gt;Applicants point of view&lt;/h3&gt;
&lt;p&gt;GSoC is a individual competitive program which can be a huge boost to start a career.
There are usually two major reasons for the applicants to participate in GSoC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the money.&lt;/li&gt;
&lt;li&gt;the experience and the line in the CV for real life work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is, for a lot of applicants, no genuine interest in the projects (at least at the beginning, the first interaction is often &amp;quot;I want to start contributing to KDE and prepare for GSoC&amp;quot;), and they mostly want a GSoC slot. Small digression, on one of my projects, two people already asked to contribute and if we were doing GSoC, but after telling them that contributions are welcomed and we will only propose a topic if we feel enough confidence that the contributor would stay after, they told us they preferred to choose another project.&lt;/p&gt;
&lt;p&gt;Contributors consider GSoC as an end of their studies, not a project they want to contribute after: there is also a change of life to consider between university life and work life and a balance to achieve when starting the latter (which could be in a different town/country) which may be a reason for the drop of interest.&lt;/p&gt;
&lt;h3 id="organization-point-of-view"&gt;Organization point of view&lt;/h3&gt;
&lt;p&gt;GSoC is an opportunity to welcome new contributors to our community.
The organization usually expects from GSoC:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;contributors willing to contribute regularly to their projects.&lt;/li&gt;
&lt;li&gt;implementation (partial or total) of the proposed ideas.&lt;/li&gt;
&lt;li&gt;having a positive return on investment (is the time spent mentoring worth the result?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GSoC is mostly a step to have contributors learning about the projects, and contribute in the long-term. Long-term is purposely vague; what we expected for the GCompris project was the contributor would contribute at least one year and mentor for the next GSoC (so a loop was present, and applicants would also gain an experience on mentoring, while giving some relief to the other experienced mentors) but it can vary depending on the project.&lt;/p&gt;
&lt;p&gt;For the return on investment, mentors do not consider it good having spent more than three months mentoring for projects they could have done in less time they spent to mentor the contributor. Helping someone grow is always personally rewarding but we still hope this person will also show us the results of the teaching by improving our projects in the future.&lt;/p&gt;
&lt;h3 id="impacts-of-the-differences"&gt;Impacts of the differences&lt;/h3&gt;
&lt;p&gt;There is a huge difference on the expectations. What can we do to reach a common ground where everyone is happy?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Organizations cannot force anyone to contribute after the GSoC end.&lt;/li&gt;
&lt;li&gt;If money is the main motivation to stay, most organizations will not have money to hire applicants to work after (and do we want to hire someone only motivated by money? No, it's not OSS values, we love passion).&lt;/li&gt;
&lt;li&gt;Find ways to create a real interest for the organization. In KDE, we have the chance to have tons of projects with different topics (astronomy, education, digital painting, video editing, scientific plotting, games, desktop environment, system administration, internationalization, ...) where it is easy to participate to other projects from time to time and learn new things if we are curious enough.&lt;/li&gt;
&lt;li&gt;Be stricter on the entry point for organizations: explicitly say in the beginning that we expect a long-term relationship not just the equivalent of an internship. It should reduce the number of applicants and only keep the ones with a genuine interest (if applicants are honest of course).&lt;/li&gt;
&lt;li&gt;Organizations/Mentors could reduce their objectives of GSoC and consider that contributors are here to produce and spend less time on training/mentoring, expecting contributors already know the basics, but this would totally spoil the nature of the program.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another track is to find the projects where contributors stay / don't stay and understand the difference. Most of the big KDE applications don't manage to keep their contributors, while smaller ones do. Maybe as a contributor, it's because it's more difficult to take decisions, feel included/listened on large projects because they have a high maturity level/long-term contributors and a well-defined vision?
Whereas on smaller projects, there are fewer constraints from the existing environment and it feels more rewarding and motivating to contribute there?&lt;/p&gt;
&lt;p&gt;To conclude, here are the statistics for KDE retention the last years:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Year&lt;/th&gt;
 &lt;th&gt;Started&lt;/th&gt;
 &lt;th&gt;Completed&lt;/th&gt;
 &lt;th&gt;Active after 1 year&lt;/th&gt;
 &lt;th&gt;Active after 2 years&lt;/th&gt;
 &lt;th&gt;Active after 3 years&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2018&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2019&lt;/td&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;22&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2020&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2021&lt;/td&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2022&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2023&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2024&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That is, an average of 15 people sign up each year, of which&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an average of 90% finish&lt;/li&gt;
&lt;li&gt;44% continued contributing 1 year later&lt;/li&gt;
&lt;li&gt;28% continued contributing 2 years later&lt;/li&gt;
&lt;li&gt;22% continued contributing 3 years later&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We would of course love having more contributors staying at least one year but it's almost half and a quarter that stay active for a few years!&lt;/p&gt;</description></item><item><title>Restoration of docs.kde.org</title><link>https://blogs.kde.org/2026/01/18/documentation/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><author>Johnny Jazeix</author><guid>https://blogs.kde.org/2026/01/18/documentation/</guid><description>&lt;p&gt;&lt;strong&gt;Edit 25/01/2026&lt;/strong&gt;
documentation.yml is no more used, the documentation is built and published as part of the linux.yml and linux-qt6.yml pipelines. The post is updated to take this in account.&lt;/p&gt;
&lt;p&gt;For the past few years, generation of user documentation at &lt;a href="https://docs.kde.org/"&gt;docs.kde.org&lt;/a&gt; was not working. After a few months on working on the related &lt;a href="https://invent.kde.org/websites/docs-kde-org/-/issues/2"&gt;issue&lt;/a&gt;, we finally managed to make it functional again and it once again displays the documentation for almost 150 applications!&lt;/p&gt;
&lt;figure&gt;
 &lt;img class="img-fluid" alt="docs.kde.org website up-to-date" src="https://blogs.kde.org/2026/01/18/documentation/docs-kde-org.png"
 style="max-width: 100%; height: auto"
 /&gt;
&lt;/figure&gt;
&lt;h2 id="previous-issues"&gt;Previous issues&lt;/h2&gt;
&lt;p&gt;There were major issues with the previous workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The documentation generation and publication were done on a dedicated machine.&lt;/li&gt;
&lt;li&gt;It was a monolithic process: the generation of the documentation for all KDE projects was followed with the generation of the website and its publication.&lt;/li&gt;
&lt;li&gt;Since the arrival of Qt 6, it was not possible to easily update the process to take it into account, so no new documentation was generated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For ease of maintenance, it would be better if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each application took care of generating its own documentation&lt;/li&gt;
&lt;li&gt;The website generation only cared about retrieving the existing documentation and building the website&lt;/li&gt;
&lt;li&gt;We could have an easy way to reproduce it locally&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="current-solution"&gt;Current solution&lt;/h2&gt;
&lt;h3 id="update-suse-qt610-image"&gt;Update suse-qt610 image&lt;/h3&gt;
&lt;p&gt;We use the suse-qt610 docker image to generate the documentation. The different packages needed to build the html/PDF files and generate the website have been &lt;a href="https://invent.kde.org/sysadmin/ci-images/-/blob/b0a9eb931639ff8a45ed30c001164466018982b3/suse-qt610/build.sh#L439-479"&gt;installed&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="generation-of-the-documentation"&gt;Generation of the documentation&lt;/h3&gt;
&lt;p&gt;We have created a new script &lt;a href="https://invent.kde.org/sysadmin/ci-utilities/-/blob/8f721fb820823b46390cdf622f93567f6ddfb7ca/generate-documentation.py"&gt;generate-documentation.py&lt;/a&gt; that will generate the documentation and publish the documentation for a project to a specific &lt;a href="https://invent.kde.org/teams/ci-artifacts/documentation/-/packages"&gt;registry&lt;/a&gt;.
To ensure the documentation is well-generated, developers need to ensure that their project has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;'frameworks/kdoctools': '@latest-kf6'&lt;/code&gt; listed in its .kde-ci.yml&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kdoctools_install(po)&lt;/code&gt; in its CMakeLists.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="local-generation"&gt;Local generation&lt;/h3&gt;
&lt;p&gt;To generate locally, you can use the following commands. First retrieve and run the latest image:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podman pull invent-registry.kde.org/sysadmin/ci-images/suse-qt610:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podman run --user&lt;span class="o"&gt;=&lt;/span&gt;root -it suse-qt610:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Inside it, clone your repository (the example will use GCompris-teachers handbook):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; builds
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/documentation/gcompris-teachers-handbook
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; gcompris-teachers-handbook
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Clone the needed repositories and export the environment variables:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/websites/docs-kde-org.git docs-kde-org --depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/sysadmin/ci-utilities.git --depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/sysadmin/repo-metadata.git ci-utilities/repo-metadata/ --depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_GITLAB_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://invent.kde.org/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_PACKAGE_PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;teams/ci-artifacts/suse-qt6.10
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_CACHE_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/user/caches/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CI_COMMIT_REF_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CI_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcompris-teachers-handbook
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CI_JOB_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;job_id&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;DBLATEX_BASE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;/docs-kde-org
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;SGML_CATALOG_FILES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;/_install/share/kf6/kdoctools/customization/catalog.xml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: we only need the docs-kde-org repository because of PDF generation. There is some work in progress to reduce this dependency.&lt;/p&gt;
&lt;p&gt;Retrieve the dependencies and build the documentation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 -u ci-utilities/run-ci-build.py --project &lt;span class="nv"&gt;$CI_PROJECT_NAME&lt;/span&gt; --branch &lt;span class="nv"&gt;$CI_COMMIT_REF_NAME&lt;/span&gt; --platform Linux/Qt6/Shared
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 ci-utilities/generate-documentation.py --project &lt;span class="nv"&gt;$CI_PROJECT_NAME&lt;/span&gt; --output-folder webdoc --format html pdf --branch &lt;span class="nv"&gt;$CI_COMMIT_REF_NAME&lt;/span&gt; --doc-dir _staging/builds/gcompris-teachers-handbook/_install/share/doc/HTML/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output will be in the &lt;code&gt;webdoc&lt;/code&gt; folder. You can copy this to your machine using &lt;code&gt;podman cp CONTAINERID:/builds/gcompris-teachers-handbook/webdoc/ .&lt;/code&gt; (use &lt;code&gt;podman ps&lt;/code&gt; to get the CONTAINERID).&lt;/p&gt;
&lt;h3 id="website-generation"&gt;Website generation&lt;/h3&gt;
&lt;p&gt;Now that each project generates its own documentation, we have reworked the existing website &lt;a href="https://invent.kde.org/websites/docs-kde-org"&gt;scripts&lt;/a&gt; to use these files instead of generating all of them again.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://invent.kde.org/websites/docs-kde-org/-/blob/master/kdedocs/docretriever.py?ref_type=heads"&gt;script&lt;/a&gt; will browse all the projects in KDE which have i18n branches in their &lt;a href="https://invent.kde.org/sysadmin/repo-metadata/"&gt;metadata&lt;/a&gt; and fetch the corresponding documentation (if it exists).&lt;/p&gt;
&lt;p&gt;The last step is to &lt;a href="https://invent.kde.org/websites/docs-kde-org/-/blob/master/search/do_xapian_index.sh?ref_type=heads"&gt;generate the indexes&lt;/a&gt; for the website's search feature, using Xapian.&lt;/p&gt;
&lt;h3 id="local-website-generation"&gt;Local website generation&lt;/h3&gt;
&lt;p&gt;To generate locally, you can use the following commands. First retrieve and run the latest image:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podman pull invent-registry.kde.org/sysadmin/ci-images/suse-qt610:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;podman run --user&lt;span class="o"&gt;=&lt;/span&gt;root -it suse-qt610:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Inside it, clone the needed repositories and create the needed &lt;code&gt;logs&lt;/code&gt; folder:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; builds
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/websites/docs-kde-org.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; docs-kde-org
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/sysadmin/ci-utilities.git --depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://invent.kde.org/sysadmin/repo-metadata.git ci-utilities/repo-metadata/ --depth&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You will also need to generate a gitlab token from your &lt;a href="https://invent.kde.org/-/user_settings/personal_access_tokens"&gt;invent account&lt;/a&gt;. Make sure the &lt;code&gt;read_api&lt;/code&gt; scope is selected!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_GITLAB_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://invent.kde.org/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_GITLAB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;generated_token
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_PACKAGE_PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;teams/ci-artifacts/suse-qt6.10
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KDECI_CACHE_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/user/caches/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PYTHONPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PWD&lt;/span&gt;/ci-utilities/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CI_COMMIT_REF_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CI_PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docs-kde-org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Generate the website, copy static files and run the xapian indexing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p logs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./kdedocgen.py -r -s -l doclogconfig.ini -c docgen_conf.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./create_generated_used.php work &amp;gt;website/generated_used.inc.php 2&amp;gt;logs/genused.log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KDECI_PACKAGE_PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;teams/ci-artifacts/suse-qt5.15 python3 -u ci-utilities/run-ci-build.py --project &lt;span class="nv"&gt;$CI_PROJECT_NAME&lt;/span&gt; --branch &lt;span class="nv"&gt;$CI_COMMIT_REF_NAME&lt;/span&gt; --platform Linux/Qt5/Shared --only-setup-environment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;KDECI_PACKAGE_PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;teams/ci-artifacts/suse-qt6.10 python3 -u ci-utilities/run-ci-build.py --project &lt;span class="nv"&gt;$CI_PROJECT_NAME&lt;/span&gt; --branch &lt;span class="nv"&gt;$CI_COMMIT_REF_NAME&lt;/span&gt; --platform Linux/Qt6/Shared --only-setup-environment
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp -R _install/share/doc/HTML/en/kdoctools5-common website/trunk_kf5/en/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp -R _install/share/doc/HTML/en/kdoctools6-common website/trunk_kf6/en/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp -R search/ website/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./website/search/do_xapian_index.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output will be in the &lt;code&gt;website&lt;/code&gt; folder.&lt;/p&gt;
&lt;h3 id="website-deployment"&gt;Website deployment&lt;/h3&gt;
&lt;p&gt;The website repository has its own scheduled pipeline (once a week) to generate the website and publish it.&lt;/p&gt;
&lt;p&gt;The deployment is done using the &lt;a href="https://invent.kde.org/sysadmin/ci-notary-service"&gt;ci-notary&lt;/a&gt; service.&lt;/p&gt;
&lt;h2 id="future-plans"&gt;Future plans&lt;/h2&gt;
&lt;p&gt;There are still multiple issues to tackle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most non-ASCII languages (CJK, Arabic...) are not supported for PDF generation. We have two contributors in Season of KDE who will dig into finding a solution to improve this!&lt;/li&gt;
&lt;li&gt;We have several hardcoded paths/links to Qt 6/KF 6. We need to drop those for when Qt 7/KF 7 comes (&lt;strong&gt;edit 25/01/2026&lt;/strong&gt;: this has been handled in this &lt;a href="https://invent.kde.org/sysadmin/ci-utilities/-/commit/d378497a943bc51278764a953e8c85e953f30d22"&gt;commit&lt;/a&gt;!).&lt;/li&gt;
&lt;li&gt;Updating deprecated documentation where it makes sense.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>