@fiftth/fiftth-cli 0.1.0 → 1.0.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.
- package/.github/workflows/publish-npm.yml +62 -0
- package/README.md +123 -111
- package/dist/api/client.d.ts +1 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -0
- package/dist/api/client.js.map +1 -1
- package/dist/commands/checkout.d.ts +1 -1
- package/dist/commands/checkout.d.ts.map +1 -1
- package/dist/commands/checkout.js +63 -31
- package/dist/commands/checkout.js.map +1 -1
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +4 -1
- package/dist/commands/tasks.js.map +1 -1
- package/dist/config/configService.d.ts.map +1 -1
- package/dist/config/configService.js +17 -4
- package/dist/config/configService.js.map +1 -1
- package/dist/index.js +25 -25
- package/dist/index.js.map +1 -1
- package/dist/services/taskService.d.ts +1 -0
- package/dist/services/taskService.d.ts.map +1 -1
- package/dist/services/taskService.js +7 -0
- package/dist/services/taskService.js.map +1 -1
- package/package.json +56 -56
- package/src/api/client.ts +31 -26
- package/src/commands/checkout.ts +101 -68
- package/src/commands/login.ts +145 -145
- package/src/commands/repo.ts +113 -113
- package/src/commands/tasks.ts +86 -83
- package/src/commands/use.ts +149 -149
- package/src/config/configService.ts +56 -40
- package/src/context/runtimeContext.ts +42 -42
- package/src/git/gitService.ts +29 -29
- package/src/index.ts +133 -133
- package/src/services/taskContext.ts +32 -32
- package/src/services/taskService.ts +53 -45
- package/src/utils/api.ts +41 -41
- package/src/utils/config.ts +48 -48
- package/src/utils/ui.ts +46 -46
- package/tsconfig.json +18 -18
- package/vitest.config.ts +8 -8
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Publish NPM Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version:
|
|
7
|
+
description: New package version to publish (for example 0.1.1)
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
id-token: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
publish:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout repository
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
|
|
25
|
+
- name: Setup Node.js
|
|
26
|
+
uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: 20
|
|
29
|
+
registry-url: https://registry.npmjs.org
|
|
30
|
+
cache: npm
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: npm ci
|
|
34
|
+
|
|
35
|
+
- name: Validate requested version
|
|
36
|
+
run: npm version "${{ inputs.version }}" --no-git-tag-version
|
|
37
|
+
|
|
38
|
+
- name: Lint
|
|
39
|
+
run: npm run lint
|
|
40
|
+
|
|
41
|
+
- name: Build
|
|
42
|
+
run: npm run build
|
|
43
|
+
|
|
44
|
+
- name: Publish package
|
|
45
|
+
run: npm publish --access public
|
|
46
|
+
env:
|
|
47
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
48
|
+
|
|
49
|
+
- name: Commit version bump
|
|
50
|
+
run: |
|
|
51
|
+
git config user.name "github-actions[bot]"
|
|
52
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
53
|
+
git add package.json package-lock.json
|
|
54
|
+
git commit -m "chore: release v${{ inputs.version }}"
|
|
55
|
+
|
|
56
|
+
- name: Create git tag
|
|
57
|
+
run: git tag "v${{ inputs.version }}"
|
|
58
|
+
|
|
59
|
+
- name: Push commit and tag
|
|
60
|
+
run: |
|
|
61
|
+
git push origin HEAD
|
|
62
|
+
git push origin "v${{ inputs.version }}"
|
package/README.md
CHANGED
|
@@ -1,111 +1,123 @@
|
|
|
1
|
-
# Fiftth CLI
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- `fiftth
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
- `fiftth
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
###
|
|
90
|
-
|
|
91
|
-
- `fiftth
|
|
92
|
-
- `fiftth
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
- `checkout
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
1
|
+
# Fiftth CLI
|
|
2
|
+
|
|
3
|
+
```text
|
|
4
|
+
███████╗██╗███████╗████████╗████████╗██╗ ██╗
|
|
5
|
+
██╔════╝██║██╔════╝╚══██╔══╝╚══██╔══╝██║ ██║
|
|
6
|
+
█████╗ ██║█████╗ ██║ ██║ ███████║
|
|
7
|
+
██╔══╝ ██║██╔══╝ ██║ ██║ ██╔══██║
|
|
8
|
+
██║ ██║██║ ██║ ██║ ██║ ██║
|
|
9
|
+
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The official CLI for [Fiftth](https://fiftth.com).
|
|
13
|
+
|
|
14
|
+
Built for humans, AI agents, and CI/CD pipelines.
|
|
15
|
+
The "fiftth" symphony of Software Engineering. Start orchestrating your engineering workflows.
|
|
16
|
+
|
|
17
|
+
Fiftth CLI helps your team authenticate, select a workspace, sync tasks, and checkout the right branch for each task-linked repository.
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- Command aliases: `fiftth` and `ftt`
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g fiftth
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Local development link
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install
|
|
33
|
+
npm run build
|
|
34
|
+
npm link
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
After linking, both commands should work:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
fiftth --help
|
|
41
|
+
ftt --help
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
1. Authenticate
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
fiftth login
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
2. Choose workspace
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
fiftth use
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
3. Add local repositories
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
fiftth repo add api ~/dev/api
|
|
62
|
+
fiftth repo add mobile C:\Users\you\Desktop\Owner\repo
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
4. Select task and list linked repositories
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
fiftth tasks
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
5. Checkout task branch in a configured repository
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
fiftth checkout <taskId>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Commands
|
|
78
|
+
|
|
79
|
+
### Authentication
|
|
80
|
+
|
|
81
|
+
- `fiftth login`
|
|
82
|
+
- `fiftth login --token <token>`
|
|
83
|
+
- `fiftth login --host <host>`
|
|
84
|
+
- `fiftth login status`
|
|
85
|
+
- `fiftth login logout`
|
|
86
|
+
|
|
87
|
+
To use `fiftth login --token <token>`, you must first sign in on the [Fiftth](https://fiftth.com) and generate your token there.
|
|
88
|
+
|
|
89
|
+
### Workspace
|
|
90
|
+
|
|
91
|
+
- `fiftth use`
|
|
92
|
+
- `fiftth use <workspace>`
|
|
93
|
+
- `fiftth use --list`
|
|
94
|
+
|
|
95
|
+
### Repository Registry
|
|
96
|
+
|
|
97
|
+
- `fiftth repo add <repoName> <path...>`
|
|
98
|
+
- `fiftth repo list`
|
|
99
|
+
- `fiftth repo remove <repoName>`
|
|
100
|
+
|
|
101
|
+
### Tasks and Checkout
|
|
102
|
+
|
|
103
|
+
- `fiftth tasks`
|
|
104
|
+
- `fiftth checkout <taskId>`
|
|
105
|
+
|
|
106
|
+
## Configuration
|
|
107
|
+
|
|
108
|
+
Config is saved to:
|
|
109
|
+
|
|
110
|
+
- `~/.fiftth/config.json`
|
|
111
|
+
|
|
112
|
+
Current defaults:
|
|
113
|
+
|
|
114
|
+
## Notes
|
|
115
|
+
|
|
116
|
+
- `checkout` requires:
|
|
117
|
+
- selecting the task first (`fiftth tasks`)
|
|
118
|
+
- local repo mappings for linked repositories (`fiftth repo add ...`)
|
|
119
|
+
- a clean git working tree
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
MIT
|
package/dist/api/client.d.ts
CHANGED
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACrD;AAED,wBAAgB,eAAe,IAAI,SAAS,CAsB3C"}
|
package/dist/api/client.js
CHANGED
|
@@ -15,6 +15,10 @@ export function createApiClient() {
|
|
|
15
15
|
const response = await httpClient.get(endpoint);
|
|
16
16
|
return response.data;
|
|
17
17
|
},
|
|
18
|
+
async post(endpoint, body) {
|
|
19
|
+
const response = await httpClient.post(endpoint, body);
|
|
20
|
+
return response.data;
|
|
21
|
+
},
|
|
18
22
|
};
|
|
19
23
|
}
|
|
20
24
|
//# sourceMappingURL=client.js.map
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAO/C,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAE3B,MAAM,UAAU,GAAkB,KAAK,CAAC,MAAM,CAAC;QAC7C,OAAO,EAAE,MAAM,CAAC,IAAI;QACpB,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;YACvC,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,kBAAkB;SACjC;KACF,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,CAAC,GAAG,CAAI,QAAgB;YAC3B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,CAAI,QAAQ,CAAC,CAAA;YAClD,OAAO,QAAQ,CAAC,IAAI,CAAA;QACtB,CAAC;QACD,KAAK,CAAC,IAAI,CAAI,QAAgB,EAAE,IAAa;YAC3C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAI,QAAQ,EAAE,IAAI,CAAC,CAAA;YACzD,OAAO,QAAQ,CAAC,IAAI,CAAA;QACtB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function checkoutCommand(
|
|
1
|
+
export declare function checkoutCommand(taskId: string): Promise<void>;
|
|
2
2
|
//# sourceMappingURL=checkout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AAaA,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFnE"}
|
|
@@ -2,49 +2,81 @@ import chalk from 'chalk';
|
|
|
2
2
|
import { getRepoPath } from '../config/configService.js';
|
|
3
3
|
import { getRuntimeSelectedTask } from '../context/runtimeContext.js';
|
|
4
4
|
import { checkGitRepo, checkRepoExists, checkUncommittedChanges, checkoutBranch, fetch, } from '../git/gitService.js';
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { moveTaskToHumanReview } from '../services/taskService.js';
|
|
6
|
+
import { cmd, fail, info, kv, muted, ok, section } from '../utils/ui.js';
|
|
7
|
+
export async function checkoutCommand(taskId) {
|
|
7
8
|
const selectedTask = getRuntimeSelectedTask();
|
|
8
9
|
if (!selectedTask) {
|
|
9
10
|
console.log(`\n${fail('No task selected.')}\n`);
|
|
10
11
|
console.log(`${muted(`Run ${cmd('fiftth tasks')} to select one.`)}\n`);
|
|
11
12
|
process.exit(1);
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.log(
|
|
16
|
-
console.log(`${
|
|
17
|
-
for (const repository of selectedTask.repositories) {
|
|
18
|
-
console.log(` ${muted('•')} ${repository.fullName}`);
|
|
19
|
-
}
|
|
14
|
+
if (selectedTask.taskId !== taskId) {
|
|
15
|
+
console.log(`\n${fail('Task ID does not match the selected task.')}\n`);
|
|
16
|
+
console.log(kv('Selected task ID', selectedTask.taskId));
|
|
17
|
+
console.log(`${muted(`Run ${cmd('fiftth tasks')} and select task ${cmd(taskId)} first.`)}\n`);
|
|
20
18
|
console.log();
|
|
21
19
|
process.exit(1);
|
|
22
20
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
console.log(`${muted(`Run ${cmd('fiftth repo add <repoName> <path>')}`)}\n`);
|
|
27
|
-
process.exit(1);
|
|
21
|
+
if (selectedTask.repositories.length === 0) {
|
|
22
|
+
console.log(`\n${info('This task has no linked repositories.')}\n`);
|
|
23
|
+
return;
|
|
28
24
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
console.log(`\n${section(`Checking out task ${selectedTask.taskId} in linked repositories`)}\n`);
|
|
26
|
+
const successfulRepositories = [];
|
|
27
|
+
const failedRepositories = [];
|
|
28
|
+
for (const taskRepository of selectedTask.repositories) {
|
|
29
|
+
const repoName = taskRepository.fullName;
|
|
30
|
+
const repoPath = getRepoPath(repoName);
|
|
31
|
+
console.log(kv('Repository', repoName));
|
|
32
|
+
if (!repoPath) {
|
|
33
|
+
console.log(` ${fail('Skipped: repository not configured locally.')}`);
|
|
34
|
+
failedRepositories.push(repoName);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!checkRepoExists(repoPath)) {
|
|
38
|
+
console.log(` ${fail('Skipped: repository path not found.')}`);
|
|
39
|
+
failedRepositories.push(repoName);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (!checkGitRepo(repoPath)) {
|
|
43
|
+
console.log(` ${fail('Skipped: configured path is not a git repository.')}`);
|
|
44
|
+
failedRepositories.push(repoName);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const hasUncommittedChanges = await checkUncommittedChanges(repoPath);
|
|
48
|
+
if (hasUncommittedChanges) {
|
|
49
|
+
console.log(` ${fail('Skipped: uncommitted changes detected.')}`);
|
|
50
|
+
failedRepositories.push(repoName);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
await fetch(repoPath);
|
|
55
|
+
await checkoutBranch(repoPath, taskRepository.branch);
|
|
56
|
+
console.log(` ${ok(`Checked out branch ${chalk.bold(taskRepository.branch)}`)}`);
|
|
57
|
+
successfulRepositories.push(repoName);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
console.log(` ${fail('Failed: could not fetch/checkout branch.')}`);
|
|
61
|
+
failedRepositories.push(repoName);
|
|
62
|
+
}
|
|
32
63
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
64
|
+
console.log();
|
|
65
|
+
console.log(ok(`Repositories checked out: ${successfulRepositories.length}`));
|
|
66
|
+
if (failedRepositories.length > 0) {
|
|
67
|
+
console.log(fail(`Repositories failed/skipped: ${failedRepositories.length}`));
|
|
68
|
+
for (const repository of failedRepositories) {
|
|
69
|
+
console.log(` ${muted('•')} ${repository}`);
|
|
70
|
+
}
|
|
36
71
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
72
|
+
if (successfulRepositories.length > 0 && failedRepositories.length === 0) {
|
|
73
|
+
try {
|
|
74
|
+
await moveTaskToHumanReview(selectedTask.taskId);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
console.log(`\n${info('Could not move task to Human Review. Please update it manually.')}\n`);
|
|
78
|
+
}
|
|
42
79
|
}
|
|
43
|
-
console.log(`\n${
|
|
44
|
-
await fetch(repoPath);
|
|
45
|
-
await checkoutBranch(repoPath, taskRepository.branch);
|
|
46
|
-
console.log(ok(`Repository: ${chalk.bold(repoName)}`));
|
|
47
|
-
console.log(ok(`Branch: ${chalk.bold(taskRepository.branch)}`));
|
|
48
|
-
console.log(`${ok('Checkout complete')}\n`);
|
|
80
|
+
console.log(`\n${ok('Checkout complete')}\n`);
|
|
49
81
|
}
|
|
50
82
|
//# sourceMappingURL=checkout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,KAAK,GACN,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAmBA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAkElD"}
|
package/dist/commands/tasks.js
CHANGED
|
@@ -6,6 +6,8 @@ import { setRuntimeSelectedTask } from '../context/runtimeContext.js';
|
|
|
6
6
|
import { cmd, fail, info, kv, muted, ok, section } from '../utils/ui.js';
|
|
7
7
|
function printTaskRepositories(task) {
|
|
8
8
|
console.log(`\n${section(`Linked repositories for: ${task.title}`)}\n`);
|
|
9
|
+
console.log(kv('Task ID', task.id));
|
|
10
|
+
console.log('');
|
|
9
11
|
for (const repository of task.repositories) {
|
|
10
12
|
console.log(kv('Repository', repository.fullName));
|
|
11
13
|
console.log(` ${muted('branch')} ${chalk.bold(repository.branch)}`);
|
|
@@ -41,7 +43,7 @@ export async function tasksCommand() {
|
|
|
41
43
|
name: 'selectedTaskId',
|
|
42
44
|
message: 'Choose a task',
|
|
43
45
|
choices: tasks.map((task) => ({
|
|
44
|
-
name: task.title
|
|
46
|
+
name: `${task.title} (${task.id})`,
|
|
45
47
|
value: task.id,
|
|
46
48
|
})),
|
|
47
49
|
},
|
|
@@ -57,6 +59,7 @@ export async function tasksCommand() {
|
|
|
57
59
|
repositories: selectedTask.repositories,
|
|
58
60
|
});
|
|
59
61
|
console.log(`\n${ok(`Task selected: ${chalk.bold(selectedTask.title)}`)}`);
|
|
62
|
+
console.log(kv('Task ID', selectedTask.id));
|
|
60
63
|
if (selectedTask.repositories.length === 0) {
|
|
61
64
|
console.log(`${info('This task has no linked repositories.')}\n`);
|
|
62
65
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAa,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExE,SAAS,qBAAqB,CAAC,IAAU;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configService.d.ts","sourceRoot":"","sources":["../../src/config/configService.ts"],"names":[],"mappings":"AAaA,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExD;
|
|
1
|
+
{"version":3,"file":"configService.d.ts","sourceRoot":"","sources":["../../src/config/configService.ts"],"names":[],"mappings":"AAaA,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExD;AAcD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOhE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAO1F;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQ1D"}
|
|
@@ -8,8 +8,21 @@ const config = new Conf({
|
|
|
8
8
|
export function getRepositories() {
|
|
9
9
|
return config.get('repositories');
|
|
10
10
|
}
|
|
11
|
+
function findRepositoryKey(repoName) {
|
|
12
|
+
const repositories = getRepositories();
|
|
13
|
+
const exactMatch = Object.prototype.hasOwnProperty.call(repositories, repoName);
|
|
14
|
+
if (exactMatch) {
|
|
15
|
+
return repoName;
|
|
16
|
+
}
|
|
17
|
+
const normalizedRepoName = repoName.toLowerCase();
|
|
18
|
+
return Object.keys(repositories).find((name) => name.toLowerCase() === normalizedRepoName);
|
|
19
|
+
}
|
|
11
20
|
export function getRepoPath(repoName) {
|
|
12
|
-
|
|
21
|
+
const repositoryKey = findRepositoryKey(repoName);
|
|
22
|
+
if (!repositoryKey) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return getRepositories()[repositoryKey];
|
|
13
26
|
}
|
|
14
27
|
export function addRepository(repoName, repoPath) {
|
|
15
28
|
const repositories = getRepositories();
|
|
@@ -18,11 +31,11 @@ export function addRepository(repoName, repoPath) {
|
|
|
18
31
|
return { overwritten };
|
|
19
32
|
}
|
|
20
33
|
export function removeRepository(repoName) {
|
|
21
|
-
const
|
|
22
|
-
if (!
|
|
34
|
+
const repositoryKey = findRepositoryKey(repoName);
|
|
35
|
+
if (!repositoryKey) {
|
|
23
36
|
return false;
|
|
24
37
|
}
|
|
25
|
-
config.delete(`repositories.${
|
|
38
|
+
config.delete(`repositories.${repositoryKey}`);
|
|
26
39
|
return true;
|
|
27
40
|
}
|
|
28
41
|
//# sourceMappingURL=configService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configService.js","sourceRoot":"","sources":["../../src/config/configService.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAMvB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAiB;IACtC,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE;QACR,YAAY,EAAE,EAAE;KACjB;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,eAAe,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"configService.js","sourceRoot":"","sources":["../../src/config/configService.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAMvB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAiB;IACtC,WAAW,EAAE,YAAY;IACzB,QAAQ,EAAE;QACR,YAAY,EAAE,EAAE;KACjB;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe;IAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAE/E,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,kBAAkB,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACjD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,eAAe,EAAE,CAAC,aAAa,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAgB;IAC9D,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEnD,MAAM,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAA;IAEhD,OAAO,EAAE,WAAW,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACjD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAA;IAC9C,OAAO,IAAI,CAAA;AACb,CAAC"}
|