lock_pkgs.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env bash
  2. ### Bash Environment Setup
  3. # http://redsymbol.net/articles/unofficial-bash-strict-mode/
  4. # https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
  5. # set -o xtrace
  6. set -o errexit
  7. set -o errtrace
  8. set -o nounset
  9. set -o pipefail
  10. IFS=$'\n'
  11. REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
  12. cd "$REPO_DIR"
  13. py_version="$(grep -E '^version = ' pyproject.toml | awk '{print $3}' | jq -r)"
  14. # js_version="$(jq -r '.version' ${REPO_DIR}/etc/package.json)"
  15. # if [[ "$py_version" != "$js_version" ]]; then
  16. # echo "[❌] Version in pyproject.toml ($py_version) does not match version in etc/package.json ($js_version)!"
  17. # exit 1
  18. # fi
  19. echo "[🔒] Locking all ArchiveBox dependencies (pip, npm)"
  20. echo
  21. echo "pyproject.toml: archivebox $py_version"
  22. # echo "package.json: archivebox $js_version"
  23. echo
  24. echo
  25. echo "[*] Cleaning up old lockfiles and build files"
  26. deactivate 2>/dev/null || true
  27. rm -Rf build dist
  28. rm -f uv.lock
  29. rm -f requirements.txt
  30. # rm -f package-lock.json
  31. # rm -f archivebox/package.json
  32. # rm -f archivebox/package-lock.json
  33. # rm -Rf ./.venv
  34. # rm -Rf ./node_modules
  35. # rm -Rf ./archivebox/node_modules
  36. echo
  37. echo
  38. echo "[+] Generating dev & prod requirements.txt & pdm.lock from pyproject.toml..."
  39. uv venv --allow-existing --python 3.12
  40. source .venv/bin/activate
  41. echo
  42. echo "pyproject.toml: archivebox $(grep 'version = ' pyproject.toml | awk '{print $3}' | jq -r)"
  43. echo "$(which python): $(python --version | head -n 1)"
  44. echo "$(which uv): $(uv --version | head -n 1)"
  45. echo
  46. # https://pdm-project.org/latest/usage/lockfile/
  47. # prod
  48. uv lock
  49. uv pip compile pyproject.toml --all-extras -o requirements.txt >/dev/null
  50. uv sync --all-extras --frozen 2>/dev/null
  51. # echo
  52. # echo "[+] Generating package-lock.json from etc/package.json..."
  53. # npm install -g npm
  54. # npm config set fund false --location=global
  55. # npm config set audit false --location=global
  56. # cd etc
  57. # echo
  58. # echo "etc/package.json: archivebox $(jq -r '.version' etc/package.json)"
  59. # echo
  60. # echo "$(which node): $(node --version | head -n 1)"
  61. # echo "$(which npm): $(npm --version | head -n 1)"
  62. # echo
  63. # npm install --package-lock-only --prefer-offline
  64. echo
  65. echo "[√] Finished. Don't forget to commit the new lockfiles:"
  66. echo
  67. ls "pyproject.toml" | cat
  68. ls "requirements.txt" | cat
  69. ls "uv.lock" | cat
  70. # echo
  71. # ls "package.json" | cat
  72. # ls "package-lock.json" | cat
  73. # ls "archivebox/package.json" | cat
  74. # ls "archivebox/package-lock.json" | cat