Add detailed logging to verify directory structure and persist test s… #30
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: 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: 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 |