Support the full range of TagBot options
TODO: Fix the `show` tests.
This commit is contained in:
parent
ba14f890e2
commit
5e4b91ce97
|
@ -41,6 +41,7 @@ Readme
|
|||
License
|
||||
Git
|
||||
TagBot
|
||||
Secret
|
||||
```
|
||||
|
||||
### Continuous Integration (CI)
|
||||
|
|
|
@ -27,6 +27,7 @@ export
|
|||
License,
|
||||
ProjectFile,
|
||||
Readme,
|
||||
Secret,
|
||||
SrcDir,
|
||||
TagBot,
|
||||
Tests,
|
||||
|
|
|
@ -1,6 +1,18 @@
|
|||
const TEMPLATES_DIR = normpath(joinpath(@__DIR__, "..", "templates"))
|
||||
const DEFAULT_PRIORITY = 1000
|
||||
|
||||
"""
|
||||
Secret(name::AbstractString)
|
||||
|
||||
Represents a GitHub repository secret.
|
||||
When converted to a string, yields `\${{ secrets.<name> }}`.
|
||||
"""
|
||||
struct Secret
|
||||
name::String
|
||||
end
|
||||
|
||||
Base.print(io::IO, s::Secret) = print(io, "\${{ secrets.$(s.name) }}")
|
||||
|
||||
"""
|
||||
A simple plugin that, in general, creates a single file.
|
||||
"""
|
||||
|
|
|
@ -1,25 +1,79 @@
|
|||
"""
|
||||
TagBot(; destination="TagBot.yml", registry=nothing, dispatch=false)
|
||||
TagBot(;
|
||||
destination="TagBot.yml",
|
||||
cron="0 * * * *",
|
||||
token=Secret("GITHUB_TOKEN"),
|
||||
ssh=nothing,
|
||||
ssh_password=nothing,
|
||||
changelog=nothing,
|
||||
changelog_ignore=nothing,
|
||||
gpg=nothing,
|
||||
gpg_password=nothing,
|
||||
registry=nothing,
|
||||
branches=nothing,
|
||||
dispatch=nothing,
|
||||
dispatch_delay=nothing,
|
||||
)
|
||||
|
||||
Adds GitHub release support via [TagBot](https://github.com/JuliaRegistries/TagBot).
|
||||
|
||||
## Keyword Arguments
|
||||
- `destination::AbstractString`: Destination of the workflow file,
|
||||
relative to `.github/workflows`.
|
||||
- `registry::Union{AbstractString, Nothing}`: Custom registry, in the format `owner/repo`.
|
||||
- `destination::AbstractString`: Destination of the workflow file, relative to `.github/workflows`.
|
||||
- `cron::AbstractString`: Cron expression for the schedule interval.
|
||||
- `token::Secret`: Name of the token secret to use.
|
||||
- `ssh::Secret`: Name of the SSH private key secret to use.
|
||||
- `ssh_password::Secret`: Name of the SSH key password secret to use.
|
||||
- `changelog::AbstractString`: Custom changelog template.
|
||||
- `changelog_ignore::Vector{<:AbstractString}`: Issue/pull request labels to ignore in the changelog.
|
||||
- `gpg::Secret`: Name of the GPG private key secret to use.
|
||||
- `gpg_password::Secret`: Name of the GPG private key password secret to use.
|
||||
- `registry::AbstractString`: Custom registry, in the format `owner/repo`.
|
||||
- `branches::Bool`: Whether not to enable the `branches` option.
|
||||
- `dispatch::Bool`: Whether or not to enable the `dispatch` option.
|
||||
- `dispatch_delay::Int`: Number of minutes to delay for dispatch events.
|
||||
"""
|
||||
@with_kw_noshow struct TagBot <: BasicPlugin
|
||||
file::String = default_file("github", "workflows", "TagBot.yml")
|
||||
destination::String = "TagBot.yml"
|
||||
cron::String = "0 * * * *"
|
||||
token::Secret = Secret("GITHUB_TOKEN")
|
||||
ssh::Union{Secret, Nothing} = nothing
|
||||
ssh_password::Union{Secret, Nothing} = nothing
|
||||
changelog::Union{String, Nothing} = nothing
|
||||
changelog_ignore::Union{Vector{String}, Nothing} = nothing
|
||||
gpg::Union{Secret, Nothing} = nothing
|
||||
gpg_password::Union{Secret, Nothing} = nothing
|
||||
registry::Union{String, Nothing} = nothing
|
||||
dispatch::Bool = false
|
||||
branches::Union{Bool, Nothing} = nothing
|
||||
dispatch::Union{Bool, Nothing} = nothing
|
||||
dispatch_delay::Union{Int, Nothing} = nothing
|
||||
end
|
||||
|
||||
source(::TagBot) = default_file("github", "workflows", "TagBot.yml")
|
||||
source(p::TagBot) = p.file
|
||||
destination(p::TagBot) = joinpath(".github", "workflows", p.destination)
|
||||
tags(::TagBot) = "<<", ">>"
|
||||
|
||||
view(p::TagBot, ::Template, ::AbstractString) = Dict(
|
||||
"HAS_DISPATCH" => p.dispatch,
|
||||
"REGISTRY" => p.registry,
|
||||
)
|
||||
function view(p::TagBot, ::Template, ::AbstractString)
|
||||
changelog = if p.changelog === nothing
|
||||
nothing
|
||||
else
|
||||
# This magic number aligns the text block just right.
|
||||
lines = map(line -> rstrip(repeat(' ', 12) * line), split(p.changelog, "\n"))
|
||||
"|\n" * join(lines, "\n")
|
||||
end
|
||||
ignore = p.changelog_ignore === nothing ? nothing : join(p.changelog_ignore, ", ")
|
||||
|
||||
return Dict(
|
||||
"BRANCHES" => p.branches === nothing ? nothing : string(p.branches),
|
||||
"CHANGELOG" => changelog,
|
||||
"CHANGELOG_IGNORE" => ignore,
|
||||
"CRON" => p.cron,
|
||||
"DISPATCH" => p.dispatch === nothing ? nothing : string(p.dispatch),
|
||||
"DISPATCH_DELAY" => p.dispatch_delay,
|
||||
"GPG" => p.gpg,
|
||||
"GPG_PASSWORD" => p.gpg_password,
|
||||
"REGISTRY" => p.registry,
|
||||
"SSH" => p.ssh,
|
||||
"SSH_PASSWORD" => p.ssh_password,
|
||||
"TOKEN" => p.token,
|
||||
)
|
||||
end
|
||||
|
|
|
@ -1,17 +1,41 @@
|
|||
name: TagBot
|
||||
on:
|
||||
schedule:
|
||||
- cron: 0 * * * *
|
||||
- cron: {{{CRON}}}
|
||||
jobs:
|
||||
TagBot:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: JuliaRegistries/TagBot@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
<<#REGISTRY>>
|
||||
registry: <<®ISTRY>>
|
||||
<</REGISTRY>>
|
||||
<<#HAS_DISPATCH>>
|
||||
dispatch: true
|
||||
<</HAS_DISPATCH>>
|
||||
token: {{{TOKEN}}}
|
||||
{{#SSH}}
|
||||
ssh: {{{SSH}}}
|
||||
{{/SSH}}
|
||||
{{#SSH_PASSWORD}}
|
||||
ssh_password: {{{SSH_PASSWORD}}}
|
||||
{{/SSH_PASSWORD}}
|
||||
{{#CHANGELOG}}
|
||||
changelog: {{{CHANGELOG}}}
|
||||
{{/CHANGELOG}}
|
||||
{{#CHANGELOG_IGNORE}}
|
||||
changelog_ignore: {{{CHANGELOG_IGNORE}}}
|
||||
{{/CHANGELOG_IGNORE}}
|
||||
{{#GPG}}
|
||||
gpg: {{{GPG}}}
|
||||
{{/GPG}}
|
||||
{{#GPG_PASSWORD}}
|
||||
gpg_password: {{{GPG_PASSWORD}}}
|
||||
{{/GPG_PASSWORD}}
|
||||
{{#REGISTRY}}
|
||||
registry: {{{REGISTRY}}}
|
||||
{{/REGISTRY}}
|
||||
{{#BRANCHES}}
|
||||
branches: {{{BRANCHES}}}
|
||||
{{/BRANCHES}}
|
||||
{{#DISPATCH}}
|
||||
dispatch: {{{DISPATCH}}}
|
||||
{{/DISPATCH}}
|
||||
{{#DISPATCH_DELAY}}
|
||||
dispatch_delay: {{{DISPATCH_DELAY}}}
|
||||
{{/DISPATCH_DELAY}}
|
||||
|
|
|
@ -1,13 +1,25 @@
|
|||
name: TagBot
|
||||
on:
|
||||
schedule:
|
||||
- cron: 0 * * * *
|
||||
- cron: 0 0 */3 * *
|
||||
jobs:
|
||||
TagBot:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: JuliaRegistries/TagBot@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
token: ${{ secrets.MYTOKEN }}
|
||||
ssh: ${{ secrets.SSHKEY }}
|
||||
ssh_password: ${{ secrets.SSHPASS }}
|
||||
changelog: |
|
||||
Line 1
|
||||
Line 2
|
||||
|
||||
Line 4
|
||||
changelog_ignore: foo, bar
|
||||
gpg: ${{ secrets.GPGKEY }}
|
||||
gpg_password: ${{ secrets.GPGPASS }}
|
||||
registry: Foo/Bar
|
||||
branches: false
|
||||
dispatch: true
|
||||
dispatch_delay: 20
|
||||
|
|
|
@ -76,7 +76,20 @@ end
|
|||
License(; name="ISC"),
|
||||
ProjectFile(; version=v"1"),
|
||||
Readme(; inline_badges=true),
|
||||
TagBot(; registry="Foo/Bar", dispatch=true),
|
||||
TagBot(;
|
||||
cron="0 0 */3 * *",
|
||||
token=Secret("MYTOKEN"),
|
||||
ssh=Secret("SSHKEY"),
|
||||
ssh_password=Secret("SSHPASS"),
|
||||
changelog="Line 1\nLine 2\n\nLine 4",
|
||||
changelog_ignore=["foo", "bar"],
|
||||
gpg=Secret("GPGKEY"),
|
||||
gpg_password=Secret("GPGPASS"),
|
||||
registry="Foo/Bar",
|
||||
branches=false,
|
||||
dispatch=true,
|
||||
dispatch_delay=20,
|
||||
),
|
||||
Tests(; project=true),
|
||||
TravisCI(;
|
||||
coverage=false,
|
||||
|
|
13
test/show.jl
13
test/show.jl
|
@ -41,9 +41,20 @@ const LICENSES_DIR = joinpath(TEMPLATES_DIR, "licenses")
|
|||
SrcDir:
|
||||
file: "$(joinpath(TEMPLATES_DIR, "src", "module.jl"))"
|
||||
TagBot:
|
||||
file: "$(joinpath(TEMPLATES_DIR, "github", "workflows", "TagBot.yml"))"
|
||||
destination: "TagBot.yml"
|
||||
cron: "0 * * * *"
|
||||
token: \${{ secrets.GITHUB_TOKEN }}
|
||||
ssh: nothing
|
||||
ssh_password: nothing
|
||||
changelog: nothing
|
||||
changelog_ignore: nothing
|
||||
gpg: nothing
|
||||
gpg_password: nothing
|
||||
registry: nothing
|
||||
dispatch: false
|
||||
branches: nothing
|
||||
dispatch: nothing
|
||||
dispatch_delay: nothing
|
||||
Tests:
|
||||
file: "$(joinpath(TEMPLATES_DIR, "test", "runtests.jl"))"
|
||||
project: false
|
||||
|
|
Loading…
Reference in New Issue