diff --git a/defaults/gitlab-ci.yml b/defaults/gitlab-ci.yml index 16515fc..d9f965d 100644 --- a/defaults/gitlab-ci.yml +++ b/defaults/gitlab-ci.yml @@ -1,32 +1,40 @@ +.definitions: + script: &script + script: + - julia --project=@. -e ' + using Pkg; + Pkg.build(); + Pkg.test({{#HAS_COVERAGE}}; coverage=true{{/HAS_COVERAGE}});' +{{#HAS_COVERAGE}} + coverage: &coverage + coverage: /Test coverage (\d+\.\d+%)/ + after_script: + - julia -e ' + using Pkg; + Pkg.add("Coverage"); + using Coverage; + c, t = get_summary(process_folder()); + using Printf; + @printf "Test coverage %.2f%%\n" 100c / t;' +{{/HAS_COVERAGE}} {{#VERSIONS}} Julia {{.}}: image: julia:{{.}} - script: julia --project=@. -e ' - using Pkg; - Pkg.build(); - Pkg.test({{#HAS_COVERAGE}}coverage=true{{/HAS_COVERAGE}});' + <<: *script + {{#HAS_COVERAGE}} + <<: *coverage + {{/HAS_COVERAGE}} {{/VERSIONS}} -{{#HAS_COVERAGE}} - coverage: /Test Coverage (\d+\.\d+%)/ - after_script: - - julia -e ' - using Pkg; - Pkg.add("Coverage"); - using Coverage; - c, t = get_summary(process_folder()); - using Printf; - @printf "Test Coverage %.2f%%\n" 100c/t;' -{{/HAS_COVERAGE}} {{#HAS_DOCUMENTER}} pages: image: julia:{{VERSION}} stage: deploy script: - julia --project=docs -e ' - using Pkg; - Pkg.develop(PackageSpec(; path=pwd())); - Pkg.instantiate(); - include("docs/make.jl");' + using Pkg; + Pkg.develop(PackageSpec(; path=pwd())); + Pkg.instantiate(); + include("docs/make.jl");' - mkdir -p public - mv docs/build public/dev artifacts: diff --git a/src/plugins/ci.jl b/src/plugins/ci.jl index d084a89..e83c1c6 100644 --- a/src/plugins/ci.jl +++ b/src/plugins/ci.jl @@ -7,7 +7,7 @@ format_version(v::AbstractString) = string(v) function collect_versions(t::Template, versions::Vector) vs = map(format_version, [t.julia_version, versions...]) - return unique(sort(vs)) + return sort(unique(vs)) end @with_kw struct TravisCI <: BasicPlugin @@ -128,9 +128,9 @@ end @with_kw struct GitLabCI <: BasicPlugin file::String = default_file("gitlab-ci.yml") - documentation::Bool = true coverage::Bool = true - extra_versions::VersionsOrStrings = ["1.0"] # Nightly has no Docker image. + # Nightly has no Docker image. + extra_versions::VersionsOrStrings = [VERSION, default_version()] end gitignore(p::GitLabCI) = p.coverage ? COVERAGE_GITIGNORE : String[] diff --git a/src/plugins/documenter.jl b/src/plugins/documenter.jl index 095a334..70c5618 100644 --- a/src/plugins/documenter.jl +++ b/src/plugins/documenter.jl @@ -32,14 +32,14 @@ struct Documenter{T<:Union{TravisCI, GitLabCI, Nothing}} <: Plugin index_md::String # Can't use @with_kw due to some weird precompilation issues. - function Documenter{T}( + function Documenter{T}(; assets::Vector{<:AbstractString}=String[], makedocs_kwargs::Dict{Symbol}=Dict{Symbol, Any}(), - canonical_url::Union{Function, Nothing}=T === TravisCI ? github_pages_url : nothing, - index_md::AbstractString=default_file("index.md"), + canonical_url::Union{Function, Nothing}=make_canonical(T), make_jl::AbstractString=default_file("make.jl"), + index_md::AbstractString=default_file("index.md"), ) where T <: Union{TravisCI, GitLabCI, Nothing} - return new(assets, makedocs_kwargs, canonical_url, index_md, make_jl) + return new(assets, makedocs_kwargs, canonical_url, make_jl, index_md) end end @@ -71,7 +71,7 @@ view(p::Documenter, t::Template, pkg::AbstractString) = Dict( "AUTHORS" => join(t.authors, ", "), "CANONICAL" => p.canonical_url === nothing ? nothing : p.canonical_url(t, pkg), "HAS_ASSETS" => !isempty(p.assets), - "MAKEDOCS_KWARGS" => map((k, v) -> k => repr(v), collect(p.makedocs_kwargs)), + "MAKEDOCS_KWARGS" => map(((k, v),) -> k => repr(v), collect(p.makedocs_kwargs)), "PKG" => pkg, "REPO" => "$(t.host)/$(t.user)/$pkg.jl", "USER" => t.user, @@ -107,32 +107,9 @@ function gen_plugin(p::Documenter, t::Template, pkg_dir::AbstractString) end end -function interactive(::Type{Documenter{T}}) where T - name = "Documenter{$T}" - - print("$name: Enter any Documenter asset files (separated by spaces) [none]: ") - assets = split(readline()) - - print("$name: Enter any extra makedocs key-value pairs (joined by '=') [none]\n> ") - kwargs = Dict{Symbol, Any}() - line = map(split(readline())) do kv - k, v = split(kv, "="; limit=2) - kwargs[Symbol(k)] = eval(Meta.parse(v)) - end - - return Documenter{T}(; assets=assets, kwargs=kwargs) -end - -function interactive(::Type{Documenter}) - types = Dict( - "None (local documentation only)" => Nothing, - "TravisCI (GitHub Pages)" => TravisCI, - "GitLabCI (GitLab Pages)" => GitLabCI, - ) - options = collect(keys(types)) - menu = RadioMenu(options) - T = types[options[request("Documenter: Select integration:", menu)]] - return interactive(Documenter{T}) -end - github_pages_url(t::Template, pkg::AbstractString) = "https://$(t.user).github.io/$pkg.jl" +gitlab_pages_url(t::Template, pkg::AbstractString) = "https://$(t.user).gitlab.io/$pkg.jl" + +make_canonical(::Type{TravisCI}) = github_pages_url +make_canonical(::Type{GitLabCI}) = gitlab_pages_url +make_canonical(::Type{Nothing}) = nothing diff --git a/test/fixtures/AllPlugins/.gitlab-ci.yml.txt b/test/fixtures/AllPlugins/.gitlab-ci.yml.txt index a64c045..44d9d34 100644 --- a/test/fixtures/AllPlugins/.gitlab-ci.yml.txt +++ b/test/fixtures/AllPlugins/.gitlab-ci.yml.txt @@ -1,15 +1,25 @@ +.definitions: + script: &script + script: + - julia --project=@. -e ' + using Pkg; + Pkg.build(); + Pkg.test(; coverage=true);' + coverage: &coverage + coverage: /Test coverage (\d+\.\d+%)/ + after_script: + - julia -e ' + using Pkg; + Pkg.add("Coverage"); + using Coverage; + c, t = get_summary(process_folder()); + using Printf; + @printf "Test coverage %.2f%%\n" 100c / t;' Julia 1.0: image: julia:1.0 - script: julia --project=@. -e ' - using Pkg; - Pkg.build(); - Pkg.test(coverage=true);' - coverage: /Test Coverage (\d+\.\d+%)/ - after_script: - - julia -e ' - using Pkgl - Pkg.add("Coverage"); - using Coverage; - c, t = get_summary(process_folder()); - using Printf; - @printf "Test Coverage %.2f%%\n" 100c/t;' + <<: *script + <<: *coverage +Julia 1.2: + image: julia:1.2 + <<: *script + <<: *coverage diff --git a/test/fixtures/AllPlugins/docs/make.jl.txt b/test/fixtures/AllPlugins/docs/make.jl.txt index 744bc7e..4141053 100644 --- a/test/fixtures/AllPlugins/docs/make.jl.txt +++ b/test/fixtures/AllPlugins/docs/make.jl.txt @@ -1,8 +1,15 @@ -# AllPlugins +using AllPlugins +using Documenter -```@index -``` - -```@autodocs -Modules = [AllPlugins] -``` +makedocs(; + modules=[AllPlugins], + authors="tester", + repo="https://github.com/tester/AllPlugins.jl/blob/{commit}{path}#L{line}", + sitename="AllPlugins.jl", + format=Documenter.HTML(; + assets=String[], + ), + pages=[ + "Home" => "index.md", + ], +) diff --git a/test/fixtures/AllPlugins/docs/src/index.md.txt b/test/fixtures/AllPlugins/docs/src/index.md.txt index 4141053..744bc7e 100644 --- a/test/fixtures/AllPlugins/docs/src/index.md.txt +++ b/test/fixtures/AllPlugins/docs/src/index.md.txt @@ -1,15 +1,8 @@ -using AllPlugins -using Documenter +# AllPlugins -makedocs(; - modules=[AllPlugins], - authors="tester", - repo="https://github.com/tester/AllPlugins.jl/blob/{commit}{path}#L{line}", - sitename="AllPlugins.jl", - format=Documenter.HTML(; - assets=String[], - ), - pages=[ - "Home" => "index.md", - ], -) +```@index +``` + +```@autodocs +Modules = [AllPlugins] +``` diff --git a/test/generate.jl b/test/generate.jl index 1fada75..bd31ea5 100644 --- a/test/generate.jl +++ b/test/generate.jl @@ -10,7 +10,7 @@ function test_all(pkg::AbstractString; kwargs...) t(pkg) try foreach(readlines(`git -C $pkg_dir ls-files`)) do f - # All fixture files are .txt so that ReferenceTests can't handle them. + # All fixture files are .txt so that ReferenceTests can handle them. reference = joinpath(@__DIR__, "fixtures", pkg, f * ".txt") observed = read(joinpath(pkg_dir, f), String) @test_reference reference observed diff --git a/test/runtests.jl b/test/runtests.jl index 304a311..5d97feb 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -7,7 +7,6 @@ using ReferenceTests: @test_reference using PkgTemplates const PT = PkgTemplates -const PKG = "TestPkg" const USER = "tester" Random.seed!(1) @@ -21,7 +20,7 @@ tpl(; kwargs...) = Template(; user=USER, kwargs...) try include("template.jl") - # Some plugins use the current Julia version in their output, + # Quite a bit of output depends on the Julia version, # and the test fixtures are generated with Julia 1.2. if VERSION.major == 1 && VERSION.minor == 2 include("generate.jl")