Create new Julia packages, the easy way
Go to file
2018-09-17 15:01:23 -05:00
defaults Add coverage regex to default gitlab-ci.yml 2017-12-11 13:39:25 +00:00
docs Switch to master branch AppVeyor badge 2017-12-07 17:00:16 +00:00
licenses Add leading newlines to licenses 2017-10-01 23:27:28 -05:00
src Replace Void/Nullables 2018-09-17 15:00:16 -05:00
test Misc style changes 2017-12-12 15:15:55 +00:00
.appveyor.yml Update CI version numbers 2017-12-01 17:52:09 +00:00
.codecov.yml PkgTemplates generated files 2017-08-10 12:13:01 -05:00
.gitignore Rework code, fix/add tests, fix/add docs. All the things. 2017-08-17 17:06:05 -05:00
.travis.yml Update CI version numbers 2017-12-01 17:52:09 +00:00
LICENSE Update license years 2018-09-17 15:01:23 -05:00
Manifest.toml Add Project/Manifest.toml 2018-09-17 15:00:27 -05:00
Project.toml Add Project/Manifest.toml 2018-09-17 15:00:27 -05:00
README.md Switch to master branch AppVeyor badge 2017-12-07 17:00:16 +00:00
REQUIRE Add interactive template generation 2017-08-21 14:54:36 -05:00

PkgTemplates

Stable Latest Build Status Build Status CodeCov

PkgTemplates is a Julia package for creating new Julia packages in an easy, repeatable, and customizable way.

Installation

PkgTemplates is registered in METADATA.jl, so run Pkg.add("PkgTemplates") for the latest release, or Pkg.clone("PkgTemplates") for the development version.

Usage

The simplest template only requires your GitHub username.

julia> using PkgTemplates

julia> t = Template(; user="myusername");

julia> generate("MyPkg", t)
INFO: Initialized git repo at /tmp/tmpvaHVki/MyPkg
INFO: Made empty initial commit
INFO: Set remote origin to https://github.com/myusername/MyPkg.jl
INFO: Staged 6 files/directories: src/, test/, REQUIRE, README.md, .gitignore, LICENSE
INFO: Committed files generated by PkgTemplates
INFO: Moved temporary package directory into /home/degraafc/.julia/v0.6/
INFO: Finished

julia> run(`git -C $(joinpath(t.dir, "MyPkg")) ls-tree -r --name-only HEAD`)
.gitignore
LICENSE
README.md
REQUIRE
src/MyPkg.jl
test/runtests.jl

However, we can also configure a number of keyword arguments to Template and generate:

julia> t = Template(;
           user="myusername",
           license="ISC",
           authors=["Chris de Graaf", "Invenia Technical Computing Corporation"],
           years="2016-2017",
           dir=joinpath(homedir(), "code"),
           julia_version=v"0.5.2",
           requirements=["PkgTemplates"],
           gitconfig=Dict("diff.renames" => true),
           plugins=[
               TravisCI(),
               CodeCov(),
               Coveralls(),
               AppVeyor(),
               GitHubPages(),
           ],
       );

julia> generate("MyPkg", t; force=true, ssh=true)
INFO: Initialized git repo at /tmp/tmpe0dWY5/MyPkg
INFO: Applied git configuration
INFO: Made empty initial commit
INFO: Set remote origin to git@github.com:myusername/MyPkg.jl.git
INFO: Created empty gh-pages branch
INFO: Staged 9 files/directories: src/, test/, REQUIRE, README.md, .gitignore, LICENSE, docs/, .appveyor.yml, .travis.yml
INFO: Committed files generated by PkgTemplates
INFO: Moved temporary package directory into /home/degraafc/code/
INFO: Finished
WARNING: Remember to push all created branches to your remote: git push --all

julia> run(`git -C $(joinpath(t.dir, "MyPkg")) ls-tree -r --name-only HEAD`)
.appveyor.yml
.gitignore
.travis.yml
LICENSE
README.md
REQUIRE
docs/make.jl
docs/src/index.md
src/MyPkg.jl
test/runtests.jl

Information on each keyword as well as plugin types can be found in the documentation.

If that looks like a lot of work, you can also create templates interactively with interactive_template:

asciicast

And if that's still too much work for you, you can call interactive_template with fast=true to use default values for everything but username and plugin selection.

You can also use generate_interactive to interactively generate a template and then immediately use it to create a new package.

Comparison to PkgDev

PkgTemplates is similar in functionality to PkgDev's generate function. However, PkgTemplates offers more customizability in templates and more extensibility via plugins. For the package registration and release management features that PkgTemplates doesn't include, you are encouraged to use AttoBot instead.

Contributing

It's extremely easy to extend PkgTemplates with new plugins. To get started, check out the plugin development guide.