Che Git sia uno strumento essenziale per lo sviluppatore moderno è un dato di fatto e non possiamo assolutamente perdere questo treno, soprattutto se ricordiamo che la nostra piattaforma preferita lo stia utilizzando. In fin dei conti se lo usa anche WordPress si sarà dimostrato uno strumento indispensabile, non credi?
In questo articolo non troverai un’introduzione a Git o agli strumenti che puoi utilizzare perché voglio concentrarmi meglio sull’aiutare lo sviluppatore WordPress che è in te e affrontare questo argomento tenendo ben chiara la nostra missione: lanciare aggiornamenti ai plugin dei nostri repository GitHub.
Proprio come successo un po’ di tempo fa quando ti ho presentato la libreria TGM per installare automaticamente alcuni plugin all’attivazione del tema, anche oggi parliamo di uno strumento che ti farà sicuramente gola.

Conoscere le soluzioni in grado di facilitare il tuo lavoro è una cosa essenziale e quello che spero tu abbia capito dai nostri corsi e articoli, è che non siamo qua per parlarti delle ultime novità perché le abbiamo trovate a giro per la rete, ma se scriviamo qualcosa è perché lo abbiamo testato con le nostre mani e confrontato con tecnologie già presentate. Da questo confronto nasce spesso qualcosa di interessante da condividere.
Se ci leggi da diversi anni ti sarai accortp per esempio che quando parliamo della creazione di ambienti di sviluppo per WordPress abbiamo iniziato parlando di MAMP, successivamente abbiamo trattato Vagrant e VVV per finire a parlare di Docker e di un utilissimo script realizzato dal nostro Eugenio. Questo accade perché nel tempo gli strumenti e le nostre conoscenze avanzano e per quanto le informazioni contenute nei vecchi articoli siano sempre valide, abbiamo un workflow diverso che ti vogliamo presentare.
Ovviamente ti ricordo che queste sono considerazioni personali, o di team come spesso accate, e per quanto tali ti invito a capire che non stiamo parlando dell’unico modo per fare una cosa ma che ti stiamo presentando una delle soluzioni. Questo perché anche se sono flussi di lavoro che abbiamo testato e che reputiamo migliori rispetto ad altri, non vogliamo assolutamente costringerti a usare una soluzione in particolare.
Vogliamo solo aiutarti e mantenerti aggiornato.
Se però sei alle tue prime esperienze nello sviluppo WordPress, se non hai mai pubblicato un plugin o se non hai mai utilizzato Git per uno qualsiasi dei tuoi progetti ti consiglio di evitare la lettura di questo articolo. Successivamente troverai delle nozioni che darò per scontato e la lettura potrebbe essere difficile.
Sono stato troppo cattivo? Beh se sei ancora qua e stai continuando a leggere probabilmente no.
Dal mio personale punto di vista ho dovuto filtrare un po’ il lettore di questo articolo perché non stiamo parlando di come installare un plugin o di come sfruttare le animazioni CSS per creare effetti accattivanti. In questo articolo parliamo proprio di un processo di lavoro differente. Ti mostrerò come sfruttare diverse tecnologie per migliorare il tuo flusso di lavoro, soprattutto se sviluppi codice e distribuisci i tuoi plugin.
Se sei mai passato dal processo di revisione dei plugin dovresti sapere che le cose sono un po’ cambiate…
Al giorno d’oggi il processo di revisione è molto più dettagliato e il nostro codice viene analizzato da diverse persone e questo è un ottimo beneficio, la qualità dei plugin presenti nel repository migliora e le nostre installazioni ne beneficiano. Purtroppo questa analisi manuale prende un po’ più di tempo e in alcuni casi dobbiamo anche aspettare delle settimane prima di pubblicare per il prima volta il nostro plugin.
Sotto certi punti di vista il repo dei plugin è rimasto un po’ indietro dal punto di vista tecnologico, è ancora su SVN e se desideri pubblicare i tuoi plugin o temi al tuo interno è richiesto l’uso di questo sistema di controllo versione al posto del più elastico Git.
Però se ci penso bene non è il processo di revisione o l’SVN che mi fa riflettere…
Piuttosto è il fatto che se non pubblichiamo sul repository di WordPress il nostro plugin, l’utente che ha installato il nostro software non potrà aggiornarlo nel modo automatico permesso dalla piattaforma.

