-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: create-dojo + update manifest path #338
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ import "./app/globals.css"; | |
import { init } from "@dojoengine/sdk"; | ||
import { OnchainDashSchemaType, schema } from "@/dojo/models"; | ||
import { env, getRpcUrl } from "@/env"; | ||
import { dojoConfig } from "@/dojo.config"; | ||
import { dojoConfig } from "../dojoConfig"; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Path alias change is inconsistent with project configuration The change from
Additionally, there are 42 other imports using the 🔗 Analysis chainReview build configuration for path alias changes The change from Let me check the build configuration files to complete the verification. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Description: Check build configurations for path alias definitions
# Expected: Confirm if @ alias should be removed or maintained
# Check TypeScript config
fd -e json "tsconfig" examples/example-vite-kitchen-sink/
# Check Vite config
fd -e ts -e js "vite.config" examples/example-vite-kitchen-sink/
# Look for other @ alias usages that might need similar updates
rg "from\s+['\"]@/" examples/example-vite-kitchen-sink/src/
Length of output: 5355 Script: #!/bin/bash
# Check the content of TypeScript and Vite configs
cat examples/example-vite-kitchen-sink/tsconfig.json
cat examples/example-vite-kitchen-sink/vite.config.ts
Length of output: 1225 |
||
import { DojoContext } from "@/dojo/provider"; | ||
|
||
async function main() { | ||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -44,12 +44,12 @@ const templates = [ | |||||||||||||||||||||||||||||||||||||||||
async function init(projectName: string, cwd: string, template: string) { | ||||||||||||||||||||||||||||||||||||||||||
const projectPath = path.join(cwd, projectName); | ||||||||||||||||||||||||||||||||||||||||||
const clientPath = path.join(projectPath, "client"); | ||||||||||||||||||||||||||||||||||||||||||
const dojoStarterPath = path.join(projectPath, "dojo-starter"); | ||||||||||||||||||||||||||||||||||||||||||
const contractPath = path.join(projectPath, "contract"); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// Create project directories | ||||||||||||||||||||||||||||||||||||||||||
await fs.mkdir(projectPath, { recursive: true }); | ||||||||||||||||||||||||||||||||||||||||||
await fs.mkdir(clientPath, { recursive: true }); | ||||||||||||||||||||||||||||||||||||||||||
await fs.mkdir(dojoStarterPath, { recursive: true }); | ||||||||||||||||||||||||||||||||||||||||||
await fs.mkdir(contractPath, { recursive: true }); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// Clone template into client directory | ||||||||||||||||||||||||||||||||||||||||||
console.log(`Downloading ${template} into client directory...`); | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -66,26 +66,21 @@ async function init(projectName: string, cwd: string, template: string) { | |||||||||||||||||||||||||||||||||||||||||
// Rewrite package.json in client directory | ||||||||||||||||||||||||||||||||||||||||||
await rewritePackageJson(projectName, clientPath); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
console.log(`Cloning dojo-starter repository...`); | ||||||||||||||||||||||||||||||||||||||||||
const gitCloneResult = spawn.sync( | ||||||||||||||||||||||||||||||||||||||||||
"git", | ||||||||||||||||||||||||||||||||||||||||||
[ | ||||||||||||||||||||||||||||||||||||||||||
"clone", | ||||||||||||||||||||||||||||||||||||||||||
"https://github.com/dojoengine/dojo-starter.git", | ||||||||||||||||||||||||||||||||||||||||||
dojoStarterPath, | ||||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||||
{ stdio: "inherit" } | ||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (gitCloneResult.status !== 0) { | ||||||||||||||||||||||||||||||||||||||||||
throw new Error(`Failed to clone dojo-starter repository.`); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
// Update dojoConfig.ts imports | ||||||||||||||||||||||||||||||||||||||||||
await rewriteDojoConfigFile(clientPath); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// Clone dojo-starter | ||||||||||||||||||||||||||||||||||||||||||
console.log(`Downloading dojo-starter...`); | ||||||||||||||||||||||||||||||||||||||||||
spawn.sync("npx", ["degit", `dojoengine/dojo-starter`, dojoStarterPath], { | ||||||||||||||||||||||||||||||||||||||||||
stdio: "inherit", | ||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||
const contractRes = spawn.sync( | ||||||||||||||||||||||||||||||||||||||||||
"npx", | ||||||||||||||||||||||||||||||||||||||||||
["degit", `dojoengine/dojo-starter`, contractPath], | ||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||
stdio: "inherit", | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||
if (contractRes.status !== 0) { | ||||||||||||||||||||||||||||||||||||||||||
throw new Error(`Failed to clone template: ${template}`); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+74
to
+83
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix incorrect error message in contract download The error message still references the template variable when failing to clone the dojo-starter repository. Apply this fix: if (contractRes.status !== 0) {
- throw new Error(`Failed to clone template: ${template}`);
+ throw new Error('Failed to clone dojo-starter repository');
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
console.log(`Project initialized at ${projectPath}`); | ||||||||||||||||||||||||||||||||||||||||||
console.log("Congrats! Your new project has been set up successfully.\n"); | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -116,6 +111,24 @@ async function rewritePackageJson(projectName: string, clientPath: string) { | |||||||||||||||||||||||||||||||||||||||||
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2)); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
async function rewriteDojoConfigFile(clientPath: string) { | ||||||||||||||||||||||||||||||||||||||||||
const dojoConfigPath = path.join(clientPath, "dojoConfig.ts"); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||||||
let content = await fs.readFile(dojoConfigPath, "utf-8"); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// Update relative imports to account for new directory structure | ||||||||||||||||||||||||||||||||||||||||||
content = content.replace( | ||||||||||||||||||||||||||||||||||||||||||
/from ['"]\.{0,2}\/.*manifest(?:_dev)?\.json['"]/g, | ||||||||||||||||||||||||||||||||||||||||||
'from "../contract/target/dev/manifest.json"' | ||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
await fs.writeFile(dojoConfigPath, content, "utf-8"); | ||||||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||||||
console.warn(`Warning: Could not update dojoConfig.ts: ${error}`); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+114
to
+131
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification 🛠️ Refactor suggestion Revise manifest path handling in rewriteDojoConfigFile The current implementation needs adjustment based on the examples:
async function rewriteDojoConfigFile(clientPath: string) {
const dojoConfigPath = path.join(clientPath, "dojoConfig.ts");
+ const manifestPath = "../../worlds/dojo-starter/manifest_dev.json";
try {
let content = await fs.readFile(dojoConfigPath, "utf-8");
content = content.replace(
- /from ['"]\.{0,2}\/.*manifest(?:_dev)?\.json['"]/g,
- 'from "../contract/target/dev/manifest.json"'
+ /from ['"](?:\.{1,2}\/)+(?:worlds|contract)\/.*?manifest(?:_dev)?\.json['"]/g,
+ `from "${manifestPath}"`
);
await fs.writeFile(dojoConfigPath, content, "utf-8");
} catch (error) {
throw new Error(
`Failed to update manifest path in dojoConfig.ts: ${error}. ` +
`Please ensure the file exists and contains a manifest import.`
);
}
} 🔗 Analysis chainEnhance robustness of config file rewriting Several improvements could make this function more reliable:
Consider this enhanced implementation: async function rewriteDojoConfigFile(clientPath: string) {
const dojoConfigPath = path.join(clientPath, "dojoConfig.ts");
+ const manifestPath = "../contract/target/dev/manifest.json";
try {
let content = await fs.readFile(dojoConfigPath, "utf-8");
- // Update relative imports to account for new directory structure
content = content.replace(
- /from ['"]\.{0,2}\/.*manifest(?:_dev)?\.json['"]/g,
- 'from "../contract/target/dev/manifest.json"'
+ /from ['"](\.{0,2}\/[^"']*?manifest(?:_dev)?\.json)['"]/g,
+ `from "${manifestPath}"`
);
await fs.writeFile(dojoConfigPath, content, "utf-8");
} catch (error) {
- console.warn(`Warning: Could not update dojoConfig.ts: ${error}`);
+ throw new Error(
+ `Failed to update manifest path in dojoConfig.ts: ${error}. ` +
+ `Please ensure the file exists and contains a manifest import.`
+ );
}
} Let's verify the manifest path structure: This will help us verify the actual import paths used in the examples to ensure our regex and target path assumptions are correct. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Check if the manifest path structure is consistent across templates
for template in $(fd -t d -d 1 . examples/ | grep 'example-'); do
rg -l "manifest(_dev)?\.json" "$template"
done
Length of output: 1956 Script: #!/bin/bash
# Check the actual manifest import paths in dojoConfig files
for config in $(rg -l "manifest(_dev)?\.json" examples/); do
echo "=== $config ==="
rg -A 1 -B 1 "from ['\"].*manifest(_dev)?\.json['\"]" "$config"
done
Length of output: 4433 |
||||||||||||||||||||||||||||||||||||||||||
async function getLatestVersion(): Promise<string> { | ||||||||||||||||||||||||||||||||||||||||||
return new Promise((resolve, reject) => { | ||||||||||||||||||||||||||||||||||||||||||
https | ||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Manifest path is incorrect and inconsistent with other examples
The verification reveals critical issues:
worlds/onchain-dash/manifests/release/deployment/manifest.json
does not existworlds/dojo-starter/manifest_dev.json
examples/example-vite-kitchen-sink/dojoConfig.ts
examples/example-vite-kitchen-sink/src/dojo.config.ts
The change should be reverted to use the same development manifest as other examples (
worlds/dojo-starter/manifest_dev.json
) to maintain consistency and ensure the example works out of the box.🔗 Analysis chain
Verify the manifest path exists and is accessible
The manifest path has been changed to point to a release manifest in the onchain-dash project. Let's verify this path exists and is consistent across the repository.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 1925
🛠️ Refactor suggestion
Consider making the manifest path configurable
The hardcoded relative path to the manifest file might be problematic:
../../
) could break if the file structure changesConsider making the manifest path configurable through environment variables:
This would allow developers to: