git 4.3.2 → 5.0.0.beta.1
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.
- checksums.yaml +4 -4
- data/.github/copilot-instructions.md +67 -2705
- data/.github/pull_request_template.md +3 -1
- data/.github/skills/breaking-change-analysis/SKILL.md +102 -0
- data/.github/skills/ci-cd-troubleshooting/SKILL.md +264 -0
- data/.github/skills/command-implementation/REFERENCE.md +993 -0
- data/.github/skills/command-implementation/SKILL.md +229 -0
- data/.github/skills/command-test-conventions/SKILL.md +660 -0
- data/.github/skills/command-yard-documentation/SKILL.md +426 -0
- data/.github/skills/dependency-management/SKILL.md +72 -0
- data/.github/skills/development-workflow/SKILL.md +506 -0
- data/.github/skills/extract-command-from-lib/SKILL.md +487 -0
- data/.github/skills/extract-facade-from-base-lib/SKILL.md +586 -0
- data/.github/skills/facade-implementation/REFERENCE.md +840 -0
- data/.github/skills/facade-implementation/SKILL.md +260 -0
- data/.github/skills/facade-test-conventions/SKILL.md +380 -0
- data/.github/skills/facade-yard-documentation/SKILL.md +429 -0
- data/.github/skills/make-skill-template/SKILL.md +176 -0
- data/.github/skills/pr-readiness-review/SKILL.md +185 -0
- data/.github/skills/project-context/SKILL.md +313 -0
- data/.github/skills/pull-request-review/SKILL.md +168 -0
- data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +131 -0
- data/.github/skills/release-management/SKILL.md +125 -0
- data/.github/skills/review-arguments-dsl/CHECKLIST.md +788 -0
- data/.github/skills/review-arguments-dsl/SKILL.md +214 -0
- data/.github/skills/review-backward-compatibility/SKILL.md +275 -0
- data/.github/skills/review-cross-command-consistency/SKILL.md +139 -0
- data/.github/skills/reviewing-skills/SKILL.md +189 -0
- data/.github/skills/rspec-unit-testing-standards/SKILL.md +639 -0
- data/.github/skills/tdd-refactor-step/SKILL.md +236 -0
- data/.github/skills/test-debugging/SKILL.md +160 -0
- data/.github/skills/yard-documentation/SKILL.md +793 -0
- data/.github/workflows/continuous_integration.yml +3 -2
- data/.github/workflows/enforce_conventional_commits.yml +1 -1
- data/.github/workflows/experimental_continuous_integration.yml +2 -2
- data/.github/workflows/release.yml +3 -4
- data/.gitignore +8 -0
- data/.husky/pre-commit +13 -0
- data/.release-please-manifest.json +1 -1
- data/.rspec +3 -0
- data/.rubocop.yml +7 -3
- data/.rubocop_todo.yml +23 -5
- data/.yardopts +1 -0
- data/CHANGELOG.md +0 -40
- data/CONTRIBUTING.md +694 -53
- data/README.md +17 -5
- data/Rakefile +61 -9
- data/commitlint.test +4 -0
- data/git.gemspec +14 -8
- data/lib/git/args_builder.rb +0 -8
- data/lib/git/base.rb +486 -410
- data/lib/git/branch.rb +380 -43
- data/lib/git/branch_delete_failure.rb +31 -0
- data/lib/git/branch_delete_result.rb +63 -0
- data/lib/git/branch_info.rb +178 -0
- data/lib/git/branches.rb +130 -24
- data/lib/git/command_line/base.rb +245 -0
- data/lib/git/command_line/capturing.rb +249 -0
- data/lib/git/command_line/result.rb +96 -0
- data/lib/git/command_line/streaming.rb +194 -0
- data/lib/git/command_line.rb +43 -322
- data/lib/git/command_line_result.rb +4 -88
- data/lib/git/commands/add.rb +131 -0
- data/lib/git/commands/am/abort.rb +43 -0
- data/lib/git/commands/am/apply.rb +252 -0
- data/lib/git/commands/am/continue.rb +43 -0
- data/lib/git/commands/am/quit.rb +43 -0
- data/lib/git/commands/am/retry.rb +47 -0
- data/lib/git/commands/am/show_current_patch.rb +64 -0
- data/lib/git/commands/am/skip.rb +42 -0
- data/lib/git/commands/am.rb +33 -0
- data/lib/git/commands/apply.rb +237 -0
- data/lib/git/commands/archive/list_formats.rb +46 -0
- data/lib/git/commands/archive.rb +140 -0
- data/lib/git/commands/arguments.rb +3510 -0
- data/lib/git/commands/base.rb +403 -0
- data/lib/git/commands/branch/copy.rb +94 -0
- data/lib/git/commands/branch/create.rb +173 -0
- data/lib/git/commands/branch/delete.rb +80 -0
- data/lib/git/commands/branch/list.rb +162 -0
- data/lib/git/commands/branch/move.rb +94 -0
- data/lib/git/commands/branch/set_upstream.rb +86 -0
- data/lib/git/commands/branch/show_current.rb +49 -0
- data/lib/git/commands/branch/unset_upstream.rb +57 -0
- data/lib/git/commands/branch.rb +34 -0
- data/lib/git/commands/cat_file/batch.rb +364 -0
- data/lib/git/commands/cat_file/filtered.rb +105 -0
- data/lib/git/commands/cat_file/raw.rb +210 -0
- data/lib/git/commands/cat_file.rb +49 -0
- data/lib/git/commands/checkout/branch.rb +151 -0
- data/lib/git/commands/checkout/files.rb +115 -0
- data/lib/git/commands/checkout.rb +38 -0
- data/lib/git/commands/checkout_index.rb +105 -0
- data/lib/git/commands/clean.rb +100 -0
- data/lib/git/commands/clone.rb +240 -0
- data/lib/git/commands/commit.rb +272 -0
- data/lib/git/commands/commit_tree.rb +100 -0
- data/lib/git/commands/config_option_syntax/add.rb +83 -0
- data/lib/git/commands/config_option_syntax/get.rb +117 -0
- data/lib/git/commands/config_option_syntax/get_all.rb +115 -0
- data/lib/git/commands/config_option_syntax/get_color.rb +91 -0
- data/lib/git/commands/config_option_syntax/get_color_bool.rb +93 -0
- data/lib/git/commands/config_option_syntax/get_regexp.rb +115 -0
- data/lib/git/commands/config_option_syntax/get_urlmatch.rb +102 -0
- data/lib/git/commands/config_option_syntax/list.rb +107 -0
- data/lib/git/commands/config_option_syntax/remove_section.rb +74 -0
- data/lib/git/commands/config_option_syntax/rename_section.rb +78 -0
- data/lib/git/commands/config_option_syntax/replace_all.rb +104 -0
- data/lib/git/commands/config_option_syntax/set.rb +114 -0
- data/lib/git/commands/config_option_syntax/unset.rb +89 -0
- data/lib/git/commands/config_option_syntax/unset_all.rb +89 -0
- data/lib/git/commands/config_option_syntax.rb +56 -0
- data/lib/git/commands/describe.rb +155 -0
- data/lib/git/commands/diff.rb +656 -0
- data/lib/git/commands/diff_files.rb +518 -0
- data/lib/git/commands/diff_index.rb +496 -0
- data/lib/git/commands/fetch.rb +352 -0
- data/lib/git/commands/fsck.rb +136 -0
- data/lib/git/commands/gc.rb +132 -0
- data/lib/git/commands/grep.rb +338 -0
- data/lib/git/commands/init.rb +99 -0
- data/lib/git/commands/log.rb +632 -0
- data/lib/git/commands/ls_files.rb +191 -0
- data/lib/git/commands/ls_remote.rb +155 -0
- data/lib/git/commands/ls_tree.rb +131 -0
- data/lib/git/commands/maintenance/register.rb +75 -0
- data/lib/git/commands/maintenance/run.rb +104 -0
- data/lib/git/commands/maintenance/start.rb +66 -0
- data/lib/git/commands/maintenance/stop.rb +55 -0
- data/lib/git/commands/maintenance/unregister.rb +79 -0
- data/lib/git/commands/maintenance.rb +31 -0
- data/lib/git/commands/merge/abort.rb +44 -0
- data/lib/git/commands/merge/continue.rb +44 -0
- data/lib/git/commands/merge/quit.rb +46 -0
- data/lib/git/commands/merge/start.rb +245 -0
- data/lib/git/commands/merge.rb +28 -0
- data/lib/git/commands/merge_base.rb +86 -0
- data/lib/git/commands/mv.rb +77 -0
- data/lib/git/commands/name_rev.rb +114 -0
- data/lib/git/commands/pull.rb +377 -0
- data/lib/git/commands/push.rb +246 -0
- data/lib/git/commands/read_tree.rb +149 -0
- data/lib/git/commands/remote/add.rb +91 -0
- data/lib/git/commands/remote/get_url.rb +66 -0
- data/lib/git/commands/remote/list.rb +54 -0
- data/lib/git/commands/remote/prune.rb +61 -0
- data/lib/git/commands/remote/remove.rb +52 -0
- data/lib/git/commands/remote/rename.rb +69 -0
- data/lib/git/commands/remote/set_branches.rb +63 -0
- data/lib/git/commands/remote/set_head.rb +82 -0
- data/lib/git/commands/remote/set_url.rb +71 -0
- data/lib/git/commands/remote/set_url_add.rb +61 -0
- data/lib/git/commands/remote/set_url_delete.rb +64 -0
- data/lib/git/commands/remote/show.rb +71 -0
- data/lib/git/commands/remote/update.rb +72 -0
- data/lib/git/commands/remote.rb +42 -0
- data/lib/git/commands/repack.rb +277 -0
- data/lib/git/commands/reset.rb +147 -0
- data/lib/git/commands/rev_parse.rb +297 -0
- data/lib/git/commands/revert/abort.rb +45 -0
- data/lib/git/commands/revert/continue.rb +57 -0
- data/lib/git/commands/revert/quit.rb +47 -0
- data/lib/git/commands/revert/skip.rb +44 -0
- data/lib/git/commands/revert/start.rb +153 -0
- data/lib/git/commands/revert.rb +29 -0
- data/lib/git/commands/rm.rb +114 -0
- data/lib/git/commands/show.rb +632 -0
- data/lib/git/commands/show_ref/exclude_existing.rb +120 -0
- data/lib/git/commands/show_ref/exists.rb +78 -0
- data/lib/git/commands/show_ref/list.rb +145 -0
- data/lib/git/commands/show_ref/verify.rb +120 -0
- data/lib/git/commands/show_ref.rb +42 -0
- data/lib/git/commands/stash/apply.rb +75 -0
- data/lib/git/commands/stash/branch.rb +65 -0
- data/lib/git/commands/stash/clear.rb +41 -0
- data/lib/git/commands/stash/create.rb +58 -0
- data/lib/git/commands/stash/drop.rb +67 -0
- data/lib/git/commands/stash/list.rb +39 -0
- data/lib/git/commands/stash/pop.rb +78 -0
- data/lib/git/commands/stash/push.rb +103 -0
- data/lib/git/commands/stash/show.rb +149 -0
- data/lib/git/commands/stash/store.rb +63 -0
- data/lib/git/commands/stash.rb +38 -0
- data/lib/git/commands/status.rb +169 -0
- data/lib/git/commands/symbolic_ref/delete.rb +68 -0
- data/lib/git/commands/symbolic_ref/read.rb +95 -0
- data/lib/git/commands/symbolic_ref/update.rb +76 -0
- data/lib/git/commands/symbolic_ref.rb +38 -0
- data/lib/git/commands/tag/create.rb +139 -0
- data/lib/git/commands/tag/delete.rb +55 -0
- data/lib/git/commands/tag/list.rb +143 -0
- data/lib/git/commands/tag/verify.rb +71 -0
- data/lib/git/commands/tag.rb +26 -0
- data/lib/git/commands/update_ref/batch.rb +140 -0
- data/lib/git/commands/update_ref/delete.rb +92 -0
- data/lib/git/commands/update_ref/update.rb +106 -0
- data/lib/git/commands/update_ref.rb +42 -0
- data/lib/git/commands/version.rb +52 -0
- data/lib/git/commands/worktree/add.rb +140 -0
- data/lib/git/commands/worktree/list.rb +64 -0
- data/lib/git/commands/worktree/lock.rb +58 -0
- data/lib/git/commands/worktree/management_base.rb +51 -0
- data/lib/git/commands/worktree/move.rb +66 -0
- data/lib/git/commands/worktree/prune.rb +67 -0
- data/lib/git/commands/worktree/remove.rb +63 -0
- data/lib/git/commands/worktree/repair.rb +76 -0
- data/lib/git/commands/worktree/unlock.rb +47 -0
- data/lib/git/commands/worktree.rb +43 -0
- data/lib/git/commands/write_tree.rb +68 -0
- data/lib/git/commands.rb +89 -0
- data/lib/git/detached_head_info.rb +54 -0
- data/lib/git/diff.rb +297 -7
- data/lib/git/diff_file_numstat_info.rb +29 -0
- data/lib/git/diff_file_patch_info.rb +134 -0
- data/lib/git/diff_file_raw_info.rb +127 -0
- data/lib/git/diff_info.rb +169 -0
- data/lib/git/diff_path_status.rb +78 -19
- data/lib/git/diff_result.rb +32 -0
- data/lib/git/diff_stats.rb +59 -14
- data/lib/git/dirstat_info.rb +86 -0
- data/lib/git/errors.rb +65 -2
- data/lib/git/execution_context/global.rb +56 -0
- data/lib/git/execution_context/repository.rb +147 -0
- data/lib/git/execution_context.rb +482 -0
- data/lib/git/file_ref.rb +74 -0
- data/lib/git/fsck_object.rb +9 -9
- data/lib/git/fsck_result.rb +1 -1
- data/lib/git/lib.rb +1606 -1028
- data/lib/git/log.rb +15 -2
- data/lib/git/object.rb +92 -22
- data/lib/git/parsers/branch.rb +224 -0
- data/lib/git/parsers/cat_file.rb +111 -0
- data/lib/git/parsers/diff.rb +585 -0
- data/lib/git/parsers/fsck.rb +133 -0
- data/lib/git/parsers/grep.rb +42 -0
- data/lib/git/parsers/ls_tree.rb +58 -0
- data/lib/git/parsers/stash.rb +208 -0
- data/lib/git/parsers/tag.rb +257 -0
- data/lib/git/remote.rb +133 -9
- data/lib/git/repository/branching.rb +572 -0
- data/lib/git/repository/committing.rb +191 -0
- data/lib/git/repository/configuring.rb +156 -0
- data/lib/git/repository/diffing.rb +775 -0
- data/lib/git/repository/inspecting.rb +153 -0
- data/lib/git/repository/logging.rb +247 -0
- data/lib/git/repository/merging.rb +295 -0
- data/lib/git/repository/object_operations.rb +1101 -0
- data/lib/git/repository/path_resolver.rb +207 -0
- data/lib/git/repository/remote_operations.rb +753 -0
- data/lib/git/repository/shared_private.rb +51 -0
- data/lib/git/repository/staging.rb +390 -0
- data/lib/git/repository/stashing.rb +107 -0
- data/lib/git/repository/status_operations.rb +180 -0
- data/lib/git/repository/worktree_operations.rb +159 -0
- data/lib/git/repository.rb +264 -1
- data/lib/git/stash.rb +85 -4
- data/lib/git/stash_info.rb +104 -0
- data/lib/git/stashes.rb +130 -13
- data/lib/git/status.rb +224 -18
- data/lib/git/tag_delete_failure.rb +31 -0
- data/lib/git/tag_delete_result.rb +63 -0
- data/lib/git/tag_info.rb +105 -0
- data/lib/git/version.rb +109 -2
- data/lib/git/version_constraint.rb +81 -0
- data/lib/git/worktree.rb +120 -5
- data/lib/git/worktrees.rb +107 -7
- data/lib/git.rb +114 -18
- data/redesign/1_architecture_existing.md +54 -18
- data/redesign/2_architecture_redesign.md +365 -46
- data/redesign/3_architecture_implementation.md +1451 -54
- data/tasks/gem_tasks.rake +4 -0
- data/tasks/npm_tasks.rake +7 -0
- data/tasks/rspec.rake +48 -0
- data/tasks/test.rake +13 -1
- data/tasks/yard.rake +34 -7
- metadata +349 -20
- data/lib/git/index.rb +0 -6
- data/lib/git/path.rb +0 -38
- data/lib/git/working_directory.rb +0 -6
- /data/{release-please-config.json → .release-please-config.json} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refactor-command-to-commandlineresult
|
|
3
|
+
description: "Migrates a command class that still performs parsing or custom execution logic to return raw Git::CommandLineResult, moving parsing to facade/parser layers. Use during architectural redesign refactoring."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Refactor Command to CommandLineResult
|
|
7
|
+
|
|
8
|
+
Migrate a command that still performs parsing or custom execution logic to the
|
|
9
|
+
`Git::Commands::Base` pattern, so command classes return raw
|
|
10
|
+
`Git::CommandLineResult` and parsing moves to facade/parser layers.
|
|
11
|
+
|
|
12
|
+
## Contents
|
|
13
|
+
|
|
14
|
+
- [How to use this skill](#how-to-use-this-skill)
|
|
15
|
+
- [Prerequisites](#prerequisites)
|
|
16
|
+
- [Related skills](#related-skills)
|
|
17
|
+
- [Target end state](#target-end-state)
|
|
18
|
+
- [Refactor steps](#refactor-steps)
|
|
19
|
+
- [What to remove from command classes](#what-to-remove-from-command-classes)
|
|
20
|
+
- [What to update in tests](#what-to-update-in-tests)
|
|
21
|
+
- [YARD updates](#yard-updates)
|
|
22
|
+
- [Migration process and internal compatibility](#migration-process-and-internal-compatibility)
|
|
23
|
+
|
|
24
|
+
## How to use this skill
|
|
25
|
+
|
|
26
|
+
Attach this file to your Copilot Chat context, then invoke it with the command
|
|
27
|
+
class or source file to migrate. Examples:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
Using the Refactor Command to CommandLineResult skill, migrate
|
|
31
|
+
Git::Commands::Stash::Pop to the Base pattern.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
Refactor Command to CommandLineResult: lib/git/commands/branch/delete.rb
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The invocation needs the command class name or file path of the command to
|
|
39
|
+
refactor.
|
|
40
|
+
|
|
41
|
+
## Prerequisites
|
|
42
|
+
|
|
43
|
+
Before starting, you **MUST** load the following skill(s) in their entirety:
|
|
44
|
+
|
|
45
|
+
- [YARD Documentation](../yard-documentation/SKILL.md) — authoritative
|
|
46
|
+
source for YARD formatting rules and writing standards;
|
|
47
|
+
|
|
48
|
+
## Related skills
|
|
49
|
+
|
|
50
|
+
- [Command Implementation](../command-implementation/SKILL.md) — canonical class-shape checklist, phased
|
|
51
|
+
rollout gates, and internal compatibility contracts
|
|
52
|
+
- [Review Arguments DSL](../review-arguments-dsl/SKILL.md) — verifying DSL entries match git CLI
|
|
53
|
+
- [Command Test Conventions](../command-test-conventions/SKILL.md) — unit/integration test conventions for command classes
|
|
54
|
+
- [Review Backward Compatibility](../review-backward-compatibility/SKILL.md) — preserving `Git::Lib` return-value contracts
|
|
55
|
+
|
|
56
|
+
## Target end state
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
class SomeCommand < Git::Commands::Base
|
|
60
|
+
arguments do
|
|
61
|
+
...
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# optional for non-zero successful exits
|
|
65
|
+
# rationale comment
|
|
66
|
+
# allow_exit_status 0..1
|
|
67
|
+
|
|
68
|
+
# @!method call(*, **)
|
|
69
|
+
#
|
|
70
|
+
# @overload call(**options)
|
|
71
|
+
#
|
|
72
|
+
# Execute the git ... command.
|
|
73
|
+
#
|
|
74
|
+
# @return [Git::CommandLineResult]
|
|
75
|
+
end
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Refactor steps
|
|
79
|
+
|
|
80
|
+
1. Move parsing/transforming logic out of command class into caller/facade/parser.
|
|
81
|
+
2. Replace legacy `ARGS` constant + custom `initialize` with `arguments do` +
|
|
82
|
+
inheritance from `Base`.
|
|
83
|
+
3. Remove custom `#call` body and add `# @!method call(*, **)` YARD directive.
|
|
84
|
+
4. If command requires non-default success exits, add `allow_exit_status` with
|
|
85
|
+
rationale comment.
|
|
86
|
+
5. Update callers to consume `CommandLineResult` and parse `result.stdout` where
|
|
87
|
+
needed.
|
|
88
|
+
|
|
89
|
+
## What to remove from command classes
|
|
90
|
+
|
|
91
|
+
- parser invocations
|
|
92
|
+
- output transformation logic
|
|
93
|
+
- `literal` entries for policy/output-control flags (e.g. `literal '--no-edit'`,
|
|
94
|
+
`literal '--verbose'`, `literal '--no-progress'`, `literal '--no-color'`) —
|
|
95
|
+
command classes are neutral, faithful representations of the git CLI; convert to
|
|
96
|
+
`flag_option` / `value_option` so the facade can pass the policy value. See
|
|
97
|
+
"Command-layer neutrality" in CONTRIBUTING.md.
|
|
98
|
+
- manual `raise_on_failure` / manual exit-code checks (unless temporarily needed in
|
|
99
|
+
an unmigrated class)
|
|
100
|
+
- duplicated bind/execute logic
|
|
101
|
+
|
|
102
|
+
## What to update in tests
|
|
103
|
+
|
|
104
|
+
- unit specs should assert CLI args and `CommandLineResult` behavior
|
|
105
|
+
- remove parsed-object assertions from command unit specs
|
|
106
|
+
- move parsing expectations to parser/facade tests
|
|
107
|
+
- include `raise_on_failure: false` in mocked command expectations
|
|
108
|
+
|
|
109
|
+
## YARD updates
|
|
110
|
+
|
|
111
|
+
- update `@return` to `Git::CommandLineResult`
|
|
112
|
+
- keep command-specific `@overload` docs nested under `# @!method call(*, **)` directive
|
|
113
|
+
- ensure `@raise` wording reflects allowed range behavior
|
|
114
|
+
- tag short descriptions must not end with punctuation (no trailing period, comma,
|
|
115
|
+
or colon)
|
|
116
|
+
- multi-paragraph tag descriptions must have a blank comment line (`#`) between the
|
|
117
|
+
short description and each continuation paragraph
|
|
118
|
+
|
|
119
|
+
## Migration process and internal compatibility
|
|
120
|
+
|
|
121
|
+
See [Command Implementation](../command-implementation/SKILL.md) for the canonical phased rollout checklist
|
|
122
|
+
and internal compatibility contract. In summary:
|
|
123
|
+
|
|
124
|
+
- **always work on a feature branch** — never commit or push directly to `main`;
|
|
125
|
+
create a branch before starting (`git checkout -b <feature-branch-name>`) and
|
|
126
|
+
open a pull request when the slice is ready
|
|
127
|
+
- perform refactor in phased slices (pilot/family)
|
|
128
|
+
- keep each slice independently revertible
|
|
129
|
+
- do not mix unrelated behavior changes with refactor-only changes
|
|
130
|
+
- pass slice gates: `bundle exec rspec`, `bundle exec rake test`,
|
|
131
|
+
`bundle exec rubocop`, `bundle exec rake yard`
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release-management
|
|
3
|
+
description: "Prepares and publishes new releases of the ruby-git gem including version bumps, changelog updates, tagging, and gem publishing. Use when preparing a release or checking release readiness."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Release Management Workflow
|
|
7
|
+
|
|
8
|
+
This workflow describes how releases are managed for the ruby-git gem.
|
|
9
|
+
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [How to use this skill](#how-to-use-this-skill)
|
|
13
|
+
- [Related skills](#related-skills)
|
|
14
|
+
- [How Releases Work](#how-releases-work)
|
|
15
|
+
- [Developer Responsibilities](#developer-responsibilities)
|
|
16
|
+
- [Checking Release Readiness](#checking-release-readiness)
|
|
17
|
+
- [What NOT to Do](#what-not-to-do)
|
|
18
|
+
- [Useful Commands](#useful-commands)
|
|
19
|
+
|
|
20
|
+
## How to use this skill
|
|
21
|
+
|
|
22
|
+
Attach this file to your Copilot Chat context when preparing a release, verifying
|
|
23
|
+
release readiness, or answering questions about versioning and publishing flow.
|
|
24
|
+
|
|
25
|
+
## Related skills
|
|
26
|
+
|
|
27
|
+
- [Dependency Management](../dependency-management/SKILL.md) — dependency updates
|
|
28
|
+
that affect release content and risk
|
|
29
|
+
- [PR Readiness Review](../pr-readiness-review/SKILL.md) — ensure changes are
|
|
30
|
+
release-ready before merge
|
|
31
|
+
- [Breaking Change Analysis](../breaking-change-analysis/SKILL.md) — evaluate and
|
|
32
|
+
communicate major-version impact
|
|
33
|
+
|
|
34
|
+
## How Releases Work
|
|
35
|
+
|
|
36
|
+
Releases are **fully automated** via
|
|
37
|
+
[release-please](https://github.com/googleapis/release-please) and the
|
|
38
|
+
`.github/workflows/release.yml` workflow:
|
|
39
|
+
|
|
40
|
+
1. Developers merge PRs with **conventional commit** messages into `main`
|
|
41
|
+
2. release-please automatically opens (and keeps updated) a **release PR** that
|
|
42
|
+
bumps `lib/git/version.rb` and regenerates `CHANGELOG.md`
|
|
43
|
+
3. When a maintainer merges the release PR, release-please creates a **GitHub
|
|
44
|
+
release** with a tag
|
|
45
|
+
4. The workflow then **publishes the gem** to RubyGems.org via `rubygems/release-gem`
|
|
46
|
+
|
|
47
|
+
Key config files:
|
|
48
|
+
|
|
49
|
+
| File | Purpose |
|
|
50
|
+
| ---- | ------- |
|
|
51
|
+
| `.release-please-config.json` | Release-please settings (release type, changelog sections, versioning strategy) |
|
|
52
|
+
| `.release-please-manifest.json` | Tracks the current released version |
|
|
53
|
+
| `lib/git/version.rb` | Version constant (updated automatically by release-please) |
|
|
54
|
+
| `CHANGELOG.md` | Release history (updated automatically by release-please) |
|
|
55
|
+
|
|
56
|
+
The versioning strategy is `prerelease` with `beta` as the prerelease type. The
|
|
57
|
+
config also sets `bump-minor-pre-major: true` and `bump-patch-for-minor-pre-major: true`.
|
|
58
|
+
|
|
59
|
+
## Developer Responsibilities
|
|
60
|
+
|
|
61
|
+
The only thing developers need to do for releases is **use conventional commit
|
|
62
|
+
messages**. release-please determines the version bump from commit types:
|
|
63
|
+
|
|
64
|
+
- `fix:` → **patch** bump
|
|
65
|
+
- `feat:` → **minor** bump
|
|
66
|
+
- `feat!:` or `BREAKING CHANGE:` footer → **major** bump
|
|
67
|
+
|
|
68
|
+
Everything else (version bump, changelog, tag, gem push) is automated. Do **not**
|
|
69
|
+
manually edit `lib/git/version.rb` or `CHANGELOG.md`.
|
|
70
|
+
|
|
71
|
+
## Checking Release Readiness
|
|
72
|
+
|
|
73
|
+
Before a maintainer merges a release PR:
|
|
74
|
+
|
|
75
|
+
1. **Ensure CI passes on `main`:**
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
bundle exec rake default
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
2. **Review unreleased changes since last tag:**
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git log $(git describe --tags --abbrev=0)..HEAD --oneline
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
3. **Check for open blockers:**
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
gh issue list --label "bug" --state open
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
4. **Review the release PR** — verify the auto-generated changelog and version
|
|
94
|
+
bump look correct.
|
|
95
|
+
|
|
96
|
+
## What NOT to Do
|
|
97
|
+
|
|
98
|
+
- Do **not** manually bump `lib/git/version.rb` — release-please does this
|
|
99
|
+
- Do **not** manually edit `CHANGELOG.md` — it is auto-generated from commits
|
|
100
|
+
- Do **not** manually create tags — release-please creates them on merge
|
|
101
|
+
- Do **not** manually `gem push` — the workflow handles publishing
|
|
102
|
+
- Do **not** force-push or rebase the release PR — release-please manages it
|
|
103
|
+
|
|
104
|
+
## Useful Commands
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# View recent tags
|
|
108
|
+
git tag -l --sort=-v:refname | head -10
|
|
109
|
+
|
|
110
|
+
# List commits since last release
|
|
111
|
+
git log $(git describe --tags --abbrev=0)..HEAD --oneline
|
|
112
|
+
|
|
113
|
+
# Compare with previous release
|
|
114
|
+
git diff $(git describe --tags --abbrev=0)..HEAD
|
|
115
|
+
|
|
116
|
+
# Check current version
|
|
117
|
+
ruby -e "require_relative 'lib/git/version'; puts Git::VERSION"
|
|
118
|
+
|
|
119
|
+
# View release-please config
|
|
120
|
+
cat .release-please-config.json | jq .
|
|
121
|
+
|
|
122
|
+
# Build gem locally (for testing only)
|
|
123
|
+
bundle exec rake build
|
|
124
|
+
gem install pkg/git-*.gem
|
|
125
|
+
```
|