Last active
April 15, 2023 13:10
-
-
Save EricBusch/58c6e9bbc122d52507ed971066d14336 to your computer and use it in GitHub Desktop.
Deploy your plugin to the WordPress.org SVN plugin repository from your GitHub Repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /bin/bash | |
# | |
# Script to deploy from Github to WordPress.org Plugin Repository | |
# A modification of a number of different sources: | |
# @link https://github.com/deanc/wordpress-plugin-git-svn | |
# @link https://github.com/GaryJones/wordpress-plugin-svn-deploy | |
# @link https://github.com/thenbrent/multisite-user-management/blob/master/deploy.sh | |
# | |
# Accompanying Tutorial Here: | |
# @link https://ericbusch.net/?p=106 | |
# EDIT THIS LINE | |
SVNUSER="USERNAME_HERE" # Your WordPress.org SVN Username | |
# No editing required below this line. | |
#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. No trailing slash required and don't add trunk. | |
SVNURL="http://plugins.svn.wordpress.org/$PLUGINSLUG/" # Remote SVN repo on WordPress.org, with no trailing slash | |
# 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 | awk -F' ' '{print $3}'` | |
echo "readme version: $NEWVERSION1" | |
NEWVERSION2=`grep "^Version" $GITPATH/$MAINFILE | awk -F' ' '{print $2}'` | |
echo "$MAINFILE version: $NEWVERSION2" | |
if [ "$NEWVERSION1" != "$NEWVERSION2" ]; then echo "Versions don't match. Exiting...."; exit 1; fi | |
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 | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add | |
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 ***" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Life saver this script!
I also ran into a few issues on my Mac due to spaces in the parent folders, as well as trying to find the version number in the PHP file. Here's some comments/fixes for future users....
$GITPATH
variable in double quotes. The new line becomes:NEWVERSION1=`grep "^Stable tag" "$GITPATH"/readme.t...
*
on a new line within the main opening and closing comment tags. As a result the script wasn't able to pick up the version number in the PHP file. To be clear, mine is written as* Version: 2.0
. The'{print $2}'
at the end of the line also needs to be adjusted for this. All in, the new line 44 looks like this:NEWVERSION2=`grep "^\* Version" "$GITPATH"/$MAINFILE | awk -F' ' '{print $3}'`
$GITPATH
should also be wrapped in quotes - so the whole line should be:cd "$GITPATH"
brew
version on Catalina.