diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 1044b798..bf67592d 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -1,6 +1,7 @@ name: Testing on: + workflow_dispatch: pull_request: push: branches: diff --git a/README.md b/README.md index a63a80ab..7d0034e8 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,7 @@ The following files are also included unless the `--skip-tests` is used: options: - circle - gitlab + - bitbucket - github --- diff --git a/composer.json b/composer.json index 51f16e08..df06f7ca 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ } ], "require": { - "wp-cli/wp-cli": "^2.5" + "wp-cli/wp-cli": "^2.12" }, "require-dev": { "wp-cli/extension-command": "^1.2 || ^2", @@ -24,7 +24,8 @@ "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true, "johnpbloch/wordpress-core-installer": true - } + }, + "lock": false }, "extra": { "branch-alias": { diff --git a/features/scaffold-plugin-tests.feature b/features/scaffold-plugin-tests.feature index 4b91ae05..bfabc261 100644 --- a/features/scaffold-plugin-tests.feature +++ b/features/scaffold-plugin-tests.feature @@ -172,42 +172,29 @@ Feature: Scaffold plugin unit tests And the {PLUGIN_DIR}/bitbucket-pipelines.yml file should contain: """ - step: - image: php:5.6 - name: "PHP 5.6" + image: php:7.4 + name: "PHP 7.4" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends """ And the {PLUGIN_DIR}/bitbucket-pipelines.yml file should contain: """ - step: - image: php:7.0 - name: "PHP 7.0" + image: php:8.0 + name: "PHP 8.0" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends """ And the {PLUGIN_DIR}/bitbucket-pipelines.yml file should contain: """ - step: - image: php:7.1 - name: "PHP 7.1" + image: php:8.2 + name: "PHP 8.2" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends - """ - And the {PLUGIN_DIR}/bitbucket-pipelines.yml file should contain: - """ - - step: - image: php:7.2 - name: "PHP 7.2" - script: - # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends """ And the {PLUGIN_DIR}/bitbucket-pipelines.yml file should contain: """ @@ -309,3 +296,16 @@ Feature: Scaffold plugin unit tests """ require dirname( dirname( __FILE__ ) ) . '/bar.php'; """ + + Scenario: Accept bitbucket as valid CI in plugin scaffold + Given a WP install + When I run `wp plugin path` + Then save STDOUT as {PLUGIN_DIR} + + When I run `wp scaffold plugin hello-world --ci=bitbucket` + Then STDOUT should not be empty + And the {PLUGIN_DIR}/hello-world/.editorconfig file should exist + And the {PLUGIN_DIR}/hello-world/hello-world.php file should exist + And the {PLUGIN_DIR}/hello-world/readme.txt file should exist + And the {PLUGIN_DIR}/hello-world/bitbucket-pipelines.yml file should exist + And the {PLUGIN_DIR}/hello-world/tests directory should exist diff --git a/features/scaffold-theme-tests.feature b/features/scaffold-theme-tests.feature index 2dd059cb..7a4f2ac5 100644 --- a/features/scaffold-theme-tests.feature +++ b/features/scaffold-theme-tests.feature @@ -168,42 +168,29 @@ Feature: Scaffold theme unit tests And the {THEME_DIR}/t12child/bitbucket-pipelines.yml file should contain: """ - step: - image: php:5.6 - name: "PHP 5.6" + image: php:7.4 + name: "PHP 7.4" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends """ And the {THEME_DIR}/t12child/bitbucket-pipelines.yml file should contain: """ - step: - image: php:7.0 - name: "PHP 7.0" + image: php:8.0 + name: "PHP 8.0" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends """ And the {THEME_DIR}/t12child/bitbucket-pipelines.yml file should contain: """ - step: - image: php:7.1 - name: "PHP 7.1" + image: php:8.2 + name: "PHP 8.2" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends - """ - And the {THEME_DIR}/t12child/bitbucket-pipelines.yml file should contain: - """ - - step: - image: php:7.2 - name: "PHP 7.2" - script: - # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends """ And the {THEME_DIR}/t12child/bitbucket-pipelines.yml file should contain: """ diff --git a/src/Scaffold_Command.php b/src/Scaffold_Command.php index 74423231..efc2bf96 100644 --- a/src/Scaffold_Command.php +++ b/src/Scaffold_Command.php @@ -608,6 +608,7 @@ private function get_output_path( $assoc_args, $subdir ) { * options: * - circle * - gitlab + * - bitbucket * - github * --- * diff --git a/templates/install-wp-tests.sh b/templates/install-wp-tests.sh index c6f53dc5..d2605fe0 100644 --- a/templates/install-wp-tests.sh +++ b/templates/install-wp-tests.sh @@ -22,6 +22,17 @@ download() { curl -s "$1" > "$2"; elif [ `which wget` ]; then wget -nv -O "$2" "$1" + else + echo "Error: Neither curl nor wget is installed." + exit 1 + fi +} + +# Check if svn is installed +check_svn_installed() { + if ! command -v svn > /dev/null; then + echo "Error: svn is not installed. Please install svn and try again." + exit 1 fi } @@ -64,6 +75,7 @@ install_wp() { if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then mkdir -p $TMPDIR/wordpress-trunk rm -rf $TMPDIR/wordpress-trunk/* + check_svn_installed svn export --quiet https://core.svn.wordpress.org/trunk $TMPDIR/wordpress-trunk/wordpress mv $TMPDIR/wordpress-trunk/wordpress/* $WP_CORE_DIR else @@ -108,6 +120,7 @@ install_test_suite() { # set up testing suite mkdir -p $WP_TESTS_DIR rm -rf $WP_TESTS_DIR/{includes,data} + check_svn_installed svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data fi diff --git a/templates/phpunit.xml.dist b/templates/phpunit.xml.dist index 50421ece..16539679 100644 --- a/templates/phpunit.xml.dist +++ b/templates/phpunit.xml.dist @@ -4,8 +4,9 @@ backupGlobals="false" colors="true" convertErrorsToExceptions="true" - convertNoticesToExceptions="true" convertWarningsToExceptions="true" + convertNoticesToExceptions="true" + convertDeprecationsToExceptions="true" > diff --git a/templates/plugin-bitbucket.mustache b/templates/plugin-bitbucket.mustache index bae27174..827e2fa7 100644 --- a/templates/plugin-bitbucket.mustache +++ b/templates/plugin-bitbucket.mustache @@ -1,129 +1,124 @@ pipelines: default: - step: - image: php:5.6 - name: "PHP 5.6" + image: php:7.4 + name: "PHP 7.4" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends - # Install PHPCS - - curl -o /usr/local/bin/phpcs -fSL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar && chmod +x /usr/local/bin/phpcs - - phpcs --version + # PHP extensions + - docker-php-ext-install -j$(nproc) mysqli pdo_mysql zip - # Install WordPress Coding Standards - - WPCS_VERSION=0.14.1 - - curl -o wpcs.tar.gz -fSL "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/archive/${WPCS_VERSION}.tar.gz" - - mkdir -p /var/wpcs && tar -xzf wpcs.tar.gz --directory /var/wpcs --strip-components 1 && rm wpcs.tar.gz - - phpcs --config-set show_progress 1 && phpcs --config-set colors 1 && phpcs --config-set installed_paths /var/wpcs + # Setup WordPress tests + - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true - ## Run PHPCS - - phpcs + # Install Composer + - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" + - php composer-setup.php --install-dir=/usr/local/bin --filename=composer + - php -r "unlink('composer-setup.php');" + - export PATH="$PATH:$HOME/.composer/vendor/bin" + - export COMPOSER_ALLOW_SUPERUSER=1 # Install PHPUnit - - PHPUNIT_VERSION=5.7.27 + - PHPUNIT_VERSION=9.6.19 - curl -o /usr/local/bin/phpunit "https://phar.phpunit.de/phpunit-${PHPUNIT_VERSION}.phar" && chmod +x /usr/local/bin/phpunit + - composer global require yoast/phpunit-polyfills + - export WP_TESTS_PHPUNIT_POLYFILLS_PATH="$HOME/.composer/vendor/yoast/phpunit-polyfills" - phpunit --version - ## Run PHPUnit - - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true - - phpunit - services: - - database - - - step: - image: php:7.0 - name: "PHP 7.0" - script: - # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends - - # Install PHPCS - - curl -o /usr/local/bin/phpcs -fSL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar && chmod +x /usr/local/bin/phpcs + # Install PHPCS and WPCS + - composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true + - composer global require "wp-coding-standards/wpcs" + - composer global require "phpcompatibility/phpcompatibility-wp" - phpcs --version - # Install WordPress Coding Standards - - WPCS_VERSION=0.14.1 - - curl -o wpcs.tar.gz -fSL "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/archive/${WPCS_VERSION}.tar.gz" - - mkdir -p /var/wpcs && tar -xzf wpcs.tar.gz --directory /var/wpcs --strip-components 1 && rm wpcs.tar.gz - - phpcs --config-set show_progress 1 && phpcs --config-set colors 1 && phpcs --config-set installed_paths /var/wpcs - - ## Run PHPCS + # Run PHPCS - phpcs - # Install PHPUnit - - PHPUNIT_VERSION=6.5.6 - - curl -o /usr/local/bin/phpunit "https://phar.phpunit.de/phpunit-${PHPUNIT_VERSION}.phar" && chmod +x /usr/local/bin/phpunit - - phpunit --version - - ## Run PHPUnit - - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true + # Run PHPUnit - phpunit services: - database - step: - image: php:7.1 - name: "PHP 7.1" + image: php:8.0 + name: "PHP 8.0" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends - # Install PHPCS - - curl -o /usr/local/bin/phpcs -fSL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar && chmod +x /usr/local/bin/phpcs - - phpcs --version + # PHP extensions + - docker-php-ext-install -j$(nproc) mysqli pdo_mysql zip - # Install WordPress Coding Standards - - WPCS_VERSION=0.14.1 - - curl -o wpcs.tar.gz -fSL "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/archive/${WPCS_VERSION}.tar.gz" - - mkdir -p /var/wpcs && tar -xzf wpcs.tar.gz --directory /var/wpcs --strip-components 1 && rm wpcs.tar.gz - - phpcs --config-set show_progress 1 && phpcs --config-set colors 1 && phpcs --config-set installed_paths /var/wpcs + # Setup WordPress tests + - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true - ## Run PHPCS - - phpcs + # Install Composer + - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" + - php composer-setup.php --install-dir=/usr/local/bin --filename=composer + - php -r "unlink('composer-setup.php');" + - export PATH="$PATH:$HOME/.composer/vendor/bin" + - export COMPOSER_ALLOW_SUPERUSER=1 # Install PHPUnit - - PHPUNIT_VERSION=6.5.6 + - PHPUNIT_VERSION=9.6.19 - curl -o /usr/local/bin/phpunit "https://phar.phpunit.de/phpunit-${PHPUNIT_VERSION}.phar" && chmod +x /usr/local/bin/phpunit + - composer global require yoast/phpunit-polyfills + - export WP_TESTS_PHPUNIT_POLYFILLS_PATH="$HOME/.composer/vendor/yoast/phpunit-polyfills" - phpunit --version - ## Run PHPUnit - - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true + # Install PHPCS and WPCS + - composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true + - composer global require "wp-coding-standards/wpcs" + - composer global require "phpcompatibility/phpcompatibility-wp" + - phpcs --version + + # Run PHPCS + - phpcs + + # Run PHPUnit - phpunit services: - database - step: - image: php:7.2 - name: "PHP 7.2" + image: php:8.2 + name: "PHP 8.2" script: # Install Dependencies - - docker-php-ext-install mysqli - - apt-get update && apt-get install -y subversion --no-install-recommends + - apt-get update && apt-get install -y subversion git zip libzip-dev --no-install-recommends - # Install PHPCS - - curl -o /usr/local/bin/phpcs -fSL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar && chmod +x /usr/local/bin/phpcs - - phpcs --version + # PHP extensions + - docker-php-ext-install -j$(nproc) mysqli pdo_mysql zip - # Install WordPress Coding Standards - - WPCS_VERSION=0.14.1 - - curl -o wpcs.tar.gz -fSL "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/archive/${WPCS_VERSION}.tar.gz" - - mkdir -p /var/wpcs && tar -xzf wpcs.tar.gz --directory /var/wpcs --strip-components 1 && rm wpcs.tar.gz - - phpcs --config-set show_progress 1 && phpcs --config-set colors 1 && phpcs --config-set installed_paths /var/wpcs + # Setup WordPress tests + - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true - ## Run PHPCS - - phpcs + # Install Composer + - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" + - php composer-setup.php --install-dir=/usr/local/bin --filename=composer + - php -r "unlink('composer-setup.php');" + - export PATH="$PATH:$HOME/.composer/vendor/bin" + - export COMPOSER_ALLOW_SUPERUSER=1 # Install PHPUnit - - PHPUNIT_VERSION=6.5.6 + - PHPUNIT_VERSION=9.6.19 - curl -o /usr/local/bin/phpunit "https://phar.phpunit.de/phpunit-${PHPUNIT_VERSION}.phar" && chmod +x /usr/local/bin/phpunit + - composer global require yoast/phpunit-polyfills + - export WP_TESTS_PHPUNIT_POLYFILLS_PATH="$HOME/.composer/vendor/yoast/phpunit-polyfills" - phpunit --version - ## Run PHPUnit - - bash bin/install-wp-tests.sh wordpress_tests root root 127.0.0.1 latest true + # Install PHPCS and WPCS + - composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true + - composer global require "wp-coding-standards/wpcs" + - composer global require "phpcompatibility/phpcompatibility-wp" + - phpcs --version + + # Run PHPCS + - phpcs + + # Run PHPUnit - phpunit services: - database