Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 23 additions & 0 deletions .commitlintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"extends": ["@commitlint/config-conventional"],
"rules": {
"header-max-length": [2, "always", 72],
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"perf",
"test",
"build",
"ci",
"chore",
"revert"
]
]
}
}
20 changes: 20 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

[*.md]
# Markdown sometimes uses trailing spaces for hard breaks. We disable hard
# breaks at the lint level (no-trailing-spaces.br_spaces=0) so this stays safe.
trim_trailing_whitespace = true

[*.{yml,yaml,json}]
indent_size = 2

[Makefile]
indent_style = tab
29 changes: 29 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!-- Brief summary of what this PR changes and why. -->

## Summary

<!-- 2-3 sentences. What changed. Why now. Which audience (customers / contributors / staff). -->

## Type of change

* [ ] New page
* [ ] Edit to existing page
* [ ] Rename / move
* [ ] Tooling / CI / config
* [ ] Other (describe)

## Pre-merge checklist

See [CONTRIBUTING.md](../CONTRIBUTING.md) for the full conventions.

* [ ] Every new page has YAML frontmatter with `description:`
* [ ] Every `<img>` tag has a non-empty `alt=""` attribute
* [ ] New files use lowercase kebab-case names (no `README (3).md` style)
* [ ] Every new page is referenced from the appropriate `SUMMARY.md`
* [ ] Internal terminology uses **Toolkit** (not Component); customer-facing uses **toolkit** (one word)
* [ ] Commit messages follow Conventional Commits (or GitBook back-sync commits have been rewritten)
* [ ] Link check, markdown lint, spell check, and commit lint CI are green

## Related issues / Jira tickets

<!-- e.g. DEV-1234 -->
21 changes: 21 additions & 0 deletions .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Commit lint

on:
pull_request:
types: [opened, synchronize, reopened]

jobs:
commitlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Run commitlint
uses: wagoid/commitlint-github-action@v6
with:
configFile: .commitlintrc.json
# GitBook back-sync commits land directly on master, not via PRs,
# so PRs are dev-authored and must follow Conventional Commits.
failOnWarnings: false
49 changes: 49 additions & 0 deletions .github/workflows/link-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Link check

on:
pull_request:
paths:
- '**/*.md'
- '**/SUMMARY.md'
- '.github/workflows/link-check.yml'
- '.lycheeignore'
push:
branches: [master]
paths:
- '**/*.md'
- '**/SUMMARY.md'
workflow_dispatch:
schedule:
# Weekly Monday 09:00 UTC sweep so external link rot surfaces even
# when no PR is open.
- cron: '0 9 * * 1'

jobs:
lychee:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Run lychee
uses: lycheeverse/lychee-action@v2
with:
# --no-progress keeps logs clean
# --base resolves root-relative links against the repo root
# --exclude-mail skips mailto: links
# --accept skips 429 rate-limits as non-failures
args: >-
--no-progress
--base .
--exclude-mail
--accept 200,206,429
'./**/*.md'
fail: true
format: markdown
output: lychee-report.md

- name: Upload report
if: always()
uses: actions/upload-artifact@v4
with:
name: lychee-report
path: lychee-report.md
31 changes: 31 additions & 0 deletions .github/workflows/markdown-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Markdown lint

on:
pull_request:
paths:
- '**/*.md'
- '.markdownlint.json'
- '.markdownlintignore'
- '.github/workflows/markdown-lint.yml'
push:
branches: [master]
paths:
- '**/*.md'
- '.markdownlint.json'
- '.markdownlintignore'
workflow_dispatch:

jobs:
markdownlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Lint Markdown
uses: DavidAnson/markdownlint-cli2-action@v18
with:
config: .markdownlint.json
globs: |
**/*.md
!node_modules
!**/SUMMARY.md
29 changes: 29 additions & 0 deletions .github/workflows/spellcheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Spell check

on:
pull_request:
paths:
- '**/*.md'
- 'cspell.json'
- '.github/workflows/spellcheck.yml'
push:
branches: [master]
paths:
- '**/*.md'
- 'cspell.json'
workflow_dispatch:

jobs:
cspell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Run cspell
uses: streetsidesoftware/cspell-action@v6
with:
config: cspell.json
files: |
**/*.md
inline: warning
strict: false
10 changes: 10 additions & 0 deletions .lycheeignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Hosts that block bots or rate-limit aggressively. lychee will not flag
# these as broken even if they return non-200.
^https://insite\.atlassian\.net/
^https://.+\.hubspotlinks\.com/
^https://www\.linkedin\.com/
^https://twitter\.com/
^https://x\.com/

# Local-only references inside example snippets
^file://
25 changes: 25 additions & 0 deletions .markdownlint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"default": true,

"MD003": { "style": "atx" },
"MD004": { "style": "asterisk" },
"MD007": { "indent": 2 },
"MD010": { "code_blocks": false },
"MD026": { "punctuation": ".,;:" },
"MD040": true,

"MD013": false,
"MD024": { "siblings_only": true },
"MD025": false,
"MD033": false,
"MD034": false,
"MD036": false,
"MD041": false,
"MD046": false,
"MD060": false,

"MD001": false,

"no-hard-tabs": true,
"no-trailing-spaces": { "br_spaces": 0 }
}
4 changes: 4 additions & 0 deletions .markdownlintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
.git
SUMMARY.md
**/SUMMARY.md
68 changes: 68 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Contributing to the Shift iQ docs

This repository is the source for [docs.shiftiq.com](https://docs.shiftiq.com/). Most edits land here from one of two places: the GitBook web editor (synced back to `master` automatically) and pull requests opened directly against this repo. Either way, the conventions below apply.

## Commit messages

Use [Conventional Commits](https://www.conventionalcommits.org/) for any commit you write yourself:

```text
<type>(<scope>): <description>
```

* `type` is one of `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`.
* `scope` is optional and lowercase — typically the section being edited (`topics`, `contributors`, `releases`, etc.).
* `description` is lowercase, imperative ("add", not "added"), no trailing period, ~50 chars max.

### GitBook auto-commits

When you publish from the GitBook web editor, GitBook generates commits with subjects like `GITBOOK-80: No subject`. **Do not leave those subjects in place when merging the back-sync branch into `master`.**

Either:

1. Rebase the GitBook branch locally and rewrite the subjects to follow Conventional Commits before merging, or
2. Squash the back-sync into a single Conventional Commits message that describes what changed.

The current `master` history has 178 `GITBOOK-XX: No subject` commits. They make changelog mining impossible. Don't add to that count.

## Page conventions

### Frontmatter

Every page should have YAML frontmatter with at least a `description`. GitBook uses it for search snippets and social-share previews.

```yaml
---
description: One sentence describing the page, ~150 chars max
---
```

### Image alt text

Every `<img>` tag must have a non-empty `alt` attribute. GitBook inserts `<img ... alt="">` by default — fix the alt text before merging.

```html
<figure><img src="../.gitbook/assets/sites-01.png" alt="Sites portal layout"><figcaption></figcaption></figure>
```

### File names

Use lowercase kebab-case file names that match the page title (`how-to-publish-a-course.md`, not `README (3).md` or `HowToPublishACourse.md`). When the GitBook editor generates a `README (N).md` style file, rename it before merging — for example, `git mv "README (4).md" "oct-29-version-25.6-is-live.md"` and update the relevant `SUMMARY.md`.

### SUMMARY.md

Each space (`contributors/`, `topics/`, `developers/`, `guides/`, `releases/`, `staff/`, `starters/`, `operations/`, `embeds/`) has its own `SUMMARY.md`. When you add a new page, add it to the appropriate `SUMMARY.md` in the same PR.

### Terminology

The internal vocabulary is **Toolkit** (Domain / Plugin / Utility / Shell), not **Component**. The customer-facing UI calls it a **toolkit** (one word). Don't write "tool kit".

## Reviewing

Before requesting review:

* [ ] Commit messages follow Conventional Commits (or, for back-syncs, the GitBook subjects have been rewritten).
* [ ] New pages have YAML `description:` frontmatter.
* [ ] New images have descriptive `alt=""` attributes.
* [ ] Renamed or moved pages have their references updated in `SUMMARY.md` and in any pages that link to them.
* [ ] The link-check CI is green.
Loading
Loading