slipway 0.1.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 (124) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/CHANGELOG.md +45 -0
  4. data/LICENSE.txt +21 -0
  5. data/README.md +1013 -0
  6. data/exe/slipway +10 -0
  7. data/lib/slipway/cli/builtins.rb +241 -0
  8. data/lib/slipway/cli/completer.rb +158 -0
  9. data/lib/slipway/cli/completion_scripts.rb +163 -0
  10. data/lib/slipway/cli/context.rb +67 -0
  11. data/lib/slipway/cli/errors.rb +19 -0
  12. data/lib/slipway/cli/globals.rb +27 -0
  13. data/lib/slipway/cli/help_renderer.rb +135 -0
  14. data/lib/slipway/cli/manpage.rb +226 -0
  15. data/lib/slipway/cli/parser.rb +45 -0
  16. data/lib/slipway/cli/registry.rb +191 -0
  17. data/lib/slipway/cli/runner.rb +186 -0
  18. data/lib/slipway/cli/style.rb +82 -0
  19. data/lib/slipway/cli/theme.rb +85 -0
  20. data/lib/slipway/cli/validator.rb +61 -0
  21. data/lib/slipway/cli.rb +22 -0
  22. data/lib/slipway/command_line.rb +22 -0
  23. data/lib/slipway/commands/api_resources.rb +82 -0
  24. data/lib/slipway/commands/apply.rb +172 -0
  25. data/lib/slipway/commands/base.rb +50 -0
  26. data/lib/slipway/commands/config.rb +73 -0
  27. data/lib/slipway/commands/create.rb +218 -0
  28. data/lib/slipway/commands/delete.rb +82 -0
  29. data/lib/slipway/commands/describe.rb +74 -0
  30. data/lib/slipway/commands/diff.rb +122 -0
  31. data/lib/slipway/commands/edit.rb +130 -0
  32. data/lib/slipway/commands/explain.rb +97 -0
  33. data/lib/slipway/commands/fetch.rb +112 -0
  34. data/lib/slipway/commands/from_dir.rb +141 -0
  35. data/lib/slipway/commands/get.rb +167 -0
  36. data/lib/slipway/commands/label.rb +114 -0
  37. data/lib/slipway/commands/manual.rb +67 -0
  38. data/lib/slipway/commands/options.rb +73 -0
  39. data/lib/slipway/commands/results.rb +57 -0
  40. data/lib/slipway/commands/rollout.rb +114 -0
  41. data/lib/slipway/commands/rollout_spec.rb +99 -0
  42. data/lib/slipway/commands/rollout_undo.rb +126 -0
  43. data/lib/slipway/commands/scope.rb +156 -0
  44. data/lib/slipway/commands/sync.rb +140 -0
  45. data/lib/slipway/commands.rb +54 -0
  46. data/lib/slipway/drift.rb +87 -0
  47. data/lib/slipway/editor.rb +71 -0
  48. data/lib/slipway/error.rb +27 -0
  49. data/lib/slipway/fetcher.rb +99 -0
  50. data/lib/slipway/field_selector.rb +86 -0
  51. data/lib/slipway/git/branch_name.rb +32 -0
  52. data/lib/slipway/git/commit.rb +13 -0
  53. data/lib/slipway/git/distance.rb +13 -0
  54. data/lib/slipway/git/errors.rb +125 -0
  55. data/lib/slipway/git/fake.rb +147 -0
  56. data/lib/slipway/git/fast_forward.rb +12 -0
  57. data/lib/slipway/git/fast_forwarding.rb +148 -0
  58. data/lib/slipway/git/fetch_result.rb +22 -0
  59. data/lib/slipway/git/move_back.rb +12 -0
  60. data/lib/slipway/git/reflog.rb +25 -0
  61. data/lib/slipway/git/repository.rb +288 -0
  62. data/lib/slipway/git/rolling_back.rb +98 -0
  63. data/lib/slipway/git/runner.rb +175 -0
  64. data/lib/slipway/git/status.rb +110 -0
  65. data/lib/slipway/git/url.rb +95 -0
  66. data/lib/slipway/git.rb +20 -0
  67. data/lib/slipway/inspector.rb +103 -0
  68. data/lib/slipway/labels.rb +126 -0
  69. data/lib/slipway/manifest.rb +265 -0
  70. data/lib/slipway/names.rb +22 -0
  71. data/lib/slipway/outcome.rb +45 -0
  72. data/lib/slipway/output/age.rb +70 -0
  73. data/lib/slipway/output/describe.rb +71 -0
  74. data/lib/slipway/output/explain.rb +75 -0
  75. data/lib/slipway/output/serializer.rb +35 -0
  76. data/lib/slipway/output/table.rb +67 -0
  77. data/lib/slipway/output.rb +28 -0
  78. data/lib/slipway/paths.rb +65 -0
  79. data/lib/slipway/plan.rb +227 -0
  80. data/lib/slipway/pool.rb +94 -0
  81. data/lib/slipway/resources.rb +91 -0
  82. data/lib/slipway/rollback.rb +236 -0
  83. data/lib/slipway/rollout_history.rb +69 -0
  84. data/lib/slipway/runtime.rb +65 -0
  85. data/lib/slipway/scanner.rb +54 -0
  86. data/lib/slipway/schema.rb +128 -0
  87. data/lib/slipway/selector.rb +146 -0
  88. data/lib/slipway/settings.rb +174 -0
  89. data/lib/slipway/state.rb +82 -0
  90. data/lib/slipway/store.rb +170 -0
  91. data/lib/slipway/syncer.rb +139 -0
  92. data/lib/slipway/version.rb +5 -0
  93. data/lib/slipway/views/group.rb +35 -0
  94. data/lib/slipway/views/project.rb +148 -0
  95. data/lib/slipway/views.rb +10 -0
  96. data/lib/slipway/yaml.rb +14 -0
  97. data/lib/slipway.rb +32 -0
  98. data/man/man1/slipway-api-resources.1 +53 -0
  99. data/man/man1/slipway-apply.1 +45 -0
  100. data/man/man1/slipway-completion.1 +29 -0
  101. data/man/man1/slipway-config-path.1 +20 -0
  102. data/man/man1/slipway-config-view.1 +25 -0
  103. data/man/man1/slipway-config.1 +22 -0
  104. data/man/man1/slipway-create.1 +89 -0
  105. data/man/man1/slipway-delete.1 +46 -0
  106. data/man/man1/slipway-describe.1 +95 -0
  107. data/man/man1/slipway-diff.1 +120 -0
  108. data/man/man1/slipway-edit.1 +34 -0
  109. data/man/man1/slipway-explain.1 +36 -0
  110. data/man/man1/slipway-fetch.1 +77 -0
  111. data/man/man1/slipway-get.1 +155 -0
  112. data/man/man1/slipway-help.1 +19 -0
  113. data/man/man1/slipway-label.1 +53 -0
  114. data/man/man1/slipway-man.1 +36 -0
  115. data/man/man1/slipway-rollout-history.1 +28 -0
  116. data/man/man1/slipway-rollout-pause.1 +21 -0
  117. data/man/man1/slipway-rollout-resume.1 +21 -0
  118. data/man/man1/slipway-rollout-undo.1 +73 -0
  119. data/man/man1/slipway-rollout-unpin.1 +21 -0
  120. data/man/man1/slipway-rollout.1 +36 -0
  121. data/man/man1/slipway-sync.1 +90 -0
  122. data/man/man1/slipway-version.1 +17 -0
  123. data/man/man1/slipway.1 +243 -0
  124. metadata +173 -0
