Skip to content

Commit 25db863

Browse files
committed
fix: create app with logo
1 parent 9d81857 commit 25db863

File tree

3 files changed

+54
-16
lines changed

3 files changed

+54
-16
lines changed

.env.development.local.example

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# API_ENDPOINT='https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com'
2-
API_ENDPOINT='http://localhost:4911'
2+
API_ENDPOINT='http://localhost:4912'
33
ISSUER_URL='https://cognito-idp.us-west-2.amazonaws.com/us-west-2_xxxxxxxxxx/.well-known/openid-configuration'
44
CLIENT_ID='xxxxxxxxxxxxxxxxxxxxxxxxxx'
55
DEBUG='codegenie:*'

README.md

+23-9
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ npx @codegenie/cli generate --description "An app that lets users upload photos,
55
```
66

77
<!-- toc -->
8-
* [Code Genie CLI](#code-genie-cli)
9-
* [Usage](#usage)
10-
* [Commands](#commands)
11-
* [Release](#release)
8+
9+
- [Code Genie CLI](#code-genie-cli)
10+
- [Usage](#usage)
11+
- [Commands](#commands)
12+
- [Release](#release)
1213
<!-- tocstop -->
1314

1415
# Usage
1516

1617
<!-- usage -->
18+
1719
```sh-session
1820
$ npm install -g @codegenie/cli
1921
$ @codegenie/cli COMMAND
@@ -25,16 +27,23 @@ USAGE
2527
$ @codegenie/cli COMMAND
2628
...
2729
```
30+
2831
<!-- usagestop -->
2932

3033
# Commands
3134

3235
<!-- commands -->
33-
* [`@codegenie/cli autocomplete [SHELL]`](#codegeniecli-autocomplete-shell)
34-
* [`@codegenie/cli generate`](#codegeniecli-generate)
35-
* [`@codegenie/cli help [COMMANDS]`](#codegeniecli-help-commands)
36-
* [`@codegenie/cli login`](#codegeniecli-login)
37-
* [`@codegenie/cli update [CHANNEL]`](#codegeniecli-update-channel)
36+
37+
- [Code Genie CLI](#code-genie-cli)
38+
- [Usage](#usage)
39+
- [Commands](#commands)
40+
- [`@codegenie/cli autocomplete [SHELL]`](#codegeniecli-autocomplete-shell)
41+
- [`@codegenie/cli generate`](#codegeniecli-generate)
42+
- [`@codegenie/cli help [COMMANDS]`](#codegeniecli-help-commands)
43+
- [`@codegenie/cli login`](#codegeniecli-login)
44+
- [`@codegenie/cli update [CHANNEL]`](#codegeniecli-update-channel)
45+
- [Release](#release)
46+
- [Development](#development)
3847

3948
## `@codegenie/cli autocomplete [SHELL]`
4049

@@ -185,6 +194,7 @@ EXAMPLES
185194
```
186195

