Add GitLabCI plugin

This commit is contained in:
Chris de Graaf 2017-09-04 19:01:59 +01:00
parent 7d1ac85f7c
commit 365a02c0bf
3 changed files with 120 additions and 1 deletions

36
defaults/gitlab-ci.yml Normal file
View File

@ -0,0 +1,36 @@
stages:
- test
- coverage
.test_template: &test_template
stage: test
artifacts:
name: coverage
expire_in: 2 hours
paths:
- coverage/
tags:
- docker
script:
- julia -e 'Pkg.clone(pwd()); Pkg.build("{{PKGNAME}}"); Pkg.test("{{PKGNAME}}"{{#GITLABCOVERAGE}}; coverage=true{{/GITLABCOVERAGE}})'
- cp -r $(julia -e 'print(Pkg.dir("{{PKGNAME}}", "src"))') coverage
Julia {{VERSION}}:
image: julia:{{VERSION}}
<<: *test_template
Julia nightly:
image: staticfloat/julia:nightly-x64
allow_failure: true
<<: *test_template{{#GITLABCOVERAGE}}
"Coverage":
stage: coverage
image: julia:0.6
tags:
- docker
before_script:
- apt-get update && apt-get -y install git make unzip gcc bzip2
script:
- rm -rf src && mv coverage src
- julia -e 'Pkg.add("Coverage"); using Coverage; c, t = get_summary(process_folder()); @printf("Test Coverage %.2f%%\n", 100c/t)'{{/GITLABCOVERAGE}}

View File

@ -7,7 +7,7 @@ using TerminalMenus
using URIParser
export generate, interactive_template, show_license, available_licenses, Template,
GitHubPages, AppVeyor, TravisCI, CodeCov, Coveralls
GitHubPages, AppVeyor, TravisCI, GitLabCI, CodeCov, Coveralls
abstract type Plugin end
@ -20,6 +20,7 @@ include(joinpath("plugins", "coveralls.jl"))
include(joinpath("plugins", "appveyor.jl"))
include(joinpath("plugins", "codecov.jl"))
include(joinpath("plugins", "travisci.jl"))
include(joinpath("plugins", "gitlabci.jl"))
include(joinpath("plugins", "githubpages.jl"))
const DEFAULTS_DIR = normpath(joinpath(@__DIR__, "..", "defaults"))

82
src/plugins/gitlabci.jl Normal file
View File

@ -0,0 +1,82 @@
"""
GitLabCI(; config_file::Union{AbstractString, Void}="", 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, Void}=""`: 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. If enabled, you must set a regex in your repo settings; use
`Test Coverage (\d+.\d+)%`.
"""
@auto_hash_equals struct GitLabCI <: GenericPlugin
gitignore::Vector{AbstractString}
src::Nullable{AbstractString}
dest::AbstractString
badges::Vector{Badge}
view::Dict{String, Any}
function GitLabCI(; config_file::Union{AbstractString, Void}="", coverage::Bool=true)
if config_file != nothing
if isempty(config_file)
config_file = joinpath(DEFAULTS_DIR, "gitlab-ci.yml")
elseif !isfile(config_file)
throw(ArgumentError("File $(abspath(config_file)) does not exist"))
end
end
badges = [
Badge(
"Build Status",
"https://gitlab.com/{{USER}}/{{PKGNAME}}.jl/badges/master/build.svg",
"https://gitlab.com/{{USER}}/{{PKGNAME}}.jl/commits/master",
),
]
if coverage
push!(
badges,
Badge(
"Coverage",
"https://gitlab.com/{{USER}}/{{PKGNAME}}.jl/badges/master/coverage.svg",
"https://gitlab.com/{{USER}}/{{PKGNAME}}.jl/commits/master",
),
)
end
new(
coverage ? ["*.jl.cov", "*.jl.*.cov", "*.jl.mem"] : [],
config_file,
".gitlab-ci.yml",
badges,
Dict("GITLABCOVERAGE" => coverage),
)
end
end
function interactive(plugin_type::Type{GitLabCI})
name = "GitLabCI"
kwargs = Dict{Symbol, Any}()
default_config_file = joinpath(DEFAULTS_DIR, "gitlab-ci.yml")
print("$name: Enter the config template filename (\"None\" for no file) ")
print("[$default_config_file]: ")
config_file = readline()
kwargs[:config_file] = if uppercase(config_file) == "NONE"
nothing
elseif isempty(config_file)
default_config_file
else
config_file
end
print("$name: Enable test coverage analysis? [yes]: ")
coverage = readline()
kwargs[:coverage] = if isempty(coverage)
true
else
!in(uppercase(user_image), ["N", "NO", "FALSE", "NONE"])
end
return GitLabCI(; kwargs...)
end