Статьи

Совет: Развертывание плагина из Git на WordPress.org

Вы разрабатываете плагин на GitHub, и теперь вы готовы развернуть его на WordPress.org … о-о, разработка плагинов WordPress.org осуществляется через SVN. Что теперь? Не волнуйтесь, для этого есть сценарий.

Недавно я разрабатывал плагин для WordPress, который хотел выпустить в каталоге плагинов WordPress.org. В настоящее время я предпочитаю использовать Git в качестве программного обеспечения для контроля версий (я использовал SVN), но каталог плагинов использует SVN. К счастью, на GitHub есть хороший скрипт под названием « Сценарий развертывания каталога плагинов WordPress для Github », который позволяет мне работать с Git, а затем развернуть его непосредственно в SVN-репозиторий на WordPress.org, когда я буду готов выпустить последнюю версию.

Эта версия сценария принадлежит Бену Балтеру , который был разветвлен из аналогичного сценария Брентом Шепардом , который был разветвлен из сценария Дином Клатворти . Каждый из них сделал различные улучшения по сравнению с предыдущим, и я нашел конечный результат действительно полезным.

Я создал свой собственный форк этого скрипта, который я использую, поэтому у него есть мое имя пользователя SVN.


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!
#
# Script to deploy from Github to WordPress.org Plugin Repository
# A modification of Dean Clatworthy’s deploy script as found here: https://github.com/deanc/wordpress-plugin-git-svn
# The difference is that this script lives in the plugin’s git repo & doesn’t require an existing SVN repo.
# Source: https://github.com/thenbrent/multisite-user-management/blob/master/deploy.sh
 
#prompt for plugin slug
echo -e «Plugin Slug: \c»
read PLUGINSLUG
 
# main config, set off of plugin slug
CURRENTDIR=`pwd`
CURRENTDIR=»$CURRENTDIR/$PLUGINSLUG»
MAINFILE=»$PLUGINSLUG.php» # this should be the name of your main php file in the wordpress plugin
 
# git config
GITPATH=»$CURRENTDIR/» # this file should be in the base of your git repository
 
# svn config
SVNPATH=»/tmp/$PLUGINSLUG» # path to a temp SVN repo.
SVNURL=»http://plugins.svn.wordpress.org/$PLUGINSLUG/» # Remote SVN repo on WordPress.org, with no trailing slash
SVNUSER=»benbalter» # your svn username
 
# Let’s begin…
echo «……………………………………»
echo
echo «Preparing to deploy WordPress plugin»
echo
echo «……………………………………»
echo
 
# Check version in readme.txt is the same as plugin file
NEWVERSION1=`grep «^Stable tag» $GITPATH/readme.txt |
echo «readme version: $NEWVERSION1»
NEWVERSION2=`grep «^Version» $GITPATH/$MAINFILE |
echo «$MAINFILE version: $NEWVERSION2»
 
if [ «$NEWVERSION1» != «$NEWVERSION2» ];
 
echo «Versions match in readme.txt and PHP file. Let’s proceed…»
 
cd $GITPATH
echo -e «Enter a commit message for this new version: \c»
read COMMITMSG
git commit -am «$COMMITMSG»
 
echo «Tagging new version in git»
git tag -a «$NEWVERSION1» -m «Tagging version $NEWVERSION1»
 
echo «Pushing latest commit to origin, with tags»
git push origin master
git push origin master —tags
 
echo
echo «Creating local copy of SVN repo …»
svn co $SVNURL $SVNPATH
 
echo «Ignoring github specific files and deployment script»
svn propset svn:ignore «deploy.sh
README.md
.git
.gitignore» «$SVNPATH/trunk/»
 
#export git -> SVN
echo «Exporting the HEAD of master from git to the trunk of SVN»
git checkout-index -a -f —prefix=$SVNPATH/trunk/
 
#if submodule exist, recursively check out their indexes
if [ -f «.gitmodules» ]
then
echo «Exporting the HEAD of each submodule from git to the trunk of SVN»
git submodule init
git submodule update
git submodule foreach —recursive ‘git checkout-index -a -f —prefix=$SVNPATH/trunk/$path/’
fi
 
echo «Changing directory to SVN and committing to trunk»
cd $SVNPATH/trunk/
# Add all new files that are not set to be ignored
svn status |
svn commit —username=$SVNUSER -m «$COMMITMSG»
 
echo «Creating new SVN tag & committing it»
cd $SVNPATH
svn copy trunk/ tags/$NEWVERSION1/
cd $SVNPATH/tags/$NEWVERSION1
svn commit —username=$SVNUSER -m «Tagging version $NEWVERSION1»
 
echo «Removing temporary directory $SVNPATH»
rm -fr $SVNPATH/
 
echo «*** FIN ***»

Я использую этот скрипт, разместив его в моем каталоге / wp-content / plugins / . Затем, когда я буду готов удалить один из моих плагинов из Терминала, я запускаю ./deploy.sh . Затем скрипт запрашивает у меня плагин, который я предоставляю. Он проверяет, совпадает ли версия плагина со «стабильной» версией в файле readme.txt моего плагина, и затем приступает к развертыванию.


По сути, скрипт выполняет следующие шаги:

  1. Создает тег для версии выпуска в вашем репозитории Git
  2. Создает временную SVN-проверку хранилища вашего плагина с WordPress.org.
  3. Экспортирует содержимое вашего Git-репозитория в SVN-репозиторий
  4. Передает эти изменения в хранилище SVN
  5. Создает тег в репозитории SVN и фиксирует, что
  6. Удаляет временную проверку SVN с вашего компьютера разработчика

Это оно! Ну, есть еще несколько вещей, таких как рекурсивная проверка, чтобы она поддерживала подмодули и т. Д., Но в этом суть.

Наслаждайтесь!