yarn 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env bash
  2. # Run a command with our local yarn install, rather than any globally installed
  3. # instance.
  4. set -euo pipefail
  5. if [[ "${CI:-}" == "true" ]]; then
  6. set -x
  7. fi
  8. (
  9. if [[ "${CI:-}" == "true" ]]; then
  10. set -x
  11. fi
  12. repo_root="${BASH_SOURCE%/*}/../"
  13. cd "$repo_root"
  14. ./tool/node --version >/dev/null # Ensure node is unpacked and ready
  15. cachedir="$HOME/.cache/tailscale-yarn"
  16. tarball="${cachedir}.tar.gz"
  17. read -r want_rev < "./tool/yarn.rev"
  18. got_rev=""
  19. if [[ -x "${cachedir}/bin/yarn" ]]; then
  20. got_rev=$(PATH="$HOME/.cache/tailscale-node/bin:$PATH" "${cachedir}/bin/yarn" --version)
  21. fi
  22. if [[ "$want_rev" != "$got_rev" ]]; then
  23. rm -rf "$cachedir" "$tarball"
  24. mkdir -p "$cachedir"
  25. curl -f -L -o "$tarball" "https://github.com/yarnpkg/yarn/releases/download/v${want_rev}/yarn-v${want_rev}.tar.gz"
  26. (cd "$cachedir" && tar --strip-components=1 -xf "$tarball")
  27. rm -f "$tarball"
  28. fi
  29. )
  30. # Deliberately not using cachedir here, to keep the environment
  31. # completely pristine for execution of yarn.
  32. export PATH="$HOME/.cache/tailscale-node/bin:$HOME/.cache/tailscale-yarn/bin:$PATH"
  33. exec "$HOME/.cache/tailscale-yarn/bin/yarn" "$@"