name: Anti-EAV Strict Lint # Drop this file into each partner plugin's `.github/workflows/anti-eav-lint.yml`. # Required: `2meet-data-optimizer` v1.0.0+ available either via: # (a) Composer dev dependency on the plugin repo, OR # (b) Side-by-side checkout in the same workspace. on: pull_request: branches: [ main, master, develop ] push: branches: [ main, master ] jobs: anti-eav-lint: name: Anti-EAV Strict Lint (wp tmdo lint --strict) runs-on: ubuntu-latest steps: - name: Checkout this plugin uses: actions/checkout@v4 with: path: this-plugin - name: Checkout 2meet-data-optimizer uses: actions/checkout@v4 with: repository: wpdev/2meet-data-optimizer path: 2meet-data-optimizer ref: v1.0.0 - name: Setup PHP 8.3 uses: shivammathur/setup-php@v2 with: php-version: '8.3' tools: composer:v2, wp-cli - name: Install 2meet-data-optimizer dependencies working-directory: 2meet-data-optimizer run: composer install --no-interaction --no-dev --prefer-dist - name: Bootstrap minimal WP for wp-cli run: | # Install a throwaway WordPress so wp-cli has runtime context. wp core download --path=/tmp/wp --skip-content wp config create --path=/tmp/wp --dbname=wp_lint --dbuser=root --dbpass=root --dbhost=127.0.0.1 # Symlink 2meet-data-optimizer into the wp-content/plugins dir so its CLI loads. mkdir -p /tmp/wp/wp-content/plugins ln -s "$GITHUB_WORKSPACE/2meet-data-optimizer" /tmp/wp/wp-content/plugins/2meet-data-optimizer - name: Run wp tmdo lint --strict run: | cd /tmp/wp wp --skip-themes --skip-plugins=all tmdo lint \ --plugin="$GITHUB_WORKSPACE/this-plugin" \ --strict \ --max-autoload=30 # Exit non-zero on: # - Direct SELECT FROM wp_postmeta / wp_usermeta / wp_termmeta / wp_commentmeta # - update_post_meta() on a field already registered to the TMDO Schema Registry # - autoload=yes options exceeding --max-autoload (default 30) # - meta_query with ≥3 conditions but no wpdo_register_fields # Bypass: phpcs:ignore WPDO.AntiEAV. --