JuliaPackageTemplate.jl
Overview
JuliaPackageTemplate.jl scaffolds new Julia packages for Rallypoint One with modern CI, versioned documentation, coverage reporting, and AI-assisted development conventions baked in.
A single call to generate produces:
- A complete Julia package (
Project.toml,src/,test/,LICENSE,README.md) - A Quarto-based docs site with sidebar navigation, search, and Rallypoint One branding
- GitHub Actions workflows for CI, docs deployment, doc backfill, TagBot, and Dependabot auto-merge
- A versioned docs layout on
gh-pages(stable / dev / per-tag) - Coverage reports published alongside docs via LocalCoverage
- A curated
CLAUDE.mdwith development, style, and release conventions - An initialized git repository and (optionally) a GitHub repo with Pages, TagBot deploy key, and
TAGBOT_SSHsecret pre-configured
Quickstart
Install the package into your Julia dev environment:
using Pkg
Pkg.develop(url="https://github.com/RallypointOne/JuliaPackageTemplate.jl")Generate a new package:
using JuliaPackageTemplate
generate("myorg/MyPackage.jl")By default this creates ~/.julia/dev/MyPackage, initializes git, creates a private GitHub repo, and wires up Pages + TagBot. See the API reference for all keyword arguments.
Common invocations
# Public repo, custom path
generate("myorg/MyPackage.jl"; visibility="public", path="/tmp/MyPackage")
# Local-only (no GitHub repo created)
generate("myorg/MyPackage.jl"; visibility="none")
# Custom authors and logo
generate("myorg/MyPackage.jl";
authors=["Alice <alice@example.com>"],
logo="https://example.com/logo.png",
logo_url="https://example.com",
)Requirements
When visibility != "none", the following tools must be available:
git— repo initialization and pushgh— authenticated GitHub CLI withreposcopessh-keygen— generates the TagBot deploy key
Docs Structure (gh-pages)
Generated packages deploy a versioned docs site with this layout:
gh-pages/
├── .nojekyll
├── index.html # redirect → /RepoName/stable/
├── versions.json # ["v1.0.0", "v0.2.0", "v0.1.0"]
├── stable/
│ └── index.html # redirect → /RepoName/<latest tag>/
├── dev/
│ └── <full quarto site> # rebuilt on every push to main
├── v0.1.0/
│ └── <full quarto site> # built on release publish
├── v0.2.0/
│ └── <full quarto site>
└── v1.0.0/
└── <full quarto site>
/redirects to/stable//stable/redirects to the latest release tag/dev/is rebuilt on every push tomain/vX.Y.Z/directories are created on each releaseversions.jsontracks all released versions, sorted by semver descending- Before any release exists,
/stable/shows a placeholder page linking to/dev/