Skip to content

Persist test suites and set PLUGIN_DIR to GITHUB_WORKSPACE #28

Persist test suites and set PLUGIN_DIR to GITHUB_WORKSPACE

Persist test suites and set PLUGIN_DIR to GITHUB_WORKSPACE #28

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: 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
# Create .env file in docker-unit-tests folder using GITHUB_WORKSPACE for PLUGIN_DIR
- 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
- 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
# 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
- 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
- name: Verify .env file in docker-unit-tests exists
run: |
if [ -f "$HOME/tooling/docker-unit-tests/.env" ]; then
echo ".env file exists."
else
echo ".env file missing!" >&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
- name: Verify .env file in docker-unit-tests exists
run: |
if [ -f "$HOME/tooling/docker-unit-tests/.env" ]; then
echo ".env file exists."
else
echo ".env file missing!" >&2
exit 1
fi
- name: Check Test Suite Configuration
run: |
source $HOME/tooling/docker-unit-tests/.env
if [ ! -f "$WP_LATEST_TESTS_DIR/wp-tests-config.php" ]; then
echo "wp-tests-config.php not found!" >&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
- 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.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.php $(ls gravityview-*.zip) --with-circle"
fi