Disinteressato

Come è nato questo sito (appunti sparsi)

Dovessi mai ricominciare tutto daccapo, scrivo due righe su come ho impostato questo sito e su come viene pubblicato.

Questa cosa di farmi un sito per scrivere i miei pensieri o qualche appunto è da parecchio che ce l’ho in mente, saranno almeno 3 anni, ma tra le vicissitudini da ormai ex linuxaro ed il voler trovare una soluzione semplice da impostare, da manutenere e, nel caso, da replicare, non sono mai riuscito a portarla a termine.
Adesso, finalmente, ho trovato la quadra giusta.

Hugo

Hugo è il generatore di siti statici che utilizzo per questo sito. Non ne tesso le lodi perché non ne ho provati altri, ma funziona, è facile da usare, è comprensibile ed anche molto diffuso.

Installo anche pygments che serve per la colorazione della sintassi:

$ brew install hugo pygments

Per la configurazione rimando al sito ufficiale perché senza alcun dubbio è più completo ed esaustivo di quanto io possa mai esserlo.

Git e GitHub

Prerequisito fondamentale è avere un account GitHub ed aver creato due repository: uno privato per il codice sorgente ed un’altro pubblico per la pubblicazione con GitHub Pages.

Installare e configurare Git:

$ brew install git
$ git config --global user.name “[GitHub_Username]”
$ git config --global user.email "1234567+[GitHub_Username]@users.noreply.github.com"
$ git config --global color.ui auto
$ git config --global merge.conflictstyle diff3
$ git config --global init.defaultBranch main
$ git config --global pull.rebase false
$ git config --list

Io ho deciso di firmare i commit con la mia chiave GPG (assolutamente opzionale):

$ brew install gnupg pinentry-mac

Creare una chiave GPG

$ gpg --full-generate-key

Per favore scegli che tipo di chiave vuoi: RSA e RSA
Che chiave vuoi? 4096
Chiave valida per? 0
Nome e Cognome: GitHub_Username
Indirizzo di Email: 1234567+[GitHub_Username]@users.noreply.github.com
Commento: GitHub

Visualizzare la chiave appena generata:

$ gpg --list-secret-keys --keyid-format=long
/Users/name/.gnupg/pubring.kbx
------------------------------------
sec   rsa4096/EE05XXXXXXXXXXXX 2021-10-30 [SC]
      215556521B98225XXXXXXXXXXXXXXXXXXXXXXXXX
uid                 [ultimo] [GitHub_Username] (GitHub) <1234567+[GitHub_Username]@users.noreply.github.com>
ssb   rsa4096/A226A4XXXXXXXXXX 2021-10-30 [E]

Questo comando copia la chiave che successivamente andremo ad inserire qui tra le impostazioni del nostro account GitHub:

$ gpg --armor --export EE05XXXXXXXXXXXX | pbcopy

Configurare Git in modo che utilizzi questa chiave per firmare i commit:

$ git config --global user.signingkey EE05XXXXXXXXXXXX
$ git config --global commit.gpgSign true
$ git config --global tag.forceSignAnnotated true

Configurare anche macOS:

$ micro ~/.zshrc

export GPG_TTY=$(tty)

$ micro ~/.gnupg/gpg-agent.conf

pinentry-program /opt/homebrew/bin/pinentry-mac

$ gpgconf --kill gpg-agent

Questo è il comando da utilizzare se dovesse esserci la necessità di esportare la chiave privata:

$ gpg --export-secret-keys 1234567+[GitHub_Username]@users.noreply.github.com  > private.key

Pubblicazione

A questo punto rimane solo da configurare GitHub Pages ed automatizzare la pubblicazione usando GitHub Actions: nello specifico actions-gh-pages.
Il risultato finale che si ottiene è che ogni volta che viene aggiornato il codice sorgente e viene fatto un push in GitHub parte automaticamente il processo di pubblicazione del sito.

Creare le chiavi pubbliche e private per la pubblicazione:

ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""

Questo comando genererà i file gh-pages e gh-pages.pub: il primo è la chiave privata, mentre il secondo la chiave pubblica.

Nel repository del codice sorgente, in Settings > Secrets > Actions > Add new secrets col nome di ACTIONS_DEPLOY_KEY copiare il contenuto della chiave privata, che si ottiene con questo comando:

pbcopy < gh-pages

Allo stesso modo, nel repository di pubblicazione con GitHub Pages, in Settings > Deploy Key > Add new deploy key col nome di PUBLIC_DEPLOY_KEY copiare il contenuto della chiave pubblica e spuntare Allow write access:

pbcopy < gh-pages.pub

Nel repository del codice sorgente creare il file .github/workflows/gh-pages.yaml inserendo il seguente contenuto e modificando GitHub_Username/GitHub_Pages_Repository con i propri riferimenti:

name: hugo publish

on:
  push:
    branches:
    - main

jobs:
  build-deploy:
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v2

    - name: Setup Hugo
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: 'latest'

    - name: Build
      run: hugo --minify

    - name: Deploy
      uses: peaceiris/actions-gh-pages@v2
      env:
        ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
        EXTERNAL_REPOSITORY: GitHub_Username/GitHub_Pages_Repository
        PUBLISH_BRANCH: main
        PUBLISH_DIR: ./public
      with:
        emptyCommits: false
        commitMessage: ${{ github.event.head_commit.message }}

Questo è quanto. Ho volutamente saltato alcuni passaggi, come la configurazione di Hugo e la sua integrazione con Git/GitHub perché non voglio che questo sia un tutorial passo passo, ma sono semplicemente delle integrazioni personali alle varie guide che si possono trovare in rete, molte meritevoli di lettura e di sicuro ricche di spunti interessanti: non c’è mai un’unica via da percorrere per arrivare allo stesso risultato finale.