r13

Location of the file

For your repositories, you can put a '.pkgmeta' file in to provide extra information. Yes, that is a dot followed by 'pkgmeta'.

.pkgmeta is a YAML file that goes in the root of your repository project folder. This means /trunk/.pkgmeta for SVN users and /.pkgmeta for Git and Hg users.

Remember to use spaces instead of tabs for indentation in the file

Your .pkgmeta file, if it exists, will be validated when you commit.

Creating the file

On some OSes (Windows for example) it is a bit more difficult to create this file. In order for you to create the file correctly you will need to use a Command Prompt Window and use quotations around the file name. A simple mechanism to create this file is to follow these steps:

In Windows Explorer, create a new text document. You can name it to whatever you want, lets call it foo.txt.

Go to the Start Menu, then to Run and type in cmd. This will open up a command window.

Navigate to where foo.txt is saved using the cd command (ie: cd c:\My Documents\)

Type in the following to rename foo.txt to .pkgmeta: move foo.txt ".pkgmeta"

Specifying externals

Externals are specified by providing the externals header and key-value pairs for the local path to the remote repository.

In this example, LibMonkey and LibSuit will be packaged with the latest version available, LibStub and CallbackHandler will be packaged with the latest tag available, and LibBanana will be packaged with tag 1.2 always.

You do not need to have an empty libs folder for the above example to work, it will be created for you.

Unlike svn:externals, you can specify any repository type, be it svn, git, or hg.

Note: Your remote paths will be validated to check if they exist when you commit. This may cause you to wait a few moments.

Why not just use svn:externals?

The main reason to not use svn:externals is that since curseforge provides SVN, Git, and Hg support, .pkgmeta is an easy way to support all three equally. Also, svn:externals can only refer to other subversion repositories, whereas with .pkgmeta, there is nothing stopping you from referencing repositories of unlike types.

Moving folders around with the packager

There is a way to move folders by specifying in .pkgmeta. This is useful if you want to essentially have two addons in one game, particularly if one is a module of the other, e.g. Monkey and Monkey_Suit. Suit is inside the Monkey project, but can move out and be its own addon with .pkgmeta.

Ignoring folders or files

It is to be assumed that this takes place before moving folders around with the move-folders header.

Changing the package name

Instead of using the "Package as" box on your repository, you can specify this in your .pkgmeta file as well.

Example:

package-as:Monkey

Specifying dependencies

To specify dependencies that will show on the site and also through the Curse Client, you can do so with the required-dependencies and optional-dependencies headers

Example:

required-dependencies:-monkey-town# same as monkey-town/mainlineoptional-dependencies:-monkey-city

This will not add anything to any files in your zip.

The list consists of the short names of projects or project/repository combos.

Tools used

If you want to specify that you used a tool that is not a library, but would like people to know that it was used, and for it to receive points for the Author Rewards Program, you can do so with the tools-used header.
Example:

tools-used:-data-tools# same as data-tools/mainline

Manual changelog

If you want to make your own changelog manually rather than having one automatically generated for you, that's possible with the following specification:

manual-changelog:CHANGELOG.txt

You can specify any filepath you want. If it cannot be found, the automatic changelog will still be created.

License output

If you want your project's license to be automatically included with your zip, you can specify it with license-output.