Se non facciamo installare al nostro utente il plugin attraverso il repository WordPress non potremo mostrargli una schermata del genere e neanche avvisarli con le notifiche interne… Se ci pensi un attimo è lo stesso motivo che ha spinto plugin complessi come WooCommerce e simili a lanciare un plugin che potesse aggiornare tutti gli addon acquistati, perché non c’era altro modo per farli aggiornare automaticamente.
Se non hai mai installato plugin con add-on, ospitati al di fuori di WordPress.org, sappi che per gestire gli aggiornamenti richiedono di scaricare e installare un plugin aggiontivo che, passando la propria licenza, controllerà gli aggiornamenti presenti per gli add-on acquistati.
Oltre a questo, il sistema di aggiornamento permette anche di consultare delle informazioni dettagliate prima ancora di installare un aggiornamento, basta infatti cliccare su Visualizza i dettagli della versione 1.4.7 per avere a disposizione una finestra modale che prende le informazioni direttamente da WordPress.org.
Queste sono sicuramente delle funzionalità interne alla piattaforma che vengono usate quotidianamente da migliaia di utenti. Per quanto io apprezzi la velocità e la comodità di WP CLI, devo confessarti che la maggior parte degli aggiornamenti che faccio vengono eseguiti direttamente dalla bacheca WordPress.
L’altro lato della medaglia di tutte queste belle funzionalità è che dobbiamo usare SVN per poter pubblicare i nostri plugin nel repository, un CVS con una logica molto diversa dal comune Git e che richiede anche programmi di gestione differenti.
GitHub to the Rescue!
Ho aperto l’articolo dicendo che Git è un ottimo alleato per qualsiasi sviluppatore e sapere che con GitHub il codice open source può essere pubblicato gratuitamente e con decine di strumenti che ci aiuteranno a fornire supporto e scoprire nuovi bug non ha sicuramente prezzo, peccato che WordPress non ci consenta di collegare il nostro repo GitHub…
Ho voluto inserire questa veloce Skilled Answer giusto per proporti alcuni chiarimenti su cosa sia Git e la sua relazione con GitHub ma non è tanto della tecnologia che voglio parlare quest’oggi.
Preferisco mostrarti come sia possibile sfruttarla in modo da permetterci di salvare il nostro plugin in un repository all’interno di GitHub e sincronizzare questo il repository WordPress che distribuirà il tuo plugin. Grazie a questa soluzione sarai in grado di beneficiare della potenza degli strumenti offerti da GitHub e allo stesso tempo inviare gli aggiornamenti con l’aggiunta di un semplice tag.
Quello che serve per far funzionare il tutto è semplicemente un repository GitHub, contenente soltanto i file specifici del plugin, e qualche nozione di sviluppo che approfondiremo in questo articolo.
Che tipo di aggiornamento automatico?
Forse sei lì che ti stai chiedendo, perché fare tanta fatica per un processo di aggiornamento? In effetti questo è un quesito che ci poniamo soltanto nel caso in cui il nostro codice viene eseguito su macchine che non controlliamo, se il sito è sotto il mio controllo lo posso aggiornare senza troppi problemi.
Quindi questa tecnica si presta particolarmente bene per tutti coloro che desiderano sviluppare progetti commerciali e non, perché il nostro desiderio è quello di avere dei clienti che aggiornano con soddisfazione il nostro plugin. Sfrutto questa veloce analisi del “cliente ideale” per far capire che con molta probabilità gli utenti che vogliamo contattare non saranno persone che usano programmi FTP dalla mattina alla sera e quindi mandargli anche uno .zip
da installare non sarebbe la soluzione migliore.
Faccio questa piccola riflessione perché il sistema di aggiornamenti automatici di WordPress è veramente interessante, prima ho soltanto accennato alcune funzionalità ma le informazioni che si possono ottenere da Visualizza i Dettagli… sono molto approfondite e ci possono anche aiutare a capire che cosa è stato migliorato o corretto nella nuova versione:

