Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Script to deploy from Github to WordPress.org Plugin Repository
#! /bin/bash
#
# Script to deploy from Github to WordPress.org Plugin Repository
#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"
# 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
SVNUSER="dancameron" # 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 | 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..."
echo "Start with github..."
echo
echo
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 to, with tags"
git push origin master
git push origin master --tags
echo "Start with svn..."
echo
echo
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/"
echo "Exporting the HEAD of master from git to the trunk of SVN"
git checkout-index -a -f --prefix=$SVNPATH/trunk/
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 ***"
@alexkingorg

This comment has been minimized.

Copy link

alexkingorg commented Aug 16, 2012

I'm not seeing the spot where old files are deleted. Am I blind or is that feature not currently included?

@alexkingorg

This comment has been minimized.

Copy link

alexkingorg commented Aug 16, 2012

Hmm, I think I'd leave out the "tagging on GitHub" bit as well. We use Git flow and I'm happy with that process. I think I'd do that manually and then use this to grab the already tagged (and pushed) version from GitHub. Easy enough to comment that out. :)

This is a great start, nice work.

@Gipetto

This comment has been minimized.

Copy link

Gipetto commented Aug 16, 2012

I agree with Alex. I'd much rather tag Github first and then specify which tag I'd like to push to the WP repo.

@zaus

This comment has been minimized.

Copy link

zaus commented Nov 14, 2012

I seem to be missing something...I'm getting errors with command "SVN ..." - if I only installed git, do I need to also install SVN?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.