Sfat rapid implementarea unui plug-in de la Git la WordPress.org

Dezvoltați un plugin pe GitHub, iar acum sunteți gata să îl implementați în WordPress.org ... uh-oh, dezvoltarea plugin-ului WordPress.org se face prin SVN. Acum ce? Nu-ți face griji, există un scenariu pentru asta.

Recent am fost în curs de dezvoltare un plugin pentru WordPress pe care am vrut să-l eliberez în directorul plugin WordPress.org. Prefer sa folosesc Git ca software-ul meu de control al versiunilor in aceste zile (am obisnuit sa folosesc SVN), dar directorul plugin-ului foloseste SVN. Din fericire, există un script frumos disponibil pe GitHub, numit "Github în WordPress Plugin Deployment Directory Script", pentru a permite dezvoltării mele cu Git și apoi să fiu implementat direct la depozitul SVN pe WordPress.org când sunt pregătit să lansez cea mai recentă versiune.

Această versiune a scenariului este de la Ben Balter, care a fost învinsă de un scenariu asemănător de Brent Shepherd, care a fost rupt de un scenariu de Dean Clatworthy. Fiecare dintre ele a făcut diferite îmbunătățiri față de cel anterior și am găsit rezultatul final a fi cu adevărat util.

Mi-am creat propria fereastră a acestui script pe care o folosesc, deci are numele meu de utilizator SVN.


Scriptul

 #! / bin / bash # # Script pentru a implementa de la Github la WordPress.org Plugin Repository # O modificare a scriptului de implementare al lui Dean Clatworthy, așa cum se găsește aici: https://github.com/deanc/wordpress-plugin-git-svn # Diferența este că acest script trăiește în plugin-ul lui git repo și nu necesită un SVN repo deja existent. # Sursa: https://github.com/thenbrent/multisite-user-management/blob/master/deploy.sh #prompt pentru plugin slug echo -e "Plugin Slug: \ c" citește PLUGINSLUG # main config, plugin plugin CURRENTDIR = "pwd" CURRENTDIR = "$ CURRENTDIR / $ PLUGINSLUG" MAINFILE = "$ PLUGINSLUG.php" # aceasta ar trebui să fie numele principalului fișier php din pluginul wordpress # git config GITPATH ​​= "$ CURRENTDIR / acest fișier ar trebui să se afle în baza magaziei dvs. git # svn config SVNPATH = "/ tmp / $ PLUGINSLUG" # cale către un SVN repo temp. Nu este nevoie de o lovitură laterală și nu adăugați portbagaj. SVNURL = "http://plugins.svn.wordpress.org/$PLUGINSLUG/" # SVN repo de la distanță pe WordPress.org, cu nici o slash înclinată SVNUSER = "benbalter" # numele tău svn # Să începem ... echo "..." echo echo "Pregătirea pentru implementarea pluginului WordPress" echo echo "..." echo # Verificați versiunea în readme.txt este aceeași ca fișierul plugin NEWVERSION1 = "grep" ^ Etichetă stabilă "$ GITPATH ​​/ readme.txt" awk -F "  "echo" readme versiune: $ NEWVERSION1 "NEWVERSION2 =" grep "^ Versiune" $ GITPATH ​​/ $ MAINFILE | awk -F "print $ 2" echo "$ MAINFILE versiune: $ NEWVERSION2" dacă ["$ NEWVERSION1"! = "$ NEWVERSION2"]; apoi echo "Versiunile nu se potrivesc. Ieșirea ..."; ieșirea 1; fi echo "Versiunile se potrivesc în fișierul readme.txt și fișierul PHP. Să procedăm ..." cd $ GITPATH ​​echo -e "Introduceți un mesaj de comitet pentru această nouă versiune: \ c" citiți COMMITMSG git commit -am "$ COMMITMSG" echo " versiunea în git "git tag -a" $ NEWVERSION1 "-m" Versiunea de etichetare $ NEWVERSION1 "echo" Apăsând ultima comitere la origine, cu etichete "git push origin master git push master de origine --tags echo echo" Crearea copiei locale SVN repo ... "svn co $ SVNURL $ SVNPATH echo" ignorarea fișierelor specifice și a scriptului de implementare "svn propset svn: ignore" deploy.sh README.md .git .gitignore "" SVNPATH / trunk / "#export git -> SVN echo "Exportarea HEAD a masterului de la git la trunchiul SVN", există un checkout-index -a -f -prefix = $ SVNPATH / trunk / #if există un submodul, verifică recursiv indicele lor dacă [-f ".gitmodules"] apoi echo "Exportul HEAD al fiecărui submodul din git în portbagajul SVN" git submodul init git submodul actualizare git submodule foreach - recursiv 'git checkout-index -a -f -prefix = $ SVNPA TH / trunk / $ path / 'ech echo' Schimbarea directorului în SVN și comiterea la trunchi "cd $ SVNPATH / trunk / # Adăugarea tuturor fișierelor noi care nu sunt setate să fie ignorate svn status | grep -v "^. [\ t] * \ ... *" grep "^?" | awk 'print $ 2' | xrgs svn adăugați svn commit --username = $ SVNUSER -m "$ COMMITMSG" echo "Crearea noii etichete SVN și comiterea acesteia" cd $ SVNPATH svn copie trunchi / tags / $ NEWVERSION1 / cd $ SVNPATH / tags / $ NEWVERSION1 svn commit - -username = $ SVNUSER -m "Versiune de etichetare $ NEWVERSION1" echo "Înlăturarea directorului temporar $ SVNPATH" rm -fr $ SVNPATH / echo "*** FIN ***"

folosire

Folosesc acest scenariu prin faptul că am ședința în mine / Wp-content / plugins / director. Atunci când sunt gata să depalez unul dintre pluginurile mele, de la terminal, alerg ./deploy.sh. Apoi, script-ul mă solicită pentru slugul plugin-ului meu, pe care îl furnizez. Verifică dacă versiunea pluginului se potrivește cu versiunea "Stable" din pluginul meu readme.txt, și apoi se îndreaptă spre afacerea pe care o desfășoară.


Ce face de fapt?

În esență, scriptul face următorii pași:

  1. Creează o etichetă pentru versiunea lansată în depozitul dvs. Git
  2. Creează o comandă SVN temporară a depozitului plugin-ului dvs. de pe WordPress.org
  3. Exportă conținutul depozitului dvs. Git în depozitul SVN
  4. Impune aceste modificări în depozitul SVN
  5. Creează o etichetă în depozitul SVN și se obligă
  6. Îndepărtează comanda temporară SVN de la mașina dvs. de dezvoltare

Asta e! Ei bine, există și alte câteva lucruri, cum ar fi verificarea recursivă, astfel încât să susțină și submodulele etc., dar aceasta este esența ei.

se bucura!

Cod