ABP X Files e GitHub Actions: un’occhiata a experimental.txt

| |

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

ABP X Files e GitHub Actions: un'occhiata a experimental.txt 1

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 per xfiles_. 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 per xfiles_ 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ì un experimental.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:

ABP X Files e GitHub Actions: un'occhiata a experimental.txt 2

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! :-)

Gioxx's Wall

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon

Condividi l'articolo con i tuoi contatti: