Hurtig Tips Implementere et plugin fra Git til WordPress.org

Du utvikler et plugin på GitHub, og nå er du klar til å distribuere den til WordPress.org ... uh-oh, WordPress.org plugin utvikling er gjort via SVN. Hva nå? Ikke bekymre deg, det er et skript for det.

Nylig har jeg utviklet et plugin for WordPress som jeg ønsket å slippe ut på WordPress.org plugin katalogen. Jeg foretrekker å bruke Git som min versjonskontrollprogramvare i disse dager (jeg pleide å bruke SVN), men plugin-katalogen bruker SVN. Heldigvis finnes det et fint skript tilgjengelig på GitHub, kalt "Github til WordPress Plugin Directory Deployment Script", slik at jeg kan utvikle med Git, og deretter distribuere direkte til SVN-depotet på WordPress.org når jeg er klar til å slippe den nyeste versjonen.

Denne versjonen av skriptet er fra Ben Balter, som ble forked fra et lignende skript av Brent Shepherd, som ble forkjørt fra et skript av Dean Clatworthy. Hver av dem har gjort ulike forbedringer på den før, og jeg har funnet sluttresultatet å være veldig nyttig.

Jeg har laget min egen gaffel av dette skriptet som jeg bruker, så det har mitt SVN brukernavn.


Manuset

 #! / bin / bash # # Skript å distribuere fra Github til WordPress.org Plugin Repository # En modifisering av Dean Clatworthys distribusjonsskript som funnet her: https://github.com/deanc/wordpress-plugin-git-svn # Forskjellen er at dette skriptet lever i pluginets git repo og krever ikke et eksisterende SVN-repo. # Kilde: https://github.com/thenbrent/multisite-user-management/blob/master/deploy.sh #prompt for plugin slug echo -e "Plugin Slug: \ c" les PLUGINSLUG # main config, sett av plugin slug CURRENTDIR = "pwd" CURRENTDIR = "$ CURRENTDIR / $ PLUGINSLUG" MAINFILE = "$ PLUGINSLUG.php" # dette skal være navnet på din viktigste php-fil i wordpress-plugin # git config GITPATH ​​= "$ CURRENTDIR /" # denne filen skal være i bunnen av git-depotet ditt # svn config SVNPATH = "/ tmp / $ PLUGINSLUG" # banen til et temp SVN-repo. Ingen skråstrekk kreves og legger ikke til koffert. SVNURL = "http://plugins.svn.wordpress.org/$PLUGINSLUG/" # Fjern SVN-repo på WordPress.org uten slash SVNUSER = "benbalter" # ditt svn brukernavn # La oss begynne ... ekko "..." ekko ekko "Forbereder å distribuere WordPress-plugin" ekko ekko "..." ekko # Sjekk versjon i readme.txt er det samme som pluginfil NEWVERSION1 = "grep" ^ Stabil tag "$ GITPATH ​​/ readme.txt | awk -F" print $ 3  "ekko" readme versjon: $ NEWVERSION1 "NEWVERSION2 =" grep "^ Versjon" $ GITPATH ​​/ $ MAINFILE | awk -F "print $ 2" ekko "$ MAINFILE versjon: $ NEWVERSION2" hvis ["$ NEWVERSION1"! = "$ NEWVERSION2"]; da ekko "Versjoner stemmer ikke overens. Avslutter ..."; utgang 1; fi echo "Versjoner matcher i readme.txt og PHP-filen. La oss fortsette ..." cd $ GITPATH ​​echo -e "Skriv inn en commit-melding for denne nye versjonen: \ c" les COMMITMSG git commit -am "$ COMMITMSG" ekko "Tagging new versjon i git "git tag -a" $ NEWVERSION1 "-m" Tagging versjon $ NEWVERSION1 "echo" Pushing siste forpliktelse til opprinnelse, med tagger "git push opprinnelse master git push opphavs master - tags echo echo" Opprette lokal kopi av SVN repo ... "svn co $ SVNURL $ SVNPATH ekko" Ignorerer github-spesifikke filer og distribusjonsskript "svn propset svn: ignorer" deploy.sh README.md .git .gitignore "" $ SVNPATH / trunk / "#export git -> SVN ekko "Eksportere HEAD of master fra git til bagasjerommet av SVN" git checkout-index -a -f --prefix = $ SVNPATH / trunk / #if submodule eksisterer, rekursivt sjekke ut indeksene deres hvis [-f ".gitmodules"] deretter ekko "Eksportere HEAD av hver submodule fra git til kofferten til SVN" git submodule init git submodule oppdatering git submodule foreach --recursive 'git checkout-indeks -a -f --prefix = $ SVNPA TH / trunk / $ path / 'fi echo "Endre katalog til SVN og forplikte seg til trunk" cd $ SVNPATH / trunk / # Legg til alle nye filer som ikke er satt til å bli ignorert svn status | grep -v "^. [\ t] * \ ... *" | grep "^?" | awk 'skriv ut $ 2' | xargs svn add svn commit - brukernavn = $ SVNUSER -m "$ COMMITMSG" ekko "Opprette ny SVN tag og begå det" cd $ SVNPATH svn kopi stamme / tagger / $ NEWVERSION1 / cd $ SVNPATH / tags / $ NEWVERSION1 svn commit - -brukernavn = $ SVNUSER -m "Merking versjon $ NEWVERSION1" echo "Fjerner midlertidig katalog $ SVNPATH" rm -fr $ SVNPATH / ekko "*** FIN ***"

bruk

Jeg bruker dette skriptet ved å ha det sittende i min / Wp-content / plugins / katalogen. Så når jeg er klar til å deply ett av mine plugins, fra Terminal, kjører jeg ./deploy.sh. Skriptet ber deg da om å gi meg en oversikt over pluginet mitt, som jeg gir. Det kontrollerer at plugin-versjonen samsvarer med "Stabil" -versjonen i pluginets readme.txt, og deretter går det om det er forretninger som gjør distribusjonen.


Hva gjør det egentlig?

I hovedsak gjør skriptet følgende trinn:

  1. Oppretter a stikkord for utgivelsesversjonen i Git-depotet ditt
  2. Oppretter en midlertidig SVN-kasse for pluginens lager fra WordPress.org
  3. Eksporterer innholdet til Git-depotet til SVN-depotet
  4. Forplikter disse endringene til SVN-depotet
  5. Oppretter en tag i SVN-depotet og forplikter det
  6. Fjerner den midlertidige SVN-kassen fra utviklingsmaskinen din

Det er det! Vel, det er noen andre ting der inne som rekursivt å sjekke ut, så det støtter submoduler, etc., men det er kjernen i det.

Nyt!