@cldmv/gh-broker 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +165 -41
  2. package/config.example.json +38 -9
  3. package/config.sample.json +45 -0
  4. package/deploy/README.md +76 -17
  5. package/deploy/install.mjs +171 -104
  6. package/deploy/install.sh +0 -0
  7. package/deploy/lib/config-merge.mjs +174 -16
  8. package/deploy/lib/credentials.mjs +143 -0
  9. package/deploy/lib/install-args.mjs +144 -0
  10. package/deploy/lib/npm-setup.mjs +164 -0
  11. package/deploy/lib/secret-store.mjs +20 -2
  12. package/deploy/lib/system.mjs +26 -2
  13. package/dist/index.mjs +5864 -1809
  14. package/dist/index.mjs.map +4 -4
  15. package/package.json +18 -8
  16. package/.configs/fix-headers.json +0 -3
  17. package/.configs/vitest.config.mjs +0 -44
  18. package/.github/dependabot.yml +0 -111
  19. package/.github/workflows/branch-retention.yml +0 -44
  20. package/.github/workflows/bundle-size.yml +0 -52
  21. package/.github/workflows/ci.yml +0 -389
  22. package/.github/workflows/cla.yml +0 -66
  23. package/.github/workflows/codeql.yml +0 -87
  24. package/.github/workflows/dependabot-auto-merge.yml +0 -62
  25. package/.github/workflows/dependabot-recreate.yml +0 -67
  26. package/.github/workflows/dependency-review.yml +0 -46
  27. package/.github/workflows/feature-pr.yml +0 -75
  28. package/.github/workflows/hotfix-redirector.yml +0 -67
  29. package/.github/workflows/hotfixes-release.yml +0 -70
  30. package/.github/workflows/labeler.yml +0 -48
  31. package/.github/workflows/master-commit-audit.yml +0 -56
  32. package/.github/workflows/member-auto-merge.yml +0 -75
  33. package/.github/workflows/next-release.yml +0 -76
  34. package/.github/workflows/next-reset.yml +0 -50
  35. package/.github/workflows/pr-notify.yml +0 -44
  36. package/.github/workflows/pr-title-normalizer.yml +0 -52
  37. package/.github/workflows/provenance.yml +0 -51
  38. package/.github/workflows/publish.yml +0 -146
  39. package/.github/workflows/release-merge.yml +0 -104
  40. package/.github/workflows/release-notify.yml +0 -41
  41. package/.github/workflows/scorecard.yml +0 -64
  42. package/.github/workflows/stale.yml +0 -50
  43. package/.github/workflows/tag-health.yml +0 -70
  44. package/.github/workflows/update-major-version-tags.yml +0 -94
  45. package/.github/workflows/v4-bootstrap.yml +0 -115
  46. package/.github/workflows/welcome.yml +0 -42
  47. package/docs/TOOLS.md +0 -347
  48. package/docs/agent-user-model.md +0 -89
  49. package/docs/changelog/v0/v0.2.0.md +0 -26
  50. package/docs/changelog/v0/v0.2.1.md +0 -23
  51. package/docs/changelog/v0/v0.2.2.md +0 -23
  52. package/docs/changelog/v0/v0.2.3.md +0 -33
  53. package/docs/changelog/v0/v0.2.4.md +0 -25
  54. package/docs/changelog/v0/v0.2.5.md +0 -29
  55. package/docs/changelog/v0/v0.3.0.md +0 -84
  56. package/docs/changelog/v0/v0.3.1.md +0 -30
  57. package/docs/changelog/v0/v0.3.2.md +0 -24
  58. package/docs/changelog/v0/v0.3.3.md +0 -28
  59. package/docs/changelog/v0/v0.4.0.md +0 -58
  60. package/docs/changelog/v0/v0.4.1.md +0 -33
  61. package/docs/changelog/v0/v0.4.2.md +0 -45
  62. package/docs/changelog/v0/v0.5.0.md +0 -39
  63. package/docs/changelog/v0/v0.5.1.md +0 -28
  64. package/docs/changelog/v0/v0.6.0.md +0 -52
  65. package/docs/changelog/v0/v0.6.1.md +0 -48
  66. package/docs/changelog/v0/v0.7.0.md +0 -71
  67. package/docs/deploy-architecture.md +0 -82
  68. package/src/appauth.ts +0 -56
  69. package/src/audit.ts +0 -34
  70. package/src/catalog.ts +0 -165
  71. package/src/config.ts +0 -130
  72. package/src/index.ts +0 -107
  73. package/src/paths.ts +0 -60
  74. package/src/router.ts +0 -258
  75. package/src/secrets.ts +0 -137
  76. package/src/server.ts +0 -91
  77. package/src/types.ts +0 -104
  78. package/src/upstream.ts +0 -85
  79. package/src/verbs/issue_labels.ts +0 -329
  80. package/src/verbs/link_issue.ts +0 -84
  81. package/src/verbs/release-analysis.ts +0 -210
  82. package/src/verbs/repo-tier.ts +0 -90
  83. package/src/verbs/report_ci_status.ts +0 -358
  84. package/src/verbs/report_release_prs.ts +0 -238
  85. package/src/verbs/report_security_alerts.ts +0 -442
  86. package/src/verbs/report_unlabeled.ts +0 -194
  87. package/src/verbs/rest-client.ts +0 -181
  88. package/src/verbs/review_thread.ts +0 -138
  89. package/tests/appauth.test.vitest.mts +0 -76
  90. package/tests/audit.test.vitest.mts +0 -48
  91. package/tests/catalog.test.vitest.mts +0 -180
  92. package/tests/config-merge.test.vitest.mts +0 -58
  93. package/tests/config.test.vitest.mts +0 -314
  94. package/tests/issue-labels.test.vitest.mts +0 -347
  95. package/tests/paths.test.vitest.mts +0 -52
  96. package/tests/release-prs.test.vitest.mts +0 -237
  97. package/tests/rest-client.test.vitest.mts +0 -115
  98. package/tests/router.test.vitest.mts +0 -399
  99. package/tests/run-vitest.mjs +0 -51
  100. package/tests/secret-store.test.vitest.mts +0 -106
  101. package/tests/secrets.test.vitest.mts +0 -155
  102. package/tests/security-alerts.test.vitest.mts +0 -328
  103. package/tests/server.test.vitest.mts +0 -20
  104. package/tests/upstream.test.vitest.mts +0 -91
  105. package/tests/verb-helpers.test.vitest.mts +0 -331
  106. package/tests/verbs.test.vitest.mts +0 -624
  107. package/tsconfig.json +0 -21
