feat(custom-fields): template pre-fill + feed generator migration #494

Merged
jmiller merged 5 commits from feat/issue-template-custom-fields into dev 2026-06-05 03:15:20 +00:00
Owner

Summary

  • #493: Issue templates can specify custom_fields in YAML frontmatter to pre-fill org-level custom field values when creating issues. Works in both web form and API.
  • #492 Phase 3: All six feed generators (Joomla, WordPress, Composer, Drupal, PrestaShop, WHMCS) now resolve extension metadata from org-level repo-scoped custom fields first, falling back to the update_stream_config table, then repo-derived defaults.
  • Fix: Issue sidebar now loads org-level issue-scoped fields instead of legacy repo-level fields.

Test plan

  • Create an issue template with custom_fields: frontmatter, verify fields are pre-selected in the new issue form
  • Submit a new issue from that template, verify custom field values are saved
  • API: POST /repos/{owner}/{repo}/issues with custom_fields map, verify values saved
  • Set repo-scoped custom field values via Settings > Metadata, verify update XML feeds use those values
  • Verify feeds still work correctly for repos without custom field values (config table fallback)
  • Verify feeds still work correctly for repos with neither custom fields nor config (defaults)

Closes #493
Ref #492

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

?? Generated with Claude Code

## Summary - **#493**: Issue templates can specify `custom_fields` in YAML frontmatter to pre-fill org-level custom field values when creating issues. Works in both web form and API. - **#492 Phase 3**: All six feed generators (Joomla, WordPress, Composer, Drupal, PrestaShop, WHMCS) now resolve extension metadata from org-level repo-scoped custom fields first, falling back to the `update_stream_config` table, then repo-derived defaults. - **Fix**: Issue sidebar now loads org-level issue-scoped fields instead of legacy repo-level fields. ## Test plan - [ ] Create an issue template with `custom_fields:` frontmatter, verify fields are pre-selected in the new issue form - [ ] Submit a new issue from that template, verify custom field values are saved - [ ] API: POST `/repos/{owner}/{repo}/issues` with `custom_fields` map, verify values saved - [ ] Set repo-scoped custom field values via Settings > Metadata, verify update XML feeds use those values - [ ] Verify feeds still work correctly for repos without custom field values (config table fallback) - [ ] Verify feeds still work correctly for repos with neither custom fields nor config (defaults) Closes #493 Ref #492 _Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>_ ?? Generated with [Claude Code](https://claude.com/claude-code)
jmiller added 2 commits 2026-06-05 02:49:40 +00:00
Add `custom_fields` map to IssueTemplate struct so templates can specify
default values (e.g. `Priority: Medium`). On new issue form, org-level
issue-scoped fields appear in the sidebar with template defaults pre-selected.
NewIssuePost saves the values after issue creation. The API create issue
endpoint also accepts `custom_fields` by name.

Closes #493

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat(updateserver): resolve extension metadata from custom fields with config fallback
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Site Health (pull_request) Has been skipped
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Access control (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
1935889f6b
Add resolveExtensionMetadata() with cascading priority: org-level
repo-scoped custom fields → update_stream_config table → repo-derived
defaults. All six feed generators (Joomla, WordPress, Composer, Drupal,
PrestaShop, WHMCS) now use this unified resolver. Repos can be migrated
to custom fields gradually since the config table remains as fallback.

Ref #492

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller added 1 commit 2026-06-05 02:53:12 +00:00
docs(changelog): add #492 and #493 entries
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Validate PR (pull_request) Failing after 7s
Generic: Repo Health / Access control (pull_request) Successful in 37s
PR RC Release / Build RC Release (pull_request) Successful in 43s
b72f88e78b
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller added 1 commit 2026-06-05 03:01:00 +00:00
fix(custom-fields): address code review findings
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Access control (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
cd4c701cb6
- API: return 500 on GetCustomFieldsByOwner failure instead of silently
  swallowing the error
- resolveExtensionMetadata: add DownloadGating/KeyPrefix to metadata
  struct instead of mutating the caller's cfg pointer (side effect)
- resolveExtensionMetadata: add Description custom field mapping
- Composer: use meta.PHPMinimum instead of bypassing the cascade
- Web form: flash error on custom field save failure instead of silent log

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller added 1 commit 2026-06-05 03:14:30 +00:00
fix(custom-fields): log errors instead of silently discarding them
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Access control (pull_request) Successful in 2s
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Branch Cleanup / Delete merged branch (pull_request) Successful in 1s
8e0388c9d8
- saveCustomFieldsFromForm: log GetCustomFieldsByOwner errors
- resolveExtensionMetadata: log DB errors on custom field lookup
- NewIssue/ViewIssue: log errors from GetCustomFieldsByOwner and
  GetCustomFieldValuesMap instead of blank-assigning
- Composer: fix misleading comment about override source

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller merged commit 5ca1c888c0 into dev 2026-06-05 03:15:20 +00:00
jmiller deleted branch feat/issue-template-custom-fields 2026-06-05 03:15:21 +00:00
Sign in to join this conversation.
No Reviewers
No labels
Type
Status
Priority
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoGitea#494