Suggerimento rapido distribuzione di un plug-in da Git a WordPress.org

Stai sviluppando un plug-in su GitHub e ora sei pronto per distribuirlo su WordPress.org ... uh-oh, lo sviluppo di plugin per WordPress.org avviene tramite SVN. Ora cosa? Non preoccuparti, c'è una sceneggiatura per questo.

Recentemente ho sviluppato un plugin per WordPress che volevo pubblicare nella directory dei plugin di WordPress.org. Oggi preferisco usare Git come software di controllo delle versioni (ho usato SVN), ma la directory dei plugin usa SVN. Fortunatamente, c'è un bel script disponibile su GitHub chiamato "Github to WordPress Plugin Directory Deployment Script" per permettermi di sviluppare con Git, e poi distribuire direttamente al repository SVN su WordPress.org quando sono pronto per rilasciare la versione più recente.

Questa versione della sceneggiatura è di Ben Balter, che è stato biforcato da una sceneggiatura simile di Brent Shepherd, che è stata biforcuta da una sceneggiatura di Dean Clatworthy. Ognuno di loro ha apportato vari miglioramenti a quello precedente, e ho trovato il risultato finale davvero utile.

Ho creato il mio fork di questo script che uso, quindi ha il mio nome utente SVN.


Il copione

 #! / bin / bash # # Script da distribuire da Github a WordPress.org Plugin Repository # Una modifica dello script di distribuzione di Dean Clatworthy come trovato qui: https://github.com/deanc/wordpress-plugin-git-svn # La differenza è che questo script risiede nel repository git del plugin e non richiede un repository SVN esistente. # Fonte: https://github.com/thenbrent/multisite-user-management/blob/master/deploy.sh #prompt per plug-in slug echo -e "Plugin Slug: \ c" leggi PLUGINSLUG # main config, set off di plugin slug CURRENTDIR = "pwd" CURRENTDIR = "$ CURRENTDIR / $ PLUGINSLUG" MAINFILE = "$ PLUGINSLUG.php" # questo dovrebbe essere il nome del tuo file php principale nel plugin wordpress # git config GITPATH ​​= "$ CURRENTDIR /" # questo file dovrebbe essere nella base del tuo repository git # svn config SVNPATH = "/ tmp / $ PLUGINSLUG" # percorso verso un repository temporaneo SVN. Nessuna barra finale richiesta e non aggiungere il tronco. SVNURL = "http://plugins.svn.wordpress.org/$PLUGINSLUG/" # Repo remoto SVN su WordPress.org, senza barra finale SVNUSER = "benbalter" # il tuo nome utente svn # Cominciamo ... echo "..." echo echo "Preparazione per distribuire il plugin WordPress" echo echo "..." echo # Controlla la versione in readme.txt è uguale al file plugin NEWVERSION1 = "grep" ^ Tag stabile "$ GITPATH ​​/ readme.txt | awk -F" stampa $ 3  Versione "echo" readme: $ NEWVERSION1 "NEWVERSION2 =" grep "^ Versione" $ GITPATH ​​/ $ MAINFILE | awk -F "print $ 2" echo "$ MAINFILE version: $ NEWVERSION2" se ["$ NEWVERSION1"! = "$ NEWVERSION2"]; quindi echo "Le versioni non corrispondono. Esci ..."; uscita 1; fi echo "Le versioni corrispondono nel file readme.txt e PHP. Procediamo ..." cd $ GITPATH ​​echo -e "Inserisci un messaggio di commit per questa nuova versione: \ c" leggi COMMITMSG git commit -am "$ COMMITMSG" echo "Tagging new versione in git "tag git -a" $ NEWVERSION1 "-m" Tagging version $ NEWVERSION1 "echo" Spingendo l'ultimo commit all'origine, con i tag "git push origine master git push origine master - tag echo echo" Creazione di copia locale di SVN repo ... "svn co $ SVNURL $ SVNPATH echo" Ignorare file specifici di github e script di distribuzione "svn propset svn: ignore" deploy.sh README.md .git .gitignore "" $ SVNPATH / trunk / "#export git -> SVN echo "Esportando l'HEAD del master da git al tronco di SVN" git checkout-index -a -f --prefix = $ SVNPATH / trunk / #if sottomodulo esistono, ricorsivamente controllano i loro indici se [-f ".gitmodules"] quindi echo "Esportare l'HEAD di ogni sottomodulo da git al trunk di SVN" sottomodulo git init git submodule update git submodule foreach --recursive 'git checkout-index -a -f --prefix = $ SVNPA TH / trunk / $ path / 'fi echo "Modifica directory in SVN e commit to trunk" cd $ SVNPATH / trunk / # Aggiungi tutti i nuovi file che non sono impostati per essere ignorati svn status | grep -v "^. [\ t] * \ ... *" | grep "^?" | awk 'print $ 2' | xargs svn add svn commit --username = $ SVNUSER -m "$ COMMITMSG" echo "Creazione nuovo tag SVN e commit" cd $ SVNPATH svn copia trunk / tag / $ NEWVERSION1 / cd $ SVNPATH / tags / $ NEWVERSION1 svn commit - -username = $ SVNUSER -m "Tagging version $ NEWVERSION1" echo "Rimozione directory temporanea $ SVNPATH" rm -fr $ SVNPATH / echo "*** FIN ***"

uso

Uso questo copione facendolo sedere nel mio / Wp-content / plugins / directory. Poi quando sono pronto a deply uno dei miei plugin, dal Terminal, corro ./deploy.sh. Lo script quindi mi suggerisce lo slug del mio plugin, che fornisco. Controlla che la versione del plugin corrisponda alla versione "Stabile" nel mio plugin readme.txt, e poi va in giro per il business facendo la distribuzione.


Cosa fa realmente?

In sostanza, lo script procede come segue:

  1. Crea a etichetta per la versione di rilascio nel tuo repository Git
  2. Crea un controllo SVN temporaneo del repository del tuo plugin da WordPress.org
  3. Esporta il contenuto del tuo repository Git nel repository SVN
  4. Commette queste modifiche al repository SVN
  5. Crea un tag nel repository SVN e lo impegna
  6. Rimuove il checkout SVN temporaneo dal tuo computer di sviluppo

Questo è tutto! Bene, ci sono alcune altre cose come il check-out ricorsivo in modo che supporti anche i sottomoduli, ecc., Ma questo è il punto cruciale.

Godere!