Development =========== Preparation ----------- To develop this package, use `uv `_:: $ uv sync $ source .venv/bin/activate Then, you can run ``brew-file`` command made from ``src`` directory. Now you can also use `prek` command. Install `prek` settings by:: $ prek install --hook-type pre-commit --hook-type pre-push Update scripts -------------- Do not edit ``bin/brew-file`` directly. Edit ``src/brew_file/*.py`` and run:: $ ./combine.sh Test ---- Run:: $ pytest Tests in ``tests`` will test ``bin/brew-file`` instead of files in ``src``, therefore run ``combine.sh`` before run tests. Test real Homebrew environment with lume ---------------------------------------- Most of `pytest` runs tests in the mocked environment in which installing/uninstalling Homebrew packages is not actually done. Tests in ``tests/test_serial.py`` (``marker: serial``) will run in the real Homebrew environment but they are not included in the default test run as they change the Homebrew environment. To run these tests, you can use lume to create a macOS VM. Prepare VM with lume ^^^^^^^^^^^^^^^^^^^^ Install lume:: $ brew install trycua/lume/lume Pull VM with xcode:: $ lume pull macos-tahoe-vanilla:latest Ref: `cua/libs/lume/README.md `_ Prepare cert if needed (in zero trust or etc...) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Example for Zero trust (`Install certificate manually ยท Cloudflare Zero Trust docs `_). Launch the VM with shared directory to access the installed cert:: $ lume run macos-tahoe-vanilla:latest --shared-dir "/Library/Application Support/Cloudflare:ro" For this process, need GUI. Login with username: 'lume', password: 'lume'. Open terminal and add the cert to the keychain:: lume@lumes-Virtual-Machine ~ % cp /Volumes/My\ Shared\ Files/installed_cert.pem ./Documents/ lume@lumes-Virtual-Machine ~ % sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./Documents/installed_cert.pem lume@lumes-Virtual-Machine ~ % # Follow the instructions to add the cert to the keychain Prepare certifications for command line tools:: lume@lumes-Virtual-Machine ~ % security find-certificate -a -p /Library/Keychains/System.keychain > $HOME/Documents/system-certs.pem lume@lumes-Virtual-Machine ~ % security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> $HOME/Documents/system-certs.pem lume@lumes-Virtual-Machine ~ % cat <>$HOME/.zprofile _certs="\$HOME/Documents/system-certs.pem" if [ -f "\$_certs" ];then export CERT_PATH="\$_certs" export SSL_CERT_FILE="\$_certs" export REQUESTS_CA_BUNDLE="\$_certs" export NODE_EXTRA_CA_CERTS="\$_certs" fi unset _certs EOF From other terminal, stop VM:: $ lume stop macos-tahoe-vanilla:latest Prepare Homebrew, python libraries, etc... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Launch vm w/o display:: $ lume run macos-tahoe-vanilla:latest --no-display From other terminal, check ip of VM:: $ lume ls name os cpu memory disk display status storage ip vnc macos-tahoe-vanilla_latest macOS 4 8.00G 22.5GB/50.0GB 1024x768 running default 192.168.64.2 vnc://:clear-banana-blue-river@127.0.0.1:56109 Login to VM:: $ ssh lume@192.168.64.2 (lume@192.168.64.2) Password: # password is also 'lume' lume@lumes-Virtual-Machine ~ % Prepare Homebrew:: lume@lumes-Virtual-Machine ~ % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # sudo password is also 'lume' lume@lumes-Virtual-Machine ~ % echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.zprofile lume@lumes-Virtual-Machine ~ % brew ls ==> Formulae ==> Casks Set pseudo git user:: lume@lumes-Virtual-Machine ~ % git config --global user.name "lume" lume@lumes-Virtual-Machine ~ % git config --global user.email "lume@localhost" Install pytest by pip:: lume@lumes-Virtual-Machine ~ % pip3 install pytest lume@lumes-Virtual-Machine ~ % echo 'PATH=$HOME/Library/Python/3.9/bin:$PATH' >> $HOME/.zprofile Make a link to the shared directory:: lume@lumes-Virtual-Machine ~ % ln -s /Volumes/My\ Shared\ Files $HOME/shared Exit and stop VM:: lume@lumes-Virtual-Machine ~ % exit $ lume stop macos-tahoe-vanilla:latest Run test in VM ^^^^^^^^^^^^^^ Launch the VM with shared directory to access the repo:: $ cd $ lume run macos-tahoe-vanilla:latest --no-display --shared-dir "$PWD:ro" From other terminal, login to VM:: Login to VM:: $ ssh lume@192.168.64.2 # check ip of VM with 'lume ls' (lume@192.168.64.2) Password: # password is also 'lume' lume@lumes-Virtual-Machine ~ % Run pytest:: $ cd shared $ pytest -c /dev/null -p no:cacheprovider -m destructive tests/test_destructive.py Commit ------ When you run ``git commit``, ``prek`` will run ``ruff`` and other linters/formatters. Some of parts will be automatically fixed and you need just rerun ``git commit``. Some of parts will be remained and you need to fix them manually. Fix them and rerun ``git commit``. `pre-push` will be run before push, which will confirm if `combine.sh` is run or not and version information is updated or not.