Browse Source

Add upgrade script

Loris Leiva 1 year ago
parent
commit
ef1b6184df
2 changed files with 60 additions and 1 deletions
  1. 2 1
      package.json
  2. 58 0
      scripts/upgrade-template.mjs

+ 2 - 1
package.json

@@ -7,7 +7,8 @@
     "validator:restart": "pnpm validator:start --restart",
     "validator:stop": "zx ./scripts/stop-validator.mjs",
     "clients:js:test": "zx ./scripts/client/test-js.mjs",
-    "clients:rust:test": "zx ./scripts/client/test-rust.mjs"
+    "clients:rust:test": "zx ./scripts/client/test-rust.mjs",
+    "template:upgrade": "zx ./scripts/upgrade-template.mjs"
   },
   "devDependencies": {
     "@iarna/toml": "^2.2.5",

+ 58 - 0
scripts/upgrade-template.mjs

@@ -0,0 +1,58 @@
+#!/usr/bin/env zx
+import "zx/globals";
+import { getCargo } from "./utils.mjs";
+
+// Arguments to pass to the `create-solana-program` command.
+const rustClientCargo = getCargo(path.join("clients", "rust"));
+const jsClientPkg = require(
+  path.join(__dirname, "..", "clients", "js", "package.json")
+);
+const templateArgs = [
+  "token",
+  "--address",
+  "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
+  "--org",
+  "solana-program",
+  "--rust-client-crate-name",
+  rustClientCargo.package.name,
+  "--js-client-package-name",
+  jsClientPkg.name,
+  "--default",
+  "--force",
+];
+
+// File and folder patterns that should not be overwritten by the template upgrade.
+const unchangedGlobs = [
+  "clients/**/src/**",
+  "clients/**/src/*",
+  "clients/js/test/*",
+  "clients/rust/tests/*",
+  "program/**/*",
+  "program/*",
+  "scripts/generate-clients.mjs",
+  "scripts/generate-idls.mjs",
+  "scripts/upgrade-template.mjs",
+  "scripts/program/*",
+  "Cargo.lock",
+  "**/pnpm-lock.yaml",
+  "pnpm-lock.yaml",
+];
+
+// Prevent CLI arguments from being escaped.
+$.quote = (command) => command;
+
+// Re-generate the repo from the parent directory.
+cd("..");
+await $`pnpm create solana-program@latest ${templateArgs}`;
+
+// Go back inside the updated repo.
+cd("token");
+
+// Restore files and folders that should not be overwritten.
+await $`git add --all`;
+for (const glob of unchangedGlobs) {
+  await $`git restore --worktree --staged "${glob}"`;
+}
+
+// Re-install dependencies.
+await $`pnpm install`;