diff --git a/.github/workflow-templates/julia-ci.properties.json b/.github/workflow-templates/julia-ci.properties.json new file mode 100644 index 0000000..c786fb6 --- /dev/null +++ b/.github/workflow-templates/julia-ci.properties.json @@ -0,0 +1,6 @@ +{ + "name": "QAtlasHub Julia CI", + "description": "Format + version + test (reusable), optional sharding.", + "iconName": "octicon-checklist", + "categories": ["Julia"] +} diff --git a/.github/workflow-templates/julia-ci.yml b/.github/workflow-templates/julia-ci.yml new file mode 100644 index 0000000..407ad26 --- /dev/null +++ b/.github/workflow-templates/julia-ci.yml @@ -0,0 +1,13 @@ +name: CI +on: + push: { branches: [main] } + pull_request: {} +jobs: + format: + uses: QAtlasHub/.github/.github/workflows/format-check.yml@v1 + version: + uses: QAtlasHub/.github/.github/workflows/version-check.yml@v1 + ci: + uses: QAtlasHub/.github/.github/workflows/julia-ci.yml@v1 + with: { shards: 1 } # set 16 for sharded CI + secrets: inherit diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..92c5dab --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,18 @@ +name: Lint workflows +on: + push: + branches: [main] + paths: ['.github/workflows/**', 'actions/**'] + pull_request: + paths: ['.github/workflows/**', 'actions/**'] +permissions: + contents: read +jobs: + actionlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: reviewdog/action-actionlint@v1 + with: + reporter: github-check + fail_level: error diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..b565821 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,5 @@ +# Code of Conduct + +This project follows the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) +v2.1. Be respectful and constructive. Report unacceptable behaviour to the +organization owner via a private channel or a security advisory. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..db514b2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,10 @@ +# Contributing + +1. Open an issue (bug / wish) before large changes. +2. One focused change per PR. Fill in the PR template — the **Proposed Changes** + and **Usage or Results** sections become the release notes. +3. Write tests that check an *independent* expectation (closed form, + cross-method, structural law), not tautological self-consistency. +4. Bump `Project.toml` version by exactly one semver step (patch / minor / major). +5. Format with JuliaFormatter v2 (`julia -e 'using JuliaFormatter; format(".")'`). +CI runs format + version + tests; bot PRs (CompatHelper/dependabot) auto-merge on green. diff --git a/README.md b/README.md index ab8a8d0..fe82687 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Reference with the (intentional) double `.github` path, pinned to `@main`: name: Format Check on: { pull_request: { paths: ['**/*.jl'] } } jobs: - format: { uses: QAtlasHub/.github/.github/workflows/format-check.yml@main } + format: { uses: QAtlasHub/.github/.github/workflows/format-check.yml@v1 } ``` **Version check** — `.github/workflows/VersionCheck.yml`: @@ -22,7 +22,7 @@ jobs: name: VersionCheck on: { pull_request: { branches: [main] } } jobs: - version: { uses: QAtlasHub/.github/.github/workflows/version-check.yml@main } + version: { uses: QAtlasHub/.github/.github/workflows/version-check.yml@v1 } ``` **CompatHelper** — `.github/workflows/CompatHelper.yml`: @@ -31,7 +31,7 @@ name: CompatHelper on: { schedule: [{ cron: '0 */4 * * *' }], workflow_dispatch: {} } jobs: compathelper: - uses: QAtlasHub/.github/.github/workflows/compathelper.yml@main + uses: QAtlasHub/.github/.github/workflows/compathelper.yml@v1 secrets: inherit ``` @@ -41,7 +41,7 @@ name: AutoMerge on: { pull_request: { types: [opened, synchronize, reopened, labeled] } } jobs: automerge: - uses: QAtlasHub/.github/.github/workflows/automerge.yml@main + uses: QAtlasHub/.github/.github/workflows/automerge.yml@v1 secrets: inherit ``` @@ -54,7 +54,7 @@ name: Documentation on: { push: { branches: [main], tags: ['*'] }, workflow_dispatch: {} } jobs: docs: - uses: QAtlasHub/.github/.github/workflows/docs-deploy.yml@main + uses: QAtlasHub/.github/.github/workflows/docs-deploy.yml@v1 secrets: inherit # with: { pre-build: docs/atlas/generate.jl } # optional pre-make hook ``` @@ -65,7 +65,7 @@ name: Docs Preview on: { pull_request: {} } jobs: preview: - uses: QAtlasHub/.github/.github/workflows/docs-preview.yml@main + uses: QAtlasHub/.github/.github/workflows/docs-preview.yml@v1 secrets: inherit # with: { preview-base: https://codes.sota-shimozono.com } ``` @@ -76,7 +76,7 @@ name: Cleanup Preview on: { pull_request: { types: [closed] } } jobs: cleanup: - uses: QAtlasHub/.github/.github/workflows/docs-cleanup-preview.yml@main + uses: QAtlasHub/.github/.github/workflows/docs-cleanup-preview.yml@v1 ``` Inputs: `julia-version` (default `1`), `pre-build` (optional Julia script before `make.jl` — e.g. an atlas generator), `preview-base` (docs host; preview link is `//previews/PR/`). @@ -92,7 +92,7 @@ name: CI on: { push: { branches: [main] }, pull_request: {} } jobs: ci: - uses: QAtlasHub/.github/.github/workflows/julia-ci.yml@main + uses: QAtlasHub/.github/.github/workflows/julia-ci.yml@v1 with: shards: 16 # omit or set 1 for a plain single-job Pkg.test ``` @@ -110,22 +110,22 @@ The label→version→register→tag→notes chain, all reusable: ```yaml # PRLabeler.yml on: { pull_request: { types: [opened, edited, synchronize, reopened] } } -jobs: { label: { uses: QAtlasHub/.github/.github/workflows/labeler.yml@main } } +jobs: { label: { uses: QAtlasHub/.github/.github/workflows/labeler.yml@v1 } } ``` ```yaml # 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@main } } +jobs: { draft: { uses: QAtlasHub/.github/.github/workflows/release-drafter.yml@v1 } } ``` ```yaml # AutoRegister.yml on: { workflow_run: { workflows: ["Release Drafter"], types: [completed], branches: [main] } } -jobs: { register: { uses: QAtlasHub/.github/.github/workflows/autoregister.yml@main } } +jobs: { register: { uses: QAtlasHub/.github/.github/workflows/autoregister.yml@v1 } } ``` ```yaml # TagBot.yml on: { issue_comment: { types: [created] }, workflow_dispatch: { inputs: { lookback: { default: "3" } } } } -jobs: { tagbot: { uses: QAtlasHub/.github/.github/workflows/tagbot.yml@main, secrets: inherit } } +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. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..d877a39 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +Report vulnerabilities **privately** via GitHub Security Advisories +("Report a vulnerability" on the affected repo), not a public issue. We aim to +acknowledge within a few days. Do not include exploit details in public channels. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..1817595 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,5 @@ +# Support + +- **Questions / ideas** → the repo's Discussions or a `wishlist` issue. +- **Bugs** → a `bug` issue with a minimal reproducer. +- **Docs errors** → open an issue labelled `documentation`. diff --git a/profile/README.md b/profile/README.md new file mode 100644 index 0000000..ced9cf7 --- /dev/null +++ b/profile/README.md @@ -0,0 +1,23 @@ +# QAtlasHub + +A self-hosted home for the **QAtlas** atlas family and its supporting +infrastructure — declarative physics knowledge, its independent numerical +oracles, and the reproducible-research tooling around them. + +## Packages + +- **AbstractQAtlas.jl** — model-independent physics vocabulary + relations (the verify-engine base) +- **QAtlas.jl** — the model atlas: declared values, closed forms, constraint kernel +- **QAtlasRegistry** — cross-validated evidence registry (oracles report here) +- **ClassicalMonteCarlo.jl** — independent classical numerical oracle +- **LatticeCore / Lattice2D / QuasiCrystal** — lattice geometry +- **ParamIO.jl / DataVault.jl** — parameter & data management for compute campaigns +- **Pinax.jl** — figure galleries → self-contained annotated HTML +- **doiget** — OA-first DOI/arXiv fetcher + citation-check action + +## Shared CI + +This org's [`.github`](https://github.com/QAtlasHub/.github) repo hosts the +reusable workflows and actions every package uses via thin `uses:` callers — +CI (optional sharding), formatting, versioning, CompatHelper/AutoMerge, docs +deploy/preview, rich release notes, and citation checking.