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