@amirdaraee/namewise 0.5.5 → 0.6.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/CHANGELOG.md +70 -19
- package/README.md +128 -115
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +46 -27
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/rename.d.ts +3 -0
- package/dist/cli/rename.d.ts.map +1 -1
- package/dist/cli/rename.js +73 -30
- package/dist/cli/rename.js.map +1 -1
- package/dist/cli/undo.d.ts +4 -0
- package/dist/cli/undo.d.ts.map +1 -0
- package/dist/cli/undo.js +66 -0
- package/dist/cli/undo.js.map +1 -0
- package/dist/services/file-renamer.d.ts +1 -1
- package/dist/services/file-renamer.d.ts.map +1 -1
- package/dist/services/file-renamer.js +60 -30
- package/dist/services/file-renamer.js.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config-loader.d.ts +16 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +25 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/history.d.ts +13 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js +21 -0
- package/dist/utils/history.js.map +1 -0
- package/package.json +1 -1
- package/RELEASE.md +0 -167
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACjJ;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AACpH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAC7G,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IAEjC,cAAc,CAAC,EAAE;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface NamiwiseFileConfig {
|
|
2
|
+
provider?: 'claude' | 'openai' | 'ollama' | 'lmstudio';
|
|
3
|
+
case?: string;
|
|
4
|
+
template?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
date?: string;
|
|
7
|
+
maxSize?: number;
|
|
8
|
+
model?: string;
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
concurrency?: number;
|
|
11
|
+
recursive?: boolean;
|
|
12
|
+
depth?: number;
|
|
13
|
+
output?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function loadConfig(targetDir: string): Promise<NamiwiseFileConfig>;
|
|
16
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAgBD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAI/E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
async function readConfigFile(filePath) {
|
|
5
|
+
try {
|
|
6
|
+
const raw = await fs.readFile(filePath, 'utf-8');
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(raw);
|
|
9
|
+
}
|
|
10
|
+
catch (parseError) {
|
|
11
|
+
throw new Error(`Invalid JSON in config file ${filePath}: ${parseError.message}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error.code === 'ENOENT')
|
|
16
|
+
return {};
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function loadConfig(targetDir) {
|
|
21
|
+
const userConfig = await readConfigFile(path.join(os.homedir(), '.namewise.json'));
|
|
22
|
+
const projectConfig = await readConfigFile(path.join(path.resolve(targetDir), '.namewise.json'));
|
|
23
|
+
return { ...userConfig, ...projectConfig };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAiBpB,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QAC/C,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,KAAM,UAA0B,CAAC,OAAO,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB;IAChD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjG,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,aAAa,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface HistoryEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
timestamp: string;
|
|
4
|
+
directory: string;
|
|
5
|
+
dryRun: boolean;
|
|
6
|
+
renames: Array<{
|
|
7
|
+
originalPath: string;
|
|
8
|
+
newPath: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export declare function readHistory(): Promise<HistoryEntry[]>;
|
|
12
|
+
export declare function appendHistory(entry: HistoryEntry): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAKD,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAO3D;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
const HISTORY_DIR = path.join(os.homedir(), '.namewise');
|
|
5
|
+
const HISTORY_FILE = path.join(HISTORY_DIR, 'history.json');
|
|
6
|
+
export async function readHistory() {
|
|
7
|
+
try {
|
|
8
|
+
const raw = await fs.readFile(HISTORY_FILE, 'utf-8');
|
|
9
|
+
return JSON.parse(raw);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function appendHistory(entry) {
|
|
16
|
+
await fs.mkdir(HISTORY_DIR, { recursive: true });
|
|
17
|
+
const history = await readHistory();
|
|
18
|
+
history.push(entry);
|
|
19
|
+
await fs.writeFile(HISTORY_FILE, JSON.stringify(history, null, 2), 'utf-8');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/utils/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAUpB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACzD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAmB;IACrD,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC"}
|
package/package.json
CHANGED
package/RELEASE.md
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# Release Process Documentation
|
|
2
|
-
|
|
3
|
-
This document explains how to release a new version of the Namewise CLI tool.
|
|
4
|
-
|
|
5
|
-
## Quick Release Commands
|
|
6
|
-
|
|
7
|
-
Based on your `package.json` scripts, you can use these commands for automated releases:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm run release # Patch version (1.0.0 → 1.0.1)
|
|
11
|
-
npm run release:minor # Minor version (1.0.0 → 1.1.0)
|
|
12
|
-
npm run release:major # Major version (1.0.0 → 2.0.0)
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
These commands will:
|
|
16
|
-
1. Run tests and build
|
|
17
|
-
2. Bump the version in `package.json`
|
|
18
|
-
3. Trigger the auto-release workflow
|
|
19
|
-
|
|
20
|
-
## Manual Release Process
|
|
21
|
-
|
|
22
|
-
If you prefer to do it manually:
|
|
23
|
-
|
|
24
|
-
### 1. Prepare the Release
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
# Ensure you're on main branch with latest changes
|
|
28
|
-
git checkout main
|
|
29
|
-
git pull origin main
|
|
30
|
-
|
|
31
|
-
# Run tests and build to ensure everything works
|
|
32
|
-
npm run test:run
|
|
33
|
-
npm run build
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 2. Update Version
|
|
37
|
-
|
|
38
|
-
Choose the appropriate version bump:
|
|
39
|
-
- **Patch** (bug fixes): `1.0.0 → 1.0.1`
|
|
40
|
-
- **Minor** (new features): `1.0.0 → 1.1.0`
|
|
41
|
-
- **Major** (breaking changes): `1.0.0 → 2.0.0`
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# Update version in package.json
|
|
45
|
-
npm version patch # or minor, or major
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 3. Push Changes
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
# Push the version bump commit
|
|
52
|
-
git push origin main
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
This will trigger the `auto-release.yml` workflow which will:
|
|
56
|
-
- Create a Git tag
|
|
57
|
-
- Publish to NPM automatically
|
|
58
|
-
|
|
59
|
-
### 4. Create GitHub Release (Optional)
|
|
60
|
-
|
|
61
|
-
To also publish to GitHub Packages:
|
|
62
|
-
|
|
63
|
-
1. Go to your GitHub repository
|
|
64
|
-
2. Click "Releases" → "Create a new release"
|
|
65
|
-
3. Choose the tag that was just created (e.g., `v1.0.1`)
|
|
66
|
-
4. Add release notes
|
|
67
|
-
5. Click "Publish release"
|
|
68
|
-
|
|
69
|
-
This triggers the `publish.yml` workflow.
|
|
70
|
-
|
|
71
|
-
## GitHub Workflows
|
|
72
|
-
|
|
73
|
-
Your project has three separate, independently runnable workflows:
|
|
74
|
-
|
|
75
|
-
### 1. Test Pipeline (`test.yml`)
|
|
76
|
-
- **Triggers**: Push to main/develop, PRs, manual dispatch, called by other workflows
|
|
77
|
-
- **Purpose**: Run tests and linting across Node.js versions
|
|
78
|
-
- **Manual run**: Go to Actions → Test Pipeline → "Run workflow"
|
|
79
|
-
|
|
80
|
-
### 2. Build Pipeline (`build.yml`)
|
|
81
|
-
- **Triggers**: Push to main, manual dispatch, or called by other workflows
|
|
82
|
-
- **Purpose**: Run tests first, then build the project and create artifacts
|
|
83
|
-
- **Dependencies**: Calls Test Pipeline automatically
|
|
84
|
-
- **Manual run**: Go to Actions → Build Pipeline → "Run workflow"
|
|
85
|
-
|
|
86
|
-
### 3. Publish Pipeline (`publish.yml`)
|
|
87
|
-
- **Triggers**: GitHub releases, manual dispatch
|
|
88
|
-
- **Purpose**: Publish to NPM and GitHub Packages using build artifacts
|
|
89
|
-
- **Features**:
|
|
90
|
-
- Uses artifacts from build pipeline (no rebuilding)
|
|
91
|
-
- Can use existing artifacts from previous builds
|
|
92
|
-
- Option to specify which artifact to use
|
|
93
|
-
- **Manual run**: Go to Actions → Publish Pipeline → "Run workflow"
|
|
94
|
-
|
|
95
|
-
### 4. Auto Release (`auto-release.yml`)
|
|
96
|
-
- **Triggers**: Push to main when package.json version changes
|
|
97
|
-
- **Purpose**: Automatically create tags and publish when version is bumped
|
|
98
|
-
|
|
99
|
-
## Prerequisites
|
|
100
|
-
|
|
101
|
-
### NPM Token
|
|
102
|
-
Add `NPM_TOKEN` to your GitHub repository secrets:
|
|
103
|
-
1. Go to npmjs.com → Access Tokens → Generate New Token
|
|
104
|
-
2. Copy the token
|
|
105
|
-
3. In GitHub: Settings → Secrets → Actions → New repository secret
|
|
106
|
-
4. Name: `NPM_TOKEN`, Value: your token
|
|
107
|
-
|
|
108
|
-
### Production Environment (Optional)
|
|
109
|
-
For extra safety, create a production environment:
|
|
110
|
-
1. GitHub → Settings → Environments → New environment
|
|
111
|
-
2. Name: `production`
|
|
112
|
-
3. Add protection rules (require reviews, etc.)
|
|
113
|
-
|
|
114
|
-
## Version Strategy
|
|
115
|
-
|
|
116
|
-
Follow [Semantic Versioning](https://semver.org/):
|
|
117
|
-
|
|
118
|
-
- **Major** (`X.0.0`): Breaking changes that require user action
|
|
119
|
-
- **Minor** (`0.X.0`): New features that are backward compatible
|
|
120
|
-
- **Patch** (`0.0.X`): Bug fixes and small improvements
|
|
121
|
-
|
|
122
|
-
## Troubleshooting
|
|
123
|
-
|
|
124
|
-
### Release Failed
|
|
125
|
-
- Check the Actions tab for error details
|
|
126
|
-
- Ensure NPM_TOKEN is valid
|
|
127
|
-
- Verify package.json version was actually changed
|
|
128
|
-
- Make sure tests pass: `npm run test:run`
|
|
129
|
-
|
|
130
|
-
### Package Already Published
|
|
131
|
-
- NPM doesn't allow republishing the same version
|
|
132
|
-
- Bump the version: `npm version patch`
|
|
133
|
-
- Push: `git push origin main`
|
|
134
|
-
|
|
135
|
-
### Using Existing Build Artifacts
|
|
136
|
-
|
|
137
|
-
You can publish using previously built artifacts:
|
|
138
|
-
|
|
139
|
-
1. **Use latest build**: Go to Actions → Publish Pipeline → Run workflow → Use artifact: `latest`
|
|
140
|
-
2. **Use specific build**: Find the artifact name from a previous build run → Run workflow → Use artifact: `build-artifacts-abc123def`
|
|
141
|
-
|
|
142
|
-
### Manual Publishing
|
|
143
|
-
If workflows fail, you can publish manually:
|
|
144
|
-
```bash
|
|
145
|
-
npm run build
|
|
146
|
-
npm run test:run
|
|
147
|
-
npm publish
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Example Release Workflow
|
|
151
|
-
|
|
152
|
-
Here's a complete example of releasing version 1.2.3:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
# 1. Prepare
|
|
156
|
-
git checkout main
|
|
157
|
-
git pull origin main
|
|
158
|
-
npm run test:run
|
|
159
|
-
|
|
160
|
-
# 2. Release (this does everything)
|
|
161
|
-
npm run release:minor # 1.2.2 → 1.2.3
|
|
162
|
-
|
|
163
|
-
# 3. Create GitHub release (optional)
|
|
164
|
-
# Go to GitHub → Releases → Create release from v1.2.3 tag
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
That's it! The automation handles the rest.
|