How to use Rake::PackageTask to create a zip file

I found out that the easiest way to build a WordPress plugin is using a rake task. In fact, you can use Rake::PackageTask to create a zip file. However, there is very little documentation about how to do it in practice. Here is my solution.

  1. (destroy and) create a folder to hold just the needed files
  2. copy the (possibly transformed) needed files to that folder
  3. compress the folder

Here is my Rakefile:

require 'rake/packagetask'

namespace :nzymes do
    desc 'Build plugin'
    task build: %w(destroy create package)

    desc 'Destroy dist folder and its contents'
    task :destroy do
      rm_rf 'dist'
    end

    desc 'Create dist folder and its contents'
    task :create do
      mkdir_p 'dist/nzymes/vendor'
      cp_r 'vendor/Ando', 'dist/nzymes/vendor'
      cp_r 'src', 'dist/nzymes'
      cp_r Dir.glob('*.php'), 'dist/nzymes'
      cp_r Dir.glob('*.md'), 'dist/nzymes'
      cp_r 'readme.txt', 'dist/nzymes'
    end

    Rake::PackageTask.new('nzymes', :noversion) do |p|
      p.need_zip = true
      p.package_dir = 'dist'
    end
end

Here are the tasks it creates:

andrea at Lock-and-Stock in ~/dev/wordpress/plugins/nzymes on master [!?$]
$ rake --tasks
rake nzymes:build            # Build plugin
rake nzymes:clobber_package  # Remove package products
rake nzymes:create           # Create dist folder and its contents
rake nzymes:destroy          # Destroy dist folder and its contents
rake nzymes:package          # Build all the packages
rake nzymes:repackage        # Force a rebuild of the package files

Here is how you can use it:

andrea at Lock-and-Stock in ~/dev/wordpress/plugins/nzymes on master [!?$]
$ rake nzymes:build
rm -rf dist
mkdir -p dist/nzymes/vendor
cp -r vendor/Ando dist/nzymes/vendor
cp -r src dist/nzymes
cp -r nzymes.php dist/nzymes
cp -r nzymes-manual.md README.md dist/nzymes
cp -r readme.txt dist/nzymes
cd dist
zip -r nzymes.zip nzymes
  adding: nzymes/ (stored 0%)
  adding: nzymes/nzymes-manual.md (deflated 70%)
  adding: nzymes/nzymes.php (deflated 46%)
  adding: nzymes/README.md (deflated 48%)
  adding: nzymes/readme.txt (deflated 53%)
  adding: nzymes/src/ (stored 0%)
  adding: nzymes/src/Nzymes/ (stored 0%)
  adding: nzymes/src/Nzymes/Capabilities.php (deflated 84%)
  adding: nzymes/src/Nzymes/Engine.php (deflated 80%)
  adding: nzymes/src/Nzymes/Options.php (deflated 73%)
  adding: nzymes/src/Nzymes/Plugin.php (deflated 74%)
  adding: nzymes/src/Nzymes/Stack.php (deflated 70%)
  adding: nzymes/src/Nzymes/Unused.php (deflated 69%)
  adding: nzymes/vendor/ (stored 0%)
  adding: nzymes/vendor/Ando/ (stored 0%)
  adding: nzymes/vendor/Ando/ErrorFactory.php (deflated 79%)
  adding: nzymes/vendor/Ando/Exception.php (deflated 29%)
  adding: nzymes/vendor/Ando/Regex.php (deflated 78%)
  adding: nzymes/vendor/Ando/StarFunc.php (deflated 73%)
cd -

Here is what you get:

andrea at Lock-and-Stock in ~/dev/wordpress/plugins/nzymes on master [$]
$ ls -la dist
total 104
drwxr-xr-x   4 andrea  staff    136 May 25 13:03 .
drwxr-xr-x@ 20 andrea  staff    680 May 25 13:03 ..
drwxr-xr-x   8 andrea  staff    272 May 25 13:03 nzymes
-rw-r--r--   1 andrea  staff  50814 May 25 13:03 nzymes.zip

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.