<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>GitHub Actions on David Davó&#39;s dev log</title>
    <link>/es/tags/github-actions/</link>
    <description>Recent content in GitHub Actions on David Davó&#39;s dev log</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>es</language>
    <copyright>© David Davó 2015 - 2024</copyright>
    <lastBuildDate>Thu, 01 Sep 2022 19:14:22 +0000</lastBuildDate><atom:link href="/es/tags/github-actions/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Compilando LaTeX bilingüe y publicándolo con GitHub pages</title>
      <link>/es/posts/tutorials/automatic-latex-cv/</link>
      <pubDate>Thu, 01 Sep 2022 19:14:22 +0000</pubDate>
      
      <guid>/es/posts/tutorials/automatic-latex-cv/</guid>
      <description>Hace tiempo que quería poner mi currículum en la página web, pero para ello debía asegurarme de que estaba SIEMPRE actualizado. Es decir, que se compilaba y publicaba automáticamente cada vez que realizase cambios en el fichero fuente.
Desde hace ya más de 5 años, mi currículum está escrito en LaTeX, usando (y modificando) la plantilla Awesome CV. Además, le añadí un par de cosas para hacerlo &amp;ldquo;bilingüe&amp;rdquo; y poder compilar o bien al inglés o al castellano, haciendo que el documento esté disponible en múltiples idiomas.</description>
      <content:encoded><![CDATA[<p>Hace tiempo que quería poner mi currículum en la página web, pero para ello
debía asegurarme de que estaba SIEMPRE actualizado. Es decir, que se compilaba y
publicaba automáticamente cada vez que realizase cambios en el fichero fuente.</p>
<p>Desde hace ya más de 5 años, mi currículum está escrito en LaTeX, usando (y modificando) la
plantilla <a href="https://github.com/posquit0/Awesome-CV">Awesome CV</a>. Además, le añadí
un par de cosas para hacerlo &ldquo;bilingüe&rdquo; y poder compilar o bien al inglés o al castellano,
haciendo que el documento esté disponible en múltiples idiomas.</p>
<p>Gracias a <code>iflang</code>, dependiendo de la opción que le pasemos al importar el paquete <code>babel</code>, se renderizará
el documento en un idioma u otro.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-latex" data-lang="latex"><span class="line"><span class="cl"><span class="k">\documentclass</span><span class="na">[a4paper]</span><span class="nb">{</span>awesome-cv<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="k">\usepackage</span><span class="na">[&lt;lang&gt;]</span><span class="nb">{</span>babel<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="k">\usepackage</span><span class="nb">{</span>iflang<span class="nb">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">\newcommand</span><span class="nb">{</span><span class="k">\es</span><span class="nb">}</span>[1]<span class="nb">{</span><span class="k">\IfLanguageName</span><span class="nb">{</span>spanish<span class="nb">}{</span>#1<span class="nb">}{}}</span>
</span></span><span class="line"><span class="cl"><span class="k">\newcommand</span><span class="nb">{</span><span class="k">\en</span><span class="nb">}</span>[1]<span class="nb">{</span><span class="k">\IfLanguageName</span><span class="nb">{</span>english<span class="nb">}{</span>#1<span class="nb">}{}}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">\begin</span><span class="nb">{</span>document<span class="nb">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">\es</span><span class="nb">{</span>¡Hola Mundo!<span class="nb">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">\en</span><span class="nb">{</span>Hello World!<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="k">\end</span><span class="nb">{</span>document<span class="nb">}</span>
</span></span></code></pre></div><p>Sin embargo, es necesario cambiar <code>&lt;lang&gt;</code> a mano, por lo que no puede ser automatizado. Una opción sencilla sería usar <code>sed</code> para modificar el fichero, pero puede no estar instalado en el sistema (si usas Windows) y me apetecía usar algo LaTeX puro.</p>
<p>Juan Carlos Fabero me dio la idea de usar un par de ficheros
envoltorio (<em>wrappers</em>) que simplemente definan la variable y e importen el contenido de <code>main.tex</code>. En cuanto al fichero principal, solo sería necesario añadir un par de líneas para comprobar si dicha variable está definida o no.</p>
<h3 id="modificación-maintex">Modificación <code>main.tex</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-latex" data-lang="latex"><span class="line"><span class="cl"><span class="c">% Usamos la variable si está definida
</span></span></span><span class="line"><span class="cl"><span class="c"></span><span class="k">\ifdefined\babellang</span>
</span></span><span class="line"><span class="cl">    <span class="k">\usepackage</span><span class="na">[\babellang]</span><span class="nb">{</span>babel<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="c">% Si no, usamos el por defecto (o cambiado manualmente desde el IDE)
</span></span></span><span class="line"><span class="cl"><span class="c"></span><span class="k">\else</span>
</span></span><span class="line"><span class="cl">    <span class="k">\usepackage</span><span class="na">[english]</span><span class="nb">{</span>babel<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="k">\fi</span>
</span></span></code></pre></div><h3 id="fichero-englishtex">Fichero <code>english.tex</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-latex" data-lang="latex"><span class="line"><span class="cl"><span class="k">\def\babellang</span><span class="nb">{</span>english<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="k">\input</span><span class="nb">{</span>main.tex<span class="nb">}</span>
</span></span></code></pre></div><h3 id="fichero-spanishtex">Fichero <code>spanish.tex</code></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-latex" data-lang="latex"><span class="line"><span class="cl"><span class="k">\def\babellang</span><span class="nb">{</span>spanish<span class="nb">}</span>
</span></span><span class="line"><span class="cl"><span class="k">\input</span><span class="nb">{</span>main.tex<span class="nb">}</span>
</span></span></code></pre></div><p>De esta manera, si compilamos <code>english.tex</code> se generará un documento en Inglés, y si compilamos <code>spanish.tex</code> se creará en castellano.</p>
<h2 id="automatizando-con-github-pages">Automatizando con GitHub pages</h2>
<p>No nos podemos olvidar de hacer que todo esto se haga de manera automática, sin tocar nada. Para ello, el CV está
en un <a href="https://github.com/daviddavo/22CV">proyecto de GitHub</a>, y cada vez que se hace un <em>commit</em>, se compila el fichero y se aloja usando GitHub pages. Así, queda el CV accesible desde <em>github.io</em>:</p>
<ul>
<li>Inglés: <a href="https://daviddavo.github.io/22CV/David_Davo_CV_English.pdf">https://daviddavo.github.io/22CV/David_Davo_CV_English.pdf</a></li>
<li>Castellano: <a href="https://daviddavo.github.io/22CV/David_Davo_CV_Spanish.pdf">https://daviddavo.github.io/22CV/David_Davo_CV_Spanish.pdf</a></li>
</ul>
<p>El <em>workflow</em> es bastante sencillo, lo creé directamente desde la página web modificando un poco el por defecto para que compile el PDF usando <a href="https://github.com/marketplace/actions/github-action-for-latex">latex-action</a>, y lo suba a GitHub pages. Ya de paso comprueba que
el PDF generado no tiene más de 2 páginas (un folio por las dos caras).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">CI</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Controls when the workflow will run</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">on</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Triggers the workflow on push or pull request events but only for the &#34;main&#34; branch</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">push</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&#34;main&#34;</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># Allows you to run this workflow manually from the Actions tab</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">workflow_dispatch</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># A workflow run is made up of one or more jobs that can run sequentially or in parallel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">jobs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">build</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># The type of runner that the job will run on</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Steps represent a sequence of tasks that will be executed as part of the job</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/checkout@v3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Build LaTeX</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">xu-cheng/latex-action@v2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">latexmk_use_xelatex</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c"># Compile multiple documents</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">root_file</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">            english.tex
</span></span></span><span class="line"><span class="cl"><span class="sd">            spanish.tex</span><span class="w">            
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Assert built files are 2 pages long</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">          sudo apt-get install -y poppler-utils
</span></span></span><span class="line"><span class="cl"><span class="sd">          [ $(pdfinfo english.pdf | awk &#39;/^Pages:/ {print $2}&#39;) -le 2 ]
</span></span></span><span class="line"><span class="cl"><span class="sd">          [ $(pdfinfo spanish.pdf | awk &#39;/^Pages:/ {print $2}&#39;) -le 2 ]</span><span class="w">          
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Build Github page</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">          mv english.pdf _site/David_Davo_CV_English.pdf
</span></span></span><span class="line"><span class="cl"><span class="sd">          mv spanish.pdf _site/David_Davo_CV_Spanish.pdf</span><span class="w">          
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Upload GitHub Pages artifact</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/upload-pages-artifact@v1.0.3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">deploy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">needs</span><span class="p">:</span><span class="w"> </span><span class="l">build</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Grant GITHUB_TOKEN the permissions required to make a Pages deployment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">permissions</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">pages</span><span class="p">:</span><span class="w"> </span><span class="l">write     </span><span class="w"> </span><span class="c"># to deploy to Pages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">id-token</span><span class="p">:</span><span class="w"> </span><span class="l">write  </span><span class="w"> </span><span class="c"># to verify the deployment originates from an appropriate source</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Deploy to the github-pages environment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">environment</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">github-pages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="l">${{ steps.deployment.outputs.page_url }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Specify runner + deployment step</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Deploy to GitHub Pages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l">deployment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/deploy-pages@v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">artifact-name</span><span class="p">:</span><span class="w"> </span><span class="l">build</span><span class="w">
</span></span></span></code></pre></div><p>El toque final está en una pequeña página html por si alguien entra en la raíz del GitHub pages (<a href="https://daviddavo.github.io/22CV">daviddavo.github.io/22CV</a>),
que simplemente redirige a mi página web personal.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
