link-solana-version.mjs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env zx
  2. import 'zx/globals';
  3. import { getInstalledSolanaVersion, getSolanaVersion } from './utils.mjs';
  4. const installedVersion = await getInstalledSolanaVersion();
  5. const expectedVersion = getSolanaVersion();
  6. if (installedVersion === expectedVersion) {
  7. echo(
  8. chalk.green('[ SUCCESS ]'),
  9. `The expected Solana version ${expectedVersion} is installed.`
  10. );
  11. process.exit(0);
  12. }
  13. const installPath = path.join(
  14. os.homedir(),
  15. '.local',
  16. 'share',
  17. 'solana',
  18. 'install'
  19. );
  20. const releasePath = path.join(
  21. installPath,
  22. 'releases',
  23. expectedVersion,
  24. 'solana-release'
  25. );
  26. const activeReleasePath = path.join(installPath, 'active_release');
  27. const hasRelease = await fs.exists(releasePath);
  28. if (hasRelease) {
  29. await $`rm -f "${activeReleasePath}"`;
  30. await $`ln -s "${releasePath}" "${activeReleasePath}"`;
  31. echo(
  32. chalk.green('[ SUCCESS ]'),
  33. `Successfully switched from Solana version ${installedVersion} to ${expectedVersion} to match the project's requirements.`
  34. );
  35. process.exit(0);
  36. }
  37. echo(
  38. chalk.yellow('[ WARNING ]'),
  39. `Cannot switch from Solana version ${installedVersion} to ${expectedVersion} because it is not installed.`
  40. );
  41. const installRelease = await question('Should we install it now? [y/N] ');
  42. if (installRelease === 'y') {
  43. echo(`Installing Solana ${expectedVersion}...`);
  44. await $`sh -c "$(curl -sSfL https://release.solana.com/v${expectedVersion}/install)"`;
  45. }
  46. echo(
  47. chalk.green('[ SUCCESS ]'),
  48. `Successfully switched from Solana version ${installedVersion} to ${expectedVersion} to match the project's requirements.`
  49. );