#!/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`;