Skip to content

Add logging and ensure phpunit.xml exists to fix configuration errors #31

Add logging and ensure phpunit.xml exists to fix configuration errors

Add logging and ensure phpunit.xml exists to fix configuration errors #31

Workflow file for this run

name: CI Pipeline
on:
push:
branches:
- main
- tooling/github-actions
pull_request:
jobs:
prepare_test_and_build_environment:
runs-on: ubuntu-latest
env:
HOME: /home/runner
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Log Repository Structure
run: |
echo "Repository structure (GITHUB_WORKSPACE):"
tree -L 2 "${GITHUB_WORKSPACE}" || find "${GITHUB_WORKSPACE}" -maxdepth 2 -type d
- name: Install Docker Compose
run: |
sudo apt-get update
sudo apt-get install -y docker-compose
- name: Authenticate with GitHub CLI
env:
GH_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
run: echo "$GH_ACCESS_TOKEN" | gh auth login --with-token
- name: Clone GV Tooling
run: gh repo clone GravityKit/Tooling $HOME/tooling
- name: Log Tooling Structure
run: |
echo "Tooling directory structure ($HOME/tooling):"
tree -L 2 "$HOME/tooling" || find "$HOME/tooling" -maxdepth 2 -type d
# Create .env file in docker-unit-tests folder with PLUGIN_DIR set to the repository root
- name: Create .env file in docker-unit-tests if missing
run: |
mkdir -p "$HOME/tooling/docker-unit-tests"
if [ ! -f "$HOME/tooling/docker-unit-tests/.env" ]; then
echo "PLUGIN_DIR=${GITHUB_WORKSPACE}" > "$HOME/tooling/docker-unit-tests/.env"
echo "WP_LATEST_TESTS_DIR=$HOME/wordpress-latest-tests-lib" >> "$HOME/tooling/docker-unit-tests/.env"
echo "PHPUNIT_DIR=$HOME/phpunit" >> "$HOME/tooling/docker-unit-tests/.env"
echo "GF_PLUGIN_DIR=$HOME/gravityforms" >> "$HOME/tooling/docker-unit-tests/.env"
echo "GH_AUTH_TOKEN=${{ secrets.GH_ACCESS_TOKEN }}" >> "$HOME/tooling/docker-unit-tests/.env"
fi
echo "Content of $HOME/tooling/docker-unit-tests/.env:"
cat "$HOME/tooling/docker-unit-tests/.env"
- name: Authenticate GitHub for Composer
env:
GH_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
run: composer config --global --auth github-oauth.github.com "$GH_ACCESS_TOKEN"
- name: Ensure test_dependencies directory exists
run: mkdir -p $HOME/test_dependencies
- name: Cache Dependencies
uses: actions/cache@v4
with:
path: $HOME/test_dependencies
key: test-dependencies-${{ runner.os }}-${{ hashFiles('composer.lock', 'package-lock.json') }}
restore-keys: |
test-dependencies-${{ runner.os }}-
- name: Force Composer to Use HTTPS
run: composer config --global github-protocols https
- name: Install Build Dependencies
run: |
$HOME/tooling/build-tools/build_tools.sh npm -o install
$HOME/tooling/build-tools/build_tools.sh composer -o install
- name: Configure Test Environment
env:
GH_AUTH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
run: bash $HOME/tooling/docker-unit-tests/docker-unit-tests.sh prepare_all
- name: Log WP Latest Tests Lib Structure
run: |
echo "Contents of wordpress-latest-tests-lib ($HOME/wordpress-latest-tests-lib):"
tree -L 2 "$HOME/wordpress-latest-tests-lib" || find "$HOME/wordpress-latest-tests-lib" -maxdepth 2 -type d
# Persist workspace artifact including test suites
- name: Prepare Workspace Artifact
run: |
mkdir -p workspace_artifact
cp -R $HOME/tooling workspace_artifact/
cp -R $HOME/test_dependencies workspace_artifact/
if [ -d "$HOME/wordpress-latest-tests-lib" ]; then
cp -R $HOME/wordpress-latest-tests-lib workspace_artifact/
else
echo "wordpress-latest-tests-lib not found"
fi
echo "Workspace artifact structure:"
tree -L 2 workspace_artifact || find workspace_artifact -maxdepth 2 -type d
- name: Save Workspace
uses: actions/upload-artifact@v4
with:
name: workspace
path: workspace_artifact
if-no-files-found: warn
compression-level: 6
overwrite: false
include-hidden-files: true
run_php_74_unit_tests:
runs-on: ubuntu-latest
env:
HOME: /home/runner
needs: prepare_test_and_build_environment
steps:
- name: Install Docker Compose
run: |
sudo apt-get update
sudo apt-get install -y docker-compose
- name: Restore Workspace
uses: actions/download-artifact@v4
with:
name: workspace
path: /tmp/workspace/
- name: Extract Workspace Artifact
run: |
if [ -d /tmp/workspace/workspace_artifact ]; then
rsync -a /tmp/workspace/workspace_artifact/ $HOME/
else
rsync -a /tmp/workspace/ $HOME/
fi
echo "Directory structure after extraction:"
tree -L 2 "$HOME" || find "$HOME" -maxdepth 2 -type d
- name: Verify .env file in docker-unit-tests exists
run: |
if [ -f "$HOME/tooling/docker-unit-tests/.env" ]; then
echo ".env file exists in $HOME/tooling/docker-unit-tests"
else
echo ".env file missing in $HOME/tooling/docker-unit-tests" >&2
exit 1
fi
- name: Ensure phpunit.xml exists in PLUGIN_DIR
run: |
source "$HOME/tooling/docker-unit-tests/.env"
if [ ! -f "$PLUGIN_DIR/phpunit.xml" ] && [ -f "$PLUGIN_DIR/phpunit.xml.dist" ]; then
cp "$PLUGIN_DIR/phpunit.xml.dist" "$PLUGIN_DIR/phpunit.xml"
echo "Created phpunit.xml from phpunit.xml.dist"
else
echo "phpunit.xml exists or phpunit.xml.dist not found."
fi
- name: Run PHP 7.4 Unit Tests
run: |
export ENV_FILE="$HOME/tooling/docker-unit-tests/.env"
bash $HOME/tooling/docker-unit-tests/docker-unit-tests.sh test_74
run_php_80_unit_tests:
runs-on: ubuntu-latest
env:
HOME: /home/runner
needs: prepare_test_and_build_environment
steps:
- name: Install Docker Compose
run: |
sudo apt-get update
sudo apt-get install -y docker-compose
- name: Restore Workspace
uses: actions/download-artifact@v4
with:
name: workspace
path: /tmp/workspace/
- name: Extract Workspace Artifact
run: |
if [ -d /tmp/workspace/workspace_artifact ]; then
rsync -a /tmp/workspace/workspace_artifact/ $HOME/
else
rsync -a /tmp/workspace/ $HOME/
fi
echo "Directory structure after extraction:"
tree -L 2 "$HOME" || find "$HOME" -maxdepth 2 -type d
- name: Verify .env file in docker-unit-tests exists
run: |
if [ -f "$HOME/tooling/docker-unit-tests/.env" ]; then
echo ".env file exists in $HOME/tooling/docker-unit-tests"
else
echo ".env file missing in $HOME/tooling/docker-unit-tests" >&2
exit 1
fi
- name: Check Test Suite Configuration
run: |
source $HOME/tooling/docker-unit-tests/.env
echo "Listing WP_LATEST_TESTS_DIR ($WP_LATEST_TESTS_DIR) contents:"
tree -L 2 "$WP_LATEST_TESTS_DIR" || find "$WP_LATEST_TESTS_DIR" -maxdepth 2 -type d
if [ ! -f "$WP_LATEST_TESTS_DIR/wp-tests-config.php" ]; then
echo "wp-tests-config.php not found in $WP_LATEST_TESTS_DIR" >&2
exit 1
else
echo "Test suite is configured."
fi
- name: Ensure phpunit.xml exists in PLUGIN_DIR
run: |
source "$HOME/tooling/docker-unit-tests/.env"
if [ ! -f "$PLUGIN_DIR/phpunit.xml" ] && [ -f "$PLUGIN_DIR/phpunit.xml.dist" ]; then
cp "$PLUGIN_DIR/phpunit.xml.dist" "$PLUGIN_DIR/phpunit.xml"
echo "Created phpunit.xml from phpunit.xml.dist"
else
echo "phpunit.xml exists or phpunit.xml.dist not found."
fi
- name: Run PHP 8.0 Unit Tests
run: |
export ENV_FILE="$HOME/tooling/docker-unit-tests/.env"
bash $HOME/tooling/docker-unit-tests/docker-unit-tests.sh test_80
build_package_release:
runs-on: ubuntu-latest
env:
HOME: /home/runner
needs: [run_php_74_unit_tests, run_php_80_unit_tests]
steps:
- name: Restore Workspace
uses: actions/download-artifact@v4
with:
name: workspace
path: /tmp/workspace/
- name: Extract Workspace Artifact
run: |
if [ -d /tmp/workspace/workspace_artifact ]; then
rsync -a /tmp/workspace/workspace_artifact/ $HOME/
else
rsync -a /tmp/workspace/ $HOME/
fi
echo "Final workspace structure:"
tree -L 2 "$HOME" || find "$HOME" -maxdepth 2 -type d
- name: Build and Package
run: |
BRANCH_REF="${{ github.ref }}"
$HOME/tooling/build-tools/build_tools.sh composer -o "install --no-dev"
$HOME/tooling/build-tools/build_tools.sh grunt
if [[ "$BRANCH_REF" != "refs/heads/main" ]]; then
$HOME/tooling/build-tools/build_tools.sh package_build -o "gravityview gravityview.php --include-hash"
else
$HOME/tooling/build-tools/build_tools.sh package_build -o "gravityview gravityview.php $([[ $(git log -n 1 | grep "\[skip release\]") ]] && echo --include-hash)"
fi
mkdir -p gravityview
cp -R vendor* gravityview
rm gravityview/vendor_prefixed/gravitykit/foundation/src/translations.js.php
zip -gr $(ls gravityview-*.zip) gravityview
mkdir .release
cp gravityview-*.zip .release
- name: Store Release Artifacts
uses: actions/upload-artifact@v4
with:
name: release
path: .release
- name: Create GitHub Release
if: github.ref == 'refs/heads/main'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.email "support@gravitykit.com"
git config user.name "GravityView - CI"
$HOME/tooling/build-tools/build_tools.sh create_release -o "gravityview gravityview.php $(ls gravityview-*.zip)"
- name: Notify GravityView Release Manager
if: github.ref == 'refs/heads/main'
run: |
if ! git log -n 1 | grep "\[skip notify\]"; then
$HOME/tooling/build-tools/build_tools.sh announce_build -o "gravityview gravityview.php $(ls gravityview-*.zip) --with-circle"
fi