devops/README.html
Azmog 8154786e9b Add initial documentation for create_repo.sh and site structure
- Created example Markdown document with basic formatting and code block.
- Added configuration file for site settings including base URL and author.
- Introduced index page with project overview and links to documentation.
- Implemented detailed documentation for create_repo.sh, including usage, prerequisites, and response codes.
- Added custom 404 error page for better user experience.
- Developed HTML structure for create_repo.sh documentation with styling and layout.
- Created main index page with project description and links to relevant resources.
- Included robots.txt and sitemap.xml for search engine optimization.
- Established CSS styles for consistent design across the site.
- Set up base HTML template for consistent layout and navigation.
- Created templates for index and page rendering to streamline content management.
2026-06-15 17:01:11 +02:00

367 lines
13 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc 3.10" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Documentation - create_repo.sh</title>
<style>
/* Default styles provided by pandoc.
** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
*/
html {
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 12px;
}
h1 {
font-size: 1.8em;
}
}
@media print {
html {
background-color: white;
}
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
svg {
height: auto;
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
white-space: pre-wrap;
font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
font-size: 85%;
margin: 0;
hyphens: manual;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
border: none;
border-top: 1px solid #1a1a1a;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC ul {
padding-left: 1.3em;
}
#TOC > ul {
padding-left: 0;
}
#TOC a:not(:hover) {
text-decoration: none;
}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: 1.5em;}
div.column{flex: auto;}
@media screen {
div.columns{gap: min(4vw, 1.5em);}
div.column{overflow-x: auto;}
}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { color: #008000; } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { color: #008000; font-weight: bold; } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
</head>
<body>
<header id="title-block-header">
<h1 class="title">Documentation - create_repo.sh</h1>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#create_repo.sh" id="toc-create_repo.sh">create_repo.sh</a>
<ul>
<li><a href="#à-quoi-ça-sert" id="toc-à-quoi-ça-sert">À quoi ça
sert</a></li>
<li><a href="#prérequis" id="toc-prérequis">Prérequis</a></li>
<li><a href="#utilisation" id="toc-utilisation">Utilisation</a>
<ul>
<li><a href="#exemple" id="toc-exemple">Exemple</a></li>
</ul></li>
<li><a href="#détail-du-fonctionnement"
id="toc-détail-du-fonctionnement">Détail du fonctionnement</a>
<ul>
<li><a href="#la-requête-envoyée" id="toc-la-requête-envoyée">La requête
envoyée</a></li>
</ul></li>
<li><a href="#codes-de-réponse-possibles"
id="toc-codes-de-réponse-possibles">Codes de réponse possibles</a></li>
<li><a href="#bonne-pratique-de-sécurité"
id="toc-bonne-pratique-de-sécurité">Bonne pratique de sécurité</a></li>
</ul></li>
</ul>
</nav>
<h1 id="create_repo.sh">create_repo.sh</h1>
<p>Script Bash qui <strong>crée un dépôt sur la forge</strong>
(<code>forge.gwenaelremond.fr</code>) en appelant son API REST.</p>
<h2 id="à-quoi-ça-sert">À quoi ça sert</h2>
<p>Plutôt que de retaper une longue commande <code>curl</code> à chaque
fois, le script prend le <strong>nom</strong> et la
<strong>description</strong> du dépôt en arguments, et lit le
<strong>token dauthentification</strong> dans une variable
denvironnement (pour ne jamais lécrire en dur dans le code).</p>
<h2 id="prérequis">Prérequis</h2>
<ul>
<li><code>curl</code> (installé par défaut sur macOS et Linux)</li>
<li>Un <strong>token daccès</strong> à la forge (Settings →
Applications → Generate New Token)</li>
</ul>
<h2 id="utilisation">Utilisation</h2>
<div class="sourceCode" id="cb1"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co"># 1. Définir le token (une seule fois par session de terminal)</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="bu">export</span> <span class="va">FORGE_TOKEN</span><span class="op">=</span><span class="st">&quot;ton_token&quot;</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="co"># 2. Lancer le script</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="ex">./create_repo.sh</span> <span class="op">&lt;</span>nom_du_repo<span class="op">&gt;</span> <span class="pp">[</span><span class="st">&quot;description&quot;</span><span class="pp">]</span></span></code></pre></div>
<h3 id="exemple">Exemple</h3>
<div class="sourceCode" id="cb2"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="bu">export</span> <span class="va">FORGE_TOKEN</span><span class="op">=</span><span class="st">&quot;b103fb7f...&quot;</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./create_repo.sh</span> exercice <span class="st">&quot;Adam&quot;</span></span></code></pre></div>
<p>Cela crée le dépôt <strong>exercice</strong> avec la description
<strong>Adam</strong>.</p>
<h2 id="détail-du-fonctionnement">Détail du fonctionnement</h2>
<table>
<colgroup>
<col style="width: 75%" />
<col style="width: 25%" />
</colgroup>
<thead>
<tr>
<th>Partie du script</th>
<th>Rôle</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>set -euo pipefail</code></td>
<td>Arrête le script à la moindre erreur (sécurité)</td>
</tr>
<tr>
<td>Vérification de <code>FORGE_TOKEN</code></td>
<td>Refuse de tourner si le token nest pas défini</td>
</tr>
<tr>
<td><code>REPO_NAME</code> / <code>REPO_DESC</code></td>
<td>Récupère les arguments passés en ligne de commande</td>
</tr>
<tr>
<td><code>curl -X POST .../api/v1/user/repos</code></td>
<td>Envoie la requête de création à lAPI</td>
</tr>
</tbody>
</table>
<h3 id="la-requête-envoyée">La requête envoyée</h3>
<p>Le script construit cette requête HTTP :</p>
<div class="sourceCode" id="cb3"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">curl</span> <span class="at">-X</span> POST <span class="st">&quot;https://forge.gwenaelremond.fr/api/v1/user/repos&quot;</span> <span class="dt">\</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a> <span class="at">-H</span> <span class="st">&quot;Authorization: token </span><span class="va">$FORGE_TOKEN</span><span class="st">&quot;</span> <span class="dt">\</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a> <span class="at">-H</span> <span class="st">&quot;Content-Type: application/json&quot;</span> <span class="dt">\</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a> <span class="at">-H</span> <span class="st">&quot;accept: application/json&quot;</span> <span class="dt">\</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a> <span class="at">-d</span> <span class="st">&#39;{ &quot;name&quot;: &quot;exercice&quot;, &quot;description&quot;: &quot;Adam&quot; }&#39;</span></span></code></pre></div>
<h2 id="codes-de-réponse-possibles">Codes de réponse possibles</h2>
<table>
<thead>
<tr>
<th>Code HTTP</th>
<th>Signification</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>201</code></td>
<td>Dépôt créé avec succès</td>
</tr>
<tr>
<td><code>409</code></td>
<td>Un dépôt portant ce nom existe déjà</td>
</tr>
<tr>
<td><code>401</code></td>
<td>Token invalide ou manquant</td>
</tr>
</tbody>
</table>
<h2 id="bonne-pratique-de-sécurité">Bonne pratique de sécurité</h2>
<p>⚠️ <strong>Ne jamais écrire le token en clair</strong> dans le script
ni le commiter dans Git. Si un token a été exposé, le
<strong>révoquer</strong> et en générer un nouveau dans les paramètres
de la forge.</p>
</body>
</html>