diff --git a/.github/ISSUE_TEMPLATE/platform-parity.yml b/.github/ISSUE_TEMPLATE/platform-parity.yml index 22ff9a3..c4a5fd4 100644 --- a/.github/ISSUE_TEMPLATE/platform-parity.yml +++ b/.github/ISSUE_TEMPLATE/platform-parity.yml @@ -8,7 +8,7 @@ body: value: | Use this template to track a single capability across every frontend. When the status changes, update the comment and (ideally) the feature - matrix at `website/src/data/feature-status.yaml` (rendered at + matrix at `website/src/data/feature-status.json` (rendered at https://dasher.at/status/). - type: input id: category diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 96d60ea..0261de4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,7 +18,7 @@ see the blast radius: - [ ] This changes a capability that users see on **other platforms**. If checked, I have opened / updated the feature matrix - (`website/src/data/feature-status.yaml`) — linked PR: # + (`website/src/data/feature-status.json`) — linked PR: # _(or confirmed this is genuinely platform-specific-only)_ - [ ] This introduces a **new UX or hardware interaction**. If checked, an RFC (`governance/rfcs`) is linked: # @@ -29,3 +29,4 @@ see the blast radius: - [ ] Tests added for new behaviour - [ ] Feature matrix updated if this affects a cross-platform capability - [ ] Docs / changelog updated if the change is user-facing +- [ ] Commits are signed off (DCO) — `git commit -s` diff --git a/.github/workflows/dco.yml b/.github/workflows/dco.yml new file mode 100644 index 0000000..82796f8 --- /dev/null +++ b/.github/workflows/dco.yml @@ -0,0 +1,51 @@ +name: DCO + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + +jobs: + dco: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check Signed-off-by on all commits + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + set -euo pipefail + commits=$(git rev-list --no-merges "$BASE_SHA".."$HEAD_SHA") + missing=0 + for sha in $commits; do + body=$(git log -1 --format='%B' "$sha") + if ! echo "$body" | grep -qE '^Signed-off-by: .+ <.+@.+>'; then + short=$(git rev-parse --short "$sha") + subject=$(git log -1 --format='%s' "$sha") + echo "::error file=::Missing Signed-off-by on commit $short ($subject)" + missing=$((missing + 1)) + fi + done + if [ "$missing" -gt 0 ]; then + echo "" + echo "❌ $missing commit(s) missing Signed-off-by." + echo "" + echo "To fix, rebase with signoff:" + echo " git rebase --signoff origin/\${{ github.base_ref }}" + echo " git push --force-with-lease" + echo "" + echo "Or amend the last commit:" + echo " git commit --amend -s --no-edit" + echo "" + echo "See: https://developercertificate.org/" + exit 1 + fi + echo "✅ All commits have Signed-off-by" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 310b429..df45289 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -35,7 +35,7 @@ A pull request is ready to merge when: - [ ] CI is green (build + tests + lint + format, as applicable to the repo). - [ ] New behaviour has tests. -- [ ] If the change affects a cross-platform capability, the **feature matrix** (`website/src/data/feature-status.yaml`) has been updated in this or a linked PR. +- [ ] If the change affects a cross-platform capability, the **feature matrix** (`website/src/data/feature-status.json`) has been updated in this or a linked PR. - [ ] If the change is a new UX/hardware interaction, an **RFC** is linked. - [ ] Docs / changelog are updated if the change is user-facing. @@ -46,4 +46,36 @@ A pull request is ready to merge when: - **Small, focused PRs** are easier to review and land faster. - **Talk to us first** for big changes — open an issue or an RFC. +## Developer Certificate of Origin (DCO) + +All contributions to the Dasher project must be signed off under the +[Developer Certificate of Origin](https://developercertificate.org/). This is +a lightweight alternative to a CLA — it affirms that you wrote (or have the +right to submit) the code you're contributing. + +**How to sign off:** add `-s` (or `--signoff`) to your commit command: + +```sh +git commit -s -m "your commit message" +``` + +This adds a `Signed-off-by:` trailer to the commit message automatically. If +you forgot, you can amend: + +```sh +git commit --amend -s --no-edit +``` + +For an existing PR with multiple unsigned commits, rebase with signoff: + +```sh +git rebase --signoff BASE_BRANCH +git push --force-with-lease +``` + +> **Why DCO instead of a CLA?** Dasher is MIT-licensed and community-driven. A +> full CLA adds legal friction for volunteers. The DCO achieves provenance +> tracking with a single line, and is the same model used by the Linux kernel, +> Git, and many other open-source projects. + _This file is the organisation-wide default. Individual repositories may add their own `CONTRIBUTING.md` with platform-specific build steps and rules, which take precedence here._ diff --git a/profile/readme.md b/profile/readme.md index ed758c5..8e765a4 100644 --- a/profile/readme.md +++ b/profile/readme.md @@ -17,8 +17,10 @@ lives in the engine. | :----------------------------------------------------------------------------------------------------- | :-------------------------------------- | :-------------- | | [DasherCore](https://github.com/dasher-project/DasherCore) | The engine — language models, rendering maths, settings, alphabets, flat C API | C++17 | | [Dasher-Apple](https://github.com/dasher-project/Dasher-Apple) | iOS, macOS, visionOS apps + keyboard extension | SwiftUI | +| [Dasher-Android](https://github.com/dasher-project/Dasher-Android) | Android app + IME keyboard service | Kotlin / Compose | | [Dasher-Windows](https://github.com/dasher-project/Dasher-Windows) | Windows desktop app | Avalonia (.NET) | | [Dasher-GTK](https://github.com/dasher-project/Dasher-GTK) | Linux desktop app (cross-platform build) | GTK4 / gtkmm | +| [dasher-web](https://github.com/dasher-project/dasher-web) | In-browser WASM demo (powers the live demo on dasher.at) | Rust / WASM | | [dasher-design-guide](https://github.com/dasher-project/dasher-design-guide) | Design tokens, settings structure, parity spec | Markdown | | [website](https://github.com/dasher-project/website) | Source code for [dasher.at](https://dasher.at) | Astro | @@ -29,13 +31,6 @@ lives in the engine. - **[Integrating DasherCore](https://dasher.at/docs/development/)** — C API, pre-built binaries - **[Governance & RFCs](https://github.com/dasher-project/governance)** — decision process -### Web demo - -[dasher-web](https://github.com/dasher-project/dasher-web) — DasherCore -compiled to WASM. Powers the live demo on the -[homepage](https://dasher.at). Available for anyone who wants to embed Dasher -on the web. - ## Legacy & archived | Repository | Status | Notes | @@ -47,7 +42,7 @@ on the web. ## Contributing Contributions are welcome! See the -[contributing guide](https://github.com/dasher-project/.github/blob/main/.github/CONTRIBUTING.md) +[contributing guide](https://github.com/dasher-project/.github/blob/main/CONTRIBUTING.md) for project-wide conventions, and each repo's own `CONTRIBUTING.md` for platform-specific build instructions.