Actions GitHub et LaTeX: soulever, télécharger

Dans cet article, nous allons configurer un pipeline dans GitHub pour créer automatiquement des fichiers PDF, puis les publier dans les versions. Nous créons également un petit site de cartes de visite avec un lien vers les dernières versions.



Le matériel sera utile pour les débutants et ceux qui veulent augmenter rapidement CI / CD pour latex avec des outils GitHub intégrés.



introduction



En parcourant le référentiel avec mon CV l'autre jour (je le fais en latex, heureusement, il existe de nombreux modèles ), j'ai pensé qu'il serait bien d'organiser une sorte de lieu unique où se trouve toujours la version actuelle du document.



Les exigences de base étaient simples:



  1. Avec un minimum d'effort pour augmenter le site avec des versions;
  2. Rendre automatique les mises à jour du contenu du site.


Une solution sous la forme d'un pipeline a été dessinée dans ma tête:



  1. Poussez le commit sur GitHub;
  2. Création de fichiers .tex dans CI / CD;
  3. Soumettre des fichiers PDF collectés aux versions de GitHub;
  4. Mise à jour des fichiers pdf sur le site de la carte de visite.


Dans cet article, nous examinerons de plus près chaque étape. Le site sera GitHub Pages. Pour CI / CD, nous utiliserons les actions GitHub.



Nous avons besoin:



  • Compte GitHub;
  • Outils de compilation LaTeX;
  • Tout éditeur de texte (j'utilise VIM configuré pour latex );


Aller!



Connexion des actions GitHub



Ici, toutes les actions peuvent être effectuées à partir du site sans recourir à la console.



Allez dans "Actions" (souligné en rouge).





et trouvez la carte "Flux de travail simple" là-bas, où nous appuyons sur le bouton "Configurer ce flux de travail"





Un éditeur avec un modèle de workflow s'ouvrira devant nous. Il vaut la peine de s'attarder plus en détail sur ce point.



Les actions GitHub fonctionnent avec les workflows , qui sont décrits dans des fichiers séparés. Chaque flux de travail comprend:



  1. Nom (section name: …);
  2. Conditions de départ (section on: …);
  3. Liste des tâches à effectuer (section jobs: …)


Chaque travail se compose également de petits morceaux appelés step . Chaque étape est une action atomique (réalisée en une seule fois). Dans ce cas, step a son propre nom ( name: …) et une liste de commandes ( run: …), et peut également utiliser une action prête à l'emploi ( uses: …) de développeurs tiers.



Les actions de tiers sont la partie la plus puissante des actions GitHub. Ils peuvent faire beaucoup de choses: installer le JDK , exécuter des tests python dans tox, etc. Dans ce tutoriel, nous utiliserons xu-cheng / latex-action @ v2 pour compiler latex (il n'y a pas eu de problèmes avec le cyrillique) etactions / upload-artifact @ v2 pour télécharger des artefacts.



Revenons à notre éditeur. Le modèle proposé peut être corrigé, l'amenant au formulaire:



name: Build and deploy latex sources to GitHub Pages

on: push

jobs:

  build:

    #  ,     .  ubuntu

    runs-on: ubuntu-latest

    steps:

    #    action,    

    - uses: actions/checkout@v2

    #  

    - name: Build document

      uses: xu-cheng/latex-action@v2

      with:

        # ,     

        root_file: main.tex

        #    . 

        working_directory: latex_sources/

        # ,     (latexmk)

        # -jobname=<name>      

        args: -jobname=my_doc -pdf -file-line-error -halt-on-error -interaction=nonstopmode

        compiler: latexmk

    #   pdf-

    - name: Upload pdf document

      uses: actions/upload-artifact@v2

      with:

        #       

        name: my_doc

        #    pdf.   «*», «**»

        #   <working_directory>/<jobname>.pdf

        path: latex_sources/my_doc.pdf



Enregistrez-le dans un fichier, choisissez n'importe quel nom pour le fichier (vous pouvez utiliser latex.yml). Après avoir validé la création du fichier aux éditeurs Web, la première version doit aller dans GitHub Actions, à la suite de quoi un artefact apparaîtra - le pdf compilé.





Hourra! Vous pouvez maintenant commencer à publier.



Configurer les versions automatiques



Le système de publication sur GitHub a une fonctionnalité: une version est toujours liée à un commit avec une balise. Par conséquent, nous avons deux options:



  1. Ajoutez manuellement des balises aux commits pour lesquels nous voulons collecter et publier des fichiers pdf;
  2. Baliser automatiquement tous les commits et les libérer.


Pour moi, la deuxième option me semblait plus pratique. Je m'engage et pousse habituellement juste quand le travail est terminé (soit logiquement soit pour aujourd'hui). Par conséquent, à l'avenir, je parlerai de lui.



Pour créer une version, nous utiliserons l' action actions / create-release @ v1 et pour télécharger un fichier pdf dans la version créée (oui, il est téléchargé séparément), nous utilisons actions / upload-release-asset @ v1 .



Ajoutons un nouveau travail:



 deploy:

    runs-on: ubuntu-latest

    #      master. ,   

    if: github.ref == 'refs/heads/master'

    #      job.    .

    needs: [build]

    steps:

      #  ,   bash-    

      - name: Variables

        # id  :         step

        id: vars

        # echo          ${{ steps.<step_id>.outputs.<variable_name> }}

        #   | —    yaml. ,          

        run: |

          echo «::set-output name=date::$(date +'%Y-%m-%d')»

          echo «::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)»

      - name: Download artifacts

        uses: actions/download-artifact@v2

        with:

          #   ,     upload-artifact

          name: my_doc

      - name: Create Release

        uses: actions/create-release@v1

        id: create_release

        env:

          #  .,   GITHUB_TOKEN

          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions

        with:

          #    step  id=vars (. ). 

          #    “my_doc-< >-< 8   sha >

          tag_name: my_doc-${{ steps.vars.outputs.date }}-${{ steps.vars.outputs.sha8 }}

          # ,     

          release_name: My Actions document (version ${{ steps.vars.outputs.date }})

          #       ,     false

          draft: false

          prerelease: false

      #      step

      - name: Upload pdf asset

        uses: actions/upload-release-asset@v1

        env:

          #   

          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

        with:

          #   step  id=create_release  upload_url —     

          upload_url: ${{ steps.create_release.outputs.upload_url }}

          #     latex_sources,  download-artifacts    

          asset_path: ./my_doc.pdf

          # ,     

          asset_name: my_asset_name.pdf

          asset_content_type: application/pdf



