Rendus
Une coche verte en dit peu sur ce qu’un run a trouvé. Un rendu le montre : un badge de couverture, un tableau de benchmarks, un rapport de tests, une application web entière construite par le pipeline, directement dans la page du run.
Un rendu est un artefact de run qui a un point d’entrée, le fichier qu’il ouvre, comme index.html : le programme qui envoie l’artefact le lui donne. La page d’un run affiche ses rendus sous Rendus, un onglet par rendu, au-dessus de ses artefacts ; les pages publiques des runs affichent les rendus publics.
Affichages intégrés
La page du run affiche elle-même la plupart des fichiers, selon le type de média du point d’entrée, qui vient de son extension :
| Point d’entrée | Affiché comme |
|---|---|
| Image : PNG, JPEG, GIF, WebP, AVIF, SVG | L’image. Les fichiers SVG sont affichés comme des images, où leurs scripts ne s’exécutent jamais. |
| Markdown | Du texte mis en forme, avec ses tableaux. Le HTML brut est laissé de côté ; les images et les liens du même artefact fonctionnent, et les images venues d’ailleurs restent des liens, pour que leur hébergeur n’apprenne jamais qui consulte le run. |
| JSON | Un tableau pour une liste d’objets, un tableau de clés et de valeurs pour un objet, du JSON indenté sinon. |
| CSV, TSV | Un tableau des 1 000 premières lignes. |
| Autre texte | Le texte tel quel. |
| HTML | La page elle-même, sur un domaine à part. |
La page du run lit le fichier par son adresse stable, jusqu’à 5 Mo de texte ou 50 Mo d’image ; les fichiers plus gros sont proposés au téléchargement.
Rendus HTML
Un point d’entrée HTML tourne dans un cadre, servi depuis un domaine à part, avec un sous-domaine par autorisation d’affichage : pour le navigateur, chaque rendu est un autre site. Il n’atteint ni le stockage du tableau de bord, ni celui d’un autre rendu, et les frameworks qui s’appuient sur localStorage fonctionnent. Une autorisation dure une heure, et la page du run la renouvelle peu avant la fin. Ouvrir dans un nouvel onglet ouvre le rendu seul.
- Les chemins relatifs atteignent les fichiers de l’artefact, et les autres artefacts du run :
../metrics/data.jsondepuis/report/index.htmllit l’artefactmetrics. - Les chargements viennent de l’adresse du rendu lui-même et du stockage qui contient les artefacts du run. Toute autre origine, CDN et polices web compris, est bloquée : intégrez au rendu tout ce dont la page a besoin. Les scripts et styles en ligne fonctionnent.
- La taille d’un artefact qui a un point d’entrée est de 50 Mo au plus.
- Les rendus publics des runs publics sont ouverts à tout le monde, par des autorisations publiques qui n’atteignent que les artefacts publics.
Échanger avec la page du run
Un rendu et la page du run échangent des messages avec postMessage. La page accepte ceux qui viennent de l’origine du rendu lui-même, et ignore tous les autres.
| Message | De | Effet |
|---|---|---|
{ "type": "cadence.ci/height", "height": 640 } | Rendu | Fixe la hauteur du cadre, en pixels, entre 160 et 6000. |
{ "type": "cadence.ci/open", "url": "https://example.com" } | Rendu | Ouvre un lien http ou https dans un nouvel onglet. |
{ "type": "cadence.ci/ready" } | Rendu | Demande le thème. |
{ "type": "cadence.ci/theme", "theme": "dark" } | Page du run | Donne le thème, light ou dark, une fois le cadre chargé, sur demande, et à chaque changement. |
Un rendu qui suit le thème et sa propre hauteur :
const post = (message) => window.parent.postMessage(message, "*")
addEventListener("message", (event) => {
if (event.source === window.parent && event.data?.type === "cadence.ci/theme") {
document.documentElement.dataset.theme = event.data.theme
}
})
new ResizeObserver(() => {
post({ type: "cadence.ci/height", height: document.documentElement.scrollHeight })
}).observe(document.body)
post({ type: "cadence.ci/ready" })Pour aller plus loin
- Artefacts de run : envoyer des artefacts, accès et conservation.
- Stockage : les règles CORS dont les rendus ont besoin sur votre propre bucket.
- Voir les résultats : le reste de la page du run.