block style of highligh.js.
+ * We have to override the padding and the background-color, since we style this
+ * part ourselves. Specifically, we style the surrounding the , while
+ * highlight.js applies the .hljs style directly to the tag.
+ */
+.hljs {
+ background-color: transparent;
+ padding: 0;
+}
+
+@media only screen and (max-width: 768px) {
+ nav.toc {
+ position: fixed;
+ width: 16em;
+ left: -16em;
+ -webkit-overflow-scrolling: touch;
+ -webkit-transition-property: left; /* Safari */
+ -webkit-transition-duration: 0.3s; /* Safari */
+ transition-property: left;
+ transition-duration: 0.3s;
+ -webkit-transition-timing-function: ease-out; /* Safari */
+ transition-timing-function: ease-out;
+ z-index: 2;
+ box-shadow: 5px 0px 5px 0px rgb(210,210,210);
+ }
+
+ nav.toc.show {
+ left: 0;
+ }
+
+ article {
+ margin-left: 0;
+ padding: 3em 0.9em 0 0.9em; /* top right bottom left */
+ overflow-wrap: break-word;
+ }
+
+ article > header {
+ position: fixed;
+ left: 0;
+ z-index: 1;
+ }
+
+ article > header nav, hr {
+ display: none;
+ }
+
+ article > header div#topbar {
+ display: block; /* is mobile */
+ position: fixed;
+ width: 100%;
+ height: 1.5em;
+ padding-top: 1em;
+ padding-bottom: 1em;
+ background-color: #fcfcfc;
+ box-shadow: 0 1px 3px rgba(0,0,0,.26);
+ top: 0;
+ -webkit-transition-property: top; /* Safari */
+ -webkit-transition-duration: 0.3s; /* Safari */
+ transition-property: top;
+ transition-duration: 0.3s;
+ }
+
+ article > header div#topbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {
+ top: -4em;
+ -webkit-transition-property: top; /* Safari */
+ -webkit-transition-duration: 0.7s; /* Safari */
+ transition-property: top;
+ transition-duration: 0.7s;
+ }
+
+ article > header div#topbar span {
+ width: 80%;
+ height: 1.5em;
+ margin-top: -0.1em;
+ margin-left: 0.9em;
+ font-size: 1.2em;
+ overflow: hidden;
+ }
+
+ article > header div#topbar a.fa-bars {
+ float: right;
+ padding: 0.6em;
+ margin-top: -0.6em;
+ margin-right: 0.3em;
+ font-size: 1.5em;
+ }
+
+ article > header div#topbar a.fa-bars:visited {
+ color: #3091d1;
+ }
+
+ article table {
+ overflow-x: auto;
+ display: block;
+ }
+
+ article div.MathJax_Display {
+ overflow: scroll;
+ }
+
+ article span.MathJax {
+ overflow: hidden;
+ }
+}
+
+@media only screen and (max-width: 320px) {
+ body {
+ font-size: 15px;
+ }
+}
diff --git a/v0.6.1/assets/documenter.js b/v0.6.1/assets/documenter.js
new file mode 100644
index 0000000..761ae29
--- /dev/null
+++ b/v0.6.1/assets/documenter.js
@@ -0,0 +1,132 @@
+/*
+ * Part of Documenter.jl
+ * https://github.com/JuliaDocs/Documenter.jl
+ *
+ * License: MIT
+ */
+
+requirejs.config({
+ paths: {
+ 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
+ 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min',
+ 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.3/headroom.min',
+ 'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML',
+ 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min',
+ 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia.min',
+ 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/julia-repl.min',
+ },
+ shim: {
+ 'mathjax' : {
+ exports: "MathJax"
+ },
+ 'highlight-julia': ['highlight'],
+ 'highlight-julia-repl': ['highlight'],
+ }
+});
+
+// Load MathJax
+require(['mathjax'], function(MathJax) {
+ MathJax.Hub.Config({
+ "tex2jax": {
+ inlineMath: [['$','$'], ['\\(','\\)']],
+ processEscapes: true
+ }
+ });
+ MathJax.Hub.Config({
+ config: ["MMLorHTML.js"],
+ jax: [
+ "input/TeX",
+ "output/HTML-CSS",
+ "output/NativeMML"
+ ],
+ extensions: [
+ "MathMenu.js",
+ "MathZoom.js",
+ "TeX/AMSmath.js",
+ "TeX/AMSsymbols.js",
+ "TeX/autobold.js",
+ "TeX/autoload-all.js"
+ ]
+ });
+ MathJax.Hub.Config({
+ TeX: { equationNumbers: { autoNumber: "AMS" } }
+ });
+})
+
+require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($, hljs) {
+ $(document).ready(function() {
+ hljs.initHighlighting();
+ })
+
+})
+
+// update the version selector with info from the siteinfo.js and ../versions.js files
+require(['jquery'], function($) {
+ $(document).ready(function() {
+ var version_selector = $("#version-selector");
+
+ // add the current version to the selector based on siteinfo.js, but only if the selector is empty
+ if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
+ var option = $("");
+ version_selector.append(option);
+ }
+
+ if (typeof DOC_VERSIONS !== 'undefined') {
+ var existing_versions = $('#version-selector > option');
+ var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
+ DOC_VERSIONS.forEach(function(each) {
+ var version_url = documenterBaseURL + "/../" + each;
+ var existing_id = $.inArray(each, existing_versions_texts);
+ // if not already in the version selector, add it as a new option,
+ // otherwise update the old option with the URL and enable it
+ if (existing_id == -1) {
+ var option = $("");
+ version_selector.append(option);
+ } else {
+ var option = existing_versions[existing_id];
+ option.value = version_url;
+ option.disabled = false;
+ }
+ });
+ }
+
+ // only show the version selector if the selector has been populated
+ if ($('#version-selector > option').length > 0) {
+ version_selector.css("visibility", "visible");
+ }
+
+ // Scroll the navigation bar to the currently selected menu item
+ $("nav.toc > ul").get(0).scrollTop = $(".current").get(0).offsetTop - $("nav.toc > ul").get(0).offsetTop;
+ })
+
+})
+
+// mobile
+require(['jquery', 'headroom'], function($, Headroom) {
+ $(document).ready(function() {
+ var navtoc = $("nav.toc");
+ $("nav.toc li.current a.toctext").click(function() {
+ navtoc.toggleClass('show');
+ });
+ $("article > header div#topbar a.fa-bars").click(function(ev) {
+ ev.preventDefault();
+ navtoc.toggleClass('show');
+ if (navtoc.hasClass('show')) {
+ var title = $("article > header div#topbar span").text();
+ $("nav.toc ul li a:contains('" + title + "')").focus();
+ }
+ });
+ $("article#docs").bind('click', function(ev) {
+ if ($(ev.target).is('div#topbar a.fa-bars')) {
+ return;
+ }
+ if (navtoc.hasClass('show')) {
+ navtoc.removeClass('show');
+ }
+ });
+ if ($("article > header div#topbar").css('display') == 'block') {
+ var headroom = new Headroom(document.querySelector("article > header div#topbar"), {"tolerance": {"up": 10, "down": 10}});
+ headroom.init();
+ }
+ })
+})
diff --git a/v0.6.1/assets/search.js b/v0.6.1/assets/search.js
new file mode 100644
index 0000000..f99b378
--- /dev/null
+++ b/v0.6.1/assets/search.js
@@ -0,0 +1,250 @@
+/*
+ * Part of Documenter.jl
+ * https://github.com/JuliaDocs/Documenter.jl
+ *
+ * License: MIT
+ */
+
+// parseUri 1.2.2
+// (c) Steven Levithan
+// MIT License
+function parseUri (str) {
+ var o = parseUri.options,
+ m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
+ uri = {},
+ i = 14;
+
+ while (i--) uri[o.key[i]] = m[i] || "";
+
+ uri[o.q.name] = {};
+ uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
+ if ($1) uri[o.q.name][$1] = $2;
+ });
+
+ return uri;
+};
+parseUri.options = {
+ strictMode: false,
+ key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
+ q: {
+ name: "queryKey",
+ parser: /(?:^|&)([^&=]*)=?([^&]*)/g
+ },
+ parser: {
+ strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
+ loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
+ }
+};
+
+requirejs.config({
+ paths: {
+ 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min',
+ 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.1/lunr.min',
+ 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min',
+ }
+});
+
+var currentScript = document.currentScript;
+
+require(["jquery", "lunr", "lodash"], function($, lunr, _) {
+ $("#search-form").submit(function(e) {
+ e.preventDefault()
+ })
+
+ // list below is the lunr 2.1.3 list minus the intersect with names(Base)
+ // (all, any, get, in, is, which) and (do, else, for, let, where, while, with)
+ // ideally we'd just filter the original list but it's not available as a variable
+ lunr.stopWordFilter = lunr.generateStopWordFilter([
+ 'a',
+ 'able',
+ 'about',
+ 'across',
+ 'after',
+ 'almost',
+ 'also',
+ 'am',
+ 'among',
+ 'an',
+ 'and',
+ 'are',
+ 'as',
+ 'at',
+ 'be',
+ 'because',
+ 'been',
+ 'but',
+ 'by',
+ 'can',
+ 'cannot',
+ 'could',
+ 'dear',
+ 'did',
+ 'does',
+ 'either',
+ 'ever',
+ 'every',
+ 'from',
+ 'got',
+ 'had',
+ 'has',
+ 'have',
+ 'he',
+ 'her',
+ 'hers',
+ 'him',
+ 'his',
+ 'how',
+ 'however',
+ 'i',
+ 'if',
+ 'into',
+ 'it',
+ 'its',
+ 'just',
+ 'least',
+ 'like',
+ 'likely',
+ 'may',
+ 'me',
+ 'might',
+ 'most',
+ 'must',
+ 'my',
+ 'neither',
+ 'no',
+ 'nor',
+ 'not',
+ 'of',
+ 'off',
+ 'often',
+ 'on',
+ 'only',
+ 'or',
+ 'other',
+ 'our',
+ 'own',
+ 'rather',
+ 'said',
+ 'say',
+ 'says',
+ 'she',
+ 'should',
+ 'since',
+ 'so',
+ 'some',
+ 'than',
+ 'that',
+ 'the',
+ 'their',
+ 'them',
+ 'then',
+ 'there',
+ 'these',
+ 'they',
+ 'this',
+ 'tis',
+ 'to',
+ 'too',
+ 'twas',
+ 'us',
+ 'wants',
+ 'was',
+ 'we',
+ 'were',
+ 'what',
+ 'when',
+ 'who',
+ 'whom',
+ 'why',
+ 'will',
+ 'would',
+ 'yet',
+ 'you',
+ 'your'
+ ])
+
+ // add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
+ // would not find anything if searching for "add!", only for the entire qualification
+ lunr.tokenizer.separator = /[\s\-\.]+/
+
+ // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
+ lunr.trimmer = function (token) {
+ return token.update(function (s) {
+ return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
+ })
+ }
+
+ lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
+ lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
+
+ var index = lunr(function () {
+ this.ref('location')
+ this.field('title')
+ this.field('text')
+ documenterSearchIndex['docs'].forEach(function(e) {
+ this.add(e)
+ }, this)
+ })
+ var store = {}
+
+ documenterSearchIndex['docs'].forEach(function(e) {
+ store[e.location] = {title: e.title, category: e.category}
+ })
+
+ $(function(){
+ function update_search(querystring) {
+ tokens = lunr.tokenizer(querystring)
+ results = index.query(function (q) {
+ tokens.forEach(function (t) {
+ q.term(t.toString(), {
+ fields: ["title"],
+ boost: 100,
+ usePipeline: false,
+ editDistance: 0,
+ wildcard: lunr.Query.wildcard.NONE
+ })
+ q.term(t.toString(), {
+ fields: ["title"],
+ boost: 10,
+ usePipeline: false,
+ editDistance: 2,
+ wildcard: lunr.Query.wildcard.NONE
+ })
+ q.term(t.toString(), {
+ fields: ["text"],
+ boost: 1,
+ usePipeline: true,
+ editDistance: 0,
+ wildcard: lunr.Query.wildcard.NONE
+ })
+ })
+ })
+ $('#search-info').text("Number of results: " + results.length)
+ $('#search-results').empty()
+ results.forEach(function(result) {
+ data = store[result.ref]
+ link = $('')
+ link.text(data.title)
+ link.attr('href', documenterBaseURL+'/'+result.ref)
+ cat = $('('+data.category+')')
+ li = $('').append(link).append(" ").append(cat)
+ $('#search-results').append(li)
+ })
+ }
+
+ function update_search_box() {
+ querystring = $('#search-query').val()
+ update_search(querystring)
+ }
+
+ $('#search-query').keyup(_.debounce(update_search_box, 250))
+ $('#search-query').change(update_search_box)
+
+ search_query_uri = parseUri(window.location).queryKey["q"]
+ if(search_query_uri !== undefined) {
+ search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20'))
+ $("#search-query").val(search_query)
+ }
+ update_search_box();
+ })
+})
diff --git a/v0.6.1/index.html b/v0.6.1/index.html
new file mode 100644
index 0000000..bfe9383
--- /dev/null
+++ b/v0.6.1/index.html
@@ -0,0 +1,202 @@
+
+Home · PkgTemplates.jl
PkgTemplates
PkgTemplates is a Julia package for creating new Julia packages in an easy, repeatable, and customizable way.
Installation
pkg> add PkgTemplates
Plugins
PkgTemplates
is based on plugins which handle the setup of individual package components. The available plugins are:
- Continuous Integration (CI)
- Code Coverage
- Documentation
- Citation
Usage
Assuming you have the relatively standard Git options user.name
, user.email
and github.user
set up globally with git config --global
, the simplest template requires no arguments:
julia> using PkgTemplates
+
+julia> t = Template()
+Template:
+ → User: travis
+ → Host: github.com
+ → License: MIT (Travis CI User <travis@example.org> 2019)
+ → Package directory: ~/.julia/dev
+ → Minimum Julia version: v1.0
+ → SSH remote: No
+ → Add packages to main environment: Yes
+ → Commit Manifest.toml: No
+ → Plugins: None
+
+julia> generate("MyPkg", t)
+Generating project MyPkg:
+ /home/travis/.julia/dev/MyPkg/Project.toml
+ /home/travis/.julia/dev/MyPkg/src/MyPkg.jl
+[ Info: Initialized Git repo at /home/travis/.julia/dev/MyPkg
+[ Info: Set remote origin to https://github.com/travis/MyPkg.jl
+ Resolving package versions...
+ Updating `~/.julia/dev/MyPkg/Project.toml`
+ [8dfed614] + Test
+ Updating `~/.julia/dev/MyPkg/Manifest.toml`
+ [2a0f44e3] + Base64
+ [8ba89e20] + Distributed
+ [b77e0a4c] + InteractiveUtils
+ [56ddb016] + Logging
+ [d6f4376e] + Markdown
+ [9a3f8284] + Random
+ [9e88b42a] + Serialization
+ [6462fe0b] + Sockets
+ [8dfed614] + Test
+ Updating registry at `~/.julia/registries/General`
+ Updating git-repo `https://github.com/JuliaRegistries/General.git`
+[?25l[2K[?25h Resolving package versions...
+ Updating `~/.julia/dev/MyPkg/Project.toml`
+ [no changes]
+ Updating `~/.julia/dev/MyPkg/Manifest.toml`
+ [2a0f44e3] - Base64
+ [8ba89e20] - Distributed
+ [b77e0a4c] - InteractiveUtils
+ [56ddb016] - Logging
+ [d6f4376e] - Markdown
+ [9a3f8284] - Random
+ [9e88b42a] - Serialization
+ [6462fe0b] - Sockets
+ [8dfed614] - Test
+[ Info: activating new environment at ~/build/invenia/PkgTemplates.jl/docs/Project.toml.
+[ Info: Committed 6 files/directories: src/, Project.toml, test/, README.md, LICENSE, .gitignore
+ Resolving package versions...
+ Updating `~/build/invenia/PkgTemplates.jl/docs/Project.toml`
+ [797757b8] + MyPkg v0.1.0 [`~/.julia/dev/MyPkg`]
+ Updating `~/build/invenia/PkgTemplates.jl/docs/Manifest.toml`
+ [797757b8] + MyPkg v0.1.0 [`~/.julia/dev/MyPkg`]
+[ Info: New package is at /home/travis/.julia/dev/MyPkg
+
+julia> run(`git -C $(joinpath(t.dir, "MyPkg")) ls-files`);
+.gitignore
+LICENSE
+Project.toml
+README.md
+src/MyPkg.jl
+test/runtests.jl
However, we can also configure a number of keyword arguments to Template
:
julia> using PkgTemplates
+
+julia> t = Template(;
+ user="myusername",
+ license="MIT",
+ authors=["Chris de Graaf", "Invenia Technical Computing Corporation"],
+ dir="~/code",
+ julia_version=v"0.7",
+ ssh=true,
+ plugins=[
+ TravisCI(),
+ Codecov(),
+ Coveralls(),
+ AppVeyor(),
+ GitHubPages(),
+ CirrusCI(),
+ ],
+ )
+Template:
+ → User: myusername
+ → Host: github.com
+ → License: MIT (Chris de Graaf, Invenia Technical Computing Corporation 2019)
+ → Package directory: ~/code
+ → Minimum Julia version: v0.7
+ → SSH remote: Yes
+ → Add packages to main environment: Yes
+ → Commit Manifest.toml: No
+ → Plugins:
+ • AppVeyor:
+ → Config file: Default
+ → 0 gitignore entries
+ • CirrusCI:
+ → 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("MyPkg2", t)
+Generating project MyPkg2:
+ /home/travis/code/MyPkg2/Project.toml
+ /home/travis/code/MyPkg2/src/MyPkg2.jl
+[ Info: Initialized Git repo at /home/travis/code/MyPkg2
+[ Info: Set remote origin to git@github.com:myusername/MyPkg2.jl.git
+[ Info: Created empty gh-pages branch
+ Resolving package versions...
+[ Warning: julia version requirement for project not satisfied
+ Updating `~/code/MyPkg2/Project.toml`
+ [8dfed614] + Test
+ Updating `~/code/MyPkg2/Manifest.toml`
+ [2a0f44e3] + Base64
+ [8ba89e20] + Distributed
+ [b77e0a4c] + InteractiveUtils
+ [56ddb016] + Logging
+ [d6f4376e] + Markdown
+ [9a3f8284] + Random
+ [9e88b42a] + Serialization
+ [6462fe0b] + Sockets
+ [8dfed614] + Test
+ Updating registry at `~/.julia/registries/General`
+ Updating git-repo `https://github.com/JuliaRegistries/General.git`
+[?25l[2K[?25h Resolving package versions...
+[ Warning: julia version requirement for project not satisfied
+ Updating `~/code/MyPkg2/Project.toml`
+ [no changes]
+ Updating `~/code/MyPkg2/Manifest.toml`
+ [2a0f44e3] - Base64
+ [8ba89e20] - Distributed
+ [b77e0a4c] - InteractiveUtils
+ [56ddb016] - Logging
+ [d6f4376e] - Markdown
+ [9a3f8284] - Random
+ [9e88b42a] - Serialization
+ [6462fe0b] - Sockets
+ [8dfed614] - Test
+[ Info: activating new environment at ~/build/invenia/PkgTemplates.jl/docs/Project.toml.
+ Resolving package versions...
+ Installed Documenter ─ v0.22.4
+ Installed JSON ─────── v0.20.0
+ Updating `~/code/MyPkg2/docs/Project.toml`
+ [e30172f5] + Documenter v0.22.4
+ Updating `~/code/MyPkg2/docs/Manifest.toml`
+ [ffbed154] + DocStringExtensions v0.7.0
+ [e30172f5] + Documenter v0.22.4
+ [682c06a0] + JSON v0.20.0
+ [2a0f44e3] + Base64
+ [ade2ca70] + Dates
+ [8ba89e20] + Distributed
+ [b77e0a4c] + InteractiveUtils
+ [76f85450] + LibGit2
+ [56ddb016] + Logging
+ [d6f4376e] + Markdown
+ [a63ad114] + Mmap
+ [44cfe95a] + Pkg
+ [de0858da] + Printf
+ [3fa0cd96] + REPL
+ [9a3f8284] + Random
+ [ea8e919c] + SHA
+ [9e88b42a] + Serialization
+ [6462fe0b] + Sockets
+ [8dfed614] + Test
+ [cf7118a7] + UUIDs
+ [4ec0a83e] + Unicode
+[ Info: activating new environment at ~/build/invenia/PkgTemplates.jl/docs/Project.toml.
+[ Info: Committed 10 files/directories: src/, Project.toml, test/, README.md, LICENSE, .travis.yml, .appveyor.yml, docs/, .cirrus.yml, .gitignore
+[ Info: Remember to push all created branches to your remote: git push --all
+ Resolving package versions...
+┌ Warning: julia version requirement for package MyPkg2 not satisfied
+└ @ Pkg.Operations /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.1/Pkg/src/Operations.jl:154
+ Updating `~/build/invenia/PkgTemplates.jl/docs/Project.toml`
+ [7c22c222] + MyPkg2 v0.1.0 [`~/code/MyPkg2`]
+ Updating `~/build/invenia/PkgTemplates.jl/docs/Manifest.toml`
+ [7c22c222] + MyPkg2 v0.1.0 [`~/code/MyPkg2`]
+[ Info: New package is at /home/travis/code/MyPkg2
+
+julia> run(`git -C $(joinpath(t.dir, "MyPkg2")) ls-files`);
+.appveyor.yml
+.cirrus.yml
+.gitignore
+.travis.yml
+LICENSE
+Project.toml
+README.md
+docs/Manifest.toml
+docs/Project.toml
+docs/make.jl
+docs/src/index.md
+src/MyPkg2.jl
+test/runtests.jl
If that looks like a lot of work, you can also create templates interactively with interactive_template
:
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.
diff --git a/v0.6.1/pages/index.html b/v0.6.1/pages/index.html
new file mode 100644
index 0000000..8abc0b4
--- /dev/null
+++ b/v0.6.1/pages/index.html
@@ -0,0 +1,2 @@
+
+Index · PkgTemplates.jl
Index
PkgTemplates.AppVeyor
PkgTemplates.Badge
PkgTemplates.CirrusCI
PkgTemplates.Codecov
PkgTemplates.Coveralls
PkgTemplates.CustomPlugin
PkgTemplates.Documenter
PkgTemplates.GenericPlugin
PkgTemplates.GitHubPages
PkgTemplates.GitLabCI
PkgTemplates.GitLabPages
PkgTemplates.Plugin
PkgTemplates.Template
PkgTemplates.TravisCI
PkgTemplates.available_licenses
PkgTemplates.badges
PkgTemplates.format
PkgTemplates.gen_file
PkgTemplates.gen_gitignore
PkgTemplates.gen_license
PkgTemplates.gen_plugin
PkgTemplates.gen_readme
PkgTemplates.gen_tests
PkgTemplates.generate
PkgTemplates.generate_interactive
PkgTemplates.interactive
PkgTemplates.interactive_template
PkgTemplates.read_license
PkgTemplates.show_license
PkgTemplates.substitute
PkgTemplates.version_floor
diff --git a/v0.6.1/pages/licenses/index.html b/v0.6.1/pages/licenses/index.html
new file mode 100644
index 0000000..f826ecb
--- /dev/null
+++ b/v0.6.1/pages/licenses/index.html
@@ -0,0 +1,2 @@
+
+Licenses · PkgTemplates.jl
Licenses
Many open-source licenses are available for use with PkgTemplates
, but if you see that one is missing, don't hesitate to open an issue or PR.
PkgTemplates.available_licenses
— Function.available_licenses([io::IO]) -> Nothing
Print the names of all available licenses.
sourcePkgTemplates.show_license
— Function.show_license([io::IO], license::AbstractString) -> Nothing
Print the text of license
. Errors if the license is not found.
sourceHelper Functions
PkgTemplates.read_license
— Function.read_license(license::AbstractString) -> String
Returns the contents of license
. Errors if the license is not found. Use available_licenses
to view available licenses.
source
diff --git a/v0.6.1/pages/package_generation/index.html b/v0.6.1/pages/package_generation/index.html
new file mode 100644
index 0000000..30e20ba
--- /dev/null
+++ b/v0.6.1/pages/package_generation/index.html
@@ -0,0 +1,3 @@
+
+Package Generation · PkgTemplates.jl
Package Generation
Creating new packages with PkgTemplates
revolves around creating a new Template
, then calling generate
on it.
Template
PkgTemplates.Template
— Type.Template(; kwargs...) -> Template
Records common information used to generate a package. If you don't wish to manually create a template, you can use interactive_template
instead.
Keyword Arguments
user::AbstractString=""
: GitHub (or other code hosting service) username. If left unset, it will take the the global git config's value (github.user
). If that is not set, an ArgumentError
is thrown. This is case-sensitive for some plugins, so take care to enter it correctly.host::AbstractString="github.com"
: URL to the code hosting service where your package will reside. Note that while hosts other than GitHub won't cause errors, they are not officially supported and they will cause certain plugins will produce incorrect output.license::AbstractString="MIT"
: Name of the package license. If an empty string is given, no license is created. available_licenses
can be used to list all available licenses, and show_license
can be used to print out a particular license's text.authors::Union{AbstractString, Vector{<:AbstractString}}=""
: Names that appear on the license. Supply a string for one author or an array for multiple. Similarly to user
, it will take the value of of the global git config's value if it is left unset.dir::AbstractString=~/.julia/dev
: Directory in which the package will go. Relative paths are converted to absolute ones at template creation time.julia_version::VersionNumber=1.0.0
: Minimum allowed Julia version.ssh::Bool=false
: Whether or not to use SSH for the git remote. If false
HTTPS will be used.dev::Bool=true
: Whether or not to Pkg.develop
generated packages.manifest::Bool=false
: Whether or not to commit the Manifest.toml
.plugins::Vector{<:Plugin}=Plugin[]
: A list of Plugin
s that the package will include.
sourcePkgTemplates.interactive_template
— Function.interactive_template(; fast::Bool=false) -> Template
Interactively create a Template
. If fast
is set, defaults will be assumed for all values except username and plugins.
sourcegenerate
PkgTemplates.generate
— Function.generate(pkg::AbstractString, t::Template) -> Nothing
+generate(t::Template, pkg::AbstractString) -> Nothing
Generate a package named pkg
from t
. If git
is false
, no Git repository is created.
sourcePkgTemplates.generate_interactive
— Function.generate_interactive(pkg::AbstractString; fast::Bool=false, git::Bool=true) -> Template
Interactively create a template, and then generate a package with it. Arguments and keywords are used in the same way as in generate
and interactive_template
.
sourceHelper Functions
PkgTemplates.gen_tests
— Function.gen_tests(pkg_dir::AbstractString, t::Template) -> Vector{String}
Create the test entrypoint in pkg_dir
.
Arguments
pkg_dir::AbstractString
: The package directory in which the files will be generatedt::Template
: The template whose tests we are generating.
Returns an array of generated file/directory names.
sourcePkgTemplates.gen_readme
— Function.gen_readme(pkg_dir::AbstractString, t::Template) -> Vector{String}
Create a README in pkg_dir
with badges for each enabled plugin.
Arguments
pkg_dir::AbstractString
: The directory in which the files will be generated.t::Template
: The template whose README we are generating.
Returns an array of generated file/directory names.
sourcePkgTemplates.gen_gitignore
— Function.gen_gitignore(pkg_dir::AbstractString, t::Template) -> Vector{String}
Create a .gitignore
in pkg_dir
.
Arguments
pkg_dir::AbstractString
: The directory in which the files will be generated.t::Template
: The template whose .gitignore we are generating.
Returns an array of generated file/directory names.
sourcePkgTemplates.gen_license
— Function.gen_license(pkg_dir::AbstractString, t::Template) -> Vector{String}
Create a license in pkg_dir
.
Arguments
pkg_dir::AbstractString
: The directory in which the files will be generated.t::Template
: The template whose LICENSE we are generating.
Returns an array of generated file/directory names.
source
diff --git a/v0.6.1/pages/plugin_development/index.html b/v0.6.1/pages/plugin_development/index.html
new file mode 100644
index 0000000..f73c809
--- /dev/null
+++ b/v0.6.1/pages/plugin_development/index.html
@@ -0,0 +1,74 @@
+
+Plugin Development · PkgTemplates.jl
Plugin Development
The best and easiest way to contribute to PkgTemplates
is to write new plugins.
PkgTemplates.Plugin
— Type.A plugin to be added to a Template
, which adds some functionality or integration. New plugins should almost always extend GenericPlugin
or CustomPlugin
.
sourceGeneric Plugins
PkgTemplates.GenericPlugin
— Type.Generic plugins are plugins that add any number of patterns to the generated package's .gitignore
, and have at most one associated file to generate.
Attributes
gitignore::Vector{AbstractString}
: Array of patterns to be added to the .gitignore
of generated packages that use this plugin.src::Union{AbstractString, Nothing}
: Path to the file that will be copied into the generated package repository. If set to nothing
, no file will be generated. When this defaults to an empty string, there should be a default file in defaults
that will be copied. That file's name is usually the same as the plugin's name, except in all lowercase and with the .yml
extension. If this is not the case, an interactive
method needs to be implemented to call interactive(; file="file.ext")
.dest::AbstractString
: Path to the generated file, relative to the root of the generated package repository.badges::Vector{Badge}
: Array of Badge
s containing information used to create Markdown-formatted badges from the plugin. Entries will be run through substitute
, so they may contain placeholder values.view::Dict{String, Any}
: Additional substitutions to make in both the plugin's badges and its associated file. See substitute
for details.
Example
struct MyPlugin <: GenericPlugin
+ gitignore::Vector{AbstractString}
+ src::Union{AbstractString, Nothing}
+ dest::AbstractString
+ badges::Vector{Badge}
+ view::Dict{String, Any}
+
+ function MyPlugin(; config_file::Union{AbstractString, Nothing}="")
+ if config_file != nothing
+ config_file = if isempty(config_file)
+ joinpath(DEFAULTS_DIR, "my-plugin.toml")
+ elseif isfile(config_file)
+ abspath(config_file)
+ else
+ throw(ArgumentError(
+ "File $(abspath(config_file)) does not exist"
+ ))
+ end
+ end
+ new(
+ ["*.mgp"],
+ config_file,
+ ".my-plugin.toml",
+ [
+ Badge(
+ "My Plugin",
+ "https://myplugin.com/badge-{{YEAR}}.png",
+ "https://myplugin.com/{{USER}}/{{PKGNAME}}.jl",
+ ),
+ ],
+ Dict{String, Any}("YEAR" => year(today())),
+ )
+ end
+end
+
+interactive(::Type{MyPlugin}) = interactive(MyPlugin; file="my-plugin.toml")
The above plugin ignores files ending with .mgp
, copies defaults/my-plugin.toml
by default, and creates a badge that links to the project on its own site, using the default substitutions with one addition: {{YEAR}} => year(today())
. Since the default config template file doesn't follow the generic naming convention, we added another interactive
method to correct the assumed filename.
sourceCustom Plugins
PkgTemplates.CustomPlugin
— Type.Custom plugins are plugins whose behaviour does not follow the GenericPlugin
pattern. They can implement gen_plugin
, badges
, and interactive
in any way they choose, as long as they conform to the usual type signature.
Attributes
gitignore::Vector{AbstractString}
: Array of patterns to be added to the .gitignore
of generated packages that use this plugin.
Example
struct MyPlugin <: CustomPlugin
+ gitignore::Vector{AbstractString}
+ lucky::Bool
+
+ MyPlugin() = new([], rand() > 0.8)
+
+ function gen_plugin(p::MyPlugin, t::Template, pkg_name::AbstractString)
+ return if p.lucky
+ text = substitute("You got lucky with {{PKGNAME}}, {{USER}}!", t)
+ gen_file(joinpath(t.dir, pkg_name, ".myplugin.yml"), text)
+ [".myplugin.yml"]
+ else
+ println("Maybe next time.")
+ String[]
+ end
+ end
+
+ function badges(p::MyPlugin, user::AbstractString, pkg_name::AbstractString)
+ return if p.lucky
+ [
+ format(Badge(
+ "You got lucky!",
+ "https://myplugin.com/badge.png",
+ "https://myplugin.com/$user/$pkg_name.jl",
+ )),
+ ]
+ else
+ String[]
+ end
+ end
+end
+
+interactive(:Type{MyPlugin}) = MyPlugin()
This plugin doesn't do much, but it demonstrates how gen_plugin
, badges
and interactive
can be implemented using substitute
, gen_file
, Badge
, and format
.
Defining Template Files
Often, the contents of the config file that your plugin generates depends on variables like the package name, the user's username, etc. Template files (which are stored in defaults
) can use here's syntax to define replacements.
sourceCustomPlugin
Required Methods
gen_plugin
PkgTemplates.gen_plugin
— Function.gen_plugin(p::Plugin, t::Template, pkg_name::AbstractString) -> Vector{String}
Generate any files associated with a plugin.
Arguments
p::Plugin
: Plugin whose files are being generated.t::Template
: Template configuration.pkg_name::AbstractString
: Name of the package.
Returns an array of generated file/directory names.
sourcePkgTemplates.interactive
— Function.interactive(T::Type{<:Plugin}; file::Union{AbstractString, Nothing}="") -> Plugin
Interactively create a plugin of type T
, where file
is the plugin type's default config template with a non-standard name (for MyPlugin
, this is anything but "myplugin.yml").
sourceNote: interactive
is not strictly required, however without it, your custom plugin will not be available when creating templates with interactive_template
.
badges
PkgTemplates.badges
— Function.badges(p::Plugin, user::AbstractString, pkg_name::AbstractString) -> Vector{String}
Generate Markdown badges for the plugin.
Arguments
p::Plugin
: Plugin whose badges we are generating.user::AbstractString
: Username of the package creator.pkg_name::AbstractString
: Name of the package.
Returns an array of Markdown badges.
sourceHelper Types/Functions
gen_file
PkgTemplates.gen_file
— Function.gen_file(file::AbstractString, text::AbstractString) -> Int
Create a new file containing some given text. Always ends the file with a newline.
Arguments
file::AbstractString
: Path to the file to be created.text::AbstractString
: Text to write to the file.
Returns the number of bytes written to the file.
sourcesubstitute
PkgTemplates.substitute
— Function.substitute(template::AbstractString, view::Dict{String, Any}) -> String
+substitute(
+ template::AbstractString,
+ pkg_template::Template;
+ view::Dict{String, Any}=Dict{String, Any}(),
+) -> String
Replace placeholders in template
with values in view
via Mustache
. template
is not modified. If pkg_template
is supplied, some default replacements are also performed.
For information on how to structure template
, see "Defining Template Files" section in Custom Plugins.
Note: Conditionals in template
without a corresponding key in view
won't error, but will simply be evaluated as false.
sourceBadge
PkgTemplates.Badge
— Type.Badge(hover::AbstractString, image::AbstractString, link::AbstractString) -> Badge
A Badge
contains the data necessary to generate a Markdown badge.
Arguments
hover::AbstractString
: Text to appear when the mouse is hovered over the badge.image::AbstractString
: URL to the image to display.link::AbstractString
: URL to go to upon clicking the badge.
sourceformat
PkgTemplates.format
— Function.format(b::Badge) -> String
Return badge
's data formatted as a Markdown string.
sourceversion_floor
PkgTemplates.version_floor
— Function.version_floor(v::VersionNumber=VERSION) -> String
Format the given Julia version.
Keyword arguments
v::VersionNumber=VERSION
: Version to floor.
Returns "major.minor" for the most recent release version relative to v. For prereleases with v.minor == v.patch == 0, returns "major.minor-".
source
diff --git a/v0.6.1/pages/plugins/index.html b/v0.6.1/pages/plugins/index.html
new file mode 100644
index 0000000..483cd57
--- /dev/null
+++ b/v0.6.1/pages/plugins/index.html
@@ -0,0 +1,2 @@
+
+Plugins · PkgTemplates.jl
Plugins
Plugins are the secret sauce behind PkgTemplates
's customization and extension. This page describes plugins that already exist; for information on writing your own plugins, see Plugin Development.
Continuous Integration (CI)
PkgTemplates.TravisCI
— Type.TravisCI(; config_file::Union{AbstractString, Nothing}="") -> TravisCI
Add TravisCI
to a template's plugins to add a .travis.yml
configuration file to generated repositories, and an appropriate badge to the README.
Keyword Arguments:
config_file::Union{AbstractString, Nothing}=""
: Path to a custom .travis.yml
. If nothing
is supplied, no file will be generated.
sourcePkgTemplates.AppVeyor
— Type.AppVeyor(; config_file::Union{AbstractString, Nothing}="") -> AppVeyor
Add AppVeyor
to a template's plugins to add a .appveyor.yml
configuration file to generated repositories, and an appropriate badge to the README.
Keyword Arguments
config_file::Union{AbstractString, Nothing}=""
: Path to a custom .appveyor.yml
. If nothing
is supplied, no file will be generated.
sourcePkgTemplates.GitLabCI
— Type.GitLabCI(; config_file::Union{AbstractString, Nothing}="", coverage::Bool=true) -> GitLabCI
Add GitLabCI
to a template's plugins to add a .gitlab-ci.yml
configuration file to generated repositories, and appropriate badge(s) to the README.
Keyword Arguments:
config_file::Union{AbstractString, Nothing}=""
: Path to a custom .gitlab-ci.yml
. If nothing
is supplied, no file will be generated.coverage::Bool=true
: Whether or not GitLab CI's built-in code coverage analysis should be enabled.
sourcePkgTemplates.CirrusCI
— Type.CirrusCI(; config_file::Union{AbstractString, Nothing}="") -> CirrusCI
Add CirrusCI
to a template's plugins to add a .cirrus.yml
configuration file to generated repositories, and an appropriate badge to the README. The default configuration file supports only FreeBSD builds via CirrusCI.jl
Keyword Arguments
config_file::Union{AbstractString, Nothing}=""
: Path to a custom .cirrus.yml
. If nothing
is supplied, no file will be generated.
sourceCode Coverage
PkgTemplates.Codecov
— Type.Codecov(; config_file::Union{AbstractString, Nothing}=nothing) -> Codecov
Add Codecov
to a template's plugins to optionally add a .codecov.yml
configuration file to generated repositories, and an appropriate badge to the README. Also updates the .gitignore
accordingly.
Keyword Arguments:
config_file::Union{AbstractString, Nothing}=nothing
: Path to a custom .codecov.yml
. If left unset, no file will be generated.
sourcePkgTemplates.Coveralls
— Type.Coveralls(; config_file::Union{AbstractString, Nothing}=nothing) -> Coveralls
Add Coveralls
to a template's plugins to optionally add a .coveralls.yml
configuration file to generated repositories, and an appropriate badge to the README. Also updates the .gitignore
accordingly.
Keyword Arguments:
config_file::Union{AbstractString, Nothing}=nothing
: Path to a custom .coveralls.yml
. If left unset, no file will be generated.
sourceDocumentation
PkgTemplates.Documenter
— Type.Add a Documenter
subtype to a template's plugins to add support for documentation generation via Documenter.jl.
By default, the plugin generates a minimal index.md and a make.jl file. The make.jl file contains the Documenter.makedocs command with predefined values for modules
, format
, pages
, repo
, sitename
, and authors
.
The subtype is expected to include the following fields:
assets::Vector{AbstractString}
, a list of filenames to be included as the assets
kwarg to makedocs
gitignore::Vector{AbstractString}
, a list of files to be added to the .gitignore
It may optionally include the field additional_kwargs::Union{AbstractDict, NamedTuple}
to allow additional kwargs to be added to makedocs
.
sourcePkgTemplates.GitHubPages
— Type.GitHubPages(; assets::Vector{<:AbstractString}=String[]) -> GitHubPages
Add GitHubPages
to a template's plugins to add Documenter
support via GitHub Pages, including automatic uploading of documentation from TravisCI
. Also adds appropriate badges to the README, and updates the .gitignore
accordingly.
Keyword Arguments
assets::Vector{<:AbstractString}=String[]
: Array of paths to Documenter asset files.
NoteIf deploying documentation with Travis CI, don't forget to complete the required configuration (see here).
sourcePkgTemplates.GitLabPages
— Type.GitLabPages(; assets::Vector{<:AbstractString}=String[]) -> GitLabPages
Add GitLabPages
to a template's plugins to add Documenter
support via GitLab Pages, including automatic uploading of documentation from GitLabCI
. Also adds appropriate badges to the README, and updates the .gitignore
accordingly.
Keyword Arguments
assets::Vector{<:AbstractString}=String[]
: Array of paths to Documenter asset files.
source
diff --git a/v0.6.1/search/index.html b/v0.6.1/search/index.html
new file mode 100644
index 0000000..d85c91a
--- /dev/null
+++ b/v0.6.1/search/index.html
@@ -0,0 +1,2 @@
+
+Search · PkgTemplates.jl
Search
Number of results: loading...
diff --git a/v0.6.1/search_index.js b/v0.6.1/search_index.js
new file mode 100644
index 0000000..be1fd55
--- /dev/null
+++ b/v0.6.1/search_index.js
@@ -0,0 +1,531 @@
+var documenterSearchIndex = {"docs": [
+
+{
+ "location": "#",
+ "page": "Home",
+ "title": "Home",
+ "category": "page",
+ "text": ""
+},
+
+{
+ "location": "#PkgTemplates-1",
+ "page": "Home",
+ "title": "PkgTemplates",
+ "category": "section",
+ "text": "(Image: Stable) (Image: Latest) (Image: Build Status) (Image: Build Status) (Image: Codecov)PkgTemplates is a Julia package for creating new Julia packages in an easy, repeatable, and customizable way."
+},
+
+{
+ "location": "#Installation-1",
+ "page": "Home",
+ "title": "Installation",
+ "category": "section",
+ "text": "pkg> add PkgTemplates"
+},
+
+{
+ "location": "#Plugins-1",
+ "page": "Home",
+ "title": "Plugins",
+ "category": "section",
+ "text": "PkgTemplates is based on plugins which handle the setup of individual package components. The available plugins are:Continuous Integration (CI)\nTravis CI (Linux, MacOS)\nAppVeyor (Windows)\nGitLabCI (Linux)\nCirrusCI (FreeBSD)\nCode Coverage\nCodecov\nCoveralls\nDocumentation\nGitHubPages\nCitation"
+},
+
+{
+ "location": "#Usage-1",
+ "page": "Home",
+ "title": "Usage",
+ "category": "section",
+ "text": "using LibGit2: getconfig\nisempty(getconfig(\"user.name\", \"\")) && run(`git config --global user.name \"Travis\"`)\nisempty(getconfig(\"user.email\", \"\")) && run(`git config --global user.email \"travis@c.i\"`)\nisempty(getconfig(\"github.user\", \"\")) && run(`git config --global github.user \"travis\"`)\nusing Pkg\nPkg.activate(mktempdir())\n# This code gets run in docs/build/, so this path evaluates to the repo root.\nPkg.add(PackageSpec(path=dirname(dirname(pwd()))))Assuming you have the relatively standard Git options user.name, user.email and github.user set up globally with git config --global, the simplest template requires no arguments:using PkgTemplates\nt = Template()\ngenerate(\"MyPkg\", t)\nrun(`git -C $(joinpath(t.dir, \"MyPkg\")) ls-files`);However, we can also configure a number of keyword arguments to Template:using PkgTemplates\nt = Template(;\n user=\"myusername\",\n license=\"MIT\",\n authors=[\"Chris de Graaf\", \"Invenia Technical Computing Corporation\"],\n dir=\"~/code\",\n julia_version=v\"0.7\",\n ssh=true,\n plugins=[\n TravisCI(),\n Codecov(),\n Coveralls(),\n AppVeyor(),\n GitHubPages(),\n CirrusCI(),\n ],\n)\ngenerate(\"MyPkg2\", t)\nrun(`git -C $(joinpath(t.dir, \"MyPkg2\")) ls-files`);If that looks like a lot of work, you can also create templates interactively with interactive_template:(Image: 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."
+},
+
+{
+ "location": "#Comparison-to-PkgDev-1",
+ "page": "Home",
+ "title": "Comparison to PkgDev",
+ "category": "section",
+ "text": "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."
+},
+
+{
+ "location": "#Contributing-1",
+ "page": "Home",
+ "title": "Contributing",
+ "category": "section",
+ "text": "It\'s extremely easy to extend PkgTemplates with new plugins. To get started, check out the plugin development guide."
+},
+
+{
+ "location": "pages/package_generation/#",
+ "page": "Package Generation",
+ "title": "Package Generation",
+ "category": "page",
+ "text": "CurrentModule = PkgTemplates"
+},
+
+{
+ "location": "pages/package_generation/#Package-Generation-1",
+ "page": "Package Generation",
+ "title": "Package Generation",
+ "category": "section",
+ "text": "Creating new packages with PkgTemplates revolves around creating a new Template, then calling generate on it."
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.Template",
+ "page": "Package Generation",
+ "title": "PkgTemplates.Template",
+ "category": "type",
+ "text": "Template(; kwargs...) -> Template\n\nRecords common information used to generate a package. If you don\'t wish to manually create a template, you can use interactive_template instead.\n\nKeyword Arguments\n\nuser::AbstractString=\"\": GitHub (or other code hosting service) username. If left unset, it will take the the global git config\'s value (github.user). If that is not set, an ArgumentError is thrown. This is case-sensitive for some plugins, so take care to enter it correctly.\nhost::AbstractString=\"github.com\": URL to the code hosting service where your package will reside. Note that while hosts other than GitHub won\'t cause errors, they are not officially supported and they will cause certain plugins will produce incorrect output.\nlicense::AbstractString=\"MIT\": Name of the package license. If an empty string is given, no license is created. available_licenses can be used to list all available licenses, and show_license can be used to print out a particular license\'s text.\nauthors::Union{AbstractString, Vector{<:AbstractString}}=\"\": Names that appear on the license. Supply a string for one author or an array for multiple. Similarly to user, it will take the value of of the global git config\'s value if it is left unset.\ndir::AbstractString=~/.julia/dev: Directory in which the package will go. Relative paths are converted to absolute ones at template creation time.\njulia_version::VersionNumber=1.0.0: Minimum allowed Julia version.\nssh::Bool=false: Whether or not to use SSH for the git remote. If false HTTPS will be used.\ndev::Bool=true: Whether or not to Pkg.develop generated packages.\nmanifest::Bool=false: Whether or not to commit the Manifest.toml.\nplugins::Vector{<:Plugin}=Plugin[]: A list of Plugins that the package will include.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.interactive_template",
+ "page": "Package Generation",
+ "title": "PkgTemplates.interactive_template",
+ "category": "function",
+ "text": "interactive_template(; fast::Bool=false) -> Template\n\nInteractively create a Template. If fast is set, defaults will be assumed for all values except username and plugins.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#Template-1",
+ "page": "Package Generation",
+ "title": "Template",
+ "category": "section",
+ "text": "Template\ninteractive_template"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.generate",
+ "page": "Package Generation",
+ "title": "PkgTemplates.generate",
+ "category": "function",
+ "text": "generate(pkg::AbstractString, t::Template) -> Nothing\ngenerate(t::Template, pkg::AbstractString) -> Nothing\n\nGenerate a package named pkg from t. If git is false, no Git repository is created.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.generate_interactive",
+ "page": "Package Generation",
+ "title": "PkgTemplates.generate_interactive",
+ "category": "function",
+ "text": "generate_interactive(pkg::AbstractString; fast::Bool=false, git::Bool=true) -> Template\n\nInteractively create a template, and then generate a package with it. Arguments and keywords are used in the same way as in generate and interactive_template.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#generate-1",
+ "page": "Package Generation",
+ "title": "generate",
+ "category": "section",
+ "text": "generate\ngenerate_interactive"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.gen_tests",
+ "page": "Package Generation",
+ "title": "PkgTemplates.gen_tests",
+ "category": "function",
+ "text": "gen_tests(pkg_dir::AbstractString, t::Template) -> Vector{String}\n\nCreate the test entrypoint in pkg_dir.\n\nArguments\n\npkg_dir::AbstractString: The package directory in which the files will be generated\nt::Template: The template whose tests we are generating.\n\nReturns an array of generated file/directory names.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.gen_readme",
+ "page": "Package Generation",
+ "title": "PkgTemplates.gen_readme",
+ "category": "function",
+ "text": "gen_readme(pkg_dir::AbstractString, t::Template) -> Vector{String}\n\nCreate a README in pkg_dir with badges for each enabled plugin.\n\nArguments\n\npkg_dir::AbstractString: The directory in which the files will be generated.\nt::Template: The template whose README we are generating.\n\nReturns an array of generated file/directory names.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.gen_gitignore",
+ "page": "Package Generation",
+ "title": "PkgTemplates.gen_gitignore",
+ "category": "function",
+ "text": "gen_gitignore(pkg_dir::AbstractString, t::Template) -> Vector{String}\n\nCreate a .gitignore in pkg_dir.\n\nArguments\n\npkg_dir::AbstractString: The directory in which the files will be generated.\nt::Template: The template whose .gitignore we are generating.\n\nReturns an array of generated file/directory names.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#PkgTemplates.gen_license",
+ "page": "Package Generation",
+ "title": "PkgTemplates.gen_license",
+ "category": "function",
+ "text": "gen_license(pkg_dir::AbstractString, t::Template) -> Vector{String}\n\nCreate a license in pkg_dir.\n\nArguments\n\npkg_dir::AbstractString: The directory in which the files will be generated.\nt::Template: The template whose LICENSE we are generating.\n\nReturns an array of generated file/directory names.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/package_generation/#Helper-Functions-1",
+ "page": "Package Generation",
+ "title": "Helper Functions",
+ "category": "section",
+ "text": "gen_tests\ngen_readme\ngen_gitignore\ngen_license"
+},
+
+{
+ "location": "pages/plugins/#",
+ "page": "Plugins",
+ "title": "Plugins",
+ "category": "page",
+ "text": "CurrentModule = PkgTemplates"
+},
+
+{
+ "location": "pages/plugins/#Plugins-1",
+ "page": "Plugins",
+ "title": "Plugins",
+ "category": "section",
+ "text": "Plugins are the secret sauce behind PkgTemplates\'s customization and extension. This page describes plugins that already exist; for information on writing your own plugins, see Plugin Development."
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.TravisCI",
+ "page": "Plugins",
+ "title": "PkgTemplates.TravisCI",
+ "category": "type",
+ "text": "TravisCI(; config_file::Union{AbstractString, Nothing}=\"\") -> TravisCI\n\nAdd TravisCI to a template\'s plugins to add a .travis.yml configuration file to generated repositories, and an appropriate badge to the README.\n\nKeyword Arguments:\n\nconfig_file::Union{AbstractString, Nothing}=\"\": Path to a custom .travis.yml. If nothing is supplied, no file will be generated.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.AppVeyor",
+ "page": "Plugins",
+ "title": "PkgTemplates.AppVeyor",
+ "category": "type",
+ "text": "AppVeyor(; config_file::Union{AbstractString, Nothing}=\"\") -> AppVeyor\n\nAdd AppVeyor to a template\'s plugins to add a .appveyor.yml configuration file to generated repositories, and an appropriate badge to the README.\n\nKeyword Arguments\n\nconfig_file::Union{AbstractString, Nothing}=\"\": Path to a custom .appveyor.yml. If nothing is supplied, no file will be generated.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.GitLabCI",
+ "page": "Plugins",
+ "title": "PkgTemplates.GitLabCI",
+ "category": "type",
+ "text": "GitLabCI(; config_file::Union{AbstractString, Nothing}=\"\", coverage::Bool=true) -> GitLabCI\n\nAdd GitLabCI to a template\'s plugins to add a .gitlab-ci.yml configuration file to generated repositories, and appropriate badge(s) to the README.\n\nKeyword Arguments:\n\nconfig_file::Union{AbstractString, Nothing}=\"\": Path to a custom .gitlab-ci.yml. If nothing is supplied, no file will be generated.\ncoverage::Bool=true: Whether or not GitLab CI\'s built-in code coverage analysis should be enabled.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.CirrusCI",
+ "page": "Plugins",
+ "title": "PkgTemplates.CirrusCI",
+ "category": "type",
+ "text": "CirrusCI(; config_file::Union{AbstractString, Nothing}=\"\") -> CirrusCI\n\nAdd CirrusCI to a template\'s plugins to add a .cirrus.yml configuration file to generated repositories, and an appropriate badge to the README. The default configuration file supports only FreeBSD builds via CirrusCI.jl\n\nKeyword Arguments\n\nconfig_file::Union{AbstractString, Nothing}=\"\": Path to a custom .cirrus.yml. If nothing is supplied, no file will be generated.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#Continuous-Integration-(CI)-1",
+ "page": "Plugins",
+ "title": "Continuous Integration (CI)",
+ "category": "section",
+ "text": "TravisCI\nAppVeyor\nGitLabCI\nCirrusCI"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.Codecov",
+ "page": "Plugins",
+ "title": "PkgTemplates.Codecov",
+ "category": "type",
+ "text": "Codecov(; config_file::Union{AbstractString, Nothing}=nothing) -> Codecov\n\nAdd Codecov to a template\'s plugins to optionally add a .codecov.yml configuration file to generated repositories, and an appropriate badge to the README. Also updates the .gitignore accordingly.\n\nKeyword Arguments:\n\nconfig_file::Union{AbstractString, Nothing}=nothing: Path to a custom .codecov.yml. If left unset, no file will be generated.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.Coveralls",
+ "page": "Plugins",
+ "title": "PkgTemplates.Coveralls",
+ "category": "type",
+ "text": "Coveralls(; config_file::Union{AbstractString, Nothing}=nothing) -> Coveralls\n\nAdd Coveralls to a template\'s plugins to optionally add a .coveralls.yml configuration file to generated repositories, and an appropriate badge to the README. Also updates the .gitignore accordingly.\n\nKeyword Arguments:\n\nconfig_file::Union{AbstractString, Nothing}=nothing: Path to a custom .coveralls.yml. If left unset, no file will be generated.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#Code-Coverage-1",
+ "page": "Plugins",
+ "title": "Code Coverage",
+ "category": "section",
+ "text": "Codecov\nCoveralls"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.Documenter",
+ "page": "Plugins",
+ "title": "PkgTemplates.Documenter",
+ "category": "type",
+ "text": "Add a Documenter subtype to a template\'s plugins to add support for documentation generation via Documenter.jl.\n\nBy default, the plugin generates a minimal index.md and a make.jl file. The make.jl file contains the Documenter.makedocs command with predefined values for modules, format, pages, repo, sitename, and authors.\n\nThe subtype is expected to include the following fields:\n\nassets::Vector{AbstractString}, a list of filenames to be included as the assets\n\nkwarg to makedocs\n\ngitignore::Vector{AbstractString}, a list of files to be added to the .gitignore\n\nIt may optionally include the field additional_kwargs::Union{AbstractDict, NamedTuple} to allow additional kwargs to be added to makedocs.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.GitHubPages",
+ "page": "Plugins",
+ "title": "PkgTemplates.GitHubPages",
+ "category": "type",
+ "text": "GitHubPages(; assets::Vector{<:AbstractString}=String[]) -> GitHubPages\n\nAdd GitHubPages to a template\'s plugins to add Documenter support via GitHub Pages, including automatic uploading of documentation from TravisCI. Also adds appropriate badges to the README, and updates the .gitignore accordingly.\n\nKeyword Arguments\n\nassets::Vector{<:AbstractString}=String[]: Array of paths to Documenter asset files.\n\nnote: Note\nIf deploying documentation with Travis CI, don\'t forget to complete the required configuration (see here).\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#PkgTemplates.GitLabPages",
+ "page": "Plugins",
+ "title": "PkgTemplates.GitLabPages",
+ "category": "type",
+ "text": "GitLabPages(; assets::Vector{<:AbstractString}=String[]) -> GitLabPages\n\nAdd GitLabPages to a template\'s plugins to add Documenter support via GitLab Pages, including automatic uploading of documentation from GitLabCI. Also adds appropriate badges to the README, and updates the .gitignore accordingly.\n\nKeyword Arguments\n\nassets::Vector{<:AbstractString}=String[]: Array of paths to Documenter asset files.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugins/#Documentation-1",
+ "page": "Plugins",
+ "title": "Documentation",
+ "category": "section",
+ "text": "Documenter\nGitHubPages\nGitLabPages"
+},
+
+{
+ "location": "pages/plugin_development/#",
+ "page": "Plugin Development",
+ "title": "Plugin Development",
+ "category": "page",
+ "text": "CurrentModule = PkgTemplates"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.Plugin",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.Plugin",
+ "category": "type",
+ "text": "A plugin to be added to a Template, which adds some functionality or integration. New plugins should almost always extend GenericPlugin or CustomPlugin.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#Plugin-Development-1",
+ "page": "Plugin Development",
+ "title": "Plugin Development",
+ "category": "section",
+ "text": "The best and easiest way to contribute to PkgTemplates is to write new plugins.Plugin"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.GenericPlugin",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.GenericPlugin",
+ "category": "type",
+ "text": "Generic plugins are plugins that add any number of patterns to the generated package\'s .gitignore, and have at most one associated file to generate.\n\nAttributes\n\ngitignore::Vector{AbstractString}: Array of patterns to be added to the .gitignore of generated packages that use this plugin.\nsrc::Union{AbstractString, Nothing}: Path to the file that will be copied into the generated package repository. If set to nothing, no file will be generated. When this defaults to an empty string, there should be a default file in defaults that will be copied. That file\'s name is usually the same as the plugin\'s name, except in all lowercase and with the .yml extension. If this is not the case, an interactive method needs to be implemented to call interactive(; file=\"file.ext\").\ndest::AbstractString: Path to the generated file, relative to the root of the generated package repository.\nbadges::Vector{Badge}: Array of Badges containing information used to create Markdown-formatted badges from the plugin. Entries will be run through substitute, so they may contain placeholder values.\nview::Dict{String, Any}: Additional substitutions to make in both the plugin\'s badges and its associated file. See substitute for details.\n\nExample\n\nstruct MyPlugin <: GenericPlugin\n gitignore::Vector{AbstractString}\n src::Union{AbstractString, Nothing}\n dest::AbstractString\n badges::Vector{Badge}\n view::Dict{String, Any}\n\n function MyPlugin(; config_file::Union{AbstractString, Nothing}=\"\")\n if config_file != nothing\n config_file = if isempty(config_file)\n joinpath(DEFAULTS_DIR, \"my-plugin.toml\")\n elseif isfile(config_file)\n abspath(config_file)\n else\n throw(ArgumentError(\n \"File $(abspath(config_file)) does not exist\"\n ))\n end\n end\n new(\n [\"*.mgp\"],\n config_file,\n \".my-plugin.toml\",\n [\n Badge(\n \"My Plugin\",\n \"https://myplugin.com/badge-{{YEAR}}.png\",\n \"https://myplugin.com/{{USER}}/{{PKGNAME}}.jl\",\n ),\n ],\n Dict{String, Any}(\"YEAR\" => year(today())),\n )\n end\nend\n\ninteractive(::Type{MyPlugin}) = interactive(MyPlugin; file=\"my-plugin.toml\")\n\nThe above plugin ignores files ending with .mgp, copies defaults/my-plugin.toml by default, and creates a badge that links to the project on its own site, using the default substitutions with one addition: {{YEAR}} => year(today()). Since the default config template file doesn\'t follow the generic naming convention, we added another interactive method to correct the assumed filename.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#Generic-Plugins-1",
+ "page": "Plugin Development",
+ "title": "Generic Plugins",
+ "category": "section",
+ "text": "GenericPlugin"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.CustomPlugin",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.CustomPlugin",
+ "category": "type",
+ "text": "Custom plugins are plugins whose behaviour does not follow the GenericPlugin pattern. They can implement gen_plugin, badges, and interactive in any way they choose, as long as they conform to the usual type signature.\n\nAttributes\n\ngitignore::Vector{AbstractString}: Array of patterns to be added to the .gitignore of generated packages that use this plugin.\n\nExample\n\nstruct MyPlugin <: CustomPlugin\n gitignore::Vector{AbstractString}\n lucky::Bool\n\n MyPlugin() = new([], rand() > 0.8)\n\n function gen_plugin(p::MyPlugin, t::Template, pkg_name::AbstractString)\n return if p.lucky\n text = substitute(\"You got lucky with {{PKGNAME}}, {{USER}}!\", t)\n gen_file(joinpath(t.dir, pkg_name, \".myplugin.yml\"), text)\n [\".myplugin.yml\"]\n else\n println(\"Maybe next time.\")\n String[]\n end\n end\n\n function badges(p::MyPlugin, user::AbstractString, pkg_name::AbstractString)\n return if p.lucky\n [\n format(Badge(\n \"You got lucky!\",\n \"https://myplugin.com/badge.png\",\n \"https://myplugin.com/$user/$pkg_name.jl\",\n )),\n ]\n else\n String[]\n end\n end\nend\n\ninteractive(:Type{MyPlugin}) = MyPlugin()\n\nThis plugin doesn\'t do much, but it demonstrates how gen_plugin, badges and interactive can be implemented using substitute, gen_file, Badge, and format.\n\nDefining Template Files\n\nOften, the contents of the config file that your plugin generates depends on variables like the package name, the user\'s username, etc. Template files (which are stored in defaults) can use here\'s syntax to define replacements.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#Custom-Plugins-1",
+ "page": "Plugin Development",
+ "title": "Custom Plugins",
+ "category": "section",
+ "text": "CustomPlugin"
+},
+
+{
+ "location": "pages/plugin_development/#CustomPlugin-Required-Methods-1",
+ "page": "Plugin Development",
+ "title": "CustomPlugin Required Methods",
+ "category": "section",
+ "text": ""
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.gen_plugin",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.gen_plugin",
+ "category": "function",
+ "text": "gen_plugin(p::Plugin, t::Template, pkg_name::AbstractString) -> Vector{String}\n\nGenerate any files associated with a plugin.\n\nArguments\n\np::Plugin: Plugin whose files are being generated.\nt::Template: Template configuration.\npkg_name::AbstractString: Name of the package.\n\nReturns an array of generated file/directory names.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.interactive",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.interactive",
+ "category": "function",
+ "text": "interactive(T::Type{<:Plugin}; file::Union{AbstractString, Nothing}=\"\") -> Plugin\n\nInteractively create a plugin of type T, where file is the plugin type\'s default config template with a non-standard name (for MyPlugin, this is anything but \"myplugin.yml\").\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#gen_plugin-1",
+ "page": "Plugin Development",
+ "title": "gen_plugin",
+ "category": "section",
+ "text": "gen_plugin\ninteractiveNote: interactive is not strictly required, however without it, your custom plugin will not be available when creating templates with interactive_template."
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.badges",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.badges",
+ "category": "function",
+ "text": "badges(p::Plugin, user::AbstractString, pkg_name::AbstractString) -> Vector{String}\n\nGenerate Markdown badges for the plugin.\n\nArguments\n\np::Plugin: Plugin whose badges we are generating.\nuser::AbstractString: Username of the package creator.\npkg_name::AbstractString: Name of the package.\n\nReturns an array of Markdown badges.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#badges-1",
+ "page": "Plugin Development",
+ "title": "badges",
+ "category": "section",
+ "text": "badges"
+},
+
+{
+ "location": "pages/plugin_development/#Helper-Types/Functions-1",
+ "page": "Plugin Development",
+ "title": "Helper Types/Functions",
+ "category": "section",
+ "text": ""
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.gen_file",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.gen_file",
+ "category": "function",
+ "text": "gen_file(file::AbstractString, text::AbstractString) -> Int\n\nCreate a new file containing some given text. Always ends the file with a newline.\n\nArguments\n\nfile::AbstractString: Path to the file to be created.\ntext::AbstractString: Text to write to the file.\n\nReturns the number of bytes written to the file.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#gen_file-1",
+ "page": "Plugin Development",
+ "title": "gen_file",
+ "category": "section",
+ "text": "gen_file"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.substitute",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.substitute",
+ "category": "function",
+ "text": "substitute(template::AbstractString, view::Dict{String, Any}) -> String\nsubstitute(\n template::AbstractString,\n pkg_template::Template;\n view::Dict{String, Any}=Dict{String, Any}(),\n) -> String\n\nReplace placeholders in template with values in view via Mustache. template is not modified. If pkg_template is supplied, some default replacements are also performed.\n\nFor information on how to structure template, see \"Defining Template Files\" section in Custom Plugins.\n\nNote: Conditionals in template without a corresponding key in view won\'t error, but will simply be evaluated as false.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#substitute-1",
+ "page": "Plugin Development",
+ "title": "substitute",
+ "category": "section",
+ "text": "substitute"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.Badge",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.Badge",
+ "category": "type",
+ "text": "Badge(hover::AbstractString, image::AbstractString, link::AbstractString) -> Badge\n\nA Badge contains the data necessary to generate a Markdown badge.\n\nArguments\n\nhover::AbstractString: Text to appear when the mouse is hovered over the badge.\nimage::AbstractString: URL to the image to display.\nlink::AbstractString: URL to go to upon clicking the badge.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#Badge-1",
+ "page": "Plugin Development",
+ "title": "Badge",
+ "category": "section",
+ "text": "Badge"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.format",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.format",
+ "category": "function",
+ "text": "format(b::Badge) -> String\n\nReturn badge\'s data formatted as a Markdown string.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#format-1",
+ "page": "Plugin Development",
+ "title": "format",
+ "category": "section",
+ "text": "format"
+},
+
+{
+ "location": "pages/plugin_development/#PkgTemplates.version_floor",
+ "page": "Plugin Development",
+ "title": "PkgTemplates.version_floor",
+ "category": "function",
+ "text": "version_floor(v::VersionNumber=VERSION) -> String\n\nFormat the given Julia version.\n\nKeyword arguments\n\nv::VersionNumber=VERSION: Version to floor.\n\nReturns \"major.minor\" for the most recent release version relative to v. For prereleases with v.minor == v.patch == 0, returns \"major.minor-\".\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/plugin_development/#version_floor-1",
+ "page": "Plugin Development",
+ "title": "version_floor",
+ "category": "section",
+ "text": "version_floor"
+},
+
+{
+ "location": "pages/licenses/#",
+ "page": "Licenses",
+ "title": "Licenses",
+ "category": "page",
+ "text": "CurrentModule = PkgTemplates"
+},
+
+{
+ "location": "pages/licenses/#PkgTemplates.available_licenses",
+ "page": "Licenses",
+ "title": "PkgTemplates.available_licenses",
+ "category": "function",
+ "text": "available_licenses([io::IO]) -> Nothing\n\nPrint the names of all available licenses.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/licenses/#PkgTemplates.show_license",
+ "page": "Licenses",
+ "title": "PkgTemplates.show_license",
+ "category": "function",
+ "text": "show_license([io::IO], license::AbstractString) -> Nothing\n\nPrint the text of license. Errors if the license is not found.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/licenses/#Licenses-1",
+ "page": "Licenses",
+ "title": "Licenses",
+ "category": "section",
+ "text": "Many open-source licenses are available for use with PkgTemplates, but if you see that one is missing, don\'t hesitate to open an issue or PR.available_licenses\nshow_license"
+},
+
+{
+ "location": "pages/licenses/#PkgTemplates.read_license",
+ "page": "Licenses",
+ "title": "PkgTemplates.read_license",
+ "category": "function",
+ "text": "read_license(license::AbstractString) -> String\n\nReturns the contents of license. Errors if the license is not found. Use available_licenses to view available licenses.\n\n\n\n\n\n"
+},
+
+{
+ "location": "pages/licenses/#Helper-Functions-1",
+ "page": "Licenses",
+ "title": "Helper Functions",
+ "category": "section",
+ "text": "read_license"
+},
+
+{
+ "location": "pages/#",
+ "page": "Index",
+ "title": "Index",
+ "category": "page",
+ "text": ""
+},
+
+{
+ "location": "pages/#Index-1",
+ "page": "Index",
+ "title": "Index",
+ "category": "section",
+ "text": ""
+},
+
+]}
diff --git a/v0.6.1/siteinfo.js b/v0.6.1/siteinfo.js
new file mode 100644
index 0000000..2f41237
--- /dev/null
+++ b/v0.6.1/siteinfo.js
@@ -0,0 +1 @@
+var DOCUMENTER_CURRENT_VERSION = "v0.6.1";