@@ -0,0 +1,46 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-DELETE" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-delete \- Delete resources by type and name
5
+ .SH SYNOPSIS
6
+ .SY "slipway delete"
7
+ .I "(TYPE NAME... | TYPE/NAME...)"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Delete resources by type and name.
12
+ .PP
13
+ Every name is resolved before anything is deleted, so a name that does not exist leaves the others untouched unless \-\-ignore\-not\-found is set. Deleting a group also deletes the registrations of its projects; the default group cannot be deleted.
14
+ .PP
15
+ Deleting a project removes its registration only. The repository on disk is not touched.
16
+ .PP
17
+ Resource types: projects (project, proj) and groups (group). Type words are case\-insensitive.
18
+ .SH OPTIONS
19
+ .TP
20
+ \fB\-\-dry\-run\fR
21
+ Print what would change and write nothing.
22
+ .TP
23
+ \fB\-\-ignore\-not\-found\fR
24
+ Treat "resource not found" as a successful delete.
25
+ .SH EXAMPLES
26
+ .EX
27
+ # Delete a project from the current group
28
+ slipway delete project hldr
29
+ .EE
30
+ .PP
31
+ .EX
32
+ # Delete two projects from the work group
33
+ slipway delete projects api web \-n work
34
+ .EE
35
+ .PP
36
+ .EX
37
+ # Delete a group and the registrations of its projects
38
+ slipway delete group work
39
+ .EE
40
+ .PP
41
+ .EX
42
+ # Delete a project if it exists, quietly otherwise
43
+ slipway delete project hldr \-\-ignore\-not\-found
44
+ .EE
45
+ .SH "SEE ALSO"
46
+ .BR slipway (1)
@@ -0,0 +1,95 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-DESCRIBE" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-describe \- Show details of one or many resources
5
+ .SH SYNOPSIS
6
+ .SY "slipway describe"
7
+ .I "(TYPE [NAME...] | TYPE/NAME...)"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Show details of one or many resources.
12
+ .PP
13
+ Print a detailed description of the selected resources, including the state of the repository at the registered path and where it differs from the manifest. You may select a single object by name, all objects of that type, or use a label or field selector.
14
+ .PP
15
+ Status is one of the words listed below. Last Fetch reads <never> when git answered and no fetch is on record, and a field with no value reads <none>. When git cannot read the repository, the Repository block holds git's reason instead of the fields.
16
+ .PP
17
+ Resource types: projects (project, proj) and groups (group). Type words are case\-insensitive.
18
+ .SH OPTIONS
19
+ .TP
20
+ \fB\-l\fR, \fB\-\-selector\fR \fIEXPR\fR
21
+ Selector (label query) to filter on, supports '=', '==', '!=', 'in', 'notin' (e.g. \-l key1=value1,key2=value2,key3 in (value3)). Matching objects must satisfy all of the specified label constraints.
22
+ .TP
23
+ \fB\-\-field\-selector\fR \fIEXPR\fR
24
+ Selector (field query) to filter on, supports '=', '==', and '!=' (e.g. \-\-field\-selector key1=value1,key2=value2). Projects support metadata.name, metadata.group, spec.path, status.state, status.branch, status.lastFetch; groups support metadata.name. Values compare exactly, case included, with the object \-o json prints: spec.path as registered, status.lastFetch as an RFC 3339 time. A field the object leaves out compares as the empty value, except status.lastFetch, which compares as never. A backslash escapes a backslash, a comma or an equals sign in a value.
25
+ .TP
26
+ \fB\-A\fR, \fB\-\-all\-groups\fR
27
+ If present, list the requested object(s) across all groups. The group in the current configuration is ignored even if specified with \-\-group.
28
+ .SH "STATUS WORDS"
29
+ STATUS is the first of these words that holds, in this order.
30
+ .TP
31
+ \fBMissing\fR
32
+ The registered path is relative, or is not a directory on this machine.
33
+ .TP
34
+ \fBNotARepo\fR
35
+ The directory exists but no repository contains it.
36
+ .TP
37
+ \fBUnsafe\fR
38
+ git refused the repository because another user owns it (safe.directory); describe, diff and fetch print the git command that trusts it.
39
+ .TP
40
+ \fBConflicted\fR
41
+ The working tree has unmerged paths.
42
+ .TP
43
+ \fBDetached\fR
44
+ HEAD points at a commit rather than a branch.
45
+ .TP
46
+ \fBUnborn\fR
47
+ The branch has no commits yet.
48
+ .TP
49
+ \fBDirty\fR
50
+ Staged, modified or untracked files are present.
51
+ .TP
52
+ \fBGone\fR
53
+ An upstream is configured but its remote\-tracking ref is gone, as of the last fetch \-\-prune (or a fetch with fetch.prune set).
54
+ .TP
55
+ \fBDiverged\fR
56
+ The branch is both ahead of and behind its upstream, as of the last fetch (FETCHED).
57
+ .TP
58
+ \fBAhead\fR
59
+ Commits not yet pushed to the upstream, as of the last fetch (FETCHED).
60
+ .TP
61
+ \fBBehind\fR
62
+ Commits on the upstream not yet pulled, as of the last fetch (FETCHED).
63
+ .TP
64
+ \fBClean\fR
65
+ Nothing to do.
66
+ .TP
67
+ \fBUnknown\fR
68
+ git could not answer: it is not installed, it did not finish within 10 seconds, or it failed for a reason slipway does not classify. Each distinct reason is printed once on stderr per run.
69
+ .SH EXAMPLES
70
+ .EX
71
+ # Describe a project
72
+ slipway describe project hldr
73
+ .EE
74
+ .PP
75
+ .EX
76
+ # Describe every project in the work group
77
+ slipway describe projects \-n work
78
+ .EE
79
+ .PP
80
+ .EX
81
+ # Describe the projects labeled lang=rust
82
+ slipway describe projects \-l lang=rust
83
+ .EE
84
+ .PP
85
+ .EX
86
+ # Describe the projects on the main branch
87
+ slipway describe projects \-\-field\-selector status.branch=main
88
+ .EE
89
+ .PP
90
+ .EX
91
+ # Describe a group
92
+ slipway describe group work
93
+ .EE
94
+ .SH "SEE ALSO"
95
+ .BR slipway (1)
@@ -0,0 +1,120 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-DIFF" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-diff \- Show where projects differ from their manifests
5
+ .SH SYNOPSIS
6
+ .SY "slipway diff"
7
+ .I "[NAME... | project/NAME...]"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Show where each selected project differs from its manifest.
12
+ .PP
13
+ Compares every project of the current group, the projects named, the ones a label selector matches, or with \-\-all\-groups every project, with its manifest. Each project that differs prints its name and one line per difference: Missing, Remote, Branch, Revision or Behind, then the blocker that keeps sync from fast\-forwarding the branch, if any. A line is followed by the git command that shows or resolves it when there is one; slipway never runs it. A project that matches its manifest prints nothing.
14
+ .PP
15
+ The repositories are read as they are on disk: diff contacts no remote and writes nothing, so Behind is as of the last fetch, which slipway fetch refreshes. A project pinned by spec.revision is compared with that commit instead of its upstream, and is blocked when the repository lacks the commit, HEAD is past it or its upstream does not hold it. A paused or FetchOnly project shows a blocker only when git cannot read its repository.
16
+ .SH OPTIONS
17
+ .TP
18
+ \fB\-l\fR, \fB\-\-selector\fR \fIEXPR\fR
19
+ Selector (label query) to filter on, supports '=', '==', '!=', 'in', 'notin' (e.g. \-l key1=value1,key2=value2,key3 in (value3)). Matching objects must satisfy all of the specified label constraints.
20
+ .TP
21
+ \fB\-A\fR, \fB\-\-all\-groups\fR
22
+ If present, compare every project across all groups with its manifest. The group in the current configuration is ignored even if specified with \-\-group.
23
+ .SH DRIFT
24
+ .TP
25
+ \fBMissing\fR
26
+ The registered path is relative or is not a directory. For a path that is not a directory, a project with spec.remote shows the git clone command that recreates it.
27
+ .TP
28
+ \fBRemote\fR
29
+ origin is absent or differs from spec.remote. Sync never changes a remote.
30
+ .TP
31
+ \fBBranch\fR
32
+ HEAD is detached or on another branch than spec.branch. Sync never switches branches.
33
+ .TP
34
+ \fBRevision\fR
35
+ HEAD is not the commit spec.revision pins. The pin replaces the upstream, so a pinned project is never Behind; under FastForward sync will fast\-forward a branch behind the pin to it unless a blocker stops it, and never moves a branch back.
36
+ .TP
37
+ \fBBehind\fR
38
+ The checked\-out branch is behind its upstream. Under FastForward sync will fast\-forward it unless a blocker stops it; under FetchOnly, or while spec.paused is true, it is only reported.
39
+ .SH BLOCKERS
40
+ A blocker says why the checked\-out branch cannot be fast\-forwarded, onto its upstream or, for a project pinned by spec.revision, onto the pin. The first three mean git could not read the repository and apply to every project; the others apply only under FastForward to a project that is not paused, and RevisionNotFound, PastRevision and OffUpstream only to a pinned one.
41
+ .TP
42
+ \fBNotARepo\fR
43
+ The directory exists but holds no repository.
44
+ .TP
45
+ \fBUnsafe\fR
46
+ git refused the repository because another user owns it (safe.directory); the git command that trusts it follows.
47
+ .TP
48
+ \fBUnknown\fR
49
+ git could not answer; the reason is also printed once on stderr.
50
+ .TP
51
+ \fBDetached\fR
52
+ HEAD points at a commit rather than a branch.
53
+ .TP
54
+ \fBUnborn\fR
55
+ The branch has no commits yet.
56
+ .TP
57
+ \fBGone\fR
58
+ The upstream is configured but its ref no longer exists.
59
+ .TP
60
+ \fBNoUpstream\fR
61
+ The branch tracks no upstream.
62
+ .TP
63
+ \fBRevisionNotFound\fR
64
+ The repository has no commit by the name spec.revision pins.
65
+ .TP
66
+ \fBPastRevision\fR
67
+ HEAD is past the pinned commit or on another line of history, so reaching the pin would move the branch back.
68
+ .TP
69
+ \fBOffUpstream\fR
70
+ The upstream does not hold the pinned commit, which may be on another branch or a fork; sync moves a branch only along its upstream.
71
+ .TP
72
+ \fBConflicted\fR
73
+ The branch is behind and the working tree has unmerged paths.
74
+ .TP
75
+ \fBDirty\fR
76
+ The branch is behind and has staged or unstaged changes; untracked files do not block.
77
+ .TP
78
+ \fBDiverged\fR
79
+ The branch is behind and has commits of its own.
80
+ .TP
81
+ \fBInProgress\fR
82
+ The branch would be fast\-forwarded, but a merge, rebase, cherry\-pick, revert, bisect or git am is in progress.
83
+ .SH "EXIT STATUS"
84
+ .TP
85
+ \fB0\fR
86
+ Every selected project matches its manifest.
87
+ .TP
88
+ \fB1\fR
89
+ Runtime error, such as a missing resource or an unreadable manifest, or a project whose state is Unknown because git failed or did not finish.
90
+ .TP
91
+ \fB2\fR
92
+ Usage error: unknown command, unknown flag or invalid argument.
93
+ .TP
94
+ \fB3\fR
95
+ At least one selected project differs from its manifest or is blocked, including a directory that holds no repository (NotARepo) and a repository git refuses (Unsafe).
96
+ .TP
97
+ \fB130\fR
98
+ Interrupted by SIGINT.
99
+ .SH EXAMPLES
100
+ .EX
101
+ # Show where the projects of the current group differ from their manifests
102
+ slipway diff
103
+ .EE
104
+ .PP
105
+ .EX
106
+ # Show every project that differs, in every group
107
+ slipway diff \-A
108
+ .EE
109
+ .PP
110
+ .EX
111
+ # Compare two projects of the work group
112
+ slipway diff api web \-n work
113
+ .EE
114
+ .PP
115
+ .EX
116
+ # Compare the projects labeled lang=rust
117
+ slipway diff \-l lang=rust
118
+ .EE
119
+ .SH "SEE ALSO"
120
+ .BR slipway (1)
@@ -0,0 +1,34 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-EDIT" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-edit \- Edit a resource from the default editor
5
+ .SH SYNOPSIS
6
+ .SY "slipway edit"
7
+ .I "(TYPE NAME | TYPE/NAME)"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Edit a resource from the default editor.
12
+ .PP
13
+ The edit command allows you to directly edit any resource in the registry. It will open the editor named by the SLIPWAY_EDITOR environment variable, then the editor key of the configuration file, then VISUAL or EDITOR, or fall back to 'vi'.
14
+ .PP
15
+ The kind, name, group and creation timestamp of a resource cannot be changed. If an error occurs while saving, the file is reopened with the relevant failures as comments at the top; saving it again without changes cancels the edit.
16
+ .PP
17
+ Resource types: projects (project, proj) and groups (group). Type words are case\-insensitive.
18
+ .SH EXAMPLES
19
+ .EX
20
+ # Edit the project named 'hldr'
21
+ slipway edit project hldr
22
+ .EE
23
+ .PP
24
+ .EX
25
+ # Edit a project in the work group
26
+ slipway edit project job \-n work
27
+ .EE
28
+ .PP
29
+ .EX
30
+ # Edit the group named 'work'
31
+ slipway edit group work
32
+ .EE
33
+ .SH "SEE ALSO"
34
+ .BR slipway (1)
@@ -0,0 +1,36 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-EXPLAIN" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-explain \- Get documentation for a resource
5
+ .SH SYNOPSIS
6
+ .SY "slipway explain"
7
+ .I TYPE[.FIELD...]\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Describe fields and structure of the resource types.
12
+ .PP
13
+ This command describes the fields of each resource type, as a manifest holds them. Fields are identified by a dotted path after the type word, such as project.spec.syncPolicy. Each field shows its type, \-required\- when a manifest must have it, and a description with the rule its value follows and its default; \-\-recursive prints the whole tree of names and types instead.
14
+ .PP
15
+ Resource types: projects (project, proj) and groups (group). Type words are case\-insensitive. Field names are case\-sensitive, as in a manifest.
16
+ .SH OPTIONS
17
+ .TP
18
+ \fB\-\-recursive\fR
19
+ If present, print the name of all the fields recursively. Otherwise, print the available fields with their description.
20
+ .SH EXAMPLES
21
+ .EX
22
+ # Get the documentation of the resource and its fields
23
+ slipway explain projects
24
+ .EE
25
+ .PP
26
+ .EX
27
+ # Get all the fields in the resource
28
+ slipway explain projects \-\-recursive
29
+ .EE
30
+ .PP
31
+ .EX
32
+ # Get the documentation of a specific field of a resource
33
+ slipway explain project.spec.syncPolicy
34
+ .EE
35
+ .SH "SEE ALSO"
36
+ .BR slipway (1)
@@ -0,0 +1,77 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-FETCH" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-fetch \- Fetch from the remote of each project
5
+ .SH SYNOPSIS
6
+ .SY "slipway fetch"
7
+ .I "[NAME... | project/NAME...]"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Fetch from the remote of each selected project.
12
+ .PP
13
+ Runs git fetch in every project of the current group, in the projects named, in the ones a label selector matches, or with \-\-all\-groups in every project. Git fetches from the remote of the checked\-out branch, else from the only remote, else from origin, as a git fetch typed in the repository would, and updates the references that remote's fetch refspecs name (remote\-tracking references by default) and its tags, never the checked\-out branch or the working tree. The parallel setting caps how many projects fetch at once, and the results print in the order the projects are listed.
14
+ .PP
15
+ Each project prints one line, one of the results listed below, with a reason in parentheses and the details under it. A project whose repository cannot be read, or in which git finds no remote to fetch from, is skipped before git fetch runs. A project whose spec.paused is true is paused: no git command runs in it.
16
+ .PP
17
+ Git never prompts: a fetch that needs a password, a passphrase or a host key is denied, one that runs past the networkTimeout setting is killed, and only the transports in the protocols setting are allowed. The exit status is 1 when any project was denied or failed.
18
+ .SH OPTIONS
19
+ .TP
20
+ \fB\-l\fR, \fB\-\-selector\fR \fIEXPR\fR
21
+ Selector (label query) to filter on, supports '=', '==', '!=', 'in', 'notin' (e.g. \-l key1=value1,key2=value2,key3 in (value3)). Matching objects must satisfy all of the specified label constraints.
22
+ .TP
23
+ \fB\-A\fR, \fB\-\-all\-groups\fR
24
+ If present, fetch every project across all groups. The group in the current configuration is ignored even if specified with \-\-group.
25
+ .TP
26
+ \fB\-\-prune\fR
27
+ Before fetching, remove any remote\-tracking references that no longer exist on the remote.
28
+ .TP
29
+ \fB\-\-dry\-run\fR
30
+ Print what would change and write nothing.
31
+ .SH RESULTS
32
+ When more than one project ran, a count of the results closes the run on stderr. With \-\-dry\-run no remote is contacted: a project that would be fetched reads fetched, and every line and the count end in (dry run). Ctrl\-C stops the git processes slipway started and exits with status 130.
33
+ .TP
34
+ \fBfetched\fR
35
+ The remote moved refs, and up to 5 follow: origin/main a1b2c3d..e4f5a6b for a ref that moved, origin/feature d09a085 (new) for a new one and origin/feature deleted (was d09a085) for one \-\-prune removed. A last line, and N more, counts the rest. Tags appear under their bare name. With git before 2.41, every fetch that succeeds reads fetched, without the refs.
36
+ .TP
37
+ \fBunchanged\fR
38
+ The remote answered and had nothing new.
39
+ .TP
40
+ \fBskipped (Reason)\fR
41
+ No fetch ran: git could not read the repository (Missing, NotARepo, Unsafe, Unknown), git has no remote to pick because there is no upstream, no origin and either no remote or more than one (NoRemote), or the branch tracks a local branch (LocalUpstream).
42
+ .TP
43
+ \fBpaused\fR
44
+ spec.paused is true, so no git command ran in the project.
45
+ .TP
46
+ \fBdenied (Reason)\fR
47
+ Git needed a password, a passphrase or a host key (AuthRequired). Run the git \-C PATH fetch printed below it once in a terminal to see what git needs.
48
+ .TP
49
+ \fBfailed (Reason)\fR
50
+ The fetch ran past networkTimeout (Timeout), used a transport protocols leaves out (ProtocolNotAllowed), or git failed for another reason (Unknown).
51
+ .SH EXAMPLES
52
+ .EX
53
+ # Fetch every project in the current group
54
+ slipway fetch
55
+ .EE
56
+ .PP
57
+ .EX
58
+ # Fetch every project in every group
59
+ slipway fetch \-A
60
+ .EE
61
+ .PP
62
+ .EX
63
+ # Fetch two projects of the work group
64
+ slipway fetch api web \-n work
65
+ .EE
66
+ .PP
67
+ .EX
68
+ # Fetch the projects labeled lang=rust and prune deleted branches
69
+ slipway fetch \-l lang=rust \-\-prune
70
+ .EE
71
+ .PP
72
+ .EX
73
+ # List the projects a fetch would reach, without contacting any remote
74
+ slipway fetch \-A \-\-dry\-run
75
+ .EE
76
+ .SH "SEE ALSO"
77
+ .BR slipway (1)
@@ -0,0 +1,155 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-GET" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-get \- Display one or many resources
5
+ .SH SYNOPSIS
6
+ .SY "slipway get"
7
+ .I "(TYPE [NAME...] | TYPE/NAME...)"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Display one or many resources.
12
+ .PP
13
+ Prints a table of the most important information about the specified resources. You can filter the list using a label selector and the \-\-selector flag, or a field selector and the \-\-field\-selector flag. Projects are listed in the current group unless you pass \-\-all\-groups.
14
+ .PP
15
+ Use \-o wide to add the path, the head commit, the age of the last commit and the drift of each project: the ways its repository differs from its manifest and what keeps sync from converging it. Use \-o json or \-o yaml for the full object with its status.
16
+ .PP
17
+ Resource types: projects (project, proj) and groups (group). Type words are case\-insensitive.
18
+ .SH OPTIONS
19
+ .TP
20
+ \fB\-o\fR, \fB\-\-output\fR \fIFORMAT\fR
21
+ Output format. One of: table, wide, json, yaml, name. (default "table")
22
+ .TP
23
+ \fB\-l\fR, \fB\-\-selector\fR \fIEXPR\fR
24
+ Selector (label query) to filter on, supports '=', '==', '!=', 'in', 'notin' (e.g. \-l key1=value1,key2=value2,key3 in (value3)). Matching objects must satisfy all of the specified label constraints.
25
+ .TP
26
+ \fB\-\-field\-selector\fR \fIEXPR\fR
27
+ Selector (field query) to filter on, supports '=', '==', and '!=' (e.g. \-\-field\-selector key1=value1,key2=value2). Projects support metadata.name, metadata.group, spec.path, status.state, status.branch, status.lastFetch; groups support metadata.name. Values compare exactly, case included, with the object \-o json prints: spec.path as registered, status.lastFetch as an RFC 3339 time. A field the object leaves out compares as the empty value, except status.lastFetch, which compares as never. A backslash escapes a backslash, a comma or an equals sign in a value.
28
+ .TP
29
+ \fB\-A\fR, \fB\-\-all\-groups\fR
30
+ If present, list the requested object(s) across all groups. The group in the current configuration is ignored even if specified with \-\-group.
31
+ .TP
32
+ \fB\-\-no\-headers\fR
33
+ When using the default output format, don't print headers.
34
+ .TP
35
+ \fB\-\-show\-labels\fR
36
+ When printing, show all labels as the last column.
37
+ .SH COLUMNS
38
+ Projects show NAME, BRANCH, STATUS, FETCHED and AGE; \-\-all\-groups adds GROUP in front, \-o wide adds PATH, HEAD, LAST\-COMMIT and DRIFT, and \-\-show\-labels adds LABELS. Groups show NAME, PROJECTS and AGE, and \-o wide adds DESCRIPTION. A cell slipway has no value for reads <none>, as every cell from git does when git cannot read the repository.
39
+ .TP
40
+ \fBGROUP\fR
41
+ The group of the project.
42
+ .TP
43
+ \fBNAME\fR
44
+ The name of the resource.
45
+ .TP
46
+ \fBBRANCH\fR
47
+ The checked\-out branch, or (detached) when HEAD points at a commit.
48
+ .TP
49
+ \fBSTATUS\fR
50
+ One word for the state of the repository, from the list below.
51
+ .TP
52
+ \fBFETCHED\fR
53
+ Time since the repository was last fetched, by slipway or by git itself and from any of its worktrees. <never> means git answered and no fetch is on record, which includes a last fetch that failed.
54
+ .TP
55
+ \fBAGE\fR
56
+ Time since the resource was registered, in kubectl's units (3s, 4m12s, 11h, 2y319d).
57
+ .TP
58
+ \fBPATH\fR
59
+ The registered path, as the manifest writes it.
60
+ .TP
61
+ \fBHEAD\fR
62
+ The abbreviated id of the checked\-out commit.
63
+ .TP
64
+ \fBLAST\-COMMIT\fR
65
+ The age of the checked\-out commit.
66
+ .TP
67
+ \fBDRIFT\fR
68
+ The ways the repository differs from its manifest and the blocker that keeps sync from fast\-forwarding it, as slipway diff names them.
69
+ .TP
70
+ \fBPROJECTS\fR
71
+ The number of projects in the group.
72
+ .TP
73
+ \fBDESCRIPTION\fR
74
+ The description of the group.
75
+ .TP
76
+ \fBLABELS\fR
77
+ The labels, as key=value pairs.
78
+ .SH "STATUS WORDS"
79
+ STATUS is the first of these words that holds, in this order.
80
+ .TP
81
+ \fBMissing\fR
82
+ The registered path is relative, or is not a directory on this machine.
83
+ .TP
84
+ \fBNotARepo\fR
85
+ The directory exists but no repository contains it.
86
+ .TP
87
+ \fBUnsafe\fR
88
+ git refused the repository because another user owns it (safe.directory); describe, diff and fetch print the git command that trusts it.
89
+ .TP
90
+ \fBConflicted\fR
91
+ The working tree has unmerged paths.
92
+ .TP
93
+ \fBDetached\fR
94
+ HEAD points at a commit rather than a branch.
95
+ .TP
96
+ \fBUnborn\fR
97
+ The branch has no commits yet.
98
+ .TP
99
+ \fBDirty\fR
100
+ Staged, modified or untracked files are present.
101
+ .TP
102
+ \fBGone\fR
103
+ An upstream is configured but its remote\-tracking ref is gone, as of the last fetch \-\-prune (or a fetch with fetch.prune set).
104
+ .TP
105
+ \fBDiverged\fR
106
+ The branch is both ahead of and behind its upstream, as of the last fetch (FETCHED).
107
+ .TP
108
+ \fBAhead\fR
109
+ Commits not yet pushed to the upstream, as of the last fetch (FETCHED).
110
+ .TP
111
+ \fBBehind\fR
112
+ Commits on the upstream not yet pulled, as of the last fetch (FETCHED).
113
+ .TP
114
+ \fBClean\fR
115
+ Nothing to do.
116
+ .TP
117
+ \fBUnknown\fR
118
+ git could not answer: it is not installed, it did not finish within 10 seconds, or it failed for a reason slipway does not classify. Each distinct reason is printed once on stderr per run.
119
+ .SH EXAMPLES
120
+ .EX
121
+ # List all projects in the current group
122
+ slipway get projects
123
+ .EE
124
+ .PP
125
+ .EX
126
+ # List all projects in every group, with the path and last commit
127
+ slipway get projects \-A \-o wide
128
+ .EE
129
+ .PP
130
+ .EX
131
+ # List a single project in YAML output format
132
+ slipway get project hldr \-o yaml
133
+ .EE
134
+ .PP
135
+ .EX
136
+ # List the projects labeled lang=rust
137
+ slipway get projects \-l lang=rust
138
+ .EE
139
+ .PP
140
+ .EX
141
+ # List the projects in every group that are not clean
142
+ slipway get projects \-A \-\-field\-selector status.state!=Clean
143
+ .EE
144
+ .PP
145
+ .EX
146
+ # List the projects no fetch has reached
147
+ slipway get projects \-\-field\-selector status.lastFetch=never
148
+ .EE
149
+ .PP
150
+ .EX
151
+ # List every group
152
+ slipway get groups
153
+ .EE
154
+ .SH "SEE ALSO"
155
+ .BR slipway (1)
@@ -0,0 +1,19 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-HELP" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-help \- Help about any command
5
+ .SH SYNOPSIS
6
+ .SY "slipway help"
7
+ .RI [ COMMAND... ]\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Help provides help for any command in the application.
12
+ Type slipway help [path to command] for full details.
13
+ .SH EXAMPLES
14
+ .EX
15
+ # Show the help of a nested command
16
+ slipway help config view
17
+ .EE
18
+ .SH "SEE ALSO"
19
+ .BR slipway (1)
@@ -0,0 +1,53 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-LABEL" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-label \- Update the labels on a resource
5
+ .SH SYNOPSIS
6
+ .SY "slipway label"
7
+ .I "(TYPE NAME | TYPE/NAME) [KEY=VALUE|KEY\-...]"\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Update the labels on a resource.
12
+ .IP \(bu 2
13
+ A label key and value must begin with a letter or number, and may contain letters, numbers, hyphens, dots, and underscores, up to 63 characters each.
14
+ .IP \(bu 2
15
+ Optionally, the key can begin with a DNS subdomain prefix and a single '/', like example.com/my\-app.
16
+ .IP \(bu 2
17
+ If \-\-overwrite is true, then existing labels can be overwritten, otherwise attempting to overwrite a label will result in an error.
18
+ .IP \(bu 2
19
+ KEY\- removes the label KEY; removing a label that is not set changes nothing. A change that leaves the labels as they were prints not labeled.
20
+ .PP
21
+ Resource types: projects (project, proj) and groups (group). Type words are case\-insensitive.
22
+ .SH OPTIONS
23
+ .TP
24
+ \fB\-\-overwrite\fR
25
+ If true, allow labels to be overwritten, otherwise reject label updates that overwrite existing labels.
26
+ .TP
27
+ \fB\-\-list\fR
28
+ If true, display the labels for a given resource instead of writing them.
29
+ .TP
30
+ \fB\-\-dry\-run\fR
31
+ Print what would change and write nothing.
32
+ .SH EXAMPLES
33
+ .EX
34
+ # Update project 'hldr' with the label 'lang' and the value 'rust'
35
+ slipway label project hldr lang=rust
36
+ .EE
37
+ .PP
38
+ .EX
39
+ # Update project 'hldr' with the label 'lang' and the value 'go', overwriting any existing value
40
+ slipway label project hldr lang=go \-\-overwrite
41
+ .EE
42
+ .PP
43
+ .EX
44
+ # Remove the label 'tier' from project 'hldr'
45
+ slipway label project hldr tier\-
46
+ .EE
47
+ .PP
48
+ .EX
49
+ # List the labels of group 'work'
50
+ slipway label group work \-\-list
51
+ .EE
52
+ .SH "SEE ALSO"
53
+ .BR slipway (1)
@@ -0,0 +1,36 @@
1
+ .\" Generated by slipway 0.1.0. Do not edit.
2
+ .TH "SLIPWAY-MAN" "1" "2026-09-30" "slipway 0.1.0" "Slipway Manual"
3
+ .SH NAME
4
+ slipway\-man \- Show the manual page of a command
5
+ .SH SYNOPSIS
6
+ .SY "slipway man"
7
+ .RI [ COMMAND... ]\&
8
+ .RI [ flags ]
9
+ .YS
10
+ .SH DESCRIPTION
11
+ Show the manual page of slipway or of one of its commands with man(1).
12
+ The pages ship with the gem; \-\-install copies them into a man1 directory and says how man(1) finds them.
13
+ .SH OPTIONS
14
+ .TP
15
+ \fB\-\-path\fR
16
+ Print the directory of the bundled pages and exit.
17
+ .TP
18
+ \fB\-\-install\fR[=\fIDIR\fR]
19
+ Copy every page into DIR, a man1 directory, or into ${XDG_DATA_HOME:\-~/.local/share}/man/man1.
20
+ .SH EXAMPLES
21
+ .EX
22
+ # Read the page of a command
23
+ slipway man get
24
+ .EE
25
+ .PP
26
+ .EX
27
+ # Install every page for man(1)
28
+ slipway man \-\-install
29
+ .EE
30
+ .PP
31
+ .EX
32
+ # Print the bundled page directory
33
+ slipway man \-\-path
34
+ .EE
35
+ .SH "SEE ALSO"
36
+ .BR slipway (1)