Publié le 5 mai 2022 par Andrew Owen (7 minutes)
Dans cet article, je vais décrire une solution pour simplifier le processus de création de notes de version dans MadCap Flare sur Windows à partir d’une requête Jira. Jira est une plateforme populaire de suivi des problèmes de Atlassian. Mais cette approche peut également être adaptée à toute autre plateforme qui peut exporter des problèmes au format XML et à tout outil de documentation basé sur XML.
Nous allons exécuter un script à partir de la ligne de commande pour récupérer les informations dont nous avons besoin dans Jira, les traiter et produire un document Flare. Pour effectuer la récupération, nous utiliserons un outil appelé cURL (Client URL). Celui-ci devrait déjà être installé dans votre système d’exploitation, à moins que vous n’utilisiez une version de Windows antérieure à Windows 10.
Le traitement est effectué à l’aide d’un analyseur XSLT (eXtensible Stylesheet Language Transformations). Microsoft fournit MSXSL.EXE dans le cadre de Microsoft Core XML Services (MSXML) 6.0. Cependant, il ne prend en charge que XSLT 1.0. Je recommande donc d’utiliser Saxon, qui prend totalement en charge XSLT 3.0.
Vous aurez probablement besoin d’installer un processeur XSLT. Cela était autrefois compliqué, mais vous pouvez maintenant le faire avec node.js:
npm install -g saxon-js
npm install -g xslt3
Vous devriez probablement vérifier la politique informatique de votre entreprise avant de poursuivre. Vous devrez peut-être demander à votre service informatique d’installer le logiciel pour vous.
Saxon applique les instructions d’un fichier XSL pour transformer le XML brut récupéré par cURL en un document Flare avec le contenu requis.
Vous devrez créer une clé API Jira pour le script:
Jira2Flare
et cliquez sur Create.Remarque: vous ne devez utiliser cette clé API que dans votre script. Le script doit être stocké dans un endroit où vous êtes le seul à pouvoir y accéder. Si vous pensez que votre sécurité a été compromise, dans Jira, naviguez vers Create and manage API tokens, localisez le token et cliquez sur Revoke pour le désactiver.
Vous aurez également besoin de la chaîne de requête Jira. L’explication des requêtes Jira dépasse le cadre de cet article, je vais donc supposer que vous avez déjà une requête de recherche qui renvoie les notes de mise à jour pour une version spécifique du logiciel:
%
) par un signe de pourcentage double (%%
).fixversion
par %fixversion%
(avec des signes de pourcentage simples)."
) au début et à la fin de la chaîne.L’option Export XML formate la sortie sous forme de flux RSS. Cela détermine la structure du fichier XML, mais vous n’avez pas besoin de connaître quoi que ce soit sur les flux RSS pour les besoins de cet article.
Dans l’exemple de script, je suppose que vous avez un champ Jira personnalisé avec le nom Release Notes
. S’il s’appelle autrement, vous pouvez modifier le script en conséquence. S’il n’existe pas de champ équivalent pour vous indiquer quels tickets doivent être inclus dans une note de publication, vous devez demander à votre administrateur Jira d’en créer un.
En général, les versions dans Jira sont identifiées par une valeur fixversion. Nous pouvons créer un script Windows qui prend cette valeur en entrée et télécharge les résultats de la requête. Collez le texte suivant dans un éditeur de texte et enregistrez-le sous jira2flare.cmd
:
@echo off
echo Please enter a fix version:
set /p fixversion=""
cls
curl -o input.xml -u user@example.com:APIkey "Jira query with the % charcters escaped as %% and the fixversion entered as %fixversion%"
Transform input.xml j2f.xsl > output.html
Remplacez user@example.com
par votre adresse e-mail, APIkey
par votre clé API, et remplacez la chaîne de requête Jira par celle de votre éditeur de texte.
La dernière ligne du script effectue la transformation. Nous y reviendrons dans un instant. Avant d’effectuer la transformation, vous devez vérifier que la commande cURL fonctionne. Si tous les paramètres sont corrects, un fichier appelé input.xml
est créé.
Collez ce qui suit dans un éditeur de texte et sauvegardez-le sous j2f.xsl dans le même dossier que celui où vous avez sauvegardé jira2flare.cmd
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" MadCap:onlyLocalStylesheets="True">
<head>
<link rel="stylesheet" type="text/css" href="../Resources/Stylesheets/yourstyles.css" />
</head>
<body>
<h1>Release Notes</h1>
<table border="1">
<tr>
<th>Modules</th>
<th>Summary</th>
<th>Ticket</th>
<th>Category</th>
<th>Fix Versions</th>
</tr>
<xsl:for-each select="rss/channel/item/customfields/customfield">
<xsl:if test="customfieldname[text()='Release Notes']">
<tr>
<td>
<xsl:value-of select="../customfield/customfieldname[text()='Modules']/../customfieldvalues/customfieldvalue" />
</td>
<td>
<xsl:value-of select="customfieldvalues/customfieldvalue" disable-output-escaping="yes" />
</td>
<td>
<xsl:value-of select="../../key" />
</td>
<td>
<xsl:value-of select="../customfield/customfieldname[text()='Category']/../customfieldvalues/customfieldvalue" />
</td>
<td>
<xsl:value-of select="../../fixVersion" />
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Le fichier XSL détermine quelles informations du fichier XML (la requête Jira) sont incluses dans le document Flare et comment elles sont formatées. Vous pouvez modifier cela en éditant le fichier XSL. Dans cet exemple, nous voulons les Modules, Summary, Ticket, Category et Fix Versions.
Voici un bref résumé de ce que ce fichier de transformation demande au processeur XSLT de faire:
Les valeurs des balises XSL du tableau sont des instructions au processeur XSLT sur la façon de naviguer dans le fichier XML source. Si vous souhaitez en savoir plus sur la transformation de XML à l’aide de XSLT, w3schools propose une introduction.
Maintenant, lorsque vous exécutez le script jira2flare.cmd
, en plus du fichier input.xml
vous devriez obtenir un fichier output.html
que vous pouvez ouvrir directement dans Flare.
Une chose importante à garder à l’esprit est que si vous éditez normalement vos notes de version dans Flare, avec ce processus vous devriez faire vos changements dans Jira. Ceci a le double avantage que les révisions peuvent être faites dans Jira, et que vos notes de version publiées correspondront à vos tickets.
Les transformations XSL sont un outil puissant pour convertir des documents XML d’une forme à une autre. En effet, nous avons à peine effleuré la surface de ce qui est possible. Si vous souhaitez aller plus loin, vous pouvez demander à votre équipe de développement d’automatiser le processus. Mais nous espérons que ce que vous avez appris ici vous aidera à accélérer votre flux de travail pour les notes de version.
Donc, automatisation. Voici un exemple d’action GitHub:
name: RSS to Flare
on:
workflow_displatch
jobs:
rss2flare:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- shell: bash
env:
APIKEY: ${{ secrets.JIRA_API_KEY }}
FIXVERSION: ${{ vars.FIXVERSION }}
run: |
curl -o input.xml -u user.name@example.com:$APIKEY "<jira query including $FIXVERSION>"
- name: install Saxon and transform XML
run: |
npm install -g saxon-js
npm install -g xslt3
xslt3 -s:input.xml -xsl:rss2falre.xsl -o:output.html
- name: check for changes
id: changes
run |
git fetch origin main
echo "result=$(git diff -quiet origin/${{ github.base_ref }} ${{ github.sha }} - ./ || echo 'changes-found')" > $GITHUB_OUTPUT
continue-on-error: true
- name: No changes found
if: steps.changes.outputs.result != 'changes-found'
run: echo "No changes found in the '$({ env.working-directory })' folder in comparison to the 'main' branch. Skipping commit."
- name: Commit files
if: steps.changes.outputs.result == 'changes-found"
run: |
git config --local user.email "github-actions@users.noreply-github.com"
git config --local user.name "github-actions"
git add
git commit -a -m "Commit changes"
- name: Push changes
if: steps.changes.outputs.result == 'changes-found'
run: git push origin main
Image: Original par Danmeil Korpai.