diff --git a/.github/workflows/vvv-provisioning.yml b/.github/workflows/vvv-provisioning.yml index 3a71b4819..530bddd71 100644 --- a/.github/workflows/vvv-provisioning.yml +++ b/.github/workflows/vvv-provisioning.yml @@ -1,21 +1,22 @@ -# This is a basic workflow to help you get started with Actions - name: VVV Provisioning # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the develop branch on: push: - branches: [ develop ] + branches: + - develop pull_request: - branches: [ develop, stable ] + branches: + - develop + - stable # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: on-docker: - name: Docker Provisioner + name: Ubuntu 20 Docker Provisioner # The type of runner that the job will run on - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -111,7 +112,7 @@ jobs: # This workflow contains a single job called "build" on-stable: - name: Stable Reprovision + name: MacOS 10.15 Stable Reprovision # The type of runner that the job will run on runs-on: macos-10.15 @@ -122,6 +123,14 @@ jobs: with: ref: stable + - name: Cache Vagrant boxes + uses: actions/cache@v2 + with: + path: ~/.vagrant.d/boxes + key: ${{ runner.os }}-vagrant-${{ hashFiles('Vagrantfile') }} + restore-keys: | + ${{ runner.os }}-vagrant- + - name: install goodhosts run: vagrant plugin install --local @@ -145,7 +154,7 @@ jobs: path: "${{ github.workspace }}/log" on-develop: - name: Develop Reprovision + name: MacOS 10.15 Develop Reprovision # The type of runner that the job will run on runs-on: macos-10.15 @@ -156,6 +165,15 @@ jobs: with: ref: develop + - name: Cache Vagrant boxes + uses: actions/cache@v2 + with: + path: ~/.vagrant.d/boxes + key: ${{ runner.os }}-vagrant-${{ hashFiles('Vagrantfile') }} + restore-keys: | + ${{ runner.os }}-vagrant- + + - name: install goodhosts run: vagrant plugin install --local @@ -179,7 +197,7 @@ jobs: path: "${{ github.workspace }}/log" on-clean: - name: Clean Provision + name: MacOS 10.15 Clean Provision # The type of runner that the job will run on runs-on: macos-10.15 @@ -188,6 +206,14 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 + - name: Cache Vagrant boxes + uses: actions/cache@v2 + with: + path: ~/.vagrant.d/boxes + key: ${{ runner.os }}-vagrant-${{ hashFiles('Vagrantfile') }} + restore-keys: | + ${{ runner.os }}-vagrant- + - name: install goodhosts run: vagrant plugin install --local diff --git a/CHANGELOG.md b/CHANGELOG.md index 528475217..0b681f67e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,26 @@ permalink: /docs/en-US/changelog/ # Changelog +## 3.12 ( 2023 August 3rd ) + +### Enhancements + +* Added the GMP PHP extension to the default PHP installation ( #2676 ) + +### Maintenance + +* Updated bitbucket SSH fingerprints ( #2679 ) + +### Bug Fixes + +* Fixed a vagrantfile error on Arm when the vagrant-parallels plugin is missing ( #2670 ) +* Miscellanous Shellcheck linter fixes and improvements ( #2675 ) +* Github action fixes for composer and an upgrade to Ubuntu 20 ( #2677 ) +* Fixed an issue with git safe directories ( #2681 ) +* Git safe directory fixes +* Fixed docker version detection +* PHPCS install improvements + ## 3.11.2 ( 2023 May 8th ) ### Enhancements diff --git a/Vagrantfile b/Vagrantfile index c86ff5bc9..819a39dcc 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -229,6 +229,26 @@ vvv_config['hosts'] = vvv_config['hosts'].uniq vvv_config['vagrant-plugins'] = {} unless vvv_config['vagrant-plugins'] +# Early mapping of the hosts to be added. +vvv_config['utilities'].each do |name, extensions| + extensions = {} unless extensions.is_a? Array + extensions.each do |extension| + if extension == 'tideways' + vvv_config['hosts'] += ['tideways.vvv.test'] + vvv_config['hosts'] += ['xhgui.vvv.test'] + end + end +end +vvv_config['extensions'].each do |name, extensions| + extensions = {} unless extensions.is_a? Array + extensions.each do |extension| + if extension == 'tideways' + vvv_config['hosts'] += ['tideways.vvv.test'] + vvv_config['hosts'] += ['xhgui.vvv.test'] + end + end +end + # Create a global variable to use in functions and classes $vvv_config = vvv_config @@ -298,12 +318,17 @@ if show_logo provider_meta = VagrantPlugins::ProviderVirtualBox::Driver::Meta.new() provider_version = provider_meta.version when 'parallels' - provider_meta = VagrantPlugins::Parallels::Driver::Meta.new() - provider_version = provider_meta.version + provider_version = '?' + if defined? VagrantPlugins::Parallels + provider_meta = VagrantPlugins::Parallels::Driver::Meta.new() + provider_version = provider_meta.version + end when 'vmware' provider_version = '??' when 'hyperv' provider_version = 'n/a' + when 'docker' + provider_version = VagrantPlugins::DockerProvider::Driver.new.execute("docker", "-v").gsub("Docker version ", "") else provider_version = '??' end @@ -791,10 +816,6 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vvv_config['utilities'].each do |name, extensions| extensions = {} unless extensions.is_a? Array extensions.each do |extension| - if extension == 'tideways' - vvv_config['hosts'] += ['tideways.vvv.test'] - vvv_config['hosts'] += ['xhgui.vvv.test'] - end config.vm.provision "extension-#{name}-#{extension}", type: 'shell', keep_color: true, @@ -809,10 +830,6 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vvv_config['extensions'].each do |name, extensions| extensions = {} unless extensions.is_a? Array extensions.each do |extension| - if extension == 'tideways' - vvv_config['hosts'] += ['tideways.vvv.test'] - vvv_config['hosts'] += ['xhgui.vvv.test'] - end config.vm.provision "extension-#{name}-#{extension}", type: 'shell', keep_color: true, diff --git a/provision/core/composer/provision.sh b/provision/core/composer/provision.sh index 6ff240a9c..cd72216a1 100644 --- a/provision/core/composer/provision.sh +++ b/provision/core/composer/provision.sh @@ -37,7 +37,7 @@ function composer_setup() { return 1 fi else - vvv_info " * [Composer]: Already installed" + vvv_info " * [Composer]: Already installed: $(composer --version)" fi vvv_info " * [Composer]: Making sure the Composer cache is not owned by root" @@ -47,6 +47,11 @@ function composer_setup() { chown -R vagrant:www-data "${COMPOSER_DATA_DIR}" chown -R vagrant:www-data /root/.local/share/composer + # Github runner fixes + if [ -d "/home/runner/.config/composer/" ]; then + chown -R vagrant:www-data /home/runner/.config/composer/ + fi + vvv_info " * [Composer]: Checking for GitHub tokens" if github_token=$(shyaml get-value -q "general.github_token" < "${VVV_CONFIG}"); then vvv_info " * [Composer]: A personal GitHub token was found, configuring Composer" diff --git a/provision/core/env/ssh/ssh_known_hosts b/provision/core/env/ssh/ssh_known_hosts index bbdd7cf85..1a3b067cf 100644 --- a/provision/core/env/ssh/ssh_known_hosts +++ b/provision/core/env/ssh/ssh_known_hosts @@ -6,4 +6,6 @@ gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAA gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9 gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf -bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw== +bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQeJzhupRu0u0cdegZIa8e86EG2qOCsIsD1Xw0xSeiPDlCr7kq97NLmMbpKTX6Esc30NuoqEEHCuc7yWtwp8dI76EEEB1VqY9QJq6vk+aySyboD5QF61I/1WeTwu+deCbgKMGbUijeXhtfbxSxm6JwGrXrhBdofTsbKRUsrN1WoNgUa8uqN1Vx6WAJw1JHPhglEGGHea6QICwJOAr/6mrui/oB7pkaWKHj3z7d1IC4KWLtY47elvjbaTlkN04Kc/5LFEirorGYVbt15kAUlqGM65pk6ZBxtaO3+30LVlORZkxOh+LKL/BvbZ/iRNhItLqNyieoQj/uh/7Iv4uyH/cV/0b4WDSd3DptigWq84lJubb9t/DnZlrJazxyDCulTmKdOR7vs9gMTo+uoIrPSb8ScTtvw65+odKAlBj59dhnVp9zd7QUojOpXlL62Aw56U4oO+FALuevvMjiWeavKhJqlR7i5n9srYcrNV7ttmDw7kf/97P5zauIhxcjX+xHv4M= +bitbucket.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPIQmuzMBuKdWeF4+a2sjSSpBK0iqitSQ+5BM9KhpexuGt20JpTVM7u5BDZngncgrqDMbWdxMWWOGtZ9UgbqgZE= +bitbucket.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIazEu89wgQZ4bqs3d63QSMzYVa0MuJ2e2gKTKqu+UUO diff --git a/provision/core/git/provision.sh b/provision/core/git/provision.sh index fcc99e37d..6fef4bc30 100644 --- a/provision/core/git/provision.sh +++ b/provision/core/git/provision.sh @@ -58,5 +58,7 @@ function git_after_packages() { vvv_info " * Git hasn't been told how to merge branches, setting pull.rebase false for the merge strategy" noroot git config --global pull.rebase false fi + git config --global --add safe.directory '*' # Allow git to work well under docker provider + noroot git config --global --add safe.directory '*' # Allow git to work well under docker provider } vvv_add_hook after_packages git_after_packages diff --git a/provision/core/php/provision.sh b/provision/core/php/provision.sh index 0a72223e7..b418d4673 100644 --- a/provision/core/php/provision.sh +++ b/provision/core/php/provision.sh @@ -51,6 +51,7 @@ function php_register_apt_packages() { "php${VVV_BASE_PHPVERSION}-soap" "php${VVV_BASE_PHPVERSION}-xml" "php${VVV_BASE_PHPVERSION}-zip" + "php${VVV_BASE_PHPVERSION}-gmp" ) # ImageMagick diff --git a/provision/core/phpcs/provision.sh b/provision/core/phpcs/provision.sh index ea7244149..f4bc8dcd5 100644 --- a/provision/core/phpcs/provision.sh +++ b/provision/core/phpcs/provision.sh @@ -6,6 +6,7 @@ set -eo pipefail function php_codesniff_setup() { export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_NO_INTERACTION=1 + export COMPOSER_RUNTIME_ENV="vagrant" if [[ -f "/srv/www/phpcs/CodeSniffer.conf" ]]; then vvv_info " * [PHPCS]: Removing the old PHPCS setup" @@ -19,7 +20,7 @@ function php_codesniff_setup() { noroot mkdir -p /srv/www/phpcs noroot cp -f "/srv/provision/core/phpcs/composer.json" "/srv/www/phpcs/composer.json" cd /srv/www/phpcs - noroot composer update --no-ansi --no-progress --no-dev + noroot COMPOSER_RUNTIME_ENV="vagrant" composer update --no-ansi --no-progress --no-dev --prefer-dist vvv_info " * [PHPCS]: Setting WordPress-Core as the default PHPCodesniffer standard" diff --git a/provision/provision-site.sh b/provision/provision-site.sh index 0fde26da2..59e1c294c 100644 --- a/provision/provision-site.sh +++ b/provision/provision-site.sh @@ -36,7 +36,8 @@ VVV_CONFIG=/vagrant/config.yml # @arg $1 string the config value to fetch # @arg $2 string the default value function vvv_get_site_config_value() { - local value=$(shyaml -q get-value "sites.${SITE_ESCAPED}.${1}" "${2}" < ${VVV_CONFIG}) + local value + value=$(shyaml -q get-value "sites.${SITE_ESCAPED}.${1}" "${2}" < ${VVV_CONFIG}) echo "${value}" } @@ -47,7 +48,7 @@ function vvv_get_site_php_version() { SITE_PHP=$(echo -n "${SITE_PHP}" | xargs | tr -d '\n' | tr -d '\r') # Handle when php:8 instead of 8.0 or if it's parsed as a number - if [[ "${#SITE_PHP}" -eq "1" ]]; then + if [[ ${#SITE_PHP} -eq 1 ]]; then SITE_PHP="${SITE_PHP}.0" fi @@ -55,9 +56,10 @@ function vvv_get_site_php_version() { } vvv_validate_site_php_version() { + local SITE_PHP SITE_PHP=$(vvv_get_site_php_version) - if [[ "${#SITE_PHP}" > "3" ]]; then - vvv_warn " ! Warning: PHP version defined is using a wrong format: '${SITE_PHP}' with length '${length}'" + if [[ ${#SITE_PHP} -gt 3 ]]; then + vvv_warn " ! Warning: PHP version defined is using a wrong format: '${SITE_PHP}' with length '${#SITE_PHP}'" vvv_warn " If you are trying to use a more specific version of PHP such as 7.4.1 or 7.4.0 you" vvv_warn " need to be less specific and use 7.4" fi @@ -102,7 +104,8 @@ function get_config_value() { # @see get_hosts_list # @stdout a space separated string of domains, defaulting to `sitename.test` if none are specified function get_hosts() { - local value=$(shyaml -q get-values-0 "sites.${SITE_ESCAPED}.hosts" < ${VVV_CONFIG} | tr '\0' ' ' | sed 's/ *$//') + local value + value=$(shyaml -q get-values-0 "sites.${SITE_ESCAPED}.hosts" < ${VVV_CONFIG} | tr '\0' ' ' | sed 's/ *$//') echo "${value:-"${VVV_SITE_NAME}.test"}" } @@ -112,7 +115,8 @@ function get_hosts() { # @see get_hosts # @stdout a space separated string of domains, defaulting to `sitename.test` if none are specified function get_hosts_list() { - local value=$(shyaml -q get-values "sites.${SITE_ESCAPED}.hosts" < ${VVV_CONFIG}) + local value + value=$(shyaml -q get-values "sites.${SITE_ESCAPED}.hosts" < ${VVV_CONFIG}) echo "${value:-"${VVV_SITE_NAME}.test"}" } @@ -123,7 +127,8 @@ function get_hosts_list() { # @see get_hosts_list # @stdout the first host listed in the config file for this site, defaulting to `sitename.test` if none are specified function get_primary_host() { - local value=$(shyaml -q get-value "sites.${SITE_ESCAPED}.hosts.0" "${1}" < ${VVV_CONFIG}) + local value + value=$(shyaml -q get-value "sites.${SITE_ESCAPED}.hosts.0" "${1}" < ${VVV_CONFIG}) echo "${value:-"${VVV_SITE_NAME}.test"}" } @@ -144,7 +149,8 @@ function vvv_provision_site_nginx_config() { DEST_NGINX_FILE="vvv-auto-${DEST_NGINX_FILE}-$(md5sum <<< "${SITE_NGINX_FILE}" | cut -c1-32).conf" VVV_HOSTS=$(get_hosts) - local TMPFILE=$(mktemp /tmp/vvv-site-XXXXX) + local TMPFILE + TMPFILE=$(mktemp /tmp/vvv-site-XXXXX) cat "${SITE_NGINX_FILE}" >> "${TMPFILE}" vvv_info " * VVV is adding an Nginx config from ${SITE_NGINX_FILE}" @@ -218,7 +224,7 @@ function vvv_provision_hosts_file() { echo " - Added ${line} from ${HOSTFILE}" fi fi - done < "$HOSTFILE" + done < "${HOSTFILE}" done } @@ -229,7 +235,8 @@ function vvv_provision_hosts_file() { # @noargs function vvv_process_site_hosts() { echo " * Adding domains to the virtual machine's /etc/hosts file..." - local hosts=$(get_hosts_list) + local hosts + hosts=$(get_hosts_list) if [ ${#hosts[@]} -eq 0 ]; then echo " * No hosts were found in the VVV config, falling back to vvv-hosts" if [[ -f "${VM_DIR}/.vvv/vvv-hosts" ]]; then @@ -243,7 +250,8 @@ function vvv_process_site_hosts() { vvv_provision_hosts_file "${SITE}" "${VM_DIR}/vvv-hosts" else echo " * Searching subfolders 4 levels down for a vvv-hosts file ( this can be skipped by using ./vvv-hosts, .vvv/vvv-hosts, or provision/vvv-hosts" - local HOST_FILES=$(find "${VM_DIR}" -maxdepth 4 -name 'vvv-hosts'); + local HOST_FILES + HOST_FILES=$(find "${VM_DIR}" -maxdepth 4 -name 'vvv-hosts'); if [[ -z $HOST_FILES ]] ; then vvv_error " ! Warning: No vvv-hosts file was found, and no hosts were defined in the vvv config, this site may be inaccessible" else @@ -255,7 +263,7 @@ function vvv_process_site_hosts() { else echo " * Adding hosts for the site to the VM hosts file" for line in $hosts; do - if [[ -z "$(grep -q "^127.0.0.1 $line$" /etc/hosts)" ]]; then + if [[ -z "$(grep -q "^127.0.0.1 ${line}$" /etc/hosts)" ]]; then echo "127.0.0.1 ${line} # vvv-auto" >> "/etc/hosts" echo " - Added ${line} from ${VVV_CONFIG}" fi @@ -276,6 +284,7 @@ function vvv_provision_site_repo() { echo " * Any local changes not present on the server will be discarded in favor of the remote branch" cd "${VM_DIR}" echo " * Checking that remote origin is ${REPO}" + local CURRENTORIGIN CURRENTORIGIN=$(noroot git remote get-url origin) if [[ "${CURRENTORIGIN}" != "${REPO}" ]]; then vvv_error " ! The site config said to use ${REPO}" @@ -357,12 +366,14 @@ function vvv_provision_site_script() { SUCCESS=$? else vvv_warn " * Warning: A site provisioner was not found at .vvv/vvv-init.sh provision/vvv-init.sh or vvv-init.sh, searching 3 folders down, please be patient..." - local SITE_INIT_SCRIPTS=$(find "${VM_DIR}" -maxdepth 3 -name 'vvv-init.sh'); + local SITE_INIT_SCRIPTS + SITE_INIT_SCRIPTS=$(find "${VM_DIR}" -maxdepth 3 -name 'vvv-init.sh'); if [[ -z $SITE_INIT_SCRIPTS ]] ; then vvv_warn " * Warning: No site provisioner was found, VVV could not perform any scripted setup that might install software for this site" else for SITE_INIT_SCRIPT in $SITE_INIT_SCRIPTS; do - local DIR="$(dirname "$SITE_INIT_SCRIPT")" + local DIR + DIR="$(dirname "${SITE_INIT_SCRIPT}")" vvv_run_site_template_script "vvv-init.sh" "${DIR}" done fi @@ -387,7 +398,8 @@ function vvv_provision_site_nginx() { vvv_warn " - ${VM_DIR}/provision/vvv-nginx.conf" vvv_warn " - ${VM_DIR}/vvv-nginx.conf" vvv_warn " * VVV will search 3 folders down to find an Nginx config, please be patient..." - local NGINX_CONFIGS=$(find "${VM_DIR}" -maxdepth 3 -name 'vvv-nginx.conf'); + local NGINX_CONFIGS + NGINX_CONFIGS=$(find "${VM_DIR}" -maxdepth 3 -name 'vvv-nginx.conf'); if [[ -z $NGINX_CONFIGS ]] ; then vvv_warn " * VVV did not found an Nginx config file, it will use a fallback config file." noroot mkdir -p "${VM_DIR}/log" @@ -424,7 +436,8 @@ function vvv_custom_folder_composer() { if keys=$(shyaml keys -y -q "sites.${SITE_ESCAPED}.folders.${folder}.composer" < "${VVV_CONFIG}"); then for key in $keys; do cd "${folder}" - local value=$(vvv_get_site_config_value "folders.${folder}.composer.${key}" "") + local value + value=$(vvv_get_site_config_value "folders.${folder}.composer.${key}" "") if [[ "install" == "${key}" ]]; then if [[ "True" == "${value}" ]]; then vvv_info " * Running composer install in ${folder}" @@ -455,7 +468,8 @@ function vvv_custom_folder_npm() { if keys=$(shyaml keys -y -q "sites.${SITE_ESCAPED}.folders.${folder}.npm" < "${VVV_CONFIG}"); then for key in $keys; do cd "${folder}" - local value=$(vvv_get_site_config_value "folders.${folder}.npm.${key}" "") + local value + value=$(vvv_get_site_config_value "folders.${folder}.npm.${key}" "") if [[ "install" == "${key}" ]]; then if [[ "True" == "${value}" ]]; then vvv_info " * Running npm install in ${folder}" @@ -483,11 +497,17 @@ function vvv_custom_folder_npm() { # @internal # @see vvv_clone_site_git_folder function vvv_custom_folder_git() { - local folder="${1}" - local repo=$(vvv_get_site_config_value "folders.${folder}.git.repo" "?") - local overwrite_on_clone=$(vvv_get_site_config_value "folders.${folder}.git.overwrite_on_clone" "False") - local hard_reset=$(vvv_get_site_config_value "folders.${folder}.git.hard_reset" "False") - local pull=$(vvv_get_site_config_value "folders.${folder}.git.pull" "False") + local folder + local repo + local overwrite_on_clone + local hard_reset + local pull + + folder="${1}" + repo=$(vvv_get_site_config_value "folders.${folder}.git.repo" "?") + overwrite_on_clone=$(vvv_get_site_config_value "folders.${folder}.git.overwrite_on_clone" "False") + hard_reset=$(vvv_get_site_config_value "folders.${folder}.git.hard_reset" "False") + pull=$(vvv_get_site_config_value "folders.${folder}.git.pull" "False") if [ ! -d "${VVV_PATH_TO_SITE}/${folder}" ]; then vvv_clone_site_git_folder "${repo}" "${folder}" @@ -496,7 +516,7 @@ function vvv_custom_folder_git() { if [ ! -d "${VVV_PATH_TO_SITE}/${folder}/.git" ]; then vvv_info " - VVV was asked to clone into a folder that already exists (${folder}), but does not contain a git repo" vvv_info " - overwrite_on_clone is turned on so VVV will purge with extreme predjudice and clone over the folders grave" - rm -rf "${VVV_PATH_TO_SITE}/${folder}" + rm -rf "${VVV_PATH_TO_SITE:?}/${folder}" vvv_clone_site_git_folder "${repo}" "${folder}" fi else diff --git a/version b/version index 1e3345683..e4fba2183 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.11.2 +3.12