Da quando ho spostato tutto il necessario per modellare X Files e i suoi compari (principalmente HWS) su GitHub, ho approfittato della cosa per operare una serie di cambiamenti anche al sito web ufficiale e ai profili dei miei Firefox (su Windows, macOS, Android e un numero non meglio definito di macchine virtuali), abbandonare definitivamente AdBlock Plus (preferendole uBlock Origin) e portare il rilascio delle liste su Raspberry Pi appoggiandomi a degli script bash che fanno il lavoro sporco oltre la “semplice” (si fa per dire) creazione dei filtri (te ne ho parlato in ABP X Files: nuovo processo di creazione della lista stabile e di HWS).
Stamattina (a oggi che sto scrivendo l’articolo, è l’epifania 2021) ho voluto provare a studiare le basi di GitHub Actions per automatizzare la creazione della lista sperimentale che uso sui miei profili Firefox per assicurarmi di non portare dentro filtri che potrebbero danneggiare la tua esperienza di navigazione quotidiana. Lascia che ti spieghi di cosa si tratta e cosa ho messo in piedi “in regia“.
eXperimental Files
È il nome della lista sperimentale, tutt’altro che stabile, è quella con cui posso fare danni senza dovermi preoccupare dell’impatto dato a migliaia di utilizzatori di X Files ufficiale. Ho voluto dare origine a questo nuovo file di filtri nel momento in cui – passando a uBlock Origin – toccava doversi portare dietro a mano i filtri scritti e salvati in un profilo macOS o Windows, in base all’ultimo PC da me utilizzato. È giovane e spuntata su GitHub da poco (prima usavo un mio spazio FTP), si appoggia a un diverso script di bash che la genera nella stessa identica maniera con cui do origine a X Files ufficiale ma chiaramente non annuncio alcunché su Twitter né tanto meno ne carico una copia nello spazio “di backup” che alcuni miei conoscenti utilizzano per problemi di raggiungibilità GitHub nei luoghi di lavoro (regole proxy altamente restrittive).
I passaggi fondamentali restano quindi gli stessi, così come il Raspberry con già tutto configurato a bordo:
git -C "/home/pi/Github/xfiles" pull cp /home/pi/Github/xfiles/contrib/xfiles_* ./ for s in xfiles_*; do (head -n 1 "${s}" && tail -n +2 "${s}" | sort) > "sorted_${s}"; done for f in sorted_*; do (cat "${f}") >> experimental.txt; done rm xfiles_* sorted_*
Dopo c’è giusto il commit & push su GitHub.
Comodo? Beh, diciamo di sì, si tratta di un comando da lanciare sul terminale. Immediato? Tutt’altro. Non si tratta di HWS che ho potuto mettere sotto Crontab e automatizzare, questa tocca “compilarla a mano“: aggiorno i filtri, push su GitHub (grazie all’immediatezza di Atom), entro in SSH sul Raspberry e lancio il comando che crea la nuova versione e la rende disponibile al pubblico (me in realtà, ma nessuno ti impedirà di usarla a tuo rischio e pericolo).
Ho pensato di automatizzare almeno quest’ultima parte, l’ho fatto con GitHub Actions.
Questione di workflow: GitHub Actions
Mai usato prima. Ho iniziato a studiarmelo un po’ stamattina. C’è la documentazione ufficiale, c’è tanto materiale sparso nella community, su YouTube e su una mezza miriade di altri siti web (StackOverflow in primis). Sono partito con il classico Hello World e poi ho iniziato a sperimentare, ho creato un repository apposito dove poter far danni senza rompere le scatole a nessuno, l’ho usato fino a quando non sono arrivato al risultato sperato, l’attuale, quello che ho portato in produzione.
GitHub Actions ti consente di creare workflow. Una serie di operazioni che puoi far eseguire automaticamente al servizio per ottenere un risultato che si adatti quanto più possibile alle tue esigenze. Puoi usare le più disparate tecnologie ma alla base ci sarà sempre un file YAML, “Yet Another Markup Language” (it.wikipedia.org/wiki/YAML), un linguaggio di programmazione relativamente giovane che non avevo mai utilizzato prima. Ti porto alla ciccia per spiegarti in maniera tutto sommato semplice ciò che accade:
name: ABP eXperimental Files on: push: paths: - 'contrib/xfiles_*' # push: # branches: [ master ] # pull_request: # branches: [ master ] workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Start engine run: sh ./sh/datetime.sh - name: Prepare list header run: | echo "[Adblock Plus 2.8]" > experimental.txt echo "! Version:" $update >> experimental.txt echo "! Title: ABP eXperimental Files: the unstable list" >> experimental.txt echo "! Fork sperimentale di X Files, si consiglia di usare la lista Stable!" >> experimental.txt echo "! Last modified:" $lastmodified >> experimental.txt echo "! Expires: 2 days" >> experimental.txt echo "! Homepage: https://xfiles.noads.it" >> experimental.txt echo "! Home: https://xfiles.noads.it" >> experimental.txt echo "! Blog: https://gioxx.org/tag/abpxfiles" >> experimental.txt echo "! Hosting: GitHub.com" >> experimental.txt echo "!" >> experimental.txt - name: The rocket is ready to be launched run: sh ./sh/make_experimental.sh - name: Commit run: | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" git add experimental.txt git commit -m "Experimental $update del $lastmodified" -a - name: Push changes uses: ad-m/github-push-action@v0.6.0 with: github_token: ${{ secrets.GHUB_TOKEN }} branch: ${{ github.ref }}
Il file si chiama make_experimental.yml
e si trova già nel repository ufficiale di X Files. Ti spiego per sommi capi cosa fa:
- tiene d’occhio le mie operazioni di push (mie o di qualsiasi collaboratore del repository di X Files) e si accerta che qualcosa sia cambiato all’interno della cartella
contrib
, più precisamente nei file con nome che comincia perxfiles_
. Se uno di quei file viene aggiornato allora entrerà in azione tutto quello che c’è dopo il primo blocco di codice. - Uno script di bash (
datetime.sh
) replica ciò che già fa oggi il Raspberry generando le variabili necessarie nell’intestazione della lista, ovvero la versione della lista e il giorno di rilascio. - Preparo a questo punto l’intestazione di lista inserendo riga per riga all’interno del temporaneo
experimental.txt
. - Un altro script di bash (
make_experimental.sh
) copia i file che iniziano perxfiles_
e se li porta in un’area temporanea dove verranno ordinati (escludendo la prima riga di ciascuno che fa da intestazione del blocco filtri) e poi concatenati tra di loro, ottenendo così unexperimental.txt
completo che potrà prendere il posto del precedente. - Non resta che fare il commit del nuovo file
experimental.txt
così da permettere a chiunque di aggiornare i propri filtri e verificare che nulla sia andato storto. Se non nasceranno problemi da questa lista sperimentale, la stessa diventerà stabile dopo qualche giorno, operazione che però preferisco tenere ancora manuale, passando dal Raspberry di casa.
Dopo svariati tentativi falliti a causa della mia scarsa capacità di muovermi su questo nuovo terreno, sono riuscito a fare centro e portare il repository di test a funzionare come volevo io. Ho replicato il tutto in produzione e sono molto contento che la modifica funzioni così come speravo, creando già tre versioni della lista sperimentale basate su alcuni nuovi filtri che ho caricato nella giornata odierna:
In conclusione
Piccole attività collaterali dalle quali cerco sempre di imparare qualcosa che potrebbe un domani tornarmi utile. Chiaramente avrei potuto continuare a creare la lista sperimentale con un solo comando e una finestra di Terminale aperta, eppure GitHub Actions mi ha dato la possibilità di rendere più snello il processo e farmi scoprire alcune funzioni che fino a oggi ho ignorato, là fuori è pieno di materiale dal quale trarre costantemente ispirazione, ogni tanto bisogna approfittarne.
Anche per stavolta è tutto. In caso di dubbi o domande particolari ti invito a utilizzare la solita area commenti sotto all’articolo che stai leggendo. Se poi ti senti particolarmente magnanimo e vuoi in qualche maniera ringraziarmi per il lavoro che svolgo ormai dal 2007 con le liste X Files, potresti approfittare di questo momento per offrirmi un caffè, una birra o ciò che più preferisci. Puoi sfruttare PayPal, Satispay (non sei ancora iscritto? Fallo subito per ottenere 5 euro in omaggio), Buy Me A Coffee o diventare sostenitore su Patreon. Se non vuoi spendere soldi puoi sempre fare acquisti su Amazon passando dal mio codice referral, il tuo prezzo non cambia ma io recupero una piccola commissione pagata direttamente da Amazon.
Buona navigazione! :-)
#StaySafe
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)