@ludeo/cli 1.4.9 → 1.4.11
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/README.md +6 -76
- package/dist/ludeo-darwin-amd64 +0 -0
- package/dist/ludeo-darwin-arm64 +0 -0
- package/dist/ludeo-linux-amd64 +0 -0
- package/dist/ludeo-linux-arm64 +0 -0
- package/dist/ludeo-windows-amd64.exe +0 -0
- package/dist/ludeo-windows-arm64.exe +0 -0
- package/package.json +3 -5
- package/scripts/build-readme.js +79 -68
- package/scripts/release.js +0 -17
- package/README.npm.md +0 -260
package/README.md
CHANGED
|
@@ -16,21 +16,19 @@ ludeo version
|
|
|
16
16
|
## Quick Start
|
|
17
17
|
|
|
18
18
|
### Getting Your Game ID and Access Token
|
|
19
|
-
Both your **Game ID** and **Access Token** are available in the [Studio
|
|
19
|
+
Both your **Game ID** and **Access Token** are available in the [Studio Labs](https://studio.ludeo.com) under **Environments**.
|
|
20
20
|
|
|
21
|
-
- **Access Token:** In Environments, click **Create Token**, name it, then copy and save the token (you won
|
|
22
|
-
- **Game ID:** In Environments, it
|
|
21
|
+
- **Access Token:** In Environments, click **Create Token**, name it, then copy and save the token (you won't be able to see it again).
|
|
22
|
+
- **Game ID:** In Environments, it's shown at the top of the page next to the API key.
|
|
23
|
+
|
|
24
|
+
> **Windows note:** All commands below work in Command Prompt, PowerShell, and terminal emulators. For multi-line commands, replace `\` with `^` in Command Prompt.
|
|
23
25
|
|
|
24
26
|
### 1. Authentication
|
|
25
27
|
Save your access token:
|
|
26
|
-
|
|
27
|
-
**macOS / Linux:**
|
|
28
28
|
```bash
|
|
29
29
|
ludeo auth set-token --access-token YOUR_ACCESS_TOKEN
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
**Windows (Command Prompt):** use the same command; for multi-line commands use `^` at the end of each line instead of `\`.
|
|
33
|
-
|
|
34
32
|
You can also check if a token is saved:
|
|
35
33
|
```bash
|
|
36
34
|
ludeo auth status
|
|
@@ -40,20 +38,13 @@ ludeo auth status
|
|
|
40
38
|
|
|
41
39
|
#### Interactive Mode (Recommended for First-Time Users)
|
|
42
40
|
Simply run the upload command without flags to start the interactive wizard:
|
|
43
|
-
|
|
44
|
-
**macOS / Linux:**
|
|
45
41
|
```bash
|
|
46
42
|
ludeo builds upload
|
|
47
43
|
```
|
|
48
44
|
|
|
49
|
-
**Windows (Command Prompt):**
|
|
50
|
-
```cmd
|
|
51
|
-
ludeo builds upload
|
|
52
|
-
```
|
|
53
|
-
|
|
54
45
|
The interactive mode will guide you through:
|
|
55
46
|
1. **Game ID** - Enter your game's unique identifier
|
|
56
|
-
2. **Build Creation Type** - Choose between `new
|
|
47
|
+
2. **Build Creation Type** - Choose between `new` or `sdkFree`
|
|
57
48
|
3. **Build Type** - Select `major` or `minor` (with warning for major builds)
|
|
58
49
|
4. **Major Version Selection** - If creating a minor build, select from existing major versions
|
|
59
50
|
5. **Game Version** - Enter the version number (e.g., 1.2.3)
|
|
@@ -73,8 +64,6 @@ ludeo builds upload --no-interactive [flags...]
|
|
|
73
64
|
Upload your game build with a simple command. The CLI supports two build creation types (**modification builds are not supported from the CLI—use [Studio Labs](https://studio.ludeo.com) for those**):
|
|
74
65
|
|
|
75
66
|
#### New Build (Complete build from scratch) - DEFAULT
|
|
76
|
-
|
|
77
|
-
**macOS / Linux:**
|
|
78
67
|
```bash
|
|
79
68
|
# With explicit build-creation-type
|
|
80
69
|
ludeo builds upload \
|
|
@@ -97,18 +86,6 @@ ludeo builds upload \
|
|
|
97
86
|
--sdk-version "2.0.0"
|
|
98
87
|
```
|
|
99
88
|
|
|
100
|
-
**Windows (Command Prompt):** use `^` at the end of each line for continuation:
|
|
101
|
-
```cmd
|
|
102
|
-
ludeo builds upload ^
|
|
103
|
-
--game-id YOUR_GAME_ID ^
|
|
104
|
-
--exec-path "game.exe" ^
|
|
105
|
-
--local-directory "C:\path\to\your\builds" ^
|
|
106
|
-
--build-creation-type new ^
|
|
107
|
-
--build-type major ^
|
|
108
|
-
--game-version "1.2.3" ^
|
|
109
|
-
--sdk-version "2.0.0"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
89
|
#### SDK Free Build (Performance testing without Ludeo SDK)
|
|
113
90
|
```bash
|
|
114
91
|
ludeo builds upload \
|
|
@@ -181,53 +158,8 @@ ludeo auth logout
|
|
|
181
158
|
- **Cross-Platform**: Works on Windows, macOS, and Linux
|
|
182
159
|
- **Automatic Updates**: Keep your CLI up to date with npm
|
|
183
160
|
|
|
184
|
-
## Testing
|
|
185
|
-
|
|
186
|
-
The CLI includes comprehensive unit tests that verify core functionality including authentication, build uploads, and request payload validation.
|
|
187
|
-
|
|
188
|
-
### Running Tests
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
# Run all tests
|
|
192
|
-
go test ./...
|
|
193
|
-
|
|
194
|
-
# Run tests for a specific package
|
|
195
|
-
go test ./pkg/commands -v
|
|
196
|
-
go test ./internal/api -v
|
|
197
|
-
|
|
198
|
-
# Run a specific test
|
|
199
|
-
go test ./pkg/commands -v -run TestAuthSetToken
|
|
200
|
-
go test ./pkg/commands -v -run TestBuildUploadMinor
|
|
201
|
-
go test ./pkg/commands -v -run TestBuildUploadMajor
|
|
202
|
-
|
|
203
|
-
# Run tests with coverage
|
|
204
|
-
go test ./pkg/commands -cover
|
|
205
|
-
go test ./... -coverprofile=coverage.out
|
|
206
|
-
|
|
207
|
-
# View coverage report
|
|
208
|
-
go tool cover -html=coverage.out
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Test Coverage
|
|
212
|
-
|
|
213
|
-
The test suite includes:
|
|
214
|
-
|
|
215
|
-
- **Authentication Tests**: Verify `set-token` command saves tokens correctly
|
|
216
|
-
- **Build Upload Tests**: Verify minor and major build uploads send correct payloads
|
|
217
|
-
- **Request Validation**: Verify HTTP requests include correct headers and JSON structure
|
|
218
|
-
- **Bug Prevention**: Tests verify that `majorBuildId` is correctly included/excluded based on build type
|
|
219
|
-
|
|
220
|
-
### Key Tests
|
|
221
|
-
|
|
222
|
-
- `TestAuthSetToken` - Tests token saving functionality
|
|
223
|
-
- `TestBuildUploadMinor` - Verifies minor builds include `majorBuildId` in request
|
|
224
|
-
- `TestBuildUploadMajor` - Verifies major builds exclude `majorBuildId` from request
|
|
225
|
-
- `TestBuildUploadRequestPayload` - Validates exact JSON payload structure
|
|
226
|
-
- `TestBuildUploadRequestHeaders` - Verifies HTTP headers are correct
|
|
227
|
-
|
|
228
161
|
## Updating
|
|
229
162
|
|
|
230
|
-
**npm:**
|
|
231
163
|
```bash
|
|
232
164
|
npm update -g @ludeo/cli
|
|
233
165
|
```
|
|
@@ -300,5 +232,3 @@ Need help? Here's how to get support:
|
|
|
300
232
|
1. Check this README and troubleshooting section
|
|
301
233
|
2. **npm:** run `npm rebuild @ludeo/cli` if you encounter issues. **Windows (standalone):** ensure `ludeo.exe` is in your PATH and see the troubleshooting section above.
|
|
302
234
|
3. Contact the Ludeo platform team for additional assistance
|
|
303
|
-
|
|
304
|
-
For detailed documentation and advanced usage, visit the [Ludeo Developer Portal](https://developers.ludeo.com) or [Ludeo CLI Documentation](https://docs.ludeo.com/cli).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ludeo/cli",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.11",
|
|
4
4
|
"description": "Ludeo CLI - Upload game builds and manage content on the Ludeo platform",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "make build-all",
|
|
11
11
|
"postinstall": "node scripts/postinstall.js",
|
|
12
|
-
"prepublishOnly": "npm
|
|
12
|
+
"prepublishOnly": "make npm-build",
|
|
13
13
|
"release": "node scripts/release.js",
|
|
14
14
|
"release:patch": "node scripts/release.js patch",
|
|
15
15
|
"release:minor": "node scripts/release.js minor",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
],
|
|
27
27
|
"author": "Ludeo Team",
|
|
28
28
|
"license": "MIT",
|
|
29
|
-
"readme": "README.npm.md",
|
|
30
29
|
"repository": {
|
|
31
30
|
"type": "git",
|
|
32
31
|
"url": "git+https://github.com/ludeo/cli.git"
|
|
@@ -38,8 +37,7 @@
|
|
|
38
37
|
"bin/",
|
|
39
38
|
"dist/",
|
|
40
39
|
"scripts/",
|
|
41
|
-
"LICENSE"
|
|
42
|
-
"README.npm.md"
|
|
40
|
+
"LICENSE"
|
|
43
41
|
],
|
|
44
42
|
"os": [
|
|
45
43
|
"win32",
|
package/scripts/build-readme.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Build README variants from docs/
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Build README variants from docs/README.template.md.
|
|
4
|
+
*
|
|
5
|
+
* Outputs:
|
|
6
|
+
* README.md — GitHub repo + npm package page
|
|
7
|
+
* windows-releases/template/README.md — Windows ZIP release (exe install)
|
|
8
|
+
*
|
|
9
|
+
* Conditional markers in the template:
|
|
10
|
+
* <!-- #if VARIANT --> Include block only for that variant
|
|
11
|
+
* <!-- #if !VARIANT --> Include block for all variants EXCEPT that one
|
|
12
|
+
* <!-- #else --> Opposite of preceding #if
|
|
13
|
+
* <!-- #endif --> End conditional block
|
|
14
|
+
*
|
|
15
|
+
* Supported variant names: windows (used in #if conditionals)
|
|
16
|
+
* Template variable: {{VERSION}} (replaced from package.json)
|
|
7
17
|
*
|
|
8
18
|
* Run: node scripts/build-readme.js
|
|
9
19
|
*/
|
|
@@ -12,86 +22,87 @@ const fs = require('fs');
|
|
|
12
22
|
const path = require('path');
|
|
13
23
|
|
|
14
24
|
const ROOT = path.resolve(__dirname, '..');
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const parts = [];
|
|
39
|
-
for (const name of order) {
|
|
40
|
-
if (excludeSet && excludeSet.has(name)) continue;
|
|
41
|
-
const file = path.join(dir, name);
|
|
42
|
-
if (!fs.existsSync(file)) {
|
|
43
|
-
console.warn(`Warning: fragment missing: ${name}`);
|
|
25
|
+
const TEMPLATE = path.join(ROOT, 'docs', 'README.template.md');
|
|
26
|
+
|
|
27
|
+
const VARIANTS = {
|
|
28
|
+
main: { flags: { windows: false } },
|
|
29
|
+
windows: { flags: { windows: true } },
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function processTemplate(template, flags, vars) {
|
|
33
|
+
const lines = template.split('\n');
|
|
34
|
+
const output = [];
|
|
35
|
+
const stack = []; // { include: boolean, hadElse: boolean }
|
|
36
|
+
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
const trimmed = line.trim();
|
|
39
|
+
|
|
40
|
+
const ifMatch = trimmed.match(/^<!--\s*#if\s+(!?)(\w+)\s*-->$/);
|
|
41
|
+
if (ifMatch) {
|
|
42
|
+
const negated = ifMatch[1] === '!';
|
|
43
|
+
const flag = ifMatch[2];
|
|
44
|
+
const value = !!flags[flag];
|
|
45
|
+
const include = negated ? !value : value;
|
|
46
|
+
const parentInclude = stack.length === 0 || stack[stack.length - 1].include;
|
|
47
|
+
stack.push({ include: parentInclude && include, hadElse: false });
|
|
44
48
|
continue;
|
|
45
49
|
}
|
|
46
|
-
parts.push(fs.readFileSync(file, 'utf8').trim());
|
|
47
|
-
}
|
|
48
|
-
return parts.join('\n\n');
|
|
49
|
-
}
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
if (trimmed === '<!-- #else -->') {
|
|
52
|
+
if (stack.length > 0) {
|
|
53
|
+
const top = stack[stack.length - 1];
|
|
54
|
+
const parentInclude = stack.length <= 1 || stack[stack.length - 2].include;
|
|
55
|
+
top.include = parentInclude && !top.include;
|
|
56
|
+
top.hadElse = true;
|
|
57
|
+
}
|
|
57
58
|
continue;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const file = path.join(README_DIR, name);
|
|
63
|
-
if (!fs.existsSync(file)) {
|
|
64
|
-
console.warn(`Warning: fragment missing: ${name}`);
|
|
60
|
+
|
|
61
|
+
if (trimmed === '<!-- #endif -->') {
|
|
62
|
+
stack.pop();
|
|
65
63
|
continue;
|
|
66
64
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (!fs.existsSync(file)) {
|
|
72
|
-
console.warn(`Warning: Windows fragment missing: ${name}`);
|
|
73
|
-
continue;
|
|
65
|
+
|
|
66
|
+
const shouldInclude = stack.length === 0 || stack[stack.length - 1].include;
|
|
67
|
+
if (shouldInclude) {
|
|
68
|
+
output.push(line);
|
|
74
69
|
}
|
|
75
|
-
parts.push(fs.readFileSync(file, 'utf8').trim());
|
|
76
70
|
}
|
|
77
|
-
|
|
71
|
+
|
|
72
|
+
let result = output.join('\n');
|
|
73
|
+
|
|
74
|
+
for (const [key, value] of Object.entries(vars)) {
|
|
75
|
+
result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Collapse 3+ consecutive blank lines into 2
|
|
79
|
+
result = result.replace(/\n{3,}/g, '\n\n');
|
|
80
|
+
|
|
81
|
+
return result.trim() + '\n';
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
function main() {
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const
|
|
85
|
+
const template = fs.readFileSync(TEMPLATE, 'utf8');
|
|
86
|
+
const version = require(path.join(ROOT, 'package.json')).version;
|
|
87
|
+
const vars = { VERSION: `v${version}` };
|
|
84
88
|
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
// Build each variant
|
|
90
|
+
for (const [name, config] of Object.entries(VARIANTS)) {
|
|
91
|
+
const content = processTemplate(template, config.flags, vars);
|
|
92
|
+
|
|
93
|
+
let outputPath;
|
|
94
|
+
if (name === 'main') {
|
|
95
|
+
outputPath = path.join(ROOT, 'README.md');
|
|
96
|
+
} else if (name === 'windows') {
|
|
97
|
+
const dir = path.join(ROOT, 'windows-releases', 'template');
|
|
98
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
99
|
+
outputPath = path.join(dir, 'README.md');
|
|
100
|
+
}
|
|
87
101
|
|
|
88
|
-
|
|
89
|
-
if (!fs.existsSync(windowsTemplateDir)) {
|
|
90
|
-
fs.mkdirSync(windowsTemplateDir, { recursive: true });
|
|
102
|
+
fs.writeFileSync(outputPath, content, 'utf8');
|
|
91
103
|
}
|
|
92
|
-
fs.writeFileSync(path.join(windowsTemplateDir, 'README.md'), windowsReadme + '\n', 'utf8');
|
|
93
104
|
|
|
94
|
-
console.log('Built README.md
|
|
105
|
+
console.log('Built README.md and windows-releases/template/README.md');
|
|
95
106
|
}
|
|
96
107
|
|
|
97
108
|
main();
|
package/scripts/release.js
CHANGED
|
@@ -84,8 +84,6 @@ function createWindowsRelease(version) {
|
|
|
84
84
|
function updateWindowsDocumentation(version, releaseDir) {
|
|
85
85
|
const files = [
|
|
86
86
|
'README.md',
|
|
87
|
-
'INSTALL.txt',
|
|
88
|
-
'install.bat',
|
|
89
87
|
'PACKAGE_CONTENTS.txt'
|
|
90
88
|
];
|
|
91
89
|
|
|
@@ -127,21 +125,6 @@ function getBasicFileContent(filename, version) {
|
|
|
127
125
|
## Support
|
|
128
126
|
- Email: support@ludeo.com
|
|
129
127
|
- Documentation: https://docs.ludeo.com/cli
|
|
130
|
-
`;
|
|
131
|
-
case 'INSTALL.txt':
|
|
132
|
-
return `LUDEO CLI v${version} - WINDOWS INSTALLATION
|
|
133
|
-
|
|
134
|
-
1. Choose the right executable:
|
|
135
|
-
- ludeo-windows-amd64.exe (Intel/AMD)
|
|
136
|
-
- ludeo-windows-arm64.exe (ARM)
|
|
137
|
-
|
|
138
|
-
2. Rename to "ludeo.exe"
|
|
139
|
-
|
|
140
|
-
3. Add to PATH:
|
|
141
|
-
- Copy to C:\\ludeo-cli\\
|
|
142
|
-
- Add C:\\ludeo-cli\\ to PATH
|
|
143
|
-
|
|
144
|
-
4. Test: ludeo --version
|
|
145
128
|
`;
|
|
146
129
|
default:
|
|
147
130
|
return `# Ludeo CLI v${version} - ${filename}`;
|
package/README.npm.md
DELETED
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
# Ludeo CLI
|
|
2
|
-
|
|
3
|
-
The official Ludeo CLI tool for uploading game builds to the Ludeo platform. Install via npm for easy setup and automatic updates.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install -g @ludeo/cli
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Verify the installation:
|
|
12
|
-
```bash
|
|
13
|
-
ludeo version
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Quick Start
|
|
17
|
-
|
|
18
|
-
### Getting Your Game ID and Access Token
|
|
19
|
-
Both your **Game ID** and **Access Token** are available in the [Studio Lab](https://studio.ludeo.com) under **Environments**.
|
|
20
|
-
|
|
21
|
-
- **Access Token:** In Environments, click **Create Token**, name it, then copy and save the token (you won’t be able to see it again).
|
|
22
|
-
- **Game ID:** In Environments, it’s shown at the top of the page next to the API key.
|
|
23
|
-
|
|
24
|
-
### 1. Authentication
|
|
25
|
-
Save your access token:
|
|
26
|
-
|
|
27
|
-
**macOS / Linux:**
|
|
28
|
-
```bash
|
|
29
|
-
ludeo auth set-token --access-token YOUR_ACCESS_TOKEN
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Windows (Command Prompt):** use the same command; for multi-line commands use `^` at the end of each line instead of `\`.
|
|
33
|
-
|
|
34
|
-
You can also check if a token is saved:
|
|
35
|
-
```bash
|
|
36
|
-
ludeo auth status
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### 2. Upload Your Build
|
|
40
|
-
|
|
41
|
-
#### Interactive Mode (Recommended for First-Time Users)
|
|
42
|
-
Simply run the upload command without flags to start the interactive wizard:
|
|
43
|
-
|
|
44
|
-
**macOS / Linux:**
|
|
45
|
-
```bash
|
|
46
|
-
ludeo builds upload
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
**Windows (Command Prompt):**
|
|
50
|
-
```cmd
|
|
51
|
-
ludeo builds upload
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
The interactive mode will guide you through:
|
|
55
|
-
1. **Game ID** - Enter your game's unique identifier
|
|
56
|
-
2. **Build Creation Type** - Choose between `new`, or `sdkFree`
|
|
57
|
-
3. **Build Type** - Select `major` or `minor` (with warning for major builds)
|
|
58
|
-
4. **Major Version Selection** - If creating a minor build, select from existing major versions
|
|
59
|
-
5. **Game Version** - Enter the version number (e.g., 1.2.3)
|
|
60
|
-
6. **SDK Version** - Enter the Ludeo SDK version (not required for sdkFree)
|
|
61
|
-
7. **Executable Path** - Path to your game executable relative to build directory
|
|
62
|
-
8. **Local Directory** - Path to your build files
|
|
63
|
-
9. **Changes Description** - Optional description of what changed
|
|
64
|
-
|
|
65
|
-
Before uploading, you'll see a summary of all options and the equivalent CLI command for future use in scripts or CI/CD pipelines.
|
|
66
|
-
|
|
67
|
-
To disable interactive mode (for CI/CD or scripts):
|
|
68
|
-
```bash
|
|
69
|
-
ludeo builds upload --no-interactive [flags...]
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
#### Command-Line Mode
|
|
73
|
-
Upload your game build with a simple command. The CLI supports two build creation types (**modification builds are not supported from the CLI—use [Studio Labs](https://studio.ludeo.com) for those**):
|
|
74
|
-
|
|
75
|
-
#### New Build (Complete build from scratch) - DEFAULT
|
|
76
|
-
|
|
77
|
-
**macOS / Linux:**
|
|
78
|
-
```bash
|
|
79
|
-
# With explicit build-creation-type
|
|
80
|
-
ludeo builds upload \
|
|
81
|
-
--game-id YOUR_GAME_ID \
|
|
82
|
-
--exec-path game.exe \
|
|
83
|
-
--local-directory ./builds \
|
|
84
|
-
--build-creation-type new \
|
|
85
|
-
--build-type major \
|
|
86
|
-
--game-version "1.2.3" \
|
|
87
|
-
--sdk-version "2.0.0" \
|
|
88
|
-
--changes-description "Bug fixes and performance improvements"
|
|
89
|
-
|
|
90
|
-
# Or simply omit --build-creation-type (defaults to "new")
|
|
91
|
-
ludeo builds upload \
|
|
92
|
-
--game-id YOUR_GAME_ID \
|
|
93
|
-
--exec-path game.exe \
|
|
94
|
-
--local-directory ./builds \
|
|
95
|
-
--build-type major \
|
|
96
|
-
--game-version "1.2.3" \
|
|
97
|
-
--sdk-version "2.0.0"
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
**Windows (Command Prompt):** use `^` at the end of each line for continuation:
|
|
101
|
-
```cmd
|
|
102
|
-
ludeo builds upload ^
|
|
103
|
-
--game-id YOUR_GAME_ID ^
|
|
104
|
-
--exec-path "game.exe" ^
|
|
105
|
-
--local-directory "C:\path\to\your\builds" ^
|
|
106
|
-
--build-creation-type new ^
|
|
107
|
-
--build-type major ^
|
|
108
|
-
--game-version "1.2.3" ^
|
|
109
|
-
--sdk-version "2.0.0"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
#### SDK Free Build (Performance testing without Ludeo SDK)
|
|
113
|
-
```bash
|
|
114
|
-
ludeo builds upload \
|
|
115
|
-
--game-id YOUR_GAME_ID \
|
|
116
|
-
--exec-path game.exe \
|
|
117
|
-
--local-directory ./builds \
|
|
118
|
-
--build-creation-type sdkFree \
|
|
119
|
-
--build-type major \
|
|
120
|
-
--game-version "1.2.3" \
|
|
121
|
-
--changes-description "Performance testing build"
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### 3. Build Types and Requirements
|
|
125
|
-
|
|
126
|
-
**Build Creation Types (CLI):**
|
|
127
|
-
- `new`: Complete build from scratch (requires game-version, sdk-version, build-type) **[DEFAULT]**
|
|
128
|
-
- `sdkFree`: Performance testing without Ludeo SDK (requires game-version, build-type; sdk-version not required)
|
|
129
|
-
|
|
130
|
-
**Note:** Modification builds (builds based on an existing build) are **not supported from the CLI**. Create modification builds from [Studio Labs](https://studio.ludeo.com) only.
|
|
131
|
-
|
|
132
|
-
**Build Types:**
|
|
133
|
-
- `major`: Major version build
|
|
134
|
-
- `minor`: Minor version build (requires major-build-id)
|
|
135
|
-
|
|
136
|
-
**Additional Flags:**
|
|
137
|
-
- `--request-id`: Optional request ID for tracking
|
|
138
|
-
- `--no-interactive`: Disable interactive prompts (for CI/CD or scripts)
|
|
139
|
-
- `--dry-run`: Preview the upload without making any changes
|
|
140
|
-
|
|
141
|
-
#### Dry-Run Mode
|
|
142
|
-
Preview what would be uploaded without making any changes:
|
|
143
|
-
```bash
|
|
144
|
-
ludeo builds upload --dry-run \
|
|
145
|
-
--game-id YOUR_GAME_ID \
|
|
146
|
-
--exec-path game.exe \
|
|
147
|
-
--local-directory ./builds \
|
|
148
|
-
--build-type major \
|
|
149
|
-
--game-version "1.2.3" \
|
|
150
|
-
--sdk-version "2.0.0"
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Dry-run will:
|
|
154
|
-
- Validate all parameters and directory structure
|
|
155
|
-
- Scan and display all files that would be uploaded
|
|
156
|
-
- Show total file count and size
|
|
157
|
-
- NOT create any build metadata or upload files
|
|
158
|
-
|
|
159
|
-
### 4. Manage Builds
|
|
160
|
-
```bash
|
|
161
|
-
# List your builds
|
|
162
|
-
ludeo builds list --game-id YOUR_GAME_ID
|
|
163
|
-
|
|
164
|
-
# Get build details
|
|
165
|
-
ludeo builds get --game-id YOUR_GAME_ID --build-id BUILD_ID
|
|
166
|
-
|
|
167
|
-
# Check if token is saved
|
|
168
|
-
ludeo auth status
|
|
169
|
-
|
|
170
|
-
# Remove saved token when done
|
|
171
|
-
ludeo auth logout
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## Features
|
|
175
|
-
|
|
176
|
-
- **Interactive Mode**: Guided wizard for easy build uploads - just run `ludeo builds upload` and follow the prompts
|
|
177
|
-
- **Easy Upload**: Upload complete game builds with a single command
|
|
178
|
-
- **Large File Support**: Automatically handles large files and multiple files
|
|
179
|
-
- **Progress Tracking**: Real-time progress updates during uploads
|
|
180
|
-
- **Dry-Run Mode**: Preview uploads without making changes using `--dry-run`
|
|
181
|
-
- **Cross-Platform**: Works on Windows, macOS, and Linux
|
|
182
|
-
- **Automatic Updates**: Keep your CLI up to date with npm
|
|
183
|
-
|
|
184
|
-
## Updating
|
|
185
|
-
|
|
186
|
-
**npm:**
|
|
187
|
-
```bash
|
|
188
|
-
npm update -g @ludeo/cli
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
**Windows (standalone exe):** download the latest release from the [GitHub releases](https://github.com/ludeo/cli/releases) page and replace your existing executable.
|
|
192
|
-
|
|
193
|
-
## CI/CD Integration
|
|
194
|
-
|
|
195
|
-
### GitHub Actions
|
|
196
|
-
```yaml
|
|
197
|
-
- name: Install Ludeo CLI
|
|
198
|
-
run: npm install -g @ludeo/cli
|
|
199
|
-
|
|
200
|
-
- name: Upload Build
|
|
201
|
-
run: |
|
|
202
|
-
ludeo auth set-token --access-token ${{ secrets.LUDEO_ACCESS_TOKEN }}
|
|
203
|
-
ludeo builds upload \
|
|
204
|
-
--game-id ${{ env.GAME_ID }} \
|
|
205
|
-
--exec-path game.exe \
|
|
206
|
-
--local-directory ./builds \
|
|
207
|
-
--build-creation-type new \
|
|
208
|
-
--build-type major \
|
|
209
|
-
--game-version ${{ env.GAME_VERSION }} \
|
|
210
|
-
--sdk-version ${{ env.SDK_VERSION }}
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
## Troubleshooting
|
|
214
|
-
|
|
215
|
-
### Installation Issues
|
|
216
|
-
|
|
217
|
-
**Binary not found error:**
|
|
218
|
-
```bash
|
|
219
|
-
npm rebuild @ludeo/cli
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**Permission issues (macOS/Linux):**
|
|
223
|
-
```bash
|
|
224
|
-
sudo npm install -g @ludeo/cli
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
**Windows (npm):**
|
|
228
|
-
- Run PowerShell as Administrator
|
|
229
|
-
- Ensure Node.js is properly installed
|
|
230
|
-
|
|
231
|
-
**Windows (standalone exe):**
|
|
232
|
-
- **"ludeo is not recognized"** — Add the folder containing `ludeo.exe` to your PATH.
|
|
233
|
-
- **"Access denied" / "Permission denied"** — Right-click the executable → Properties → Unblock → OK, or run Command Prompt as Administrator.
|
|
234
|
-
- **Antivirus blocking** — Add an exception for the executable in your antivirus software.
|
|
235
|
-
|
|
236
|
-
### Common Issues
|
|
237
|
-
|
|
238
|
-
**Authentication errors:**
|
|
239
|
-
- Verify your access token is valid
|
|
240
|
-
- Check if token is saved with `ludeo auth status`
|
|
241
|
-
- Make sure you've saved your token with `ludeo auth set-token`
|
|
242
|
-
|
|
243
|
-
**Upload failures:**
|
|
244
|
-
- Ensure your build directory exists and is readable
|
|
245
|
-
- Check your internet connection
|
|
246
|
-
- Verify file paths are correct
|
|
247
|
-
|
|
248
|
-
**Large files:**
|
|
249
|
-
- Large files may take time to upload
|
|
250
|
-
- Ensure stable internet connection
|
|
251
|
-
|
|
252
|
-
## Support
|
|
253
|
-
|
|
254
|
-
Need help? Here's how to get support:
|
|
255
|
-
|
|
256
|
-
1. Check this README and troubleshooting section
|
|
257
|
-
2. **npm:** run `npm rebuild @ludeo/cli` if you encounter issues. **Windows (standalone):** ensure `ludeo.exe` is in your PATH and see the troubleshooting section above.
|
|
258
|
-
3. Contact the Ludeo platform team for additional assistance
|
|
259
|
-
|
|
260
|
-
For detailed documentation and advanced usage, visit the [Ludeo Developer Portal](https://developers.ludeo.com) or [Ludeo CLI Documentation](https://docs.ludeo.com/cli).
|