CtrlK
BlogDocsLog inGet started
Tessl Logo

1k-patch-package-workflow

Create or regenerate patch-package patches, including resolutions failures and build-artifact verification.

69

Quality

85%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

patch-package workflow

Patches live in patches/<pkg>+<version>.patch and auto-apply on install. Never hand-edit a .patch — edit the node_modules/ source, then generate.

@onekeyfe/* packages

In @onekeyfe/* packages, including npm aliases such as react-native-pager-view → @onekeyfe/react-native-pager-view, a committed patch may only change .js/.jsx/.ts/.tsx files. yarn lint:onekeyfe-patches enforces this.

For native code (Objective-C, Swift, Java, Kotlin, C/C++) and native build files:

  • Debug: edit them directly in node_modules/, then rebuild with yarn workspace @onekeyhq/mobile dev-shell --platform <android|ios> --shell local. The default --shell auto reuses a cached shell because the shell key ignores edits inside node_modules.
  • Ship: open a PR in OneKeyHQ/app-modules, publish a release, then upgrade the dependency here. Never commit the native change as a patch.
  • Undo without upgrading: delete apps/mobile/out-dir-bundle/dev-shell/local-cache/<platform>. The --shell local build is cached under the unchanged key, so --shell auto would keep installing it. Upgrading changes yarn.lock, and with it the key.

Generate

  1. Edit node_modules/<pkg>/.... Comment lines out (don't delete) with a // OneKey patch: <why> note above.
  2. Generate — must drop resolutions first or it fails with Couldn't find any versions for ...:
cp package.json /tmp/pkg.bak
node -e "const fs=require('fs');const p=require('./package.json');delete p.resolutions;fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\n')"
npx patch-package <pkg>          # npx, not yarn
cp /tmp/pkg.bak package.json     # restore byte-exact

Fallback (generate still fails: offline / private dep)

Diff the edited file against the pristine tarball in the Yarn cache:

EXTRACT=$(mktemp -d); unzip -q .yarn/cache/<pkg>-npm-<ver>-*.zip -d "$EXTRACT"
PRISTINE=$(find "$EXTRACT" -path "*<rel/path/File.ext>"); SUB="node_modules/<pkg>/<rel/path/File.ext>"
REPO=$(mktemp -d); (cd "$REPO" && git init -q && mkdir -p "$(dirname "$SUB")" \
  && cp "$PRISTINE" "$SUB" && git add -A && git -c user.email=x -c user.name=x commit -qm base \
  && cp "$OLDPWD/$SUB" "$SUB" && git diff) > patches/<pkg>+<version>.patch

Verify (required)

git apply --check -p1 patches/<pkg>+<version>.patch   # must pass against a pristine file
grep -c android/build patches/<pkg>+<version>.patch   # must be 0 (else rm -rf node_modules/<pkg>/android/build, regenerate)
Repository
OneKeyHQ/app-monorepo
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.