Publishing A WordPress Plugin without SVN, Utilizing Ship
So just this past week, I submitted my first plugin to the WordPress.org plugin repository. Needless to say, it was an exciting (yet dull) experience! Since I'm still fairly green to professional development as a whole, there were some aspects of the .org publishing process that were confusing, so I'm writing this post in hopes that someone will find it useful. :)
Step 1: Write your plugin
This is both the easiest and the hardest part of the process. If you're curious, the project I released is called Default Post Tags and does exactly what it sounds like.
Step 2: Setup a repo on GitHub
To use Ship (we'll get to that later on in the tutorial) you'll need to have a GitHub account. While this tutorial won't go into the details of setting up and using Git, there are plenty of tutorials that go into details on how to setup a repository.
One snag I did notice here, is that my GitHub repo name was taken on WordPress.org. You may want to check that your plugin name isn't taken before getting too invested if you like to keep things consistent!
Step 3: Submit your plugin to WordPress.org
This was one of the more confusing steps in my experience so I'll try to go more in depth! Navigate to the "Add Your Plugin Page" and fill out the required information.
The first field is the plugin name. This will be also be used as the slug of your plugin. It's important to note that you cannot change the plugin's slug after your initial request to join the repo, so choose wisely! For example, I wanted my GitHub repo and WordPress.org repo to match, so I needed to make sure the name was available on both websites.
Secondly, fill out the plugin's description. I used the description from my readme.txt file, with a couple extra sentences about my future plans for the plugin.
Finally, you'll need to have a copy of the plugin ready somewhere and available in zip format. Since the ultimate goal is to manage everything via GitHub, we can simplify this process by grabbing the .zip download link from GitHub.
One last small note, is that your plugin .zip must include a valid readme.txt file! Use the readme validator to test before uploading.
Step 4: The Wait
Now's the time to twiddle your thumbs. My request was approved within 24 hours I believe, but it could take a few days depending on the workload of the plugin repository maintainers. Be patient!
It's important to note, if there is anything wrong with your plugin, you will receive an email from someone informing you of why your plugin was not accepted. I've heard they are willing to help in most circumstances. :)
Step 5: Connect to Ship
Ship is a free service hosted by the folks over at Big Bite Creative that makes managing a WordPress.org repo a breeze. There is not really any documentation on the service, but overall it is pretty straightforward. I imagine they probably created the service for themselves as much as for others. If you have any questions, I would send them a tweet :)
Once you login to Ship using your GitHub account, you'll be able to easily link your GitHub repositories to a WordPress.org SVN repository automagically.
Simply choose the GitHub repo you would like to link to WordPress.org, and click the "Hook to GitHub" button. Then, scroll down and input the appropriate details to connect to your WordPress.org account and save them.
When you tag a release on GitHub (or from the CLI), Ship will see that activity on the Git repo and make a push to the WordPress SVN repo on your behalf. You can also manually push a release from Ship.
Step 6: Congratulations!
That's it! To update your plugin in the future, simply tag a new release on GitHub. As long as your readme.txt has a new version number, users will be notified to update the plugin.
I hope this has been helpful to anyone who hasn't published a plugin on the WordPress.org repository. Hopefully, we can find someway to use Git natively on WordPress.org but until then, Ship has been really helpful and I'm thankful for its existence!
Leave a comment if you have any questions and I'll try to help out if I can!