@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 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 Lab](https://studio.ludeo.com) under **Environments**.
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 wont be able to see it again).
22
- - **Game ID:** In Environments, its shown at the top of the page next to the API key.
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`, or `sdkFree`
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.9",
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 run build",
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",
@@ -1,9 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Build README variants from docs/readme/*.md fragments.
4
- * - README.md = full (repo, includes Testing) — for GitHub
5
- * - README.npm.md = usage only (no Testing) — for NPM package page
6
- * - windows-releases/template/README.md = Windows release (docs/readme + docs/readme-windows overrides)
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 README_DIR = path.join(ROOT, 'docs', 'readme');
16
- const README_WINDOWS_DIR = path.join(ROOT, 'docs', 'readme-windows');
17
-
18
- const FRAGMENTS_ORDER = [
19
- '01-title-intro.md',
20
- '02-installation.md',
21
- '03-quick-start.md',
22
- '04-features.md',
23
- '05-testing.md',
24
- '06-updating.md',
25
- '07-cicd.md',
26
- '08-troubleshooting.md',
27
- '09-support.md',
28
- ];
29
-
30
- /** Windows README: Windows-only title + installation, then shared 03–09 (skip 02 npm install, skip 05 testing), then Windows file-info/license */
31
- const WINDOWS_HEAD = ['01-title-overview.md', '02-installation.md'];
32
- const WINDOWS_TAIL = ['09-file-info-license.md'];
33
- const WINDOWS_FROM_README = ['03-quick-start.md', '04-features.md', '06-updating.md', '07-cicd.md', '08-troubleshooting.md', '09-support.md'];
34
-
35
- const NPM_EXCLUDE = new Set(['05-testing.md']);
36
-
37
- function buildVariant(dir, order, excludeSet) {
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
- function buildWindowsReadme() {
52
- const parts = [];
53
- for (const name of WINDOWS_HEAD) {
54
- const file = path.join(README_WINDOWS_DIR, name);
55
- if (!fs.existsSync(file)) {
56
- console.warn(`Warning: Windows fragment missing: ${name}`);
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
- parts.push(fs.readFileSync(file, 'utf8').trim());
60
- }
61
- for (const name of WINDOWS_FROM_README) {
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
- parts.push(fs.readFileSync(file, 'utf8').trim());
68
- }
69
- for (const name of WINDOWS_TAIL) {
70
- const file = path.join(README_WINDOWS_DIR, name);
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
- return parts.join('\n\n');
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 repoReadme = buildVariant(README_DIR, FRAGMENTS_ORDER, null);
82
- const npmReadme = buildVariant(README_DIR, FRAGMENTS_ORDER, NPM_EXCLUDE);
83
- const windowsReadme = buildWindowsReadme();
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
- fs.writeFileSync(path.join(ROOT, 'README.md'), repoReadme + '\n', 'utf8');
86
- fs.writeFileSync(path.join(ROOT, 'README.npm.md'), npmReadme + '\n', 'utf8');
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
- const windowsTemplateDir = path.join(ROOT, 'windows-releases', 'template');
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 (repo), README.npm.md (npm), windows-releases/template/README.md (Windows)');
105
+ console.log('Built README.md and windows-releases/template/README.md');
95
106
  }
96
107
 
97
108
  main();
@@ -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).