@@ -1,44 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/pr-notify.yml
4
- # @Date: 2026-05-26T00:00:00-07:00 (1779778800)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/pr-notify.yml
15
- #
16
- # Fires once per PR open. Targets ALL PRs in the repo (including the release
17
- # PRs opened by the release-flow workflows) — exactly one notification per
18
- # PR-open event.
19
- #
20
- # Channels are addressed by secret name; no config file. Set the secret to
21
- # enable the channel, leave it unset to skip:
22
- #
23
- # DISCORD_PR_PUBLIC_WEBHOOK / DISCORD_PR_PRIVATE_WEBHOOK
24
- # SLACK_PR_PUBLIC_WEBHOOK / SLACK_PR_PRIVATE_WEBHOOK
25
- # GENERIC_PR_PUBLIC_WEBHOOK / GENERIC_PR_PRIVATE_WEBHOOK
26
- #
27
- # Visibility is determined automatically from the repo: GitHub `public` →
28
- # PUBLIC, `private` or `internal` → PRIVATE. Set the org-level secret in
29
- # CLDMV for the default URL; set a repo-level secret with the same name to
30
- # override (or to an empty string to mute that channel for this repo).
31
- name: 📥 PR Notify
32
-
33
- on:
34
- pull_request:
35
- types: [opened]
36
-
37
- permissions:
38
- contents: read
39
- pull-requests: read
40
-
41
- jobs:
42
- notify:
43
- uses: CLDMV/.github/.github/workflows/reusable-pr-notifier.yml@v4
44
- secrets: inherit
@@ -1,52 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/pr-title-normalizer.yml
4
- # @Date: 2026-05-22T00:00:00-07:00 (1779433200)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/pr-title-normalizer.yml
15
- #
16
- # Normalize contributor PR titles to Conventional Commits format, derived from
17
- # the highest-priority commit in the PR. The release flow expects this shape, so
18
- # a v4 repo wants this enabled. (Also backportable to v3 repos — the underlying
19
- # action shipped in v3.3.0; it owns all skip logic: bot authors, the
20
- # long-running release PRs, titles already starting with `release:`, and titles
21
- # that already conform.)
22
- #
23
- # Thin caller: all job logic lives in the reusable, pinned at @v4. Bumping the
24
- # pin carries fixes without editing this file.
25
- name: 🏷️ PR Title Normalizer
26
-
27
- # SECURITY NOTE: pull_request_target runs in the BASE repo's context with WRITE
28
- # permissions and access to secrets. SAFE — the reusable's path is API-only (it
29
- # never checks out or executes PR content). Triggers on opened + synchronize
30
- # only (NOT edited): a maintainer hand-editing the title must not kick off a
31
- # re-normalize loop.
32
- on:
33
- pull_request_target:
34
- types: [opened, synchronize]
35
-
36
- concurrency:
37
- group: pr-title-normalizer-${{ github.event.pull_request.number }}
38
- cancel-in-progress: true
39
-
40
- permissions:
41
- contents: read
42
-
43
- jobs:
44
- normalize:
45
- permissions:
46
- contents: read
47
- pull-requests: write
48
- uses: CLDMV/.github/.github/workflows/workflow-pr-title-normalizer.yml@v4
49
- secrets:
50
- # Map your repo/org secrets to the expected names.
51
- BOT_APP_CLIENT_ID: ${{ secrets.CLDMV_BOT_APP_CLIENT_ID }}
52
- BOT_APP_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_APP_PRIVATE_KEY }}
@@ -1,51 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/provenance.yml
4
- # @Date: 2026-09-05T00:00:00-07:00 (1788591600)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # SLSA build provenance (.intoto.jsonl) for this repo's published releases.
15
- # Decoupled from the publish workflow on purpose (see reusable-provenance.yml):
16
- # the SLSA generator is a reusable-workflow call and cannot carry
17
- # `continue-on-error`, so running it here — on its own `release: published`
18
- # trigger — keeps a provenance failure from ever turning a release run red
19
- # (issue #268). It re-packs the SAME build artifact the publish run uploaded, so
20
- # the signed subjects are byte-identical to what was published.
21
- #
22
- # Prereq: the org's allowed actions/reusable-workflows policy must permit
23
- # slsa-framework/*.
24
- name: 🔏 SLSA Provenance
25
-
26
- on:
27
- release:
28
- types: [published]
29
-
30
- jobs:
31
- provenance:
32
- # Public, real releases only — SLSA provenance is recorded in the public
33
- # Rekor transparency log. Skip drafts, prereleases, and private repos.
34
- if: |
35
- !github.event.repository.private &&
36
- !github.event.release.draft &&
37
- !github.event.release.prerelease
38
- permissions:
39
- actions: read # look up the publish run's build artifact
40
- id-token: write # provenance signing (OIDC)
41
- contents: write # upload the .intoto.jsonl release asset
42
- uses: CLDMV/.github/.github/workflows/reusable-provenance.yml@v4
43
- with:
44
- tag: ${{ github.event.release.tag_name }}
45
- # CUSTOMIZE: these MUST match your publish.yml so the re-packed
46
- # tarballs are byte-identical to what was published.
47
- package_name: "@cldmv/gh-broker"
48
- node_version: "lts/*"
49
- # Satellite packages (same value as publish.yml's extra_packages);
50
- # empty disables. See docs/conventions/satellite-packages.md.
51
- extra_packages: ""
@@ -1,146 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/publish.yml
4
- # @Date: 2026-05-20T00:00:00-07:00 (1779260400)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/publish.yml
15
- name: 📦 Release and Publish
16
-
17
- on:
18
- push:
19
- branches: [master, main]
20
- paths-ignore:
21
- - "**.md"
22
- - ".github/ISSUE_TEMPLATE/**"
23
- - ".github/PULL_REQUEST_TEMPLATE/**"
24
- workflow_dispatch:
25
- inputs:
26
- debug:
27
- description: "Enable debug logging for troubleshooting"
28
- type: boolean
29
- required: false
30
- default: false
31
- dry_run:
32
- description: "Dry run mode - validate everything but don't publish or create releases"
33
- type: boolean
34
- required: false
35
- default: false
36
- node_version:
37
- description: "Node.js version to use (default: lts/*)"
38
- type: string
39
- required: false
40
- default: "lts/*"
41
- package_manager:
42
- description: "Package manager (npm or yarn)"
43
- type: string
44
- required: false
45
- default: "npm"
46
- test_environment:
47
- description: "Environment for tests (affects NODE_ENV and NODE_OPTIONS --conditions flag)"
48
- type: string
49
- required: false
50
- default: "development"
51
- version:
52
- description: "Version to publish (auto-detected from package.json if not provided)"
53
- type: string
54
- required: false
55
- default: ""
56
- publish_to_npm:
57
- description: "Publish to NPM registry"
58
- type: boolean
59
- required: false
60
- default: true
61
- publish_to_github_packages:
62
- description: "Publish to GitHub Packages registry"
63
- type: boolean
64
- required: false
65
- default: true
66
- min_node_version:
67
- description: "Minimum Node.js version for matrix testing (enables matrix when set; default: 22.12.0 — the floor vitest 5 actually runs on)"
68
- type: string
69
- required: false
70
- default: "22.12.0"
71
- max_node_major:
72
- description: "Max Node.js major version for the test matrix. Leave blank (the default) to inherit the CLDMV/.github reusable workflow's default; set a value only to pin/override for a specific run."
73
- type: string
74
- required: false
75
- default: ""
76
- use_gpg:
77
- description: "Enable GPG signing (if GPG secrets provided)"
78
- type: boolean
79
- required: false
80
- default: false
81
-
82
- # NEVER cancel an in-flight publish — half-published versions are nasty to
83
- # clean up. Concurrent publishes for the same ref queue instead so they
84
- # serialize naturally.
85
- concurrency:
86
- group: publish-${{ github.workflow }}-${{ github.ref }}
87
- cancel-in-progress: false
88
-
89
- permissions:
90
- contents: read
91
-
92
- jobs:
93
- publish-package:
94
- if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
95
- permissions:
96
- contents: write
97
- packages: write
98
- id-token: write
99
- uses: CLDMV/.github/.github/workflows/workflow-publish.yml@v4
100
- with:
101
- package_name: "@cldmv/gh-broker" # Required: replace with your NPM package name
102
- debug: ${{ github.event.inputs.debug == 'true' }}
103
- dry_run: ${{ github.event.inputs.dry_run == 'true' }}
104
- node_version: ${{ github.event.inputs.node_version || 'lts/*' }}
105
- package_manager: ${{ github.event.inputs.package_manager || 'npm' }}
106
- version: ${{ github.event.inputs.version || '' }}
107
- publish_to_npm: ${{ github.event.inputs.publish_to_npm != 'false' }}
108
- publish_to_github_packages: ${{ github.event.inputs.publish_to_github_packages != 'false' }}
109
- publish_command: ""
110
- github_packages_publish_command: ""
111
- min_node_version: ${{ github.event.inputs.min_node_version || '22.12.0' }}
112
- max_node_major: ${{ github.event.inputs.max_node_major || '' }} # blank ⇒ inherit the CLDMV/.github reusable default
113
- test_command: "npm test" # Use defaults: NODE_ENV=development, NODE_OPTIONS=--conditions=development
114
- # test_command: "NODE_OPTIONS='--conditions=slothlet-dev' npm test" # Override NODE_OPTIONS only
115
- # test_command: "NODE_ENV=test npm test" # Override NODE_ENV only
116
- # test_command: "NODE_ENV=test NODE_OPTIONS='--conditions=slothlet-dev' npm test" # Override both
117
- test_environment: ${{ github.event.inputs.test_environment || 'development' }} # Alternative to setting in test_command
118
- build_command: "npm run build:ci"
119
- # --- Satellite packages (optional) ----------------------------------------
120
- # Publish extra packages carved from this build's output (e.g. locale JSON,
121
- # generated types) at the SAME version/commit as the core, each with its own
122
- # @scope/name@version tag + GitHub Release. Uncomment to opt in.
123
- # extra_packages: a JSON [{ name, dir }] array, OR a glob (single '*' in the
124
- # final path segment, e.g. "dist-packages/*"). Empty = disabled.
125
- # build_subpackages_command: runs after build_command to produce
126
- # dist-packages/<name>/ — omit if build_command already does the carve.
127
- # First publish of each new @scope/name needs a one-time token publish +
128
- # trusted-publisher setup. Full details + the contract:
129
- # docs/conventions/satellite-packages.md
130
- # extra_packages: "dist-packages/*"
131
- # build_subpackages_command: "npm run build:subpackages"
132
- # --------------------------------------------------------------------------
133
- is_prerelease: false
134
- release_source_only: false
135
- create_documentation: true
136
- skip_performance_tests: false
137
- skip_matrix_tests: false
138
- use_gpg: ${{ github.event.inputs.use_gpg == 'true' }}
139
- secrets:
140
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
141
- BOT_APP_CLIENT_ID: ${{ secrets.CLDMV_BOT_APP_CLIENT_ID }}
142
- BOT_APP_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_APP_PRIVATE_KEY }}
143
- TAGGER_NAME: ${{ secrets.CLDMV_BOT_NAME }}
144
- TAGGER_EMAIL: ${{ secrets.CLDMV_BOT_EMAIL }}
145
- GPG_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_GPG_PRIVATE_KEY }}
146
- GPG_PASSPHRASE: ${{ secrets.CLDMV_BOT_GPG_PASSPHRASE }}
@@ -1,104 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/release-merge.yml
4
- # @Date: 2026-09-29T02:39:40+00:00 (1790649580)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/release-merge.yml
15
- #
16
- # v4 core (optional): squash-merge the persistent `next → master` release PR on
17
- # YOUR APPROVAL, via the REST merge API with the PR body as the commit message.
18
- #
19
- # Why not just click "Squash and merge"? The mobile Default path can land a
20
- # title-only commit (dropping the curated changelog + coverage), and the web/
21
- # mobile squash UI auto-appends its own `Co-authored-by:` list (not deduped, not
22
- # bot-stripped). An explicit-message API merge avoids both — the release commit
23
- # is exactly the curated PR body. It also merges only once EVERY check (required
24
- # AND non-required, e.g. the coverage badge and the release-PR body refresh) has
25
- # finished and passed, so the body it captures is never stale.
26
- #
27
- # How you use it: approve the release PR as you normally do. The merge fires when
28
- # CI is green — if you approve before CI finishes, it re-evaluates once CI
29
- # actually finishes and merges once the last check passes. Nothing auto-merges
30
- # without your approval.
31
- #
32
- # Re-evaluation uses `workflow_run`, not `check_suite` — GitHub does not send
33
- # `check_suite: completed` for a suite created by GitHub Actions itself, which
34
- # is every check your own ci.yml produces; it only fires for a suite created
35
- # by a third-party App. See CLDMV/.github#318: an approval given before CI
36
- # finished left a release PR stuck fully green with nothing re-firing the
37
- # merge check, because check_suite silently never fired for that case at all.
38
- # `workflow_run` is GitHub's documented replacement for exactly this pattern.
39
- #
40
- # IMPORTANT: the merge gate waits on EVERY check-run on the release PR's head
41
- # commit, from any workflow — so `workflows:` below must name every workflow in
42
- # your repo that puts a check on that commit, not just ci.yml. Only the one that
43
- # finishes LAST can see a fully green head; if it isn't listed, nothing re-fires
44
- # and the PR sits approved + green until you dispatch this workflow by hand.
45
- # CodeQL in particular routinely outlasts ci.yml (CLDMV/.github PR #322 stuck
46
- # exactly this way). The list below covers the standard v4 template set by their
47
- # template `name:`s — names are matched literally (not by filename), so fix any
48
- # you renamed, and add any extra PR-triggered workflow your repo has. Listing a
49
- # workflow your repo doesn't have is harmless. `branches:` limits re-fires to
50
- # runs on the integration branches, so feature-branch CI doesn't wake this up.
51
- #
52
- # Thin caller: all logic lives in the reusable, pinned at @v4.
53
- # NOTE: pull_request_review / workflow_run events run the copy of this file on
54
- # the DEFAULT branch, so it takes effect once it ships to master with a release.
55
- name: 🚦 Release Merge (v4)
56
-
57
- on:
58
- pull_request_review:
59
- types: [submitted] # your approval arms it
60
- workflow_run: # re-evaluate as each check-producing workflow finishes — see #318
61
- workflows: # ← must match your workflows' `name:`s — see IMPORTANT above
62
- - "🧪 CI Tests & Build"
63
- - "🔍 CodeQL"
64
- - "🔒 Dependency Review"
65
- - "📊 Bundle Size"
66
- - "🚀 Next Release (v4)"
67
- - "🚑 Hotfixes Release (v4)"
68
- - "🌿 Branch Retention"
69
- - "🏷️ PR Labeler"
70
- - "🏷️ PR Title Normalizer"
71
- - "👋 Welcome Contributor"
72
- - "🔀 Hotfix PR Redirector (v4)"
73
- - "🚀 Member Auto-Enable Auto-Merge"
74
- - "🤖 Dependabot Auto-Merge"
75
- - "🔁 Dependabot Auto-Recreate"
76
- - "📜 CLA"
77
- - "📥 PR Notify"
78
- types: [completed]
79
- branches: [next, hotfixes]
80
- workflow_dispatch: # manual re-evaluation
81
-
82
- # Serialize per repo: each run re-resolves the release PR + re-gates the head,
83
- # so queue (don't cancel) to avoid racing a merge that's already in flight.
84
- # GitHub keeps one pending run per group and a newer arrival replaces it — that
85
- # is harmless, since every run re-reads approval + check state from the API.
86
- concurrency:
87
- group: release-merge-${{ github.repository }}
88
- cancel-in-progress: false
89
-
90
- permissions:
91
- contents: read
92
-
93
- jobs:
94
- merge:
95
- permissions:
96
- contents: write
97
- pull-requests: write
98
- checks: read
99
- statuses: read
100
- uses: CLDMV/.github/.github/workflows/workflow-release-merge.yml@v4
101
- secrets:
102
- # Map your repo/org secrets to the expected names.
103
- BOT_APP_CLIENT_ID: ${{ secrets.CLDMV_BOT_APP_CLIENT_ID }}
104
- BOT_APP_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_APP_PRIVATE_KEY }}
@@ -1,41 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/release-notify.yml
4
- # @Date: 2026-07-19T00:00:00-07:00 (1784444400)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/release-notify.yml
15
- #
16
- # Fires on `release: published` and dispatches the release announcement to
17
- # any enabled webhook. No config file — each channel is just a secret:
18
- #
19
- # DISCORD_RELEASES_PUBLIC_WEBHOOK / DISCORD_RELEASES_PRIVATE_WEBHOOK
20
- # SLACK_RELEASES_PUBLIC_WEBHOOK / SLACK_RELEASES_PRIVATE_WEBHOOK
21
- # GENERIC_RELEASES_PUBLIC_WEBHOOK / GENERIC_RELEASES_PRIVATE_WEBHOOK
22
- #
23
- # Visibility is determined automatically from the repo: GitHub `public` →
24
- # PUBLIC, `private` or `internal` → PRIVATE. Set the org-level secret in
25
- # CLDMV for the default URL; set a repo-level secret with the same name to
26
- # override (or to an empty string to mute that channel for this repo).
27
- name: 📣 Release Notify
28
-
29
- on:
30
- release:
31
- types: [published]
32
-
33
- permissions:
34
- contents: read
35
-
36
- jobs:
37
- notify:
38
- # Defensive: skip untagged releases (mirrors Batch 1.2's filter)
39
- if: github.event.release.tag_name != ''
40
- uses: CLDMV/.github/.github/workflows/reusable-release-notifier.yml@v4
41
- secrets: inherit
@@ -1,64 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/scorecard.yml
4
- # @Date: 2026-05-31T00:00:00-07:00 (1780210800)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/scorecard.yml
15
- #
16
- # OpenSSF Scorecard — scans the repo against ~18 security best-practice checks
17
- # and produces a 0-10 score. Thin caller: the steps and the SHA-pinned
18
- # scorecard-action version live in reusable-scorecard.yml@v4, so the action
19
- # version can't drift in this copy (it just calls the org reusable). Triggers
20
- # stay here, per OpenSSF's recommended setup.
21
- name: 🔬 OpenSSF Scorecard
22
-
23
- on:
24
- branch_protection_rule:
25
- schedule:
26
- - cron: "32 7 * * 1" # weekly Monday 07:32 UTC
27
- push:
28
- branches: [master, main]
29
- workflow_dispatch:
30
-
31
- # Caller must grant what the reusable needs — notably id-token: write for the
32
- # OpenSSF transparency-log publish.
33
- #
34
- # Keep the workflow-level grant READ-ONLY (contents: read) and grant every
35
- # WRITE on the `analyze` job instead. scorecard-action's publish step verifies that write permissions
36
- # were granted JOB-scoped, not workflow-wide (matching OSSF's own example:
37
- # https://github.com/ossf/scorecard-action#example-workflow). A workflow-level
38
- # grant satisfies GitHub's own reusable-workflow permission rules fine, but
39
- # still trips scorecard-action's own check — the rejection ("workflow
40
- # verification failed: global perm is set to write: permission for X is set
41
- # to write") means "granted globally," not "forbidden."
42
- #
43
- # Do NOT add security-events: write here while publish_results: true below.
44
- # scorecard-action's publish step rejects submissions from a workflow whose
45
- # token has security-events write access (it verifies the caller can't have
46
- # tampered with results before they hit the public transparency log). That
47
- # trade-off means the reusable's own SARIF-to-Security-tab upload step has no
48
- # permission to run in this configuration; the public OpenSSF badge is the
49
- # thing this default enables, so consumers take that trade-off by default.
50
- # Only add security-events: write back (job-scoped) if publish_results is set
51
- # to false instead (SARIF-to-Security-tab upload, no public badge).
52
-
53
- permissions:
54
- contents: read
55
-
56
- jobs:
57
- analyze:
58
- permissions:
59
- id-token: write
60
- contents: read
61
- actions: read
62
- uses: CLDMV/.github/.github/workflows/reusable-scorecard.yml@v4
63
- with:
64
- publish_results: true # set false to skip the public badge in favor of SARIF-to-Security-tab. Private repos need not bother: every scorecard job auto-skips there (OpenSSF cannot publish private repos, so the run would only burn paid minutes).
@@ -1,50 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/stale.yml
4
- # @Date: 2026-05-20T00:00:00-07:00 (1779260400)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/stale.yml
15
- #
16
- # First-run guidance: on a repo with an existing backlog, the first
17
- # scheduled run can mark a LOT of issues stale at once (notification storm).
18
- # Recommended: enable with `dry_run: true` first, dispatch manually to
19
- # preview, then flip to live. The dispatch input below makes this easy.
20
- #
21
- # Batch 2.3 from tmp/plan-future-workflows.md.
22
- name: 🍂 Stale Issues & PRs
23
-
24
- on:
25
- schedule:
26
- - cron: "13 5 * * *" # daily 05:13 UTC (off-the-hour to avoid GH cron stampede)
27
- workflow_dispatch:
28
- inputs:
29
- dry_run:
30
- description: "Preview only — no changes will be made"
31
- type: boolean
32
- default: false
33
-
34
- permissions:
35
- issues: write
36
- pull-requests: write
37
-
38
- jobs:
39
- sweep:
40
- uses: CLDMV/.github/.github/workflows/reusable-stale.yml@v4
41
- with:
42
- dry_run: ${{ github.event.inputs.dry_run == 'true' }}
43
- # Override timers if needed:
44
- # days_before_issue_stale: 60
45
- # days_before_issue_close: 14
46
- # days_before_pr_stale: 30
47
- # days_before_pr_close: 7
48
- secrets:
49
- BOT_APP_CLIENT_ID: ${{ secrets.CLDMV_BOT_APP_CLIENT_ID }}
50
- BOT_APP_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_APP_PRIVATE_KEY }}
@@ -1,70 +0,0 @@
1
- #
2
- # @Project: @cldmv/gh-broker
3
- # @Filename: /.github/workflows/tag-health.yml
4
- # @Date: 2026-05-20T00:00:00-07:00 (1779260400)
5
- # @Author: Nate Corcoran <CLDMV>
6
- # @Email: <Shinrai@users.noreply.github.com>
7
- # -----
8
- # @Last modified by: Nate Corcoran <CLDMV> (Shinrai@users.noreply.github.com)
9
- # @Last modified time: 2026-10-02T11:30:57-07:00 (1790965857)
10
- # -----
11
- # @Copyright: Copyright (c) 2013-2026 Catalyzed Motivation Inc. All rights reserved.
12
- #
13
-
14
- # Individual repo: .github/workflows/tag-health.yml
15
- #
16
- # Wakes the reusable-tag-health.yml workflow on a weekly schedule. The
17
- # reusable already implements validation, bot-signature fixes, unsigned-tag
18
- # fixes, orphaned-release recovery, orphaned-tag relocation, and rolling
19
- # major/minor tag maintenance — but it's dormant by default. This template
20
- # is what triggers it.
21
- #
22
- # Batch 3.1 from tmp/plan-future-workflows.md.
23
- name: 🏥 Tag Health
24
-
25
- on:
26
- schedule:
27
- # Weekly Sunday 04:04 UTC. Off-the-hour to dodge the GitHub :00-cron
28
- # stampede; weekly cadence because tag drift accumulates slowly.
29
- - cron: "4 4 * * 0"
30
- workflow_dispatch:
31
- inputs:
32
- debug:
33
- description: "Enable debug logging for troubleshooting"
34
- type: boolean
35
- required: false
36
- default: false
37
- create_documentation:
38
- description: "Update VERSION_TAGS.md if rolling tags moved"
39
- type: boolean
40
- required: false
41
- default: false
42
- use_gpg:
43
- description: "Enable GPG signing for any tags the sweep creates/recreates"
44
- type: boolean
45
- required: false
46
- default: true
47
-
48
- permissions:
49
- contents: read
50
-
51
- jobs:
52
- health:
53
- permissions:
54
- contents: write
55
- uses: CLDMV/.github/.github/workflows/reusable-tag-health.yml@v4
56
- with:
57
- debug: ${{ github.event.inputs.debug == 'true' }}
58
- # Full unified sweep: validates, fixes bot signatures, fixes
59
- # unsigned tags, recovers orphaned releases, relocates orphaned
60
- # tags, and updates rolling major/minor refs.
61
- run_unified_tag_health: true
62
- create_documentation: ${{ github.event.inputs.create_documentation == 'true' }}
63
- use_gpg: ${{ github.event.inputs.use_gpg != 'false' }}
64
- secrets:
65
- BOT_APP_CLIENT_ID: ${{ secrets.CLDMV_BOT_APP_CLIENT_ID }}
66
- BOT_APP_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_APP_PRIVATE_KEY }}
67
- TAGGER_NAME: ${{ secrets.CLDMV_BOT_NAME }}
68
- TAGGER_EMAIL: ${{ secrets.CLDMV_BOT_EMAIL }}
69
- GPG_PRIVATE_KEY: ${{ secrets.CLDMV_BOT_GPG_PRIVATE_KEY }}
70
- GPG_PASSPHRASE: ${{ secrets.CLDMV_BOT_GPG_PASSPHRASE }}