Deploy keys and autolinks
Grouped together because both share the same reconciliation quirk: GitHub's REST API has no update endpoint for either resource, so a config change that would otherwise be a single in-place update is instead planned as a delete of the stale item paired with a create of the new one.
deploy_keys
Deploy keys, matched by key content (not title — GitHub allows duplicate titles, but key
content is the real identity).
| Field | Type | Default | Notes |
|---|---|---|---|
title |
string | required | |
key |
string | required | The public key content; match key |
read_only |
bool | true |
Matching normalizes each key to just its algorithm and base64 body, dropping any trailing
ssh-keygen-style comment and ambient whitespace a YAML block scalar can introduce — so a
key that's unchanged except for its comment isn't planned as a spurious delete+recreate. The
same normalizer governs the extends: keyed-list merge for this section, so two entries
differing only by comment/whitespace can't survive a merge as if they were different keys.
Warning
Changing title or read_only for the same key content is planned as a delete of the
old key paired with a create of the new one, not a single in-place update — GitHub's
deploy-key API has no update endpoint.
autolinks
Autolink references, matched by key_prefix — a prefix like TICKET- in commit messages
and PR text is turned into a link using url_template.
| Field | Type | Default | Notes |
|---|---|---|---|
key_prefix |
string | required | Match key |
url_template |
string | required | Must contain <num> |
is_alphanumeric |
bool | true |
Whether the reference may include letters, not just digits |
autolinks:
- key_prefix: "TICKET-"
url_template: "https://example.atlassian.net/browse/TICKET-<num>"
Warning
Like deploy keys, GitHub's autolinks API has no update endpoint — a changed
url_template/is_alphanumeric for an existing key_prefix is a delete-and-recreate,
not an in-place update.