Central home for organization-wide GitHub configuration.
.github/FUNDING.yml— the Sponsor button on every QAtlasHub repo that lacks its own FUNDING.yml.
Reference with the (intentional) double .github path, pinned to @main:
Format check — .github/workflows/FormatCheck.yml:
name: Format Check
on: { pull_request: { paths: ['**/*.jl'] } }
jobs:
format: { uses: QAtlasHub/.github/.github/workflows/format-check.yml@v1 }Version check — .github/workflows/VersionCheck.yml:
name: VersionCheck
on: { pull_request: { branches: [main] } }
jobs:
version: { uses: QAtlasHub/.github/.github/workflows/version-check.yml@v1 }CompatHelper — .github/workflows/CompatHelper.yml:
name: CompatHelper
on: { schedule: [{ cron: '0 */4 * * *' }], workflow_dispatch: {} }
jobs:
compathelper:
uses: QAtlasHub/.github/.github/workflows/compathelper.yml@v1
secrets: inheritAutoMerge (bot PRs + automerge label) — .github/workflows/AutoMerge.yml:
name: AutoMerge
on: { pull_request: { types: [opened, synchronize, reopened, labeled] } }
jobs:
automerge:
uses: QAtlasHub/.github/.github/workflows/automerge.yml@v1
secrets: inheritDeploy (live site on push to main) — .github/workflows/Documentation.yml:
name: Documentation
on: { push: { branches: [main], tags: ['*'] }, workflow_dispatch: {} }
jobs:
docs:
uses: QAtlasHub/.github/.github/workflows/docs-deploy.yml@v1
secrets: inherit
# with: { pre-build: docs/atlas/generate.jl } # optional pre-make hookPreview (PR preview + sticky URL comment) — .github/workflows/DocsPreview.yml:
name: Docs Preview
on: { pull_request: {} }
jobs:
preview:
uses: QAtlasHub/.github/.github/workflows/docs-preview.yml@v1
secrets: inherit
# with: { preview-base: https://codes.sota-shimozono.com }Delete preview (remove previews/PR on close) — .github/workflows/CleanupPreview.yml:
name: Cleanup Preview
on: { pull_request: { types: [closed] } }
jobs:
cleanup:
uses: QAtlasHub/.github/.github/workflows/docs-cleanup-preview.yml@v1Inputs: julia-version (default 1), pre-build (optional Julia script before make.jl — e.g. an atlas generator), preview-base (docs host; preview link is <base>/<repo>/previews/PR<N>/).
One shards input toggles sharding — shards: 1 (default) runs a single
unsharded Pkg.test; shards: 16 fans out into 16 parallel shards.
name: CI
on: { push: { branches: [main] }, pull_request: {} }
jobs:
ci:
uses: QAtlasHub/.github/.github/workflows/julia-ci.yml@v1
with:
shards: 16 # omit or set 1 for a plain single-job Pkg.testSharding contract (only when shards > 1): test/ci/plan_shards.jl <N> [timings.tsv]
prints {"include":[{"sid":"s01","cases":"…"}, …]}; the suite reads env CI_CASES
("" = all). LPT planning activates when a ci-timings orphan branch exists,
else round-robin. Absent plan_shards.jl → safe unsharded fallback.
The label→version→register→tag→notes chain, all reusable:
# PRLabeler.yml (public repo — private ones add `with: { runner: '["self-hosted","rosina"]' }`)
on: { pull_request: { types: [opened, edited, synchronize, reopened] } }
permissions: { contents: read, pull-requests: write, issues: write }
jobs: { label: { uses: QAtlasHub/.github/.github/workflows/labeler.yml@v1 } }Do not hand-roll this with
gh pr edit --add-label: that command reads the PR over GraphQL, which now returns the Projects-classic sunset notice, andghexits 1 on it. The reusable workflow uses the REST endpoints viagithub-scriptand is unaffected.
# ReleaseDrafter.yml (repo also ships .github/release-drafter.yml config)
on: { push: { branches: [main] }, pull_request: { types: [opened, reopened, synchronize, edited] } }
jobs: { draft: { uses: QAtlasHub/.github/.github/workflows/release-drafter.yml@v1 } }# AutoRegister.yml
on: { workflow_run: { workflows: ["Release Drafter"], types: [completed], branches: [main] } }
jobs: { register: { uses: QAtlasHub/.github/.github/workflows/autoregister.yml@v1 } }# TagBot.yml
on: { issue_comment: { types: [created] }, workflow_dispatch: { inputs: { lookback: { default: "3" } } } }
jobs: { tagbot: { uses: QAtlasHub/.github/.github/workflows/tagbot.yml@v1, secrets: inherit } }- labeler feeds
enhancement/bug/… labels from the PR title + Type-of-Change checkboxes → drives the version-resolver and release-notes categories. - release-drafter resolves the next version from labels + keeps a draft (needs the repo's
.github/release-drafter.yml). - autoregister posts
@JuliaRegistrator registeron a version change (minimal## Changelogstub — the rich notes come from the release-notes action). - tagbot tags + a minimal changelog (the release-notes action owns the body → single source).
Formatting is standardised on format-check (JuliaFormatter v2 verify), replacing the older FormatFix auto-commit flow.
.github/workflows/PublishRelease.yml:
name: Publish Release
on: { push: { tags: ['v*'] }, workflow_dispatch: { inputs: { tag: { required: true } } } }
permissions: { contents: write }
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: QAtlasHub/.github/actions/release-notes@v1Builds one clean ## What's Changed→category→per-PR <details> from each PR's
Proposed Changes / Usage or Results sections. Pair with TagBot minimal changelog
- release-drafter as version-resolver so no doubled changelog appears.
dependabot.yml— Dependabot config is per-repository; copy this repo's.github/dependabot.ymlinto each repo. (There is no org-level default.)
- Org → Settings → Actions → Workflow permissions = Read and write (done).
- Org → Settings → Actions → Allow GitHub Actions to create and approve pull requests (needed for AutoMerge).
- Each repo → Settings → General → Allow auto-merge, + branch protection with
required status checks (so AutoMerge's
--autowaits for green).