-- Leo's gemini proxy

-- Connecting to gmi.osiux.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es_AR

Automate conversion of blog from *org-mode* to *Html*, *Markdown* and *Gemini* using *Docker image* `alpine-org2blog` and *GitLab CI*


AUTHOR: Osiris Alejandro Gomez

EMAIL: osiux@osiux.com

DATE: 2023-02-24 09:42


[IMG]

[1]


deuda técnica


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.


a refactorizar...


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].


la imagen esta desactualizada!


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`.


`alpine-org2blog`


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

`deploy-tgz2dir`


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

*automate all the things*


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` │
└─────────────┴────────────┴─────────────────┴───────────────────────┘

próximos pasos


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*


Te recomiendo leer


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]


ChangeLog


`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*


1: file:img/os1ux-alpine-org2blog.png

2: https://gitlab.com/osiux/osiux-links

3: https://gitlab.com/osiux/osiux.gitlab.io

4: https://gemini.circumlunar.space/

5: https://en.wikipedia.gmi/wiki/Markdown

6: gemini://gmi.osiux.com

7: https://osiux.lists.sh/

8: https://orgmode.gmi/

9: https://gitlab.com/osiux/org-bash-utils.git

10: https://github.com/iquiw/docker-alpine-emacs

11: https://www.docker.com/

12: https://pandoc.gmi/

13: https://gitlab.com/osiux/docker-alpine-org2blog.git

14: https://gitlab.com/osiux/docker-alpine-org2blog/-/raw/develop/Dockerfile

15: https://gitlab.com/osiux/osiux.gitlab.io/-/pipelines

16: https://gitlab.com/osiux/links-bash-utils/-/blob/develop/links2org

17: https://gitlab.com/osiux/osiux.gitlab.io/-/blob/master/publish.sh

18: https://gitlab.com/osiux/org-bash-utils/-/raw/develop/org2md

19: https://gitlab.com/osiux/org-bash-utils/-/raw/develop/org2gmi

20: 2023-02-14-howto-launch-gitlab-ci-from-other-gitlab-ci-repo-using-trigger.gmi

21: 2022-07-20-lists.sh-es-para-amantes-de-las-listas.gmi

22: 2021-04-28-gemini-es-para-amantes-del-texto-plano.gmi

23: 2021-03-16-todo-txt-es-una-lista-de-tareas.gmi

24: 2021-01-29-bookmarks-vs-links.gmi

25: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/ca4ce9e199e5f5e58707786cf0f4b44628d6d3bc

-- Response ended

-- Page fetched on Wed May 15 19:08:38 2024