Deploy site [CI SKIP]

This commit is contained in:
Woodpecker CI 2025-10-06 11:38:07 +00:00
parent 966ae7df1b
commit 328728a430
14 changed files with 166 additions and 251 deletions

View file

@ -96,16 +96,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./posts.html"> <a class="nav-link" href="./posts.html">
<span class="menu-text">Posts</span></a> <span class="menu-text">Posts</span></a>
</li> </li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item">
<a class="nav-link" href="./interests.html">
<span class="menu-text">Personal interests</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="./../fr/">
<span class="menu-text">Français</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="quarto-1.6.39"> <meta name="generator" content="quarto-1.6.39">
@ -53,17 +53,17 @@ ul.task-list li input[type="checkbox"] {
], ],
"show-item-context": false, "show-item-context": false,
"language": { "language": {
"search-no-results-text": "No results", "search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "matching documents", "search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copy link to search", "search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Hide additional matches", "search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "more match in this document", "search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "more matches in this document", "search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Clear", "search-clear-button-title": "Effacer",
"search-text-placeholder": "", "search-text-placeholder": "",
"search-detached-cancel-button-title": "Cancel", "search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Submit", "search-submit-button-title": "Envoyer",
"search-label": "Search" "search-label": "Recherche"
} }
}</script> }</script>
@ -82,8 +82,8 @@ ul.task-list li input[type="checkbox"] {
<span class="navbar-title">Louis Lacoste</span> <span class="navbar-title">Louis Lacoste</span>
</a> </a>
</div> </div>
<div id="quarto-search" class="" title="Search"></div> <div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
@ -102,10 +102,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./interests.html"> <a class="nav-link" href="./interests.html">
<span class="menu-text">Ce qui mintéresse</span></a> <span class="menu-text">Ce qui mintéresse</span></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="./../index.html">
<span class="menu-text">English</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -189,12 +185,12 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
// flash "checked" // flash "checked"
button.classList.add('code-copy-button-checked'); button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title"); var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!"); button.setAttribute("title", "Copié");
let tooltip; let tooltip;
if (window.bootstrap) { if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!"); button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button, tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual", { trigger: "manual",
customClass: "code-copy-button-tooltip", customClass: "code-copy-button-tooltip",

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="quarto-1.6.39"> <meta name="generator" content="quarto-1.6.39">
@ -56,17 +56,17 @@ ul.task-list li input[type="checkbox"] {
], ],
"show-item-context": false, "show-item-context": false,
"language": { "language": {
"search-no-results-text": "No results", "search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "matching documents", "search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copy link to search", "search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Hide additional matches", "search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "more match in this document", "search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "more matches in this document", "search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Clear", "search-clear-button-title": "Effacer",
"search-text-placeholder": "", "search-text-placeholder": "",
"search-detached-cancel-button-title": "Cancel", "search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Submit", "search-submit-button-title": "Envoyer",
"search-label": "Search" "search-label": "Recherche"
} }
}</script> }</script>
@ -85,8 +85,8 @@ ul.task-list li input[type="checkbox"] {
<span class="navbar-title">Louis Lacoste</span> <span class="navbar-title">Louis Lacoste</span>
</a> </a>
</div> </div>
<div id="quarto-search" class="" title="Search"></div> <div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
@ -105,10 +105,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./interests.html"> <a class="nav-link" href="./interests.html">
<span class="menu-text">Ce qui mintéresse</span></a> <span class="menu-text">Ce qui mintéresse</span></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="./../index.html">
<span class="menu-text">English</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -193,12 +189,12 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
// flash "checked" // flash "checked"
button.classList.add('code-copy-button-checked'); button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title"); var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!"); button.setAttribute("title", "Copié");
let tooltip; let tooltip;
if (window.bootstrap) { if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!"); button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button, tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual", { trigger: "manual",
customClass: "code-copy-button-tooltip", customClass: "code-copy-button-tooltip",

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="quarto-1.6.39"> <meta name="generator" content="quarto-1.6.39">
@ -53,17 +53,17 @@ ul.task-list li input[type="checkbox"] {
], ],
"show-item-context": false, "show-item-context": false,
"language": { "language": {
"search-no-results-text": "No results", "search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "matching documents", "search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copy link to search", "search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Hide additional matches", "search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "more match in this document", "search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "more matches in this document", "search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Clear", "search-clear-button-title": "Effacer",
"search-text-placeholder": "", "search-text-placeholder": "",
"search-detached-cancel-button-title": "Cancel", "search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Submit", "search-submit-button-title": "Envoyer",
"search-label": "Search" "search-label": "Recherche"
} }
}</script> }</script>
@ -82,8 +82,8 @@ ul.task-list li input[type="checkbox"] {
<span class="navbar-title">Louis Lacoste</span> <span class="navbar-title">Louis Lacoste</span>
</a> </a>
</div> </div>
<div id="quarto-search" class="" title="Search"></div> <div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
@ -102,10 +102,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link active" href="./interests.html" aria-current="page"> <a class="nav-link active" href="./interests.html" aria-current="page">
<span class="menu-text">Ce qui mintéresse</span></a> <span class="menu-text">Ce qui mintéresse</span></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="./../index.html">
<span class="menu-text">English</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -119,7 +115,7 @@ ul.task-list li input[type="checkbox"] {
<!-- margin-sidebar --> <!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> <div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active"> <nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">On this page</h2> <h2 id="toc-title">Sur cette page</h2>
<ul> <ul>
<li><a href="#tech-and-homelab" id="toc-tech-and-homelab" class="nav-link active" data-scroll-target="#tech-and-homelab">Tech and homelab</a></li> <li><a href="#tech-and-homelab" id="toc-tech-and-homelab" class="nav-link active" data-scroll-target="#tech-and-homelab">Tech and homelab</a></li>
@ -210,12 +206,12 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
// flash "checked" // flash "checked"
button.classList.add('code-copy-button-checked'); button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title"); var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!"); button.setAttribute("title", "Copié");
let tooltip; let tooltip;
if (window.bootstrap) { if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!"); button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button, tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual", { trigger: "manual",
customClass: "code-copy-button-tooltip", customClass: "code-copy-button-tooltip",

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="quarto-1.6.39"> <meta name="generator" content="quarto-1.6.39">
@ -55,17 +55,17 @@ ul.task-list li input[type="checkbox"] {
], ],
"show-item-context": false, "show-item-context": false,
"language": { "language": {
"search-no-results-text": "No results", "search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "matching documents", "search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copy link to search", "search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Hide additional matches", "search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "more match in this document", "search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "more matches in this document", "search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Clear", "search-clear-button-title": "Effacer",
"search-text-placeholder": "", "search-text-placeholder": "",
"search-detached-cancel-button-title": "Cancel", "search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Submit", "search-submit-button-title": "Envoyer",
"search-label": "Search" "search-label": "Recherche"
} }
}</script> }</script>
<script> <script>
@ -156,8 +156,8 @@ window.Quarto = {
<span class="navbar-title">Louis Lacoste</span> <span class="navbar-title">Louis Lacoste</span>
</a> </a>
</div> </div>
<div id="quarto-search" class="" title="Search"></div> <div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
@ -176,10 +176,6 @@ window.Quarto = {
<a class="nav-link" href="./interests.html"> <a class="nav-link" href="./interests.html">
<span class="menu-text">Ce qui mintéresse</span></a> <span class="menu-text">Ce qui mintéresse</span></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="./../index.html">
<span class="menu-text">English</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -193,7 +189,7 @@ window.Quarto = {
<!-- margin-sidebar --> <!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> <div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<h5 class="quarto-listing-category-title">Categories</h5><div class="quarto-listing-category category-default"><div class="category" data-category="">All <span class="quarto-category-count">(1)</span></div><div class="category" data-category="R2l0TGFi">GitLab <span class="quarto-category-count">(1)</span></div><div class="category" data-category="TGFUZVg=">LaTeX <span class="quarto-category-count">(1)</span></div><div class="category" data-category="Y2k=">ci <span class="quarto-category-count">(1)</span></div><div class="category" data-category="ZnJhbiVDMyVBN2Fpcw==">français <span class="quarto-category-count">(1)</span></div><div class="category" data-category="ZnJlbmNo">french <span class="quarto-category-count">(1)</span></div><div class="category" data-category="Z2l0">git <span class="quarto-category-count">(1)</span></div><div class="category" data-category="aW50JUMzJUE5Z3JhdGlvbiUyMGNvbnRpbnVl">intégration continue <span class="quarto-category-count">(1)</span></div></div></div> <h5 class="quarto-listing-category-title">Catégories</h5><div class="quarto-listing-category category-default"><div class="category" data-category="">Tous <span class="quarto-category-count">(1)</span></div><div class="category" data-category="R2l0TGFi">GitLab <span class="quarto-category-count">(1)</span></div><div class="category" data-category="TGFUZVg=">LaTeX <span class="quarto-category-count">(1)</span></div><div class="category" data-category="Y2k=">ci <span class="quarto-category-count">(1)</span></div><div class="category" data-category="ZnJhbiVDMyVBN2Fpcw==">français <span class="quarto-category-count">(1)</span></div><div class="category" data-category="ZnJlbmNo">french <span class="quarto-category-count">(1)</span></div><div class="category" data-category="Z2l0">git <span class="quarto-category-count">(1)</span></div><div class="category" data-category="aW50JUMzJUE5Z3JhdGlvbiUyMGNvbnRpbnVl">intégration continue <span class="quarto-category-count">(1)</span></div></div></div>
<!-- main --> <!-- main -->
<main class="content" id="quarto-document-content"> <main class="content" id="quarto-document-content">
@ -222,7 +218,7 @@ window.Quarto = {
<div class="quarto-listing quarto-listing-container-grid" id="listing-listing"> <div class="quarto-listing quarto-listing-container-grid" id="listing-listing">
<div class="list grid quarto-listing-cols-3"> <div class="list grid quarto-listing-cols-3">
<div class="g-col-1" data-index="0" data-categories="Y2klMkNpbnQlQzMlQTlncmF0aW9uJTIwY29udGludWUlMkNnaXQlMkNHaXRMYWIlMkNMYVRlWCUyQ2ZyZW5jaCUyQ2ZyYW4lQzMlQTdhaXM=" data-listing-date-sort="1758578400000" data-listing-file-modified-sort="1759334583315" data-listing-date-modified-sort="1759334583000" data-listing-reading-time-sort="3" data-listing-word-count-sort="492"> <div class="g-col-1" data-index="0" data-categories="Y2klMkNpbnQlQzMlQTlncmF0aW9uJTIwY29udGludWUlMkNnaXQlMkNHaXRMYWIlMkNMYVRlWCUyQ2ZyZW5jaCUyQ2ZyYW4lQzMlQTdhaXM=" data-listing-date-sort="1758578400000" data-listing-file-modified-sort="1759750623584" data-listing-date-modified-sort="1759750623000" data-listing-reading-time-sort="5" data-listing-word-count-sort="954">
<a href="./posts/ci-gitlab-latex.html" class="quarto-grid-link"> <a href="./posts/ci-gitlab-latex.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left"> <div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="posts/resources/ci-gitlab-latex/access-token-settings.png" style="height: 150px;" class="thumbnail-image card-img"/></p> <p class="card-img-top"><img src="posts/resources/ci-gitlab-latex/access-token-settings.png" style="height: 150px;" class="thumbnail-image card-img"/></p>
@ -261,7 +257,7 @@ français
Louis Lacoste Louis Lacoste
</div> </div>
<div class="listing-date"> <div class="listing-date">
Sep 23, 2025 23 sept. 2025
</div> </div>
</div> </div>
</div> </div>
@ -270,7 +266,7 @@ Sep 23, 2025
</div> </div>
</div> </div>
<div class="listing-no-matching d-none"> <div class="listing-no-matching d-none">
No matching items Aucun article correspondant
</div> </div>
</div></main> <!-- /main --> </div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript"> <script id="quarto-html-after-body" type="application/javascript">
@ -316,12 +312,12 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
// flash "checked" // flash "checked"
button.classList.add('code-copy-button-checked'); button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title"); var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!"); button.setAttribute("title", "Copié");
let tooltip; let tooltip;
if (window.bootstrap) { if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!"); button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button, tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual", { trigger: "manual",
customClass: "code-copy-button-tooltip", customClass: "code-copy-button-tooltip",

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="quarto-1.6.39"> <meta name="generator" content="quarto-1.6.39">
@ -7,7 +7,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<meta name="author" content="Louis Lacoste"> <meta name="author" content="Louis Lacoste">
<meta name="dcterms.date" content="2025-09-23">
<title>Faire une CI LaTeX avec GitLab Louis Lacoste</title> <title>Faire une CI LaTeX avec GitLab Louis Lacoste</title>
<style> <style>
@ -89,17 +88,17 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
], ],
"show-item-context": false, "show-item-context": false,
"language": { "language": {
"search-no-results-text": "No results", "search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "matching documents", "search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copy link to search", "search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Hide additional matches", "search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "more match in this document", "search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "more matches in this document", "search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Clear", "search-clear-button-title": "Effacer",
"search-text-placeholder": "", "search-text-placeholder": "",
"search-detached-cancel-button-title": "Cancel", "search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Submit", "search-submit-button-title": "Envoyer",
"search-label": "Search" "search-label": "Recherche"
} }
}</script> }</script>
@ -118,8 +117,8 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<span class="navbar-title">Louis Lacoste</span> <span class="navbar-title">Louis Lacoste</span>
</a> </a>
</div> </div>
<div id="quarto-search" class="" title="Search"></div> <div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
@ -138,10 +137,6 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<a class="nav-link" href="../interests.html"> <a class="nav-link" href="../interests.html">
<span class="menu-text">Ce qui mintéresse</span></a> <span class="menu-text">Ce qui mintéresse</span></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="../../index.html">
<span class="menu-text">English</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -167,7 +162,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
</div> </div>
<div class="quarto-title-meta-author"> <div class="quarto-title-meta-author">
<div class="quarto-title-meta-heading">Author</div> <div class="quarto-title-meta-heading">Auteur·rice</div>
<div class="quarto-title-meta-heading">Affiliation</div> <div class="quarto-title-meta-heading">Affiliation</div>
<div class="quarto-title-meta-contents"> <div class="quarto-title-meta-contents">
@ -184,16 +179,16 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<div> <div>
<div class="quarto-title-meta-heading">Published</div> <div class="quarto-title-meta-heading">Date de publication</div>
<div class="quarto-title-meta-contents"> <div class="quarto-title-meta-contents">
<p class="date">September 23, 2025</p> <p class="date">23 septembre 2025</p>
</div> </div>
</div> </div>
<div> <div>
<div class="quarto-title-meta-heading">Modified</div> <div class="quarto-title-meta-heading">Modifié</div>
<div class="quarto-title-meta-contents"> <div class="quarto-title-meta-contents">
<p class="date-modified">October 1, 2025</p> <p class="date-modified">6 octobre 2025</p>
</div> </div>
</div> </div>
@ -205,7 +200,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<!-- margin-sidebar --> <!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> <div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active"> <nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">On this page</h2> <h2 id="toc-title">Sur cette page</h2>
<ul> <ul>
<li><a href="#la-ci-finale" id="toc-la-ci-finale" class="nav-link active" data-scroll-target="#la-ci-finale">La CI finale</a></li> <li><a href="#la-ci-finale" id="toc-la-ci-finale" class="nav-link active" data-scroll-target="#la-ci-finale">La CI finale</a></li>
@ -312,7 +307,7 @@ Important
<span id="cb1-68"><a href="#cb1-68"></a> git push --force origin "${PDF_BRANCH}" -o ci.skip</span> <span id="cb1-68"><a href="#cb1-68"></a> git push --force origin "${PDF_BRANCH}" -o ci.skip</span>
<span id="cb1-69"><a href="#cb1-69"></a> else</span> <span id="cb1-69"><a href="#cb1-69"></a> else</span>
<span id="cb1-70"><a href="#cb1-70"></a> echo "No PDF changes to commit"</span> <span id="cb1-70"><a href="#cb1-70"></a> echo "No PDF changes to commit"</span>
<span id="cb1-71"><a href="#cb1-71"></a> fi</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb1-71"><a href="#cb1-71"></a> fi</span></code><button title="Copier vers le presse-papier" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<p>Détaillons ce quil sy passe !</p> <p>Détaillons ce quil sy passe !</p>
</section> </section>
@ -327,7 +322,7 @@ Important
<span id="cb2-5"><a href="#cb2-5"></a><span class="co"> # Branche cible pour les PDF (modifiable via CI/CD variables)</span></span> <span id="cb2-5"><a href="#cb2-5"></a><span class="co"> # Branche cible pour les PDF (modifiable via CI/CD variables)</span></span>
<span id="cb2-6"><a href="#cb2-6"></a><span class="at"> </span><span class="fu">PDF_BRANCH</span><span class="kw">:</span><span class="at"> </span><span class="st">"pdf"</span></span> <span id="cb2-6"><a href="#cb2-6"></a><span class="at"> </span><span class="fu">PDF_BRANCH</span><span class="kw">:</span><span class="at"> </span><span class="st">"pdf"</span></span>
<span id="cb2-7"><a href="#cb2-7"></a></span> <span id="cb2-7"><a href="#cb2-7"></a></span>
<span id="cb2-8"><a href="#cb2-8"></a><span class="at"> </span><span class="fu">FILE_NAMES</span><span class="kw">:</span><span class="at"> 2024-2025-rapport-csi 2024-2025-presentation-csi</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb2-8"><a href="#cb2-8"></a><span class="at"> </span><span class="fu">FILE_NAMES</span><span class="kw">:</span><span class="at"> 2024-2025-rapport-csi 2024-2025-presentation-csi</span></span></code><button title="Copier vers le presse-papier" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<ul> <ul>
<li><code>GIT_VERSION</code> : spécifie la version de git à utiliser pour limage Docker que lon va récupérer.</li> <li><code>GIT_VERSION</code> : spécifie la version de git à utiliser pour limage Docker que lon va récupérer.</li>
@ -367,7 +362,7 @@ Important
<span id="cb3-24"><a href="#cb3-24"></a></span> <span id="cb3-24"><a href="#cb3-24"></a></span>
<span id="cb3-25"><a href="#cb3-25"></a><span class="at"> </span><span class="fu">artifacts</span><span class="kw">:</span></span> <span id="cb3-25"><a href="#cb3-25"></a><span class="at"> </span><span class="fu">artifacts</span><span class="kw">:</span></span>
<span id="cb3-26"><a href="#cb3-26"></a><span class="at"> </span><span class="fu">paths</span><span class="kw">:</span></span> <span id="cb3-26"><a href="#cb3-26"></a><span class="at"> </span><span class="fu">paths</span><span class="kw">:</span></span>
<span id="cb3-27"><a href="#cb3-27"></a><span class="at"> </span><span class="kw">-</span><span class="at"> </span><span class="st">"*.pdf"</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb3-27"><a href="#cb3-27"></a><span class="at"> </span><span class="kw">-</span><span class="at"> </span><span class="st">"*.pdf"</span></span></code><button title="Copier vers le presse-papier" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<p>On déclare tout dabord le <code>stage: build</code> pour qualifier létape que lon réalise ici. Il y en a 3 possibles : <code>build, test, deploy</code> (<a href="https://docs.gitlab.com/ci/yaml/#stage">documentation GitLab</a>). Ici nous choisissons <code>build</code> puisquil sagit de la compilation de notre projet.</p> <p>On déclare tout dabord le <code>stage: build</code> pour qualifier létape que lon réalise ici. Il y en a 3 possibles : <code>build, test, deploy</code> (<a href="https://docs.gitlab.com/ci/yaml/#stage">documentation GitLab</a>). Ici nous choisissons <code>build</code> puisquil sagit de la compilation de notre projet.</p>
<p>À la suite nous chargeons une image docker qui contient les outils <code>texlive</code>.</p> <p>À la suite nous chargeons une image docker qui contient les outils <code>texlive</code>.</p>
@ -425,7 +420,7 @@ Exécution conditionnelle de <code>biber</code>
<span id="cb4-32"><a href="#cb4-32"></a> git push --force origin "${PDF_BRANCH}" -o ci.skip</span> <span id="cb4-32"><a href="#cb4-32"></a> git push --force origin "${PDF_BRANCH}" -o ci.skip</span>
<span id="cb4-33"><a href="#cb4-33"></a> else</span> <span id="cb4-33"><a href="#cb4-33"></a> else</span>
<span id="cb4-34"><a href="#cb4-34"></a> echo "No PDF changes to commit"</span> <span id="cb4-34"><a href="#cb4-34"></a> echo "No PDF changes to commit"</span>
<span id="cb4-35"><a href="#cb4-35"></a> fi</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb4-35"><a href="#cb4-35"></a> fi</span></code><button title="Copier vers le presse-papier" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<p>Finalement nous déployons nos PDF. Pour cela on charge une image légère <code>Alpine Linux</code> avec la version Git sélectionnée dans les variables.</p> <p>Finalement nous déployons nos PDF. Pour cela on charge une image légère <code>Alpine Linux</code> avec la version Git sélectionnée dans les variables.</p>
<p>Avec la directive <code>before_script</code> on clone le dépôt.</p> <p>Avec la directive <code>before_script</code> on clone le dépôt.</p>
@ -526,12 +521,12 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
// flash "checked" // flash "checked"
button.classList.add('code-copy-button-checked'); button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title"); var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!"); button.setAttribute("title", "Copié");
let tooltip; let tooltip;
if (window.bootstrap) { if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!"); button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button, tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual", { trigger: "manual",
customClass: "code-copy-button-tooltip", customClass: "code-copy-button-tooltip",

View file

@ -60,7 +60,7 @@
"href": "posts.html", "href": "posts.html",
"title": "Posts", "title": "Posts",
"section": "", "section": "",
"text": "English \n\n\n\n\n\n\n\n\n\nFaire une CI LaTeX avec GitLab\n\n\n\nci\n\n\nintégration continue\n\n\ngit\n\n\nGitLab\n\n\nLaTeX\n\n\nfrench\n\n\nfrançais\n\n\n\n\n\n\n\nLouis Lacoste\n\n\nSep 23, 2025\n\n\n\n\n\n\n\n\nNo matching items" "text": "English \n\n\n\n\n\n\n\n\n\nFaire une CI LaTeX avec GitLab\n\n\n\nci\n\n\nintégration continue\n\n\ngit\n\n\nGitLab\n\n\nLaTeX\n\n\nfrench\n\n\nfrançais\n\n\n\n\n\n\n\nLouis Lacoste\n\n\n23 sept. 2025\n\n\n\n\n\n\n\n\nAucun article correspondant"
}, },
{ {
"objectID": "biblio.html", "objectID": "biblio.html",

View file

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="quarto-1.6.39"> <meta name="generator" content="quarto-1.6.39">
@ -53,17 +53,17 @@ ul.task-list li input[type="checkbox"] {
], ],
"show-item-context": false, "show-item-context": false,
"language": { "language": {
"search-no-results-text": "No results", "search-no-results-text": "Pas de résultats",
"search-matching-documents-text": "matching documents", "search-matching-documents-text": "documents trouvés",
"search-copy-link-title": "Copy link to search", "search-copy-link-title": "Copier le lien vers la recherche",
"search-hide-matches-text": "Hide additional matches", "search-hide-matches-text": "Cacher les correspondances additionnelles",
"search-more-match-text": "more match in this document", "search-more-match-text": "correspondance de plus dans ce document",
"search-more-matches-text": "more matches in this document", "search-more-matches-text": "correspondances de plus dans ce document",
"search-clear-button-title": "Clear", "search-clear-button-title": "Effacer",
"search-text-placeholder": "", "search-text-placeholder": "",
"search-detached-cancel-button-title": "Cancel", "search-detached-cancel-button-title": "Annuler",
"search-submit-button-title": "Submit", "search-submit-button-title": "Envoyer",
"search-label": "Search" "search-label": "Recherche"
} }
}</script> }</script>
@ -82,8 +82,8 @@ ul.task-list li input[type="checkbox"] {
<span class="navbar-title">Louis Lacoste</span> <span class="navbar-title">Louis Lacoste</span>
</a> </a>
</div> </div>
<div id="quarto-search" class="" title="Search"></div> <div id="quarto-search" class="" title="Recherche"></div>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
@ -102,10 +102,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./interests.html"> <a class="nav-link" href="./interests.html">
<span class="menu-text">Ce qui mintéresse</span></a> <span class="menu-text">Ce qui mintéresse</span></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="./../index.html">
<span class="menu-text">English</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -119,7 +115,7 @@ ul.task-list li input[type="checkbox"] {
<!-- margin-sidebar --> <!-- margin-sidebar -->
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> <div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
<nav id="TOC" role="doc-toc" class="toc-active"> <nav id="TOC" role="doc-toc" class="toc-active">
<h2 id="toc-title">On this page</h2> <h2 id="toc-title">Sur cette page</h2>
<ul> <ul>
<li><a href="#section" id="toc-section" class="nav-link active" data-scroll-target="#section">2025-2026</a></li> <li><a href="#section" id="toc-section" class="nav-link active" data-scroll-target="#section">2025-2026</a></li>
@ -210,12 +206,12 @@ window.document.addEventListener("DOMContentLoaded", function (event) {
// flash "checked" // flash "checked"
button.classList.add('code-copy-button-checked'); button.classList.add('code-copy-button-checked');
var currentTitle = button.getAttribute("title"); var currentTitle = button.getAttribute("title");
button.setAttribute("title", "Copied!"); button.setAttribute("title", "Copié");
let tooltip; let tooltip;
if (window.bootstrap) { if (window.bootstrap) {
button.setAttribute("data-bs-toggle", "tooltip"); button.setAttribute("data-bs-toggle", "tooltip");
button.setAttribute("data-bs-placement", "left"); button.setAttribute("data-bs-placement", "left");
button.setAttribute("data-bs-title", "Copied!"); button.setAttribute("data-bs-title", "Copié");
tooltip = new bootstrap.Tooltip(button, tooltip = new bootstrap.Tooltip(button,
{ trigger: "manual", { trigger: "manual",
customClass: "code-copy-button-tooltip", customClass: "code-copy-button-tooltip",

View file

@ -99,16 +99,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./posts.html"> <a class="nav-link" href="./posts.html">
<span class="menu-text">Posts</span></a> <span class="menu-text">Posts</span></a>
</li> </li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item">
<a class="nav-link" href="./interests.html">
<span class="menu-text">Personal interests</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="./../fr/">
<span class="menu-text">Français</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">

View file

@ -96,16 +96,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./posts.html"> <a class="nav-link" href="./posts.html">
<span class="menu-text">Posts</span></a> <span class="menu-text">Posts</span></a>
</li> </li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item">
<a class="nav-link active" href="./interests.html" aria-current="page">
<span class="menu-text">Personal interests</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="./../fr/">
<span class="menu-text">Français</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">

View file

@ -170,16 +170,6 @@ window.Quarto = {
<a class="nav-link active" href="./posts.html" aria-current="page"> <a class="nav-link active" href="./posts.html" aria-current="page">
<span class="menu-text">Posts</span></a> <span class="menu-text">Posts</span></a>
</li> </li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item">
<a class="nav-link" href="./interests.html">
<span class="menu-text">Personal interests</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="./../fr/">
<span class="menu-text">Français</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -222,7 +212,7 @@ window.Quarto = {
<div class="quarto-listing quarto-listing-container-grid" id="listing-listing"> <div class="quarto-listing quarto-listing-container-grid" id="listing-listing">
<div class="list grid quarto-listing-cols-3"> <div class="list grid quarto-listing-cols-3">
<div class="g-col-1" data-index="0" data-categories="Y2klMkNpbnQlQzMlQTlncmF0aW9uJTIwY29udGludWUlMkNnaXQlMkNHaXRMYWIlMkNMYVRlWCUyQ2ZyZW5jaCUyQ2ZyYW4lQzMlQTdhaXM=" data-listing-date-sort="1758578400000" data-listing-file-modified-sort="1759334583315" data-listing-date-modified-sort="1759334583000" data-listing-reading-time-sort="3" data-listing-word-count-sort="492"> <div class="g-col-1" data-index="0" data-categories="Y2klMkNpbnQlQzMlQTlncmF0aW9uJTIwY29udGludWUlMkNnaXQlMkNHaXRMYWIlMkNMYVRlWCUyQ2ZyZW5jaCUyQ2ZyYW4lQzMlQTdhaXM=" data-listing-date-sort="1758578400000" data-listing-file-modified-sort="1759750623584" data-listing-date-modified-sort="1759750623000" data-listing-reading-time-sort="5" data-listing-word-count-sort="954">
<a href="./posts/ci-gitlab-latex.html" class="quarto-grid-link"> <a href="./posts/ci-gitlab-latex.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left"> <div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="posts/resources/ci-gitlab-latex/access-token-settings.png" style="height: 150px;" class="thumbnail-image card-img"/></p> <p class="card-img-top"><img src="posts/resources/ci-gitlab-latex/access-token-settings.png" style="height: 150px;" class="thumbnail-image card-img"/></p>

View file

@ -132,16 +132,6 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<a class="nav-link" href="../posts.html"> <a class="nav-link" href="../posts.html">
<span class="menu-text">Posts</span></a> <span class="menu-text">Posts</span></a>
</li> </li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item">
<a class="nav-link" href="../interests.html">
<span class="menu-text">Personal interests</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="../../fr/">
<span class="menu-text">Français</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">
@ -193,7 +183,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<div> <div>
<div class="quarto-title-meta-heading">Modified</div> <div class="quarto-title-meta-heading">Modified</div>
<div class="quarto-title-meta-contents"> <div class="quarto-title-meta-contents">
<p class="date-modified">October 1, 2025</p> <p class="date-modified">October 6, 2025</p>
</div> </div>
</div> </div>
@ -208,12 +198,12 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<h2 id="toc-title">On this page</h2> <h2 id="toc-title">On this page</h2>
<ul> <ul>
<li><a href="#la-ci-finale" id="toc-la-ci-finale" class="nav-link active" data-scroll-target="#la-ci-finale">La CI finale</a></li> <li><a href="#the-final-ci" id="toc-the-final-ci" class="nav-link active" data-scroll-target="#the-final-ci">The Final CI</a></li>
<li><a href="#les-variables" id="toc-les-variables" class="nav-link" data-scroll-target="#les-variables">Les variables</a></li> <li><a href="#variables" id="toc-variables" class="nav-link" data-scroll-target="#variables">Variables</a></li>
<li><a href="#les-étapes" id="toc-les-étapes" class="nav-link" data-scroll-target="#les-étapes">Les étapes</a> <li><a href="#the-steps" id="toc-the-steps" class="nav-link" data-scroll-target="#the-steps">The Steps</a>
<ul class="collapse"> <ul class="collapse">
<li><a href="#la-phase-de-compilation-build_tex" id="toc-la-phase-de-compilation-build_tex" class="nav-link" data-scroll-target="#la-phase-de-compilation-build_tex">La phase de compilation <code>build_tex</code></a></li> <li><a href="#the-compilation-phase-build_tex" id="toc-the-compilation-phase-build_tex" class="nav-link" data-scroll-target="#the-compilation-phase-build_tex">The compilation phase <code>build_tex</code></a></li>
<li><a href="#la-phase-de-déploiement-deploy" id="toc-la-phase-de-déploiement-deploy" class="nav-link" data-scroll-target="#la-phase-de-déploiement-deploy">La phase de déploiement <code>deploy</code></a></li> <li><a href="#the-deployment-phase-deploy" id="toc-the-deployment-phase-deploy" class="nav-link" data-scroll-target="#the-deployment-phase-deploy">The deployment phase <code>deploy</code></a></li>
</ul></li> </ul></li>
</ul> </ul>
</nav> </nav>
@ -225,9 +215,9 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<p><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><button onclick="window.location = '/fr' + location.pathname;" class="btn"><i class="fa fa-language"></i> Français </button></p> <p><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><button onclick="window.location = '/fr' + location.pathname;" class="btn"><i class="fa fa-language"></i> Français </button></p>
<section id="la-ci-finale" class="level1"> <section id="the-final-ci" class="level1">
<h1>La CI finale</h1> <h1>The Final CI</h1>
<p>Voici le contenu dun de mes fichier <code>.gitlab-ci.yaml</code></p> <p>Here is the content of one of my <code>.gitlab-ci.yaml</code> files</p>
<div class="callout callout-style-default callout-important callout-titled"> <div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center"> <div class="callout-header d-flex align-content-center">
<div class="callout-icon-container"> <div class="callout-icon-container">
@ -238,7 +228,7 @@ Important
</div> </div>
</div> </div>
<div class="callout-body-container callout-body"> <div class="callout-body-container callout-body">
<p>Si vous voyez des incohérences, contactez-moi par mail : <a href="mailto:louis.lacoste@agroparistech.fr">louis.lacoste@agroparistech.fr</a></p> <p>If you see any inconsistencies, contact me by email: <a href="mailto:louis.lacoste@agroparistech.fr">louis.lacoste@agroparistech.fr</a></p>
</div> </div>
</div> </div>
<div class="cell"> <div class="cell">
@ -314,11 +304,11 @@ Important
<span id="cb1-70"><a href="#cb1-70"></a> echo "No PDF changes to commit"</span> <span id="cb1-70"><a href="#cb1-70"></a> echo "No PDF changes to commit"</span>
<span id="cb1-71"><a href="#cb1-71"></a> fi</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb1-71"><a href="#cb1-71"></a> fi</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<p>Détaillons ce quil sy passe !</p> <p>Lets break down what happens!</p>
</section> </section>
<section id="les-variables" class="level1"> <section id="variables" class="level1">
<h1>Les variables</h1> <h1>Variables</h1>
<p>La section variables ci-dessous sert à définir des variables auxquelles nous ferons référence plus tard.</p> <p>The variables section below is used to define variables that we will reference later.</p>
<div class="cell"> <div class="cell">
<div class="sourceCode cell-code" id="cb2"><pre class="sourceCode numberSource yaml number-lines code-with-copy"><code class="sourceCode yaml"><span id="cb2-1"><a href="#cb2-1"></a><span class="fu">variables</span><span class="kw">:</span></span> <div class="sourceCode cell-code" id="cb2"><pre class="sourceCode numberSource yaml number-lines code-with-copy"><code class="sourceCode yaml"><span id="cb2-1"><a href="#cb2-1"></a><span class="fu">variables</span><span class="kw">:</span></span>
<span id="cb2-2"><a href="#cb2-2"></a><span class="co"> # Version de git utilisée</span></span> <span id="cb2-2"><a href="#cb2-2"></a><span class="co"> # Version de git utilisée</span></span>
@ -330,16 +320,16 @@ Important
<span id="cb2-8"><a href="#cb2-8"></a><span class="at"> </span><span class="fu">FILE_NAMES</span><span class="kw">:</span><span class="at"> 2024-2025-rapport-csi 2024-2025-presentation-csi</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb2-8"><a href="#cb2-8"></a><span class="at"> </span><span class="fu">FILE_NAMES</span><span class="kw">:</span><span class="at"> 2024-2025-rapport-csi 2024-2025-presentation-csi</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<ul> <ul>
<li><code>GIT_VERSION</code> : spécifie la version de git à utiliser pour limage Docker que lon va récupérer.</li> <li><code>GIT_VERSION</code>: specifies the git version to use for the Docker image were going to fetch.</li>
<li><code>PDF_BRANCH</code> : indique le nom de la branche sur laquelle nos PDF seront publiés.</li> <li><code>PDF_BRANCH</code>: indicates the name of the branch on which our PDFs will be published.</li>
<li><code>FILE_NAMES</code> : déclare la liste des noms de fichiers (sans les extensions). Au format yaml donc des chaînes de caractères sans guillemets séparés par des espaces</li> <li><code>FILE_NAMES</code>: declares the list of file names (without extensions). In yaml format, these are strings without quotes separated by spaces</li>
</ul> </ul>
</section> </section>
<section id="les-étapes" class="level1"> <section id="the-steps" class="level1">
<h1>Les étapes</h1> <h1>The Steps</h1>
<section id="la-phase-de-compilation-build_tex" class="level2"> <section id="the-compilation-phase-build_tex" class="level2">
<h2 class="anchored" data-anchor-id="la-phase-de-compilation-build_tex">La phase de compilation <code>build_tex</code></h2> <h2 class="anchored" data-anchor-id="the-compilation-phase-build_tex">The compilation phase <code>build_tex</code></h2>
<p>Nous allons détailler létape <code>build_tex</code> :</p> <p>Lets detail the <code>build_tex</code> step:</p>
<div class="cell"> <div class="cell">
<div class="sourceCode cell-code" id="cb3"><pre class="sourceCode numberSource yaml number-lines code-with-copy"><code class="sourceCode yaml"><span id="cb3-1"><a href="#cb3-1"></a><span class="fu">build_tex</span><span class="kw">:</span></span> <div class="sourceCode cell-code" id="cb3"><pre class="sourceCode numberSource yaml number-lines code-with-copy"><code class="sourceCode yaml"><span id="cb3-1"><a href="#cb3-1"></a><span class="fu">build_tex</span><span class="kw">:</span></span>
<span id="cb3-2"><a href="#cb3-2"></a><span class="at"> </span><span class="fu">stage</span><span class="kw">:</span><span class="at"> build</span></span> <span id="cb3-2"><a href="#cb3-2"></a><span class="at"> </span><span class="fu">stage</span><span class="kw">:</span><span class="at"> build</span></span>
@ -369,27 +359,27 @@ Important
<span id="cb3-26"><a href="#cb3-26"></a><span class="at"> </span><span class="fu">paths</span><span class="kw">:</span></span> <span id="cb3-26"><a href="#cb3-26"></a><span class="at"> </span><span class="fu">paths</span><span class="kw">:</span></span>
<span id="cb3-27"><a href="#cb3-27"></a><span class="at"> </span><span class="kw">-</span><span class="at"> </span><span class="st">"*.pdf"</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb3-27"><a href="#cb3-27"></a><span class="at"> </span><span class="kw">-</span><span class="at"> </span><span class="st">"*.pdf"</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<p>On déclare tout dabord le <code>stage: build</code> pour qualifier létape que lon réalise ici. Il y en a 3 possibles : <code>build, test, deploy</code> (<a href="https://docs.gitlab.com/ci/yaml/#stage">documentation GitLab</a>). Ici nous choisissons <code>build</code> puisquil sagit de la compilation de notre projet.</p> <p>First, we declare <code>stage: build</code> to qualify the step were performing here. There are 3 possible stages: <code>build, test, deploy</code> (<a href="https://docs.gitlab.com/ci/yaml/#stage">GitLab documentation</a>). Here we choose <code>build</code> since this is the compilation of our project.</p>
<p>À la suite nous chargeons une image docker qui contient les outils <code>texlive</code>.</p> <p>Next, we load a docker image that contains the <code>texlive</code> tools.</p>
<p>Et enfin la directive <code>script</code> définit en <code>bash</code> lenchaînement détapes que nous réalisons pour compiler le projet.</p> <p>Finally, the <code>script</code> directive defines in <code>bash</code> the sequence of steps we perform to compile the project.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Exécution conditionnelle de `biber`"> <div class="callout callout-style-default callout-note callout-titled" title="Conditional execution of `biber`">
<div class="callout-header d-flex align-content-center"> <div class="callout-header d-flex align-content-center">
<div class="callout-icon-container"> <div class="callout-icon-container">
<i class="callout-icon"></i> <i class="callout-icon"></i>
</div> </div>
<div class="callout-title-container flex-fill"> <div class="callout-title-container flex-fill">
Exécution conditionnelle de <code>biber</code> Conditional execution of <code>biber</code>
</div> </div>
</div> </div>
<div class="callout-body-container callout-body"> <div class="callout-body-container callout-body">
<p>Noter que nous navons pas mis dextensions dans <code>FILE_NAMES</code> afin de pouvoir détecter ici les fichiers bcf caractéristiques de la bibliographie.</p> <p>Note that we havent included extensions in <code>FILE_NAMES</code> so that we can detect here the bcf files characteristic of the bibliography.</p>
</div> </div>
</div> </div>
<p>Finalement, nous utilisons la directive <code>after_script</code> pour afficher dans les journaux de la CI les fichiers de logs des compilations.</p> <p>Finally, we use the <code>after_script</code> directive to display the compilation log files in the CI logs.</p>
<p>Enfin <code>artifacts</code> spécifie que les artéfacts que lon veut conserver de la CI sont tous les PDF à la racine du dépôt</p> <p>Lastly, <code>artifacts</code> specifies that the artifacts we want to keep from the CI are all PDFs at the root of the repository</p>
</section> </section>
<section id="la-phase-de-déploiement-deploy" class="level2"> <section id="the-deployment-phase-deploy" class="level2">
<h2 class="anchored" data-anchor-id="la-phase-de-déploiement-deploy">La phase de déploiement <code>deploy</code></h2> <h2 class="anchored" data-anchor-id="the-deployment-phase-deploy">The deployment phase <code>deploy</code></h2>
<div class="cell"> <div class="cell">
<div class="sourceCode cell-code" id="cb4"><pre class="sourceCode numberSource yaml number-lines code-with-copy"><code class="sourceCode yaml"><span id="cb4-1"><a href="#cb4-1"></a><span class="fu">deploy</span><span class="kw">:</span></span> <div class="sourceCode cell-code" id="cb4"><pre class="sourceCode numberSource yaml number-lines code-with-copy"><code class="sourceCode yaml"><span id="cb4-1"><a href="#cb4-1"></a><span class="fu">deploy</span><span class="kw">:</span></span>
<span id="cb4-2"><a href="#cb4-2"></a><span class="at"> </span><span class="fu">stage</span><span class="kw">:</span><span class="at"> deploy</span></span> <span id="cb4-2"><a href="#cb4-2"></a><span class="at"> </span><span class="fu">stage</span><span class="kw">:</span><span class="at"> deploy</span></span>
@ -427,56 +417,56 @@ Exécution conditionnelle de <code>biber</code>
<span id="cb4-34"><a href="#cb4-34"></a> echo "No PDF changes to commit"</span> <span id="cb4-34"><a href="#cb4-34"></a> echo "No PDF changes to commit"</span>
<span id="cb4-35"><a href="#cb4-35"></a> fi</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <span id="cb4-35"><a href="#cb4-35"></a> fi</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
</div> </div>
<p>Finalement nous déployons nos PDF. Pour cela on charge une image légère <code>Alpine Linux</code> avec la version Git sélectionnée dans les variables.</p> <p>Finally, we deploy our PDFs. For this, we load a lightweight <code>Alpine Linux</code> image with the Git version selected in the variables.</p>
<p>Avec la directive <code>before_script</code> on clone le dépôt.</p> <p>With the <code>before_script</code> directive, we clone the repository.</p>
<div class="callout callout-style-default callout-important callout-titled" title="Pour créer le token GitLab"> <div class="callout callout-style-default callout-important callout-titled" title="To create the GitLab token">
<div class="callout-header d-flex align-content-center"> <div class="callout-header d-flex align-content-center">
<div class="callout-icon-container"> <div class="callout-icon-container">
<i class="callout-icon"></i> <i class="callout-icon"></i>
</div> </div>
<div class="callout-title-container flex-fill"> <div class="callout-title-container flex-fill">
Pour créer le token GitLab To create the GitLab token
</div> </div>
</div> </div>
<div class="callout-body-container callout-body"> <div class="callout-body-container callout-body">
<p>Notez dans le <code>git clone</code> que nous employons une variable <code>GITLAB_TOKEN</code>, celle-ci est a créer au préalable et à déclarer dans le dépôt.</p> <p>Note in the <code>git clone</code> that we use a <code>GITLAB_TOKEN</code> variable, which must be created beforehand and declared in the repository.</p>
<p>Pour cela :</p> <p>To do this:</p>
<ol type="1"> <ol type="1">
<li>Rendez-vous dans les paramètre de votre dépôt.</li> <li>Go to your repository settings.</li>
</ol> </ol>
<div class="quarto-figure quarto-figure-center"> <div class="quarto-figure quarto-figure-center">
<figure class="figure"> <figure class="figure">
<p><img src="resources/ci-gitlab-latex/access-token-settings.png" class="img-fluid figure-img"></p> <p><img src="resources/ci-gitlab-latex/access-token-settings.png" class="img-fluid figure-img"></p>
<figcaption>Dans les menus de gauche, déplier “Settings” et rendez-vous dans “Access tokens”</figcaption> <figcaption>In the left menus, expand “Settings” and go to “Access tokens”</figcaption>
</figure> </figure>
</div> </div>
<ol start="2" type="1"> <ol start="2" type="1">
<li>Ici ajoutez un nouveau token.</li> <li>Here add a new token.</li>
</ol> </ol>
<div class="quarto-figure quarto-figure-center"> <div class="quarto-figure quarto-figure-center">
<figure class="figure"> <figure class="figure">
<p><img src="resources/ci-gitlab-latex/add-new-token.png" class="img-fluid figure-img"></p> <p><img src="resources/ci-gitlab-latex/add-new-token.png" class="img-fluid figure-img"></p>
<figcaption>Cliquer sur “Add new token”</figcaption> <figcaption>Click on “Add new token”</figcaption>
</figure> </figure>
</div> </div>
<ol start="3" type="1"> <ol start="3" type="1">
<li>En configurant les permissions <code>read_repository</code> et <code>write_repository</code> afin de pouvoir cloner et pousser nos fichiers. Puis cliquer sur “Create project access token”.</li> <li>Configure the <code>read_repository</code> and <code>write_repository</code> permissions to be able to clone and push our files. Then click on “Create project access token”.</li>
</ol> </ol>
<p><img src="resources/ci-gitlab-latex/scope.png" class="img-fluid"></p> <p><img src="resources/ci-gitlab-latex/scope.png" class="img-fluid"></p>
<ol start="4" type="1"> <ol start="4" type="1">
<li><p>Votre token est maintenant affiché, copiez le car il ne sera pas raffiché après.</p></li> <li><p>Your token is now displayed, copy it as it will not be displayed again.</p></li>
<li><p>Rendez-vous maintenant dans CI/CD settings.</p></li> <li><p>Now go to CI/CD settings.</p></li>
</ol> </ol>
<p><img src="resources/ci-gitlab-latex/ci-settings.png" class="img-fluid"></p> <p><img src="resources/ci-gitlab-latex/ci-settings.png" class="img-fluid"></p>
<ol start="6" type="1"> <ol start="6" type="1">
<li>Créer maintenant la variable en cliquant sur “Add variable”, nommez la <code>GITLAB_TOKEN</code>, dans “value” ajoutez le token copié.</li> <li>Now create the variable by clicking on “Add variable”, name it <code>GITLAB_TOKEN</code>, in “value” add the copied token.</li>
</ol> </ol>
</div> </div>
</div> </div>
<p>La suite du script déplace les PDF dans le dépôt cloné, crée la branche de publication et ajoute les pdf.</p> <p>The rest of the script moves the PDFs to the cloned repository, creates the publication branch and adds the pdfs.</p>
<p>Vous avez normalement maintenant une CI de compilation et publication de PDF ! Maintenant vous pouvez faire référence dans votre <code>README.md</code> à vos PDF en saisissant un lien du type :</p> <p>You should now have a CI for compiling and publishing PDFs! Now you can reference your PDFs in your <code>README.md</code> by entering a link like:</p>
<p><code>https://mongitlab.com/monnomutilisateur/mondepot/-/raw/monpdf.pdf</code></p> <p><code>https://mygitlab.com/myusername/myrepo/-/raw/mypdf.pdf</code></p>
<p>qui permet dafficher directement dans le navigateur le produit de la compilation. 😄</p> <p>which allows you to display the compilation output directly in the browser. 😄</p>
</section> </section>

View file

@ -28,18 +28,18 @@
"text": "Français" "text": "Français"
}, },
{ {
"objectID": "posts/ci-gitlab-latex.html#la-phase-de-compilation-build_tex", "objectID": "posts/ci-gitlab-latex.html#the-compilation-phase-build_tex",
"href": "posts/ci-gitlab-latex.html#la-phase-de-compilation-build_tex", "href": "posts/ci-gitlab-latex.html#the-compilation-phase-build_tex",
"title": "Faire une CI LaTeX avec GitLab", "title": "Faire une CI LaTeX avec GitLab",
"section": "La phase de compilation build_tex", "section": "The compilation phase build_tex",
"text": "La phase de compilation build_tex\nNous allons détailler létape build_tex :\n\nbuild_tex:\n stage: build\n image: registry.gitlab.com/islandoftex/images/texlive:latest\n script:\n - |\n for FILE_NAME in $FILE_NAMES\n do\n echo \"Compiling ${FILE_NAME}\"\n pdflatex --shell-escape ${FILE_NAME}.tex\n if test -f ${FILE_NAME}.bcf; then\n echo \"Found ${FILE_NAME}.bcf, running biber\"\n biber ${FILE_NAME}\n fi\n pdflatex --shell-escape ${FILE_NAME}.tex\n done\n after_script:\n - |\n for FILE_NAME in $FILE_NAMES\n do\n echo \"============================================\"\n cat ${FILE_NAME}.log\n echo \"============================================\"\n done\n\n artifacts:\n paths:\n - \"*.pdf\"\n\nOn déclare tout dabord le stage: build pour qualifier létape que lon réalise ici. Il y en a 3 possibles : build, test, deploy (documentation GitLab). Ici nous choisissons build puisquil sagit de la compilation de notre projet.\nÀ la suite nous chargeons une image docker qui contient les outils texlive.\nEt enfin la directive script définit en bash lenchaînement détapes que nous réalisons pour compiler le projet.\n\n\n\n\n\n\nExécution conditionnelle de biber\n\n\n\nNoter que nous navons pas mis dextensions dans FILE_NAMES afin de pouvoir détecter ici les fichiers bcf caractéristiques de la bibliographie.\n\n\nFinalement, nous utilisons la directive after_script pour afficher dans les journaux de la CI les fichiers de logs des compilations.\nEnfin artifacts spécifie que les artéfacts que lon veut conserver de la CI sont tous les PDF à la racine du dépôt" "text": "The compilation phase build_tex\nLets detail the build_tex step:\n\nbuild_tex:\n stage: build\n image: registry.gitlab.com/islandoftex/images/texlive:latest\n script:\n - |\n for FILE_NAME in $FILE_NAMES\n do\n echo \"Compiling ${FILE_NAME}\"\n pdflatex --shell-escape ${FILE_NAME}.tex\n if test -f ${FILE_NAME}.bcf; then\n echo \"Found ${FILE_NAME}.bcf, running biber\"\n biber ${FILE_NAME}\n fi\n pdflatex --shell-escape ${FILE_NAME}.tex\n done\n after_script:\n - |\n for FILE_NAME in $FILE_NAMES\n do\n echo \"============================================\"\n cat ${FILE_NAME}.log\n echo \"============================================\"\n done\n\n artifacts:\n paths:\n - \"*.pdf\"\n\nFirst, we declare stage: build to qualify the step were performing here. There are 3 possible stages: build, test, deploy (GitLab documentation). Here we choose build since this is the compilation of our project.\nNext, we load a docker image that contains the texlive tools.\nFinally, the script directive defines in bash the sequence of steps we perform to compile the project.\n\n\n\n\n\n\nConditional execution of biber\n\n\n\nNote that we havent included extensions in FILE_NAMES so that we can detect here the bcf files characteristic of the bibliography.\n\n\nFinally, we use the after_script directive to display the compilation log files in the CI logs.\nLastly, artifacts specifies that the artifacts we want to keep from the CI are all PDFs at the root of the repository"
}, },
{ {
"objectID": "posts/ci-gitlab-latex.html#la-phase-de-déploiement-deploy", "objectID": "posts/ci-gitlab-latex.html#the-deployment-phase-deploy",
"href": "posts/ci-gitlab-latex.html#la-phase-de-déploiement-deploy", "href": "posts/ci-gitlab-latex.html#the-deployment-phase-deploy",
"title": "Faire une CI LaTeX avec GitLab", "title": "Faire une CI LaTeX avec GitLab",
"section": "La phase de déploiement deploy", "section": "The deployment phase deploy",
"text": "La phase de déploiement deploy\n\ndeploy:\n stage: deploy\n image:\n name: alpine/git:${GIT_VERSION}\n entrypoint: [\"\"]\n\n before_script:\n # Clone le repo dans un dossier temporaire\n - git clone \"https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git\" \"${CI_COMMIT_SHA}\"\n\n # Configure lidentité git\n - git config --global user.email \"${GIT_USER_EMAIL:-$GITLAB_USER_EMAIL}\"\n - git config --global user.name \"${GIT_USER_NAME:-$GITLAB_USER_NAME}\"\n\n script:\n # Déplace les PDFs compilés dans le repo cloné\n - mv *.pdf \"${CI_COMMIT_SHA}/\"\n - cd \"${CI_COMMIT_SHA}\"\n\n # Crée une branche orpheline (vierge, sans historique ni fichiers)\n - git checkout --orphan \"${PDF_BRANCH}\"\n - git reset --hard\n\n # Ajoute uniquement les PDF\n - git add -f *.pdf\n\n # Vérifie sil y a des changements et push\n - |\n CHANGES=$(git status --porcelain | wc -l)\n if [ \"$CHANGES\" -gt \"0\" ]; then\n git commit -m \"${COMMIT_MESSAGE:-Updating PDF files}\"\n git push --force origin \"${PDF_BRANCH}\" -o ci.skip\n else\n echo \"No PDF changes to commit\"\n fi\n\nFinalement nous déployons nos PDF. Pour cela on charge une image légère Alpine Linux avec la version Git sélectionnée dans les variables.\nAvec la directive before_script on clone le dépôt.\n\n\n\n\n\n\nPour créer le token GitLab\n\n\n\nNotez dans le git clone que nous employons une variable GITLAB_TOKEN, celle-ci est a créer au préalable et à déclarer dans le dépôt.\nPour cela :\n\nRendez-vous dans les paramètre de votre dépôt.\n\n\n\n\nDans les menus de gauche, déplier “Settings” et rendez-vous dans “Access tokens”\n\n\n\nIci ajoutez un nouveau token.\n\n\n\n\nCliquer sur “Add new token”\n\n\n\nEn configurant les permissions read_repository et write_repository afin de pouvoir cloner et pousser nos fichiers. Puis cliquer sur “Create project access token”.\n\n\n\nVotre token est maintenant affiché, copiez le car il ne sera pas raffiché après.\nRendez-vous maintenant dans CI/CD settings.\n\n\n\nCréer maintenant la variable en cliquant sur “Add variable”, nommez la GITLAB_TOKEN, dans “value” ajoutez le token copié.\n\n\n\nLa suite du script déplace les PDF dans le dépôt cloné, crée la branche de publication et ajoute les pdf.\nVous avez normalement maintenant une CI de compilation et publication de PDF ! Maintenant vous pouvez faire référence dans votre README.md à vos PDF en saisissant un lien du type :\nhttps://mongitlab.com/monnomutilisateur/mondepot/-/raw/monpdf.pdf\nqui permet dafficher directement dans le navigateur le produit de la compilation. 😄" "text": "The deployment phase deploy\n\ndeploy:\n stage: deploy\n image:\n name: alpine/git:${GIT_VERSION}\n entrypoint: [\"\"]\n\n before_script:\n # Clone le repo dans un dossier temporaire\n - git clone \"https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git\" \"${CI_COMMIT_SHA}\"\n\n # Configure lidentité git\n - git config --global user.email \"${GIT_USER_EMAIL:-$GITLAB_USER_EMAIL}\"\n - git config --global user.name \"${GIT_USER_NAME:-$GITLAB_USER_NAME}\"\n\n script:\n # Déplace les PDFs compilés dans le repo cloné\n - mv *.pdf \"${CI_COMMIT_SHA}/\"\n - cd \"${CI_COMMIT_SHA}\"\n\n # Crée une branche orpheline (vierge, sans historique ni fichiers)\n - git checkout --orphan \"${PDF_BRANCH}\"\n - git reset --hard\n\n # Ajoute uniquement les PDF\n - git add -f *.pdf\n\n # Vérifie sil y a des changements et push\n - |\n CHANGES=$(git status --porcelain | wc -l)\n if [ \"$CHANGES\" -gt \"0\" ]; then\n git commit -m \"${COMMIT_MESSAGE:-Updating PDF files}\"\n git push --force origin \"${PDF_BRANCH}\" -o ci.skip\n else\n echo \"No PDF changes to commit\"\n fi\n\nFinally, we deploy our PDFs. For this, we load a lightweight Alpine Linux image with the Git version selected in the variables.\nWith the before_script directive, we clone the repository.\n\n\n\n\n\n\nTo create the GitLab token\n\n\n\nNote in the git clone that we use a GITLAB_TOKEN variable, which must be created beforehand and declared in the repository.\nTo do this:\n\nGo to your repository settings.\n\n\n\n\nIn the left menus, expand “Settings” and go to “Access tokens”\n\n\n\nHere add a new token.\n\n\n\n\nClick on “Add new token”\n\n\n\nConfigure the read_repository and write_repository permissions to be able to clone and push our files. Then click on “Create project access token”.\n\n\n\nYour token is now displayed, copy it as it will not be displayed again.\nNow go to CI/CD settings.\n\n\n\nNow create the variable by clicking on “Add variable”, name it GITLAB_TOKEN, in “value” add the copied token.\n\n\n\nThe rest of the script moves the PDFs to the cloned repository, creates the publication branch and adds the pdfs.\nYou should now have a CI for compiling and publishing PDFs! Now you can reference your PDFs in your README.md by entering a link like:\nhttps://mygitlab.com/myusername/myrepo/-/raw/mypdf.pdf\nwhich allows you to display the compilation output directly in the browser. 😄"
}, },
{ {
"objectID": "index.html", "objectID": "index.html",

View file

@ -96,16 +96,6 @@ ul.task-list li input[type="checkbox"] {
<a class="nav-link" href="./posts.html"> <a class="nav-link" href="./posts.html">
<span class="menu-text">Posts</span></a> <span class="menu-text">Posts</span></a>
</li> </li>
</ul>
<ul class="navbar-nav navbar-nav-scroll ms-auto">
<li class="nav-item">
<a class="nav-link" href="./interests.html">
<span class="menu-text">Personal interests</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="./../fr/">
<span class="menu-text">Français</span></a>
</li>
</ul> </ul>
</div> <!-- /navcollapse --> </div> <!-- /navcollapse -->
<div class="quarto-navbar-tools"> <div class="quarto-navbar-tools">