Passare queste informazioni ai nostri utenti non ci permetterà soltanto di rassicurarli sul tipo di aggiornamento che stanno per fare, ma gli permetterà anche di vedere su cosa stiamo lavorando e partecipare anche fornendoci del semplice feedback.
Nel caso in cui decidessimo di non uilizzare il sistema di aggiornamenti automatici, anche se andiamo ad inserire tutte queste informazioni all’interno dei nostri .zip
, per i nostri utenti sarà sempre una situazione meno naturale rispetto alla possibilità di poter aggiornare i propri plugin direttamente dalla Bacheca.
Utilizziamo il codice da veri professionisti
Non sono qui a discutere quale sia il sistema migliore di aggiornamento, quello che sono a fare è descriverti come sia possibile utilizzare il proprio account GitHub per configurare un repository in modo da poter distribuire i nostri plugin.
Infatti da questo punto in poi parleremo di avere il tuo repository GitHub, magari privato, che utilizzi per gestire lo sviluppo del tuo plugin e che vuoi rilasciare ai tuoi utenti. La cosa importante è che una volta installato il tuo plugin, gli utenti non sentiranno neanche la differenza. Neanche si accorgeranno che gli aggiornamenti che stai lanciando provengono dai server di GitHub e non dal repository WordPress e questo è molto comodo soprattutto quando rilasciamo dei prodotti a pagamento.
In questa sezione andremo a scoprire come sia possibile integrare la classe WordPress GitHub Plugin Updater direttamente all’interno del nostro plugin, in questo modo potremmo eseguire tutte le operazioni da terminale senza dover perdere ulteriore tempo. Se però sei interessato a qualche strumento da utilizzare, ti suggerisco di leggere fino in fondo perché te lo presenterò prima della conclusione.
Partiamo intanto dalla soluzione che ti permetterà di lanciare un aggiornamento aggiungendo un semplice tag al tuo repository GitHub.
La classe che ti ho collegato precedentemente dovrà essere inclusa all’interno del plugin quindi, ipotizzando di aver installato la classe nella cartella inc/
dovremmo inserire qualcosa del genere nel file principale del plugin:
//Carico la classe Updater include_once "inc/updater.php"
Adesso che hai collegato la classe non devi far altro che configurare l’oggetto che vuoi ottenere. Praticamente dobbiamo configurarla fornendo informazioni che ci permetteranno di far capire alla classe dove si trova il nostro plugin, che versione abbiamo raggiunto, la versione minima di WordPress richiesta…
Giusto per limitare le parole e farti vedere quanto sia semplice con i tuoi stessi occhi ti lascio all’inizializzazione della classe:
if (is_admin()) { //nota l'uso si is_admin(), serve per rassicurarci che ci troviamo nel backend $config = array( 'slug' => plugin_basename(__FILE__), // l'abbreviazione del plugin 'proper_folder_name' => 'plugin-name', // il nome della cartella che contiene il nostro plugin 'api_url' => 'http://api.github.com/repos/nomeutente/nome-repository', // la GitHub API url del repository contenente il plugin 'raw_url' => 'http://raw.github.com/nomeutente/nome-repository/master', // la GitHub raw url del repository contenente il plugin 'github_url' => 'http://github.com/nomeutente/nome-repository', // la GitHub url del repository contenente il plugin 'zip_url' => 'http://github.com/nomeutente/nome-repository/zipball/master', // dove si trova l'archivio .zip del repository 'sslverify' => true, // se WordPress deve utilizzare un certificato SSL quando effettua il controllo sull'aggiornamento 'requires' => '3.0', // specificare quale versione di WordPress e' richiesta da questo plugin 'tested' => '3.3', // fino a che versione di WordPress hai testato il plugin? 'readme' => 'README.md', // quale file deve essere usato per controllare la versione del plugin? 'access_token' => '', // serve soltanto quando utilizziamo repository WordPress privati ); new WP_GitHub_Updater($config); }
Tutto quello che dovrai fare è trovare le URL richieste perché dopo questo passaggio non dovrai far altro che lavorare sul tuo plugin e raggiungere una nuova versione. Una volta raggiunta, per comunicare a tutte le installazioni del tuo plugin questo avvenimento, non dovrai far altro che modificare il file README.md
, il file di testo che abbiamo indicato durante l’inizializzazione dove verrà controllata la versione.
La modifica che dovrai fare è alla stringa composta in questo modo: ~Current Version:X.Y~
.
Assicurati di aver inserito correttamente la tilde e di rispettare questa sintassi perché questo è l’unico modo, fino alla prossima versione della classe, di comunicare a tutte le tue installazioni del plugin il cambiamento versione.
Usiamo le automazioni come gli esperti
Le automazioni sono incredibilmente comode e di cui talvolta non riesco proprio a fare a meno. Praticamente possiamo istruire un programma a fare una cosa al posto nostro nel momento più opportuno. In questo caso il momento più opportuno, quello identificato dallo strumento che ti sto per presentare, è la definizione di una nuova release all’interno del nostro repository GitHub.

Questa è una soluzione online gratuita che puoi collegare al tuo account GitHub per restare in ascolto dei rilasci delle nuove versioni attraverso l’uso delle release. Praticamente fa la stessa cosa della classi che ti ho appena presentato, ma senza la necessità di un modificare un singolo file.
Gli aggiornamenti vengono gestiti direttamente da GitHub.
Una volta collegato il nostro repository e aver dato i permessi a Ship di restare in ascolto sulle modifiche del repository contenente il nostro plugin, non dobbiamo far altro che rilasciare una Release e questo semplice servizio creerà una nuova versione del nostro plugin. A questo punto diventa di vitale importanza aggiungere il server SVN nel quale è presente il plugin nel repository WordPress per fare in modo che quest’ultimo venga aggiornato contemporaneamente con le modifiche presenti su GitHub.
Allo stesso tempo con questo servizio torniamo al punto di partenza dal quale siamo pratiti, anche se possiamo sfruttare la comodità di un sistema di controllo versione avanzato come GitHub alla fine andremo sempre a caricare il nostro plugin all’interno dei repository WordPress e dovremo rispettare la GPL2 rilasciando il nostro codice come Open Source.
Io non ho niente in contrario in tutto questo, ma come dicevo prima bisogna prendere le giuste scelte in base ai propri progetti.
Conclusione
Con questo articolo spero di averti ricordato quanto sia importante conoscere un sistema di controllo versione, sopratutto quando questo permette di mettersi in contatto e collaborare ancora più velocemente. Probabilmente tu stai usando una soluzione simile a quelle presentate, se fosse così mi piacerebbe sapere quale sia il processo che segui per raggiungere questo risultato e ti inviterei a spiegarlo a tutti i lettori di questo sito.
Non dimenticarti di condividere questo articolo con i tuoi colleghi prima di lasciare queste pagine, sono convinto che ci sono molte persone che conosci e che troverebbero utile questo contenuti; perché non le facciamo felici?
Grazie ancora per essere passato dalle nostre parti a leggere un altro dei nostri articoli, mi fa piacere averti tra i lettori e se hai qualcosa da dire non dimenticare di usare i commenti 😉
Ciao Andrea, avete avuto modo di provare kernl.us?
Ciao Simone,
onestamente non conoscevamo ancora il servizio che ci hai presentato ma onestamente siamo più vicini ai servizi offerti da Freemius, una nuova soluzione che permette di creare degli acquisti “in app” direttamente dal pannello di amministrazione WordPress.
Questo permette anche di pubblicare la versione base sul repository WordPress.org e lasciare che sia l’utente a sbloccare man mano le varie funzionalità a seconda delle proprie necessità.
Torneremo sicuramente a parlare di questo servizio e a descriverlo più da vicino perché il nostro Daniele sta lavorando spalla spalla con il creatore da diverso tempo e lo stiamo utilizzando per alcuni plugin che a breve rilasceremo.
Concludendo e rispondendo alla tua domanda, non credo che andremo a trattare da vicino questo servizio ma se hai esperienza e vuoi condividerla con i lettori di wpAndMore possiamo sempre valutare la possibilità di pubblicare il tuo articolo 😉
Spero di aver risposto ai tuoi dubbi e di averti fornito soluzioni interessanti.
A presto,
Andrea