Snabbtips Implementera ett plugin från Git till WordPress.org

Du utvecklar ett plugin på GitHub, och nu är du redo att distribuera den till WordPress.org ... uh-oh, WordPress.org plugin utveckling sker via SVN. Nu då? Oroa dig inte, det finns ett manuskript för det.

Nyligen har jag utvecklat ett plugin för WordPress som jag ville släppa på WordPress.org plugin-katalogen. Jag föredrar att använda Git som min versionskontrollprogramvara dessa dagar (jag brukade använda SVN), men plugin-katalogen använder SVN. Lyckligtvis finns det ett bra skript tillgängligt på GitHub som heter "Github till WordPress Plugin Directory Deployment Script" för att tillåta mig att utvecklas med Git och sedan distribuera direkt till SVN-förvaret på WordPress.org när jag är redo att släppa den senaste versionen.

Den här versionen av manuset är från Ben Balter, som var gaffel från ett liknande skript av Brent Shepherd, som var gaffelt av ett skript av Dean Clatworthy. Var och en av dem har gjort olika förbättringar på den tidigare, och jag har hittat slutresultatet att vara väldigt användbart.

Jag har skapat min egen gaffel av det här skriptet som jag använder, så det har mitt SVN användarnamn.


Manuset

 #! / bin / bash # # Skript som ska distribueras från Github till WordPress.org Plugin Repository # En modifiering av Dean Clatworthys implementeringsskript som hittades här: https://github.com/deanc/wordpress-plugin-git-svn # Skillnaden är att det här skriptet lever i plugins git repo och behöver inte ett befintligt SVN-repo. # Källa: https://github.com/thenbrent/multisite-user-management/blob/master/deploy.sh #prompt for plugin slug echo -e "Plugin Slug: \ c" läs PLUGINSLUG # huvudkonfiguration, avstängning av plugin slug CURRENTDIR = "pwd" CURRENTDIR = "$ CURRENTDIR / $ PLUGINSLUG" MAINFILE = "$ PLUGINSLUG.php" # det här ska vara namnet på din huvudsakliga php-fil i wordpress-plugin # git config GITPATH ​​= "$ CURRENTDIR /" # den här filen ska ligga i basen av ditt git repository # svn config SVNPATH = "/ tmp / $ PLUGINSLUG" # sökväg till ett temp SVN repo. Inget slående slash krävs och lägg inte till bagageutrymmet. SVNURL = "http://plugins.svn.wordpress.org/$PLUGINSLUG/" # Fjärr SVN repo på WordPress.org utan slash SVNUSER = "benbalter" # ditt svn användarnamn # Låt oss börja ... echo "..." echo echo "Förberedelser för att distribuera WordPress-plugin" echo echo "..." echo # Kontrollera versionen i readme.txt är densamma som plugin-filen NEWVERSION1 = "grep" ^ Stabil tagg "$ GITPATH ​​/ readme.txt | awk -F" print $ 3  "echo" readme version: $ NEWVERSION1 "NEWVERSION2 =" grep "^ Version" $ GITPATH ​​/ $ MAINFILE | awk -F "print $ 2" echo "$ MAINFILE version: $ NEWVERSION2" om ["$ NEWVERSION1"! = "$ NEWVERSION2"]; sedan eko "Versioner matchar inte. Avslutande ..."; utgång 1; fi echo "Versioner matchar i readme.txt och PHP-filen. Låt oss fortsätta ..." cd $ GITPATH ​​echo -e "Ange ett commit meddelande för den här nya versionen: \ c" läs COMMITMSG git commit -am "$ COMMITMSG" echo "Tagging new version i git "git tag -a" $ NEWVERSION1 "-m" Taggversion $ NEWVERSION1 "echo" Pushing senaste commit till ursprung med taggar "git push origin mästare git push origin mästare - echo echo e-post" Skapa lokal kopia av SVN repo ... "svn co $ SVNURL $ SVNPATH echo" Ignorera githubspecifika filer och installationsskript "svn propset svn: ignorera" deploy.sh README.md .git .gitignore "" $ SVNPATH / trunk / "#export git -> SVN echo "Exportera HEAD of master från git till stammen av SVN" git checkout-index -a -f --prefix = $ SVNPATH / trunk / #if submodule existerar, kolla recursivt deras index om [-f ".gitmodules"] sedan echo "Exportera HEAD av varje submodule från git till stammen av SVN" git submodule init git submodule uppdatering git submodule foreach --recursive "git checkout-index -a -f --prefix = $ SVNPA TH / trunk / $ path / 'fi echo "Ändra katalog till SVN och binda till trunk" cd $ SVNPATH / trunk / # Lägg till alla nya filer som inte är inställda att ignoreras svn status | grep -v "^. [\ t] * \ ... *" | grep "^?" | awk 'skriv ut $ 2' | xargs svn add svn commit - användarnamn = $ SVNUSER -m "$ COMMITMSG" echo "Skapa ny SVN tag och begå det" cd $ SVNPATH svn kopiera stam / tags / $ NEWVERSION1 / cd $ SVNPATH / tags / $ NEWVERSION1 svn commit - -username = $ SVNUSER -m "Taggversion $ NEWVERSION1" echo "Ta bort tillfällig katalog $ SVNPATH" rm -fr $ SVNPATH / echo "*** FIN ***"

Användande

Jag använder det här skriptet genom att ha det sitter i mitt / Wp-content / plugins / katalogen. När jag är redo att deply ett av mina plugins, från Terminal, kör jag ./deploy.sh. Skriptet uppmanar mig sedan till sluget i mitt plugin, vilket jag tillhandahåller. Det kontrollerar att plugin-versionen matchar "Stabil" -versionen i mitt plugin readme.txt, och sedan går det om att det är företag som gör utplaceringen.


Vad gör det faktiskt?

I grunden gör skriptet följande steg:

  1. Skapar a märka för release versionen i ditt Git repository
  2. Skapar en tillfällig SVN-kassa av ditt plugin-lager från WordPress.org
  3. Exporterar innehållet i ditt Git-arkiv i SVN-arkivet
  4. Ansvarar dessa ändringar i SVN-förvaret
  5. Skapar en tagg i SVN-förvaret och förbinder det
  6. Ta bort den tillfälliga SVN-kassan från din utvecklingsmaskin

Det är allt! Tja, det finns några andra saker där som rekursivt checkar ut så det stöder submoduler etc., men det är kärnan i det.

Njut av!