From a14131ae159fd05a2d0bcae68c59fa22344e3d6a Mon Sep 17 00:00:00 2001 From: Chris de Graaf Date: Tue, 15 Aug 2017 18:46:36 -0500 Subject: [PATCH] Build package in a temp directory, refactor code --- src/generate.jl | 170 ++++++++++----------- src/plugins/appveyor.jl | 5 +- src/plugins/codecov.jl | 7 +- src/plugins/documenter.jl | 8 +- src/plugins/githubpages.jl | 4 +- src/plugins/travis.jl | 5 +- src/template.jl | 11 +- test/tests.jl | 295 ++++++++++++++++++------------------- 8 files changed, 242 insertions(+), 263 deletions(-) diff --git a/src/generate.jl b/src/generate.jl index fec6a79..a4e41e9 100644 --- a/src/generate.jl +++ b/src/generate.jl @@ -22,21 +22,19 @@ function generate( force::Bool=false, ssh::Bool=false, ) - pkg_name = Pkg.splitjl(pkg_name) - pkg_dir = joinpath(t.path, pkg_name) + pkg_dir = joinpath(t.dir, pkg_name) + temp_pkg_dir = joinpath(t.temp_dir, pkg_name) - if force && ispath(pkg_dir) - rm(pkg_dir; recursive=true) - elseif ispath(pkg_dir) + if !force && ispath(pkg_dir) throw(ArgumentError( - "A directory already exists at $pkg_dir, use force=true to overwrite it." + "Something already exists at $pkg_dir, use force=true to overwrite it." )) end # Initialize the repo and configure it. - repo = LibGit2.init(pkg_dir) - info("Initialized git repo at $pkg_dir") + repo = LibGit2.init(temp_pkg_dir) + info("Initialized git repo at $temp_pkg_dir") cfg = LibGit2.GitConfig(repo) info("Configuring git") for (key, val) in t.git_config @@ -59,124 +57,115 @@ function generate( LibGit2.branch!(repo, "master") end - # Generate plugin files and common stuff like tests/entrypoint/readme. - # File generation functions that fail should return nothing. - files = filter(x -> x != nothing, [ - gen_license(pkg_dir, t.license, t.authors, t.years), - gen_entrypoint(pkg_dir), - gen_require(pkg_dir, t.julia_version), - gen_tests(pkg_dir), - gen_readme(pkg_dir, t), - gen_gitignore(pkg_dir, t.plugins), - ]) - - for plugin in values(t.plugins) - plugin_files = gen_plugin(plugin, t, pkg_name) - append!(files, plugin_files) - info("Generated files/directories: $(join(plugin_files, ", "))") - end + # Generate the files. + files = vcat( + gen_license(pkg_name, t), + gen_entrypoint(pkg_name, t), + gen_require(temp_pkg_dir, t), + gen_tests(pkg_name, t), + gen_readme(pkg_name, t), + gen_gitignore(pkg_name, t), + vcat(collect(gen_plugin(plugin, t, pkg_name) for plugin in values(t.plugins))...), + ) LibGit2.add!(repo, files...) info("Staged $(length(files)) files/directories: $(join(files, ", "))") LibGit2.commit(repo, "Files generated by PkgTemplates") info("Committed files generated by PkgTemplates") + info("Copying temporary package directory into $(t.dir)") + cp(temp_pkg_dir, pkg_dir; remove_destination=force) + rm(temp_pkg_dir; recursive=true) info("Finished") warn("Remember to push all created branches to your remote: git push --all -u") end """ - gen_readme(pkg_dir::AbstractString, t::Template) -> String + gen_readme(pkg_name::AbstractString, template::Template) -> Vector{String} -Generate a README with badges for each enabled plugin. +Create a README in the temp package directory with badges for each enabled plugin. # Arguments -* `pkg_dir::AbstractString`: The package directory. -* `t::Template`: The template whose README we are generating. +* `pkg_name::AbstractString`: Name of the package. +* `template::Template`: The template whose README we are generating. -Returns the name of the generated file. +Returns an array of generated file/directory names. """ -function gen_readme(pkg_dir::AbstractString, t::Template) - pkg_name = basename(pkg_dir) +function gen_readme(pkg_name::AbstractString, template::Template) text = "# $pkg_name\n" - # We want badges to be laid out: docs -> CI -> coverage. ordering = [GitHubPages, TravisCI, AppVeyor, CodeCov] for plugin_type in ordering - if haskey(t.plugins, plugin_type) - text *= "\n" * join(badges(t.plugins[plugin_type], t.user, pkg_name), "\n") + if haskey(template.plugins, plugin_type) + text *= "\n" + text *= join( + badges(template.plugins[plugin_type], template.user, pkg_name), + "\n", + ) end end - gen_file(joinpath(pkg_dir, "README.md"), text) - return "README.md" + gen_file(joinpath(template.temp_dir, pkg_name, "README.md"), text) + return ["README.md"] end """ - gen_gitignore(pkg_dir, plugins) -> Union{String,Void} + gen_gitignore(pkg_name::AbstractString, template::Template) -> Vector{String} -Generate a .gitignore from the list of enabled `plugins`. +Create a .gitignore in the temp package directory. # Arguments -* `pkg_dir::AbstractString`: The package directory. -* `plugins::Dict{DataType, Plugin}`: The enabled plugins. +* `pkg_name::AbstractString`: Name of the package. +* `template::Template`: The template whose .gitignore we are generating. -Returns the name of the generated file. +Returns an array of generated file/directory names. """ -function gen_gitignore(pkg_dir::AbstractString, plugins::Dict{DataType,Plugin}) +function gen_gitignore(pkg_name::AbstractString, template::Template) text = ".DS_Store\n" - for plugin in values(plugins) + for plugin in values(template.plugins) if !isempty(plugin.gitignore_files) text *= join(plugin.gitignore_files, "\n") * "\n" end end - gen_file(joinpath(pkg_dir, ".gitignore"), text) - return ".gitignore" + gen_file(joinpath(template.temp_dir, pkg_name, ".gitignore"), text) + return [".gitignore"] end """ - gen_license(pkg_dir, license, authors, years) -> Union{String, Void} + gen_license(pkg_name::AbstractString, template::Template) -> Vector{String} -Creates a license file for the package. +Create a LICENSE in the temp package directory. # Arguments -* `pkg_dir::AbstractString`: The package directory. -* `license::Union{AbstractString, Void}`: Name of the license, `nothing` if no license. -* `authors::AbstractString`: Author, or comma-delimited list of authors, of the package. -* `years::AbstractString`: Copyright year or range of copyright years. +* `pkg_name::AbstractString`: Name of the package. +* `template::Template`: The template whose LICENSE we are generating. -Returns the name of the generated file, or `nothing` in the case that -no license is generated. +Returns an array of generated file/directory names. """ -function gen_license( - pkg_dir::AbstractString, - license::Union{AbstractString, Void}, - authors::AbstractString, - years::AbstractString -) - if license == nothing - return nothing +function gen_license(pkg_name::AbstractString, template::Template) + if template.license == nothing + return String[] end - pkg_name = basename(pkg_dir) - text = "Copyright (c) $years $authors\n" * read_license(license) + text = "Copyright (c) $(template.years) $(template.authors)\n" + text *= read_license(template.license) - gen_file(joinpath(pkg_dir, "LICENSE"), text) - return "LICENSE" + gen_file(joinpath(template.temp_dir, pkg_name, "LICENSE"), text) + return ["LICENSE"] end """ - gen_entrypoint(pkg_dir::AbstractString) -> String + gen_entrypoint(pkg_name::AbstractString, template::Template) -> Vector{String} -Creates the module entrypoint ("src/\$pkg_name.jl") in `pkg_dir`. +Create the module entrypoint in the temp package directory. # Arguments -* `pkg_dir::AbstractString`: The package directory. +* `pkg_name::AbstractString`: Name of the package. +* `template::Template`: The template whose entrypoint we are generating. -Returns the name of the generated directory. +Returns an array of generated file/directory names. """ -function gen_entrypoint(pkg_dir::AbstractString) - pkg_name = basename(pkg_dir) +function gen_entrypoint(pkg_name::AbstractString, template::Template) text = """ module $pkg_name @@ -185,49 +174,50 @@ function gen_entrypoint(pkg_dir::AbstractString) end """ - gen_file(joinpath(pkg_dir, "src", "$pkg_name.jl"), text) - return "src/" + gen_file(joinpath(template.temp_dir, pkg_name, "src", "$pkg_name.jl"), text) + return ["src/"] end """ - gen_require(pkg_dir::AbstractString, julia_version::VersionNumber) -> String + gen_require(pkg_name::AbstractString, template::Template) -> Vector{String} -Create the requirements file in the package directory. +Create the REQUIRE file in the temp package directory. # Arguments -* `pkg_dir::AbstractString`: The package directory. -* `julia_version::VersionNumber`: The minimum Julia version to support. +* `pkg_name::AbstractString`: Name of the package. +* `template::Template`: The template whose REQUIRE we are generating. -Returns the name of the generated file. +Returns an array of generated file/directory names. """ -function gen_require(pkg_dir::AbstractString, julia_version::VersionNumber) - text = "julia $(version_floor(julia_version))\n" +function gen_require(pkg_name::AbstractString, template::Template) + text = "julia $(version_floor(template.julia_version))\n" - gen_file(joinpath(pkg_dir, "REQUIRE"), text) - return "REQUIRE" + gen_file(joinpath(template.temp_dir, pkg_name, "REQUIRE"), text) + return ["REQUIRE"] end """ - gen_tests(pkg_dir::AbstractString) -> String + gen_tests(pkg_name::AbstractString, template::Template) -> Vector{String} -Creates the test file "test/runtests.jl" in the package directory. +Create the test directory and entrypoint in the temp package directory. # Arguments -* `pkg_dir::AbstractString`: The package directory. +* `pkg_name::AbstractString`: Name of the package. +* `template::Template`: The template whose tests we are generating. -Returns the name of the generated directory. +Returns an array of generated file/directory names. """ -function gen_tests(pkg_dir::AbstractString) +function gen_tests(pkg_name::AbstractString, template::Template) text = """ - using $(basename(pkg_dir)) + using $pkg_name using Base.Test # Write your own tests here. @test 1 == 2 """ - gen_file(joinpath(pkg_dir, "test", "runtests.jl"), text) - return "test/" + gen_file(joinpath(template.temp_dir, pkg_name, "test", "runtests.jl"), text) + return ["test/"] end """ diff --git a/src/plugins/appveyor.jl b/src/plugins/appveyor.jl index 6dab3b4..ffa2359 100644 --- a/src/plugins/appveyor.jl +++ b/src/plugins/appveyor.jl @@ -52,14 +52,13 @@ Generate a .appveyor.yml. * `template::Template`: Template configuration and plugins. * `pkg_name::AbstractString`: Name of the package. -Returns an array of generated files. +Returns an array of generated file/directory names. """ function gen_plugin(plugin::AppVeyor, template::Template, pkg_name::AbstractString) if plugin.config_file == nothing return String[] end text = substitute(readstring(plugin.config_file), pkg_name, template) - pkg_dir = joinpath(template.path, pkg_name) - gen_file(joinpath(pkg_dir, ".appveyor.yml"), text) + gen_file(joinpath(template.temp_dir, pkg_name, ".appveyor.yml"), text) return [".appveyor.yml"] end diff --git a/src/plugins/codecov.jl b/src/plugins/codecov.jl index 381f1c8..e185370 100644 --- a/src/plugins/codecov.jl +++ b/src/plugins/codecov.jl @@ -25,7 +25,7 @@ Add CodeCov to a template's plugins to enable CodeCov coverage reports. end """ - badges(\_::CodeCov, pkg_name::AbstractString, t::Template) -> Vector{String} + badges(\_::CodeCov, user::AbstractString, pkg_name::AbstractString) -> Vector{String} Generate Markdown badges for the current package. @@ -52,14 +52,13 @@ Generate a .codecov.yml. * `template::Template`: Template configuration and plugins. * `pkg_name::AbstractString`: Name of the package. -Returns an array of generated files. +Returns an array of generated file/directory names. """ function gen_plugin(plugin::CodeCov, template::Template, pkg_name::AbstractString) if plugin.config_file == nothing return String[] end text = substitute(readstring(plugin.config_file), pkg_name, template) - pkg_dir = joinpath(template.path, pkg_name) - gen_file(joinpath(pkg_dir, ".codecov.yml"), text) + gen_file(joinpath(template.temp_dir, pkg_name, ".codecov.yml"), text) return [".codecov.yml"] end diff --git a/src/plugins/documenter.jl b/src/plugins/documenter.jl index 69e0669..4f16e85 100644 --- a/src/plugins/documenter.jl +++ b/src/plugins/documenter.jl @@ -19,7 +19,7 @@ function gen_plugin(plugin::Documenter, template::Template, pkg_name::AbstractSt info("Adding Documenter.jl") Pkg.add("Documenter") end - path = joinpath(template.path, pkg_name) + path = joinpath(template.temp_dir, pkg_name) docs_dir = joinpath(path, "docs", "src") mkpath(docs_dir) if !isempty(plugin.assets) @@ -62,11 +62,7 @@ function gen_plugin(plugin::Documenter, template::Template, pkg_name::AbstractSt open(joinpath(docs_dir, "index.md"), "w") do fp write(fp, "# $pkg_name") end - readme_path = "" - try - readme_path = joinpath(template.path, pkg_name, "README.md") - catch - end + readme_path = joinpath(template.temp_dir, pkg_name, "README.md") if isfile(readme_path) cp(readme_path, joinpath(docs_dir, "index.md"), remove_destination=true) end diff --git a/src/plugins/githubpages.jl b/src/plugins/githubpages.jl index f5f9891..572d3b9 100644 --- a/src/plugins/githubpages.jl +++ b/src/plugins/githubpages.jl @@ -51,7 +51,7 @@ to GitHub Pages. * `template::Template`: Template configuration and plugins. * `pkg_name::AbstractString`: Name of the package. -Returns an array of generated directories. +Returns an array of generated file/directory names. """ function gen_plugin(plugin::GitHubPages, template::Template, pkg_name::AbstractString) invoke( @@ -59,7 +59,7 @@ function gen_plugin(plugin::GitHubPages, template::Template, pkg_name::AbstractS plugin, template, pkg_name ) if haskey(template.plugins, TravisCI) - docs_src = joinpath(template.path, pkg_name, "docs", "src") + docs_src = joinpath(template.temp_dir, pkg_name, "docs", "src") open(joinpath(dirname(docs_src), "make.jl"), "a") do file write( file, diff --git a/src/plugins/travis.jl b/src/plugins/travis.jl index 5fb9aeb..13e2ff8 100644 --- a/src/plugins/travis.jl +++ b/src/plugins/travis.jl @@ -52,14 +52,13 @@ Generate a .travis.yml. * `template::Template`: Template configuration and plugins. * `pkg_name::AbstractString`: Name of the package. -Returns an array of generated files. +Returns an array of generated file/directory names. """ function gen_plugin(plugin::TravisCI, template::Template, pkg_name::AbstractString) if plugin.config_file == nothing return String[] end text = substitute(readstring(plugin.config_file), pkg_name, template) - pkg_dir = joinpath(template.path, pkg_name) - gen_file(joinpath(pkg_dir, ".travis.yml"), text) + gen_file(joinpath(template.temp_dir, pkg_name, ".travis.yml"), text) return [".travis.yml"] end diff --git a/src/template.jl b/src/template.jl index d7f4e53..322b16c 100644 --- a/src/template.jl +++ b/src/template.jl @@ -16,7 +16,7 @@ Records common information used to generate a package. appear on the license. Supply a string for one author, and an array for multiple. * `years::Union{Int, AbstractString}=string(Dates.year(Dates.today()))`: Copyright years on the license. Can be supplied by a number, or a string such as "2016 - 2017". -* `path::AbstractString=Pkg.dir()`: Directory in which the package will go. +* `dir::AbstractString=Pkg.dir()`: Directory in which the package will go. * `julia_version::VersionNumber=VERSION`: Minimum allowed Julia version. * `git_config::Dict{String, String}=Dict{String, String}()`: Git configuration options. * `plugins::Vector{Plugin}`: A list of `Plugin`s that the package will include. @@ -27,7 +27,8 @@ Records common information used to generate a package. license::Union{AbstractString, Void} authors::Union{AbstractString, Array} years::AbstractString - path::AbstractString + dir::AbstractString + temp_dir::AbstractString julia_version::VersionNumber git_config::Dict{String, String} plugins::Dict{DataType, Plugin} @@ -38,7 +39,7 @@ Records common information used to generate a package. license::Union{AbstractString, Void}=nothing, authors::Union{AbstractString, Array}=LibGit2.getconfig("user.name", ""), years::Union{Int, AbstractString}=string(Dates.year(Dates.today())), - path::AbstractString=Pkg.dir(), + dir::AbstractString=Pkg.dir(), julia_version::VersionNumber=VERSION, git_config::Dict{String, String}=Dict{String, String}(), plugins::Vector{P}=Vector{Plugin}(), @@ -67,13 +68,15 @@ Records common information used to generate a package. years = string(years) + temp_dir = mktempdir() + plugin_dict = Dict{DataType, Plugin}(typeof(p) => p for p in plugins) if (length(plugins) != length(plugin_dict)) warn("Plugin list contained duplicates, only the last of each type was kept") end new( - user, host, license, authors, years, path, + user, host, license, authors, years, dir, temp_dir, julia_version, git_config, plugin_dict ) end diff --git a/test/tests.jl b/test/tests.jl index dfd8998..1d82b82 100644 --- a/test/tests.jl +++ b/test/tests.jl @@ -3,8 +3,8 @@ const git_config = Dict( "user.email" => "email@web.site", "github.username" => "TesterMcTestFace", ) - -const fake_path = joinpath(tempdir(), tempdir()) +const test_pkg = "TestPkg" +const fake_path = bin(hash("/this/file/does/not/exist")) const test_file = tempname() template_text = """ PKGNAME: {{PKGNAME}} @@ -22,7 +22,7 @@ write(test_file, template_text) @test t.license == nothing @test t.years == string(Dates.year(Dates.today())) @test t.authors == LibGit2.getconfig("user.name", "") - @test t.path == Pkg.dir() + @test t.dir == Pkg.dir() @test t.julia_version == VERSION @test isempty(t.git_config) @test isempty(t.plugins) @@ -40,8 +40,8 @@ write(test_file, template_text) t = Template(; user="invenia", authors=["Guy", "Gal"]) @test t.authors == "Guy, Gal" - t = Template(; user="invenia", path=test_file) - @test t.path == test_file + t = Template(; user="invenia", dir=test_file) + @test t.dir == test_file t = Template(; user="invenia", julia_version=v"0.1.2") @test t.julia_version == v"0.1.2" @@ -106,6 +106,7 @@ end git_config=git_config, plugins=[TravisCI(), CodeCov(), GitHubPages(), AppVeyor()], ) + pkg_dir = joinpath(t.temp_dir, test_pkg) temp_file = tempname() gen_file(temp_file, "Hello, world") @@ -113,79 +114,73 @@ end @test readstring(temp_file) == "Hello, world\n" rm(temp_file) - mktempdir() do temp_dir - @test gen_readme(temp_dir, t) == "README.md" - @test isfile(joinpath(temp_dir, "README.md")) - readme = readchomp(joinpath(temp_dir, "README.md")) - @test contains(readme, "# $(basename(temp_dir))") - for p in values(t.plugins) - @test contains(readme, join(badges(p, t.user, basename(temp_dir)), "\n")) - end - # Check the order of the badges. - @test search(readme, "github.io").start < - search(readme, "travis").start < - search(readme, "appveyor").start < - search(readme, "codecov").start + @test gen_readme(test_pkg, t) == ["README.md"] + @test isfile(joinpath(pkg_dir, "README.md")) + readme = readchomp(joinpath(pkg_dir, "README.md")) + rm(joinpath(pkg_dir, "README.md")) + @test contains(readme, "# $test_pkg") + for p in values(t.plugins) + @test contains(readme, join(badges(p, t.user, test_pkg), "\n")) end + # Check the order of the badges. + @test search(readme, "github.io").start < + search(readme, "travis").start < + search(readme, "appveyor").start < + search(readme, "codecov").start - mktempdir() do temp_dir - @test gen_gitignore(temp_dir, t.plugins) == ".gitignore" - @test isfile(joinpath(temp_dir, ".gitignore")) - gitignore = readstring(joinpath(temp_dir, ".gitignore")) - @test contains(gitignore, ".DS_Store") - for p in values(t.plugins) - for entry in p.gitignore_files - @test contains(gitignore, entry) - end + @test gen_gitignore(test_pkg, t) == [".gitignore"] + @test isfile(joinpath(pkg_dir, ".gitignore")) + gitignore = readstring(joinpath(pkg_dir, ".gitignore")) + rm(joinpath(pkg_dir, ".gitignore")) + @test contains(gitignore, ".DS_Store") + for p in values(t.plugins) + for entry in p.gitignore_files + @test contains(gitignore, entry) end end - mktempdir() do temp_dir - @test gen_license(temp_dir, t.license, t.authors, t.years) == "LICENSE" - @test isfile(joinpath(temp_dir, "LICENSE")) - license = readchomp(joinpath(temp_dir, "LICENSE")) - @test contains(license, t.authors) - @test contains(license, t.years) - @test contains(license, read_license(t.license)) - end + @test gen_license(test_pkg, t) == ["LICENSE"] + @test isfile(joinpath(pkg_dir, "LICENSE")) + license = readchomp(joinpath(pkg_dir, "LICENSE")) + rm(joinpath(pkg_dir, "LICENSE")) + @test contains(license, t.authors) + @test contains(license, t.years) + @test contains(license, read_license(t.license)) - mktempdir() do temp_dir - @test gen_entrypoint(temp_dir) == "src/" - @test isdir(joinpath(temp_dir, "src")) - @test isfile(joinpath(temp_dir, "src", "$(basename(temp_dir)).jl")) - entrypoint = readchomp(joinpath(temp_dir, "src", "$(basename(temp_dir)).jl")) - @test contains(entrypoint, "module $(basename(temp_dir))") - end + @test gen_entrypoint(test_pkg, t) == ["src/"] + @test isdir(joinpath(pkg_dir, "src")) + @test isfile(joinpath(pkg_dir, "src", "$test_pkg.jl")) + entrypoint = readchomp(joinpath(pkg_dir, "src", "$test_pkg.jl")) + rm(joinpath(pkg_dir, "src"); recursive=true) + @test contains(entrypoint, "module $test_pkg") - mktempdir() do temp_dir - @test gen_require(temp_dir, t.julia_version) == "REQUIRE" - @test isfile(joinpath(temp_dir, "REQUIRE")) - vf = version_floor(t.julia_version) - @test readchomp(joinpath(temp_dir, "REQUIRE")) == "julia $vf" - end + @test gen_require(test_pkg, t) == ["REQUIRE"] + @test isfile(joinpath(pkg_dir, "REQUIRE")) + vf = version_floor(t.julia_version) + @test readchomp(joinpath(pkg_dir, "REQUIRE")) == "julia $vf" + rm(joinpath(pkg_dir, "REQUIRE")) - mktempdir() do temp_dir - @test gen_tests(temp_dir) == "test/" - @test isdir(joinpath(temp_dir, "test")) - @test isfile(joinpath(temp_dir, "test", "runtests.jl")) - runtests = readchomp(joinpath(temp_dir, "test", "runtests.jl")) - @test contains(runtests, "using $(basename(temp_dir))") - @test contains(runtests, "using Base.Test") - end + @test gen_tests(test_pkg, t) == ["test/"] + @test isdir(joinpath(pkg_dir, "test")) + @test isfile(joinpath(pkg_dir, "test", "runtests.jl")) + runtests = readchomp(joinpath(pkg_dir, "test", "runtests.jl")) + rm(joinpath(pkg_dir, "test"); recursive=true) + @test contains(runtests, "using $test_pkg") + @test contains(runtests, "using Base.Test") end @testset "Package generation" begin t = Template(; user="invenia") - generate("TestPkg", t) - @test !isfile(Pkg.dir("TestPkg", "LICENSE")) - @test isfile(Pkg.dir("TestPkg", "README.md")) - @test isfile(Pkg.dir("TestPkg", "REQUIRE")) - @test isfile(Pkg.dir("TestPkg", ".gitignore")) - @test isdir(Pkg.dir("TestPkg", "src")) - @test isfile(Pkg.dir("TestPkg", "src", "TestPkg.jl")) - @test isdir(Pkg.dir("TestPkg", "test")) - @test isfile(Pkg.dir("TestPkg", "test", "runtests.jl")) - repo = LibGit2.GitRepo(Pkg.dir("TestPkg")) + generate(test_pkg, t) + @test !isfile(Pkg.dir(test_pkg, "LICENSE")) + @test isfile(Pkg.dir(test_pkg, "README.md")) + @test isfile(Pkg.dir(test_pkg, "REQUIRE")) + @test isfile(Pkg.dir(test_pkg, ".gitignore")) + @test isdir(Pkg.dir(test_pkg, "src")) + @test isfile(Pkg.dir(test_pkg, "src", "TestPkg.jl")) + @test isdir(Pkg.dir(test_pkg, "test")) + @test isfile(Pkg.dir(test_pkg, "test", "runtests.jl")) + repo = LibGit2.GitRepo(Pkg.dir(test_pkg)) remote = LibGit2.get(LibGit2.GitRemote, repo, "origin") branches = [LibGit2.shortname(branch[1]) for branch in LibGit2.GitBranchIter(repo)] @test LibGit2.getconfig(repo, "user.name", "") == LibGit2.getconfig("user.name", "") @@ -193,20 +188,20 @@ end @test in("master", branches) @test !in("gh-pages", branches) @test !LibGit2.isdirty(repo) - rm(Pkg.dir("TestPkg"); recursive=true) + rm(Pkg.dir(test_pkg); recursive=true) - generate("TestPkg", t; ssh=true) - repo = LibGit2.GitRepo(Pkg.dir("TestPkg")) + generate(test_pkg, t; ssh=true) + repo = LibGit2.GitRepo(Pkg.dir(test_pkg)) remote = LibGit2.get(LibGit2.GitRemote, repo, "origin") @test LibGit2.url(remote) == "git@github.com:invenia/TestPkg.jl.git" - rm(Pkg.dir("TestPkg"); recursive=true) + rm(Pkg.dir(test_pkg); recursive=true) t = Template(; user="invenia", host="gitlab.com") - generate("TestPkg", t) - repo = LibGit2.GitRepo(Pkg.dir("TestPkg")) + generate(test_pkg, t) + repo = LibGit2.GitRepo(Pkg.dir(test_pkg)) remote = LibGit2.get(LibGit2.GitRemote, repo, "origin") @test LibGit2.url(remote) == "https://gitlab.com/invenia/TestPkg.jl" - rm(Pkg.dir("TestPkg"); recursive=true) + rm(Pkg.dir(test_pkg); recursive=true) t = Template(; user="invenia", @@ -215,92 +210,90 @@ end plugins=[AppVeyor(), GitHubPages(), CodeCov(), TravisCI()], ) - generate("TestPkg", t) - @test isfile(Pkg.dir("TestPkg", "LICENSE")) - @test isfile(Pkg.dir("TestPkg", ".travis.yml")) - @test isfile(Pkg.dir("TestPkg", ".appveyor.yml")) - @test isfile(Pkg.dir("TestPkg", ".codecov.yml")) - @test isdir(Pkg.dir("TestPkg", "docs")) - @test isfile(Pkg.dir("TestPkg", "docs", "make.jl")) - @test isdir(Pkg.dir("TestPkg", "docs", "src")) - @test isfile(Pkg.dir("TestPkg", "docs", "src", "index.md")) - repo = LibGit2.GitRepo(Pkg.dir("TestPkg")) + generate(test_pkg, t) + @test isfile(Pkg.dir(test_pkg, "LICENSE")) + @test isfile(Pkg.dir(test_pkg, ".travis.yml")) + @test isfile(Pkg.dir(test_pkg, ".appveyor.yml")) + @test isfile(Pkg.dir(test_pkg, ".codecov.yml")) + @test isdir(Pkg.dir(test_pkg, "docs")) + @test isfile(Pkg.dir(test_pkg, "docs", "make.jl")) + @test isdir(Pkg.dir(test_pkg, "docs", "src")) + @test isfile(Pkg.dir(test_pkg, "docs", "src", "index.md")) + repo = LibGit2.GitRepo(Pkg.dir(test_pkg)) @test LibGit2.getconfig(repo, "user.name", "") == git_config["user.name"] branches = [LibGit2.shortname(branch[1]) for branch in LibGit2.GitBranchIter(repo)] @test in("gh-pages", branches) @test !LibGit2.isdirty(repo) - rm(Pkg.dir("TestPkg"); recursive=true) + rm(Pkg.dir(test_pkg); recursive=true) - mkdir(Pkg.dir("TestPkg")) - @test_throws ArgumentError generate("TestPkg", t) - generate("TestPkg", t; force=true) - @test isfile(Pkg.dir("TestPkg", "README.md")) + mkdir(Pkg.dir(test_pkg)) + @test_throws ArgumentError generate(test_pkg, t) + generate(test_pkg, t; force=true) + @test isfile(Pkg.dir(test_pkg, "README.md")) end @testset "Plugin generation" begin - mktempdir() do temp_dir - pkg_dir = joinpath(temp_dir, "TestPkg") - t = Template(; user="invenia", path=temp_dir) + t = Template(; user="invenia") + pkg_dir = joinpath(t.temp_dir, test_pkg) - p = TravisCI() - @test gen_plugin(p, t, "TestPkg") == [".travis.yml"] - @test isfile(joinpath(pkg_dir, ".travis.yml")) - rm(joinpath(pkg_dir, ".travis.yml")) - p = TravisCI(; config_file=nothing) - @test isempty(gen_plugin(p, t, "TestPkg")) - @test !isfile(joinpath(pkg_dir, ".travis.yml")) - @test_throws ArgumentError TravisCI(; config_file=fake_path) + p = TravisCI() + @test gen_plugin(p, t, test_pkg) == [".travis.yml"] + @test isfile(joinpath(pkg_dir, ".travis.yml")) + rm(joinpath(pkg_dir, ".travis.yml")) + p = TravisCI(; config_file=nothing) + @test isempty(gen_plugin(p, t, test_pkg)) + @test !isfile(joinpath(pkg_dir, ".travis.yml")) + @test_throws ArgumentError TravisCI(; config_file=fake_path) - p = AppVeyor() - @test gen_plugin(p, t, "TestPkg") == [".appveyor.yml"] - @test isfile(joinpath(pkg_dir, ".appveyor.yml")) - rm(joinpath(pkg_dir, ".appveyor.yml")) - p = AppVeyor(; config_file=nothing) - @test isempty(gen_plugin(p, t, "TestPkg")) - @test !isfile(joinpath(pkg_dir, ".appveyor.yml")) - @test_throws ArgumentError AppVeyor(; config_file=fake_path) + p = AppVeyor() + @test gen_plugin(p, t, test_pkg) == [".appveyor.yml"] + @test isfile(joinpath(pkg_dir, ".appveyor.yml")) + rm(joinpath(pkg_dir, ".appveyor.yml")) + p = AppVeyor(; config_file=nothing) + @test isempty(gen_plugin(p, t, test_pkg)) + @test !isfile(joinpath(pkg_dir, ".appveyor.yml")) + @test_throws ArgumentError AppVeyor(; config_file=fake_path) - p = CodeCov() - @test gen_plugin(p, t, "TestPkg") == [".codecov.yml"] - @test isfile(joinpath(pkg_dir, ".codecov.yml")) - rm(joinpath(pkg_dir, ".codecov.yml")) - p = CodeCov(; config_file=nothing) - @test isempty(gen_plugin(p, t, "TestPkg")) - @test !isfile(joinpath(pkg_dir, ".codecov.yml")) - @test_throws ArgumentError CodeCov(; config_file=fake_path) + p = CodeCov() + @test gen_plugin(p, t, test_pkg) == [".codecov.yml"] + @test isfile(joinpath(pkg_dir, ".codecov.yml")) + rm(joinpath(pkg_dir, ".codecov.yml")) + p = CodeCov(; config_file=nothing) + @test isempty(gen_plugin(p, t, test_pkg)) + @test !isfile(joinpath(pkg_dir, ".codecov.yml")) + @test_throws ArgumentError CodeCov(; config_file=fake_path) - p = GitHubPages() - @test gen_plugin(p, t, "TestPkg") == ["docs/"] - @test isdir(joinpath(pkg_dir, "docs")) - @test isfile(joinpath(pkg_dir, "docs", "make.jl")) - make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) - @test contains(make, "assets=[]") - @test !contains(make, "deploydocs") - @test isdir(joinpath(pkg_dir, "docs", "src")) - @test isfile(joinpath(pkg_dir, "docs", "src", "index.md")) - index = readchomp(joinpath(pkg_dir, "docs", "src", "index.md")) - @test index == "# TestPkg" - rm(joinpath(pkg_dir, "docs"); recursive=true) - p = GitHubPages(; assets=[test_file]) - @test gen_plugin(p, t, "TestPkg") == ["docs/"] - make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) - @test contains( - make, - strip(""" - assets=[ - "assets/$(basename(test_file))", - ] - """) - ) - @test isfile(joinpath(pkg_dir, "docs", "src", "assets", basename(test_file))) - rm(joinpath(pkg_dir, "docs"); recursive=true) - t.plugins[TravisCI] = TravisCI() - @test gen_plugin(p, t, "TestPkg") == ["docs/"] - make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) - @test contains(make, "deploydocs") - rm(joinpath(pkg_dir, "docs"); recursive=true) - @test_throws ArgumentError GitHubPages(; assets=[fake_path]) - end + p = GitHubPages() + @test gen_plugin(p, t, test_pkg) == ["docs/"] + @test isdir(joinpath(pkg_dir, "docs")) + @test isfile(joinpath(pkg_dir, "docs", "make.jl")) + make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) + @test contains(make, "assets=[]") + @test !contains(make, "deploydocs") + @test isdir(joinpath(pkg_dir, "docs", "src")) + @test isfile(joinpath(pkg_dir, "docs", "src", "index.md")) + index = readchomp(joinpath(pkg_dir, "docs", "src", "index.md")) + @test index == "# TestPkg" + rm(joinpath(pkg_dir, "docs"); recursive=true) + p = GitHubPages(; assets=[test_file]) + @test gen_plugin(p, t, test_pkg) == ["docs/"] + make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) + @test contains( + make, + strip(""" + assets=[ + "assets/$(basename(test_file))", + ] + """) + ) + @test isfile(joinpath(pkg_dir, "docs", "src", "assets", basename(test_file))) + rm(joinpath(pkg_dir, "docs"); recursive=true) + t.plugins[TravisCI] = TravisCI() + @test gen_plugin(p, t, test_pkg) == ["docs/"] + make = readchomp(joinpath(pkg_dir, "docs", "make.jl")) + @test contains(make, "deploydocs") + rm(joinpath(pkg_dir, "docs"); recursive=true) + @test_throws ArgumentError GitHubPages(; assets=[fake_path]) end @testset "Version floor" begin @@ -314,7 +307,7 @@ end t = Template(; user="invenia") view = Dict{String, Any}("OTHER" => false) - text = substitute(template_text, "TestPkg", t; view=view) + text = substitute(template_text, test_pkg, t; view=view) @test contains(text, "PKGNAME: TestPkg") @test contains(text, "VERSION: $(t.julia_version.major).$(t.julia_version.minor)") @test !contains(text, "Documenter") @@ -322,19 +315,19 @@ end @test !contains(text, "Other") t.plugins[GitHubPages] = GitHubPages() - text = substitute(template_text, "TestPkg", t; view=view) + text = substitute(template_text, test_pkg, t; view=view) @test contains(text, "Documenter") @test contains(text, "After") empty!(t.plugins) t.plugins[CodeCov] = CodeCov() - text = substitute(template_text, "TestPkg", t; view=view) + text = substitute(template_text, test_pkg, t; view=view) @test contains(text, "CodeCov") @test contains(text, "After") empty!(t.plugins) view["OTHER"] = true - text = substitute(template_text, "TestPkg", t; view=view) + text = substitute(template_text, test_pkg, t; view=view) @test contains(text, "Other") end