Create new Julia packages, the easy way
Go to file
Chris de Graaf 44a03f1a5d
Merge pull request #42 from invenia/cdg/pin-documenter
Pin Documenter to v0.19
2018-11-14 12:46:30 -06:00
defaults Check Julia version before adding Documenter 2018-11-14 12:17:42 -06:00
docs Don't warn about missing Git options if Git is disabled 2018-11-12 14:58:10 -06:00
licenses Clean up whitespace in license 2018-11-12 14:58:28 -06:00
src Don't warn about missing Git options if Git is disabled 2018-11-12 14:58:10 -06:00
test Fix up interactive test 2018-11-12 15:31:41 -06:00
.appveyor.yml Don't rely on Git to be preconfigured in tests (close #27) 2018-10-22 15:44:31 -05: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 Don't rely on Git to be preconfigured in tests (close #27) 2018-10-22 15:44:31 -05:00
LICENSE Update license years 2018-09-17 15:01:23 -05:00
Manifest.toml Add the package to the current env, not the global one 2018-11-12 14:01:30 -06:00
Project.toml A bit of formatting, drop Distributed dependency 2018-11-07 14:39:07 -06:00
README.md Deprecate CodeCov for Codecov 2018-11-05 16:06:22 -06:00
REQUIRE Lower minimum version to 0.7, test on 0.7 2018-09-24 15:34:14 -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

(v1.0) pkg> add PkgTemplates

Usage

The simplest template requires no arguments.

julia> using PkgTemplates

julia> t = Template()
Template:
   User: christopher-dG
   Host: github.com
   License: MIT (Chris de Graaf 2018)
   Package directory: ~/.julia/dev
   Minimum Julia version: v1.0
   SSH remote: No
   Plugins: None

julia> generate("MyPkg", t)
Generating project MyPkg:
    /Users/degraafc/.julia/dev/MyPkg/Project.toml
    /Users/degraafc/.julia/dev/MyPkg/src/MyPkg.jl
[ Info: Initialized git repo at /Users/degraafc/.julia/dev/MyPkg
[ Info: Set remote origin to https://github.com/myusername/MyPkg.jl
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
 Resolving package versions...
  Updating `~/.julia/dev/MyPkg/Project.toml`
  [8dfed614] + Test
  Updating `~/.julia/dev/MyPkg/Manifest.toml`
  [2a0f44e3] + Base64
  [8ba89e20] + Distributed
  [b77e0a4c] + InteractiveUtils
  [8f399da3] + Libdl
  [37e2e46d] + LinearAlgebra
  [56ddb016] + Logging
  [d6f4376e] + Markdown
  [9a3f8284] + Random
  [9e88b42a] + Serialization
  [6462fe0b] + Sockets
  [8dfed614] + Test
[ Info: Staged and committed 8 files/directories: src/, Project.toml, Manifest.toml, test/, REQUIRE, README.md, .gitignore, LICENSE
[ Info: Finished

julia> run(`git -C $(joinpath(t.dir, "MyPkg")) ls-files`);
.gitignore
LICENSE
Manifest.toml
Project.toml
README.md
REQUIRE
src/MyPkg.jl
test/runtests.jl

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

julia> t = Template(;
           user="myusername",
           license="ISC",
           authors=["Chris de Graaf", "Invenia Technical Computing Corporation"],
           dir=joinpath(homedir(), "code"),
           julia_version=v"0.7",
           plugins=[
               TravisCI(),
               Codecov(),
               Coveralls(),
               AppVeyor(),
               GitHubPages(),
           ],
       )
Template:
   User: myusername
   Host: github.com
   License: ISC (Chris de Graaf, Invenia Technical Computing Corporation 2018)
   Package directory: ~/code
   Minimum Julia version: v0.7
   SSH remote: No
   Plugins:
     AppVeyor:
       Config file: Default
       0 gitignore entries
     Codecov:
       Config file: None
       3 gitignore entries: "*.jl.cov", "*.jl.*.cov", "*.jl.mem"
     Coveralls:
       Config file: None
       3 gitignore entries: "*.jl.cov", "*.jl.*.cov", "*.jl.mem"
     GitHubPages:
       0 asset files
       2 gitignore entries: "/docs/build/", "/docs/site/"
     TravisCI:
       Config file: Default
       0 gitignore entries

julia> generate(t, "MyPkg2")
Generating project MyPkg2:
    /Users/degraafc/code/MyPkg2/Project.toml
    /Users/degraafc/code/MyPkg2/src/MyPkg2.jl
[ Info: Initialized git repo at /Users/degraafc/code/MyPkg2
[ Info: Set remote origin to https://github.com/myusername/MyPkg2.jl
[ Info: Created empty gh-pages branch
 Resolving package versions...
  Updating `~/code/MyPkg2/Project.toml`
  [8dfed614] + Test
  Updating `~/code/MyPkg2/Manifest.toml`
  [2a0f44e3] + Base64
  [8ba89e20] + Distributed
  [b77e0a4c] + InteractiveUtils
  [8f399da3] + Libdl
  [37e2e46d] + LinearAlgebra
  [56ddb016] + Logging
  [d6f4376e] + Markdown
  [9a3f8284] + Random
  [9e88b42a] + Serialization
  [6462fe0b] + Sockets
  [8dfed614] + Test
[ Info: Staged and committed 11 files/directories: src/, Project.toml, Manifest.toml, test/, REQUIRE, README.md, .gitignore, LICENSE, .appveyor.yml, .travis.yml, docs/
[ Info: Finished
[ Info: Remember to push all created branches to your remote: git push --all

julia> run(`git -C $(joinpath(t.dir, "MyPkg2")) ls-files`);
.appveyor.yml
.gitignore
.travis.yml
LICENSE
Manifest.toml
Project.toml
README.md
REQUIRE
docs/make.jl
docs/src/index.md
src/MyPkg2.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.