-- Leo's gemini proxy
-- Connecting to gmi.osiux.com:1965...
-- Connected
-- Sending request
-- Meta line: 20 text/gemini;lang=es_AR
AUTHOR: Osiris Alejandro Gomez
EMAIL: osiux@osiux.com
DATE: 2023-02-24 09:42
[1]
Hace unos días automaticé la generación de `links.gmi` utilizando un repositorio por separado e interconectando la *CI* (*Integración Continua*) del *repo* `osiux-links` ^1[2] con el *repo* `osiux.gitlab.io` ^2[3] y de esta manera el `links.txt` se convierte a los formatos `.gmi` y `.html`
Tenía pendiente convertir `links.txt` a *Gemini* ^3[4] y *Markdown* ^4[5] para `gmi.osiux.com` ^5[6] y para `osiux.lists.sh` ^6[7].
Si bien partiendo desde `org-mode` ^7[8] ya tenía *scripts* que generaban los diferentes formatos para cada versión del *blog*, no estaba del todo automatizado el proceso de conversión y dependía de varios pasos manuales y era una deuda técnica resolverlo.
Inicialmente comencé /"refactorizando" / el `Makefile` y el `.gitlab-ci.yml` para contar con mayor claridad y simplificar la generación de todo el *blog*, eliminando todo archivo versionado que ahora es generado de manera dinámica y corrigiendo varias utilidades del *repo* `org-bash-utils` ^8[9].
Ni bien pude avanzar, el obstáculo con el que me topé, fue en la imagen `alpine-emacs` ^9[10] de `docker` ^10[11] que estaba usando, no lograba instalar `pandoc` ^11[12], que es vital para la conversión a *Markdown* y a *Gemini*.
Luego de probar varias alternativas fallidas de instalación manual, vi que esta imagen partía de `alpine v3.14` y el paquete de `pandoc` estaba disponible en `alpine v3.17`.
Entonces lo mas simple sería construir mi propia imagen *docker* `alpine-org2blog` ^12[13] agregando los paquetes faltantes.
La verdad, es que al final sacando cuentas, tardé menos en crear mi propio `Dockerfile` ^13[14], generar y publicar la nueva imagen que intentando instalar `pandoc` en la imagen anterior, y fueron pasos muy simples:
# docker build -t alpine-org2blog . [+] Building 23.5s (11/11) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 337B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/library/alpine:3.17 => [auth] library/alpine:pull token for registry-1.docker.io => CACHED [1/5] FROM docker.io/library/alpine:3.17@sha256:69665d02cb32192e52e07644d76bc6f25abeb5410edc1c7a81a10ba3f0efb90a => [internal] load build context => => transferring context: 62B => [2/5] RUN apk update && apk add ca-certificates emacs bash gawk imagemagick curl make pandoc py3-pip && pip3 install md2gemini => [3/5] WORKDIR /root => [4/5] COPY init.el /root/.emacs.d/ => [5/5] COPY entrypoint.sh / => exporting to image => => exporting layers => => writing image sha256:4e1af5c51323658be3210377b10fc470cdaaefa5b2af2371eeb651c1b633d549 => => naming to docker.io/library/alpine-org2blog # docker image tag alpine-org2blog os1ux/alpine-org2blog:latest # docker image push os1ux/alpine-org2blog:latest The push refers to repository [docker.io/os1ux/alpine-org2blog] bb529fc1eb88: Layer already exists e51f39d1beac: Pushed 5f70bf18a086: Layer already exists 0ae7bccd25cc: Pushed 7cd52847ad77: Layer already exists latest: digest: sha256:748b6c86f01b01d42fb5156154400b62efd706f4063e4d6179ec0546ff6ff843 size: 1361
Ahora que *Gitlab CI* ^14[15] se ocupa de generar mi *blog* en todos los formatos necesarios, cada vez que hay un cambio, solo necesitaba actualizar el *deploy* en cada *host* y para esto creé el *script* `deploy-tgz2dir` que se ocupa de descargar el *blog* comprimido en `.tar.gz` solo si es diferente del descargado la última vez comparando el `md5` y registrando lo realizado en el *log* `deploy-tgz2dir.log` cada vez que el *crontab* se ocupa de ejecutarlo:
# cat deploy-tgz2dir.log 2023-02-22 16:00:01 blasberry.osiux.com file=osiux.tar.gz size=372 remote=51499fe8a65b5956794b5bb32462949f local=31415926535897932384626433832795 deploy=1 seconds=137 2023-02-22 16:10:02 blasberry.osiux.com file=osiux.tar.gz size=372 remote=51499fe8a65b5956794b5bb32462949f local=51499fe8a65b5956794b5bb32462949f deploy=0 seconds=17 2023-02-22 16:20:01 blasberry.osiux.com file=osiux.tar.gz size=372 remote=51499fe8a65b5956794b5bb32462949f local=51499fe8a65b5956794b5bb32462949f deploy=0 seconds=5
Ahora puedo publicar directamente desde el teléfono espía, basta con ejecutar `git push` y *GitLab* hace su magia! Y cada sitio se actualiza en el formato que le corresponde! `:)`
El resumen de *scripts* usados para cada formato es el siguiente:
┌─────────────┬────────────┬─────────────────┬───────────────────────┐ │ *file* │ *format* │ *script* │ *requirements* │ ╞═════════════╪════════════╪═════════════════╪═══════════════════════╡ │ `links.gmi` │ *Org-mode* │ `links2org`[16] │ `curl`, `url2title` │ ├─────────────┼────────────┼─────────────────┼───────────────────────┤ │ `*.html` │ *HTML* │ =publish.sh[17] │ `emacs` │ ├─────────────┼────────────┼─────────────────┼───────────────────────┤ │ `*.md` │ *Markdown* │ `org2md`[18] │ `pandoc` │ ├─────────────┼────────────┼─────────────────┼───────────────────────┤ │ `*.gmi` │ *Gemini* │ =org2gmi[19] │ `pandoc`, `md2gemini` │ └─────────────┴────────────┴─────────────────┴───────────────────────┘
Si bien, el circuito esta automatizado, hay algunas tareas a realizar:
☐ mejorar la conversión a *Markdown* y *Gemini*
☐ automatizar el *deploy* de todos los *mirrors*
howto launch gitlab ci from other gitlab ci repo using trigger[20]
`lists.sh` es para amantes de las listas[21]
`gemini://` es para amantes del texto plano[22]
`todo.txt` es una lista de tareas[23]
bookmarks vs links.txt[24]
`2023-02-24 09:24`[25] agregar Automate conversion of blog from *org-mode* to *Html*, *Markdown* and *Gemini* using *Docker image* `alpine-org2blog` and *GitLab CI*
-- Response ended
-- Page fetched on Wed May 15 19:08:38 2024