Ajoutez au fichier de workflow, validez les modifications. Allez dans Actions et voyez qu'une étape supplémentaire a été ajoutée:





Dans le même temps, le pdf compilé est également apparu dans les versions.



La seule chose qui reste est de le télécharger sur le site.



Ouvrir les pages GitHub



GitHub permet à chaque projet de créer une page Web et fournit un hébergement gratuit pour celle-ci. Mais vous n'avez pas besoin de connaître JS / CSS / HTML pour écrire quelque chose de valable! Prêt à l'emploi, le service propose plusieurs jolis modèles qui résolvent complètement le problème de mise en page. Tout ce que vous avez à faire est de remplir le document Markdown, et le système s'occupe du reste.



Nous allons dans la section "Paramètres" du référentiel et dans l'onglet "Options" (ouvert en premier par défaut) descendez jusqu'à "Pages GitHub".





Ici, nous sélectionnons la branche master comme source et / docs comme dossier (vous pouvez également utiliser le / root, mais je préfère garder le nombre minimum de fichiers à la racine du projet). Cliquez sur "Enregistrer".



Le bouton "Sélecteur de thème" ouvre une galerie de modèles, où chacun peut être poussé, visualisé et sélectionné en cliquant sur le bouton vert "Sélectionner un thème".



Après avoir choisi un thème, nous serons jetés dans l'éditeur web, où il est proposé d'éditer le fichier Markdown, qui deviendra alors le site. Ici, vous pouvez décrire tout ce que votre cœur désire: d'une simple présentation de vous-même aux objectifs du document et aux caractéristiques de l'œuvre.



Une fois que vous êtes satisfait du contenu, validez vos modifications.



Où est ma page?



Le lien vers la page assemblée est toujours stocké dans Paramètres -> Pages GitHub. Il est préférable de l'enregistrer sur le site Web du référentiel (l'engrenage à côté du champ «À propos» de la page principale) pour ne pas le perdre.



Téléchargement de la dernière version



Il y a une petite astuce: la dernière version et tous ses fichiers peuvent toujours être référencés en remplaçant la balise de validation dans l'URL par "latest". Dans notre exemple, pour obtenir le fichier my_asset_name.pdf de la dernière version, vous devez insérer un lien https://github.com/<your_username>/<repo_name>/releases/latest/download/my_asset_name.pdf.



Dans mon cas, c'était: https://github.com/alekseik1/github_actions_latex_template/releases/latest/download/my_asset_name.pdf .



Après ces étapes, les pages GitHub sont toujours liées à la dernière version.



Résultat



Nous avons configuré des actions GitHub pour créer automatiquement un fichier pdf, le mettre en version et ouvrir un site sur les pages GitHub contenant la version la plus récente. La version finale du projet est disponible ici .



Merci de votre attention!



All Articles