add update git deps script, fix inventory crashes
This commit is contained in:
parent
3bf34a8781
commit
08fbc67c31
5 changed files with 178 additions and 7 deletions
|
|
@ -14,3 +14,5 @@ Ask AI
|
|||
- Some other global variables that can be used without window prefixes are listed in src/globals.d.ts
|
||||
|
||||
Rationale: This ensures a clean separation between the Mineflayer logic (server-side/game logic) and the renderer (client-side/view logic), making the renderer portable and testable, and maintains proper usage of global state.
|
||||
|
||||
For more general project contributing guides see CONTRIBUTING.md on like how to setup the project. Use pnpm tsc if needed to validate result with typechecking the whole project.
|
||||
|
|
|
|||
|
|
@ -177,8 +177,13 @@ New React components, improve UI (including mobile support).
|
|||
|
||||
## Updating Dependencies
|
||||
|
||||
1. Ensure mineflayer fork is up to date with the latest version of mineflayer original repo
|
||||
1. Use `pnpm update-git-deps` to check and update git dependencies (like mineflayer fork, prismarine packages etc). The script will:
|
||||
- Show which git dependencies have updates available
|
||||
- Ask if you want to update them
|
||||
- Skip dependencies listed in `pnpm.updateConfig.ignoreDependencies`
|
||||
|
||||
2. Update PrismarineJS dependencies to the latest version: `minecraft-data` (be sure to replace the version twice in the package.json), `mineflayer`, `minecraft-protocol`, `prismarine-block`, `prismarine-chunk`, `prismarine-item`, ...
|
||||
|
||||
3. If `minecraft-protocol` patch fails, do this:
|
||||
1. Remove the patch from `patchedDependencies` in `package.json`
|
||||
2. Run `pnpm patch minecraft-protocol`, open patch directory
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@
|
|||
"run-playground": "run-p watch-mesher watch-other-workers watch-playground",
|
||||
"run-all": "run-p start run-playground",
|
||||
"build-playground": "rsbuild build --config renderer/rsbuild.config.ts",
|
||||
"watch-playground": "rsbuild dev --config renderer/rsbuild.config.ts"
|
||||
"watch-playground": "rsbuild dev --config renderer/rsbuild.config.ts",
|
||||
"update-git-deps": "tsx scripts/updateGitDeps.ts"
|
||||
},
|
||||
"keywords": [
|
||||
"prismarine",
|
||||
|
|
@ -210,7 +211,10 @@
|
|||
"prismarine-item": "latest"
|
||||
},
|
||||
"updateConfig": {
|
||||
"ignoreDependencies": []
|
||||
"ignoreDependencies": [
|
||||
"browserfs",
|
||||
"google-drive-browserfs"
|
||||
]
|
||||
},
|
||||
"patchedDependencies": {
|
||||
"pixelarticons@1.8.1": "patches/pixelarticons@1.8.1.patch",
|
||||
|
|
|
|||
8
pnpm-lock.yaml
generated
8
pnpm-lock.yaml
generated
|
|
@ -338,7 +338,7 @@ importers:
|
|||
version: 0.2.62
|
||||
minecraft-inventory-gui:
|
||||
specifier: github:zardoy/minecraft-inventory-gui#next
|
||||
version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5494f356b1e59eddc876c3ae05ff395f12a46379(@types/react@18.3.18)(react@18.3.1)
|
||||
version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/89c33d396f3fde4804c71f4be3c203ade1833b41(@types/react@18.3.18)(react@18.3.1)
|
||||
mineflayer:
|
||||
specifier: github:zardoy/mineflayer#gen-the-master
|
||||
version: https://codeload.github.com/zardoy/mineflayer/tar.gz/1616261f727398d0b14359262726828d24797fcc(encoding@0.1.13)
|
||||
|
|
@ -6647,8 +6647,8 @@ packages:
|
|||
minecraft-folder-path@1.2.0:
|
||||
resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==}
|
||||
|
||||
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5494f356b1e59eddc876c3ae05ff395f12a46379:
|
||||
resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5494f356b1e59eddc876c3ae05ff395f12a46379}
|
||||
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/89c33d396f3fde4804c71f4be3c203ade1833b41:
|
||||
resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/89c33d396f3fde4804c71f4be3c203ade1833b41}
|
||||
version: 1.0.1
|
||||
|
||||
minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/6c2204a813690ead420e2b8c7f0ef32ca357d176:
|
||||
|
|
@ -17272,7 +17272,7 @@ snapshots:
|
|||
|
||||
minecraft-folder-path@1.2.0: {}
|
||||
|
||||
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/5494f356b1e59eddc876c3ae05ff395f12a46379(@types/react@18.3.18)(react@18.3.1):
|
||||
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/89c33d396f3fde4804c71f4be3c203ade1833b41(@types/react@18.3.18)(react@18.3.1):
|
||||
dependencies:
|
||||
valtio: 1.13.2(@types/react@18.3.18)(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
|
|
|
|||
160
scripts/updateGitDeps.ts
Normal file
160
scripts/updateGitDeps.ts
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import yaml from 'yaml'
|
||||
import { execSync } from 'child_process'
|
||||
import { createInterface } from 'readline'
|
||||
|
||||
interface LockfilePackage {
|
||||
specifier: string
|
||||
version: string
|
||||
}
|
||||
|
||||
interface Lockfile {
|
||||
importers: {
|
||||
'.': {
|
||||
dependencies?: Record<string, LockfilePackage>
|
||||
devDependencies?: Record<string, LockfilePackage>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface PackageJson {
|
||||
pnpm?: {
|
||||
updateConfig?: {
|
||||
ignoreDependencies?: string[]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function prompt(question: string): Promise<string> {
|
||||
const rl = createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
})
|
||||
|
||||
return new Promise(resolve => {
|
||||
rl.question(question, answer => {
|
||||
rl.close()
|
||||
resolve(answer.toLowerCase().trim())
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function getLatestCommit(owner: string, repo: string): Promise<string> {
|
||||
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/commits/HEAD`)
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to fetch latest commit: ${response.statusText}`)
|
||||
}
|
||||
const data = await response.json()
|
||||
return data.sha
|
||||
}
|
||||
|
||||
function extractGitInfo(specifier: string): { owner: string; repo: string; branch: string } | null {
|
||||
const match = specifier.match(/github:([^/]+)\/([^#]+)(?:#(.+))?/)
|
||||
if (!match) return null
|
||||
return {
|
||||
owner: match[1],
|
||||
repo: match[2],
|
||||
branch: match[3] || 'master'
|
||||
}
|
||||
}
|
||||
|
||||
function extractCommitHash(version: string): string | null {
|
||||
const match = version.match(/https:\/\/codeload\.github\.com\/[^/]+\/[^/]+\/tar\.gz\/([a-f0-9]+)/)
|
||||
return match ? match[1] : null
|
||||
}
|
||||
|
||||
function getIgnoredDependencies(): string[] {
|
||||
try {
|
||||
const packageJsonPath = path.join(process.cwd(), 'package.json')
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as PackageJson
|
||||
return packageJson.pnpm?.updateConfig?.ignoreDependencies || []
|
||||
} catch (error) {
|
||||
console.warn('Failed to read package.json for ignored dependencies:', error)
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const lockfilePath = path.join(process.cwd(), 'pnpm-lock.yaml')
|
||||
const lockfileContent = fs.readFileSync(lockfilePath, 'utf8')
|
||||
const lockfile = yaml.parse(lockfileContent) as Lockfile
|
||||
|
||||
const ignoredDependencies = new Set(getIgnoredDependencies())
|
||||
console.log('Ignoring dependencies:', Array.from(ignoredDependencies).join(', ') || 'none')
|
||||
|
||||
const dependencies = {
|
||||
...lockfile.importers['.'].dependencies,
|
||||
...lockfile.importers['.'].devDependencies
|
||||
}
|
||||
|
||||
const updates: Array<{
|
||||
name: string
|
||||
currentHash: string
|
||||
latestHash: string
|
||||
gitInfo: ReturnType<typeof extractGitInfo>
|
||||
}> = []
|
||||
|
||||
console.log('\nChecking git dependencies...')
|
||||
for (const [name, pkg] of Object.entries(dependencies)) {
|
||||
if (ignoredDependencies.has(name)) {
|
||||
console.log(`Skipping ignored dependency: ${name}`)
|
||||
continue
|
||||
}
|
||||
|
||||
if (!pkg.specifier.startsWith('github:')) continue
|
||||
|
||||
const gitInfo = extractGitInfo(pkg.specifier)
|
||||
if (!gitInfo) continue
|
||||
|
||||
const currentHash = extractCommitHash(pkg.version)
|
||||
if (!currentHash) continue
|
||||
|
||||
try {
|
||||
process.stdout.write(`Checking ${name}... `)
|
||||
const latestHash = await getLatestCommit(gitInfo.owner, gitInfo.repo)
|
||||
if (currentHash !== latestHash) {
|
||||
console.log('update available')
|
||||
updates.push({ name, currentHash, latestHash, gitInfo })
|
||||
} else {
|
||||
console.log('up to date')
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('failed')
|
||||
console.error(`Error checking ${name}:`, error)
|
||||
}
|
||||
}
|
||||
|
||||
if (updates.length === 0) {
|
||||
console.log('\nAll git dependencies are up to date!')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('\nThe following git dependencies can be updated:')
|
||||
for (const update of updates) {
|
||||
console.log(`\n${update.name}:`)
|
||||
console.log(` Current: ${update.currentHash}`)
|
||||
console.log(` Latest: ${update.latestHash}`)
|
||||
console.log(` Repo: ${update.gitInfo!.owner}/${update.gitInfo!.repo}`)
|
||||
}
|
||||
|
||||
const answer = await prompt('\nWould you like to update these dependencies? (y/N): ')
|
||||
if (answer === 'y' || answer === 'yes') {
|
||||
let newLockfileContent = lockfileContent
|
||||
for (const update of updates) {
|
||||
newLockfileContent = newLockfileContent.replace(
|
||||
new RegExp(update.currentHash, 'g'),
|
||||
update.latestHash
|
||||
)
|
||||
}
|
||||
fs.writeFileSync(lockfilePath, newLockfileContent)
|
||||
console.log('\nUpdated pnpm-lock.yaml with new commit hashes')
|
||||
console.log('Running pnpm install to apply changes...')
|
||||
execSync('pnpm install', { stdio: 'inherit' })
|
||||
console.log('Done!')
|
||||
} else {
|
||||
console.log('\nNo changes were made.')
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error)
|
||||
Loading…
Add table
Add a link
Reference in a new issue