187196
_See code: [@oclif/plugin-update](https://github.com/oclif/plugin-update/blob/v4.2.13/src/commands/update.ts)_
197+
188198
<!-- commandsstop -->
189199

190200
# Release
@@ -196,3 +206,7 @@ npm publish --access=public
196206
```
197207

198208
See [Oclif Release Docs](https://oclif.io/docs/releasing/) for more details.
209+
210+
# Development
211+
212+
DOTENV_ENV=local ~/projects/codegenie-cli/bin/dev.js generate

src/commands/generate.ts

+30-6
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { cosmiconfig } from 'cosmiconfig'
66
import createDebug from 'debug'
77
import { execSync } from 'node:child_process'
88
import { cwd } from 'node:process'
9-
import { dirname, join, resolve } from 'node:path'
9+
import { dirname, extname, join, resolve } from 'node:path'
1010
import { inspect } from 'node:util'
11-
import { copyFile, mkdir } from 'node:fs/promises'
11+
import { copyFile, mkdir, readFile } from 'node:fs/promises'
1212
import { fileURLToPath } from 'node:url'
1313
import { awsCredentialsFileExists } from '../aws-creds.js'
1414
import sleep from '../sleep.js'
@@ -18,6 +18,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url))
1818

1919
const debug = createDebug('codegenie:generate')
2020
const appDir = cwd()
21+
const dotCodeGenieDir = join(appDir, '.codegenie')
2122

2223
const explorer = cosmiconfig('codegenie', {
2324
searchPlaces: [`.codegenie/app.js`, `.codegenie/app.ts`, `.codegenie/app.mjs`, `.codegenie/app.cjs`],
@@ -115,7 +116,7 @@ generating app...
115116
awsProfileToCopy,
116117
}
117118
}
118-
} else if (!existsSync(join(appDir, '.codegenie'))) {
119+
} else if (!existsSync(dotCodeGenieDir)) {
119120
this.error(
120121
"No .codegenie directory found. Make sure you're running this command inside a directory that has a child .codegenie directory.",
121122
{
@@ -260,8 +261,10 @@ Run \`npm run init:dev\` to get started. See https://codegenie.codes/docs/guides
260261
ux.action.start('🧞 Creating a new Code Genie App')
261262

262263
try {
264+
const logo = await this.getLogo()
263265
const createAppResponse = await axios.post('/apps', {
264266
appDefinition: generateAppDefinitionResponse.data.appDefinition,
267+
logo,
265268
// app: {
266269
// name: appName,
267270
// description,
@@ -296,8 +299,27 @@ Run \`npm run init:dev\` to get started. See https://codegenie.codes/docs/guides
296299
}
297300
}
298301

302+
async getLogo() {
303+
let logo = null
304+
try {
305+
const logoPath = join(dotCodeGenieDir, 'logo.png')
306+
const logoBuffer = await readFile(logoPath)
307+
const mimeType = extname(logoPath).toLowerCase() === '.png' ? 'image/png' : 'image/jpeg'
308+
const base64Data = logoBuffer.toString('base64')
309+
logo = `data:${mimeType};base64,${base64Data}`
310+
} catch (fileError: any) {
311+
if (fileError.code === 'ENOENT') {
312+
console.warn('No logo found. Proceeding without a logo.')
313+
} else {
314+
console.error('Error reading logo file:', fileError.message)
315+
}
316+
}
317+
console.log('logo is', logo)
318+
return logo
319+
}
320+
299321
async writeGeneratedAppDefinitionFile({ appDefinition }: { appDefinition: AppDefinition }) {
300-
const codeGenieDir = join(appDir, '.codegenie')
322+
const codeGenieDir = dotCodeGenieDir
301323
if (!existsSync(codeGenieDir)) {
302324
await mkdir(codeGenieDir)
303325
}
@@ -315,7 +337,7 @@ export default codeGenieAppDefinition
315337
}
316338

317339
async addAppIdToAppDefinitionFile({ appId }: { appId: string }) {
318-
const codeGenieDir = join(appDir, '.codegenie')
340+
const codeGenieDir = dotCodeGenieDir
319341
const appDefinitionFilePath = join(codeGenieDir, 'app.ts')
320342
const appDefinitionFileContents = readFileSync(appDefinitionFilePath, { encoding: 'utf8' })
321343
const appDefinitionFileContentsWithAppId = appDefinitionFileContents.replace(
@@ -346,8 +368,10 @@ export default codeGenieAppDefinition
346368

347369
if (!appId) {
348370
try {
371+
const logo = await this.getLogo()
349372
const createAppResponse = await axios.post('/apps', {
350373
appDefinition,
374+
logo,
351375
})
352376
debug('createAppResponse %O', createAppResponse)
353377
appId = createAppResponse.data.data.appId as string
@@ -465,7 +489,7 @@ export default codeGenieAppDefinition
465489
async copyCodeGenieLogo() {
466490
const debug = createDebug('codegenie:generate:copyCodeGenieLogo')
467491
const codeGenieLogoPath = resolve(__dirname, '../../logo.png')
468-
const appCodeGenieDir = join(appDir, '.codegenie')
492+
const appCodeGenieDir = dotCodeGenieDir
469493
debug('copying logo from %s to %s', codeGenieLogoPath, appCodeGenieDir)
470494
await copyFile(codeGenieLogoPath, join(appCodeGenieDir, 'logo.png'))
471495
debug('complete')

0 commit comments

Comments
 (0)