Skip to content

Use terminus-github-actions and Sage install script cleanup #103

Use terminus-github-actions and Sage install script cleanup

Use terminus-github-actions and Sage install script cleanup #103

Workflow file for this run

name: Sage Install Tests
permissions:
pull-requests: read
contents: read
on:
pull_request:
paths:
- '.github/workflows/sage-test.yml'
- 'private/scripts/**'
types: [opened, synchronize, reopened, ready_for_review]
jobs:
apply_upstream_updates:
name: Apply Upstream Updates
runs-on: ubuntu-latest
env:
TERM: xterm-256color
defaults:
run:
shell: bash
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install SSH keys
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Get latest Terminus release
uses: pantheon-systems/terminus-github-actions@v1
with:
pantheon-machine-token: ${{ secrets.TERMINUS_TOKEN }}
- name: Validate Pantheon Host Key
run: |
echo "Host *.drush.in HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
echo "Host *.drush.in PubkeyAcceptedKeyTypes +ssh-rsa" >> ~/.ssh/config
echo "StrictHostKeyChecking no" >> ~/.ssh/config
- name: Log into Terminus
run: |
terminus auth:login --machine-token=${{ secrets.TERMINUS_TOKEN }}
terminus upstream:updates:apply wpcm-sage-install-tests
test:
name: Sage Install Tests
env:
TERM: xterm-256color
needs: apply_upstream_updates
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
php-version: [8.1, 8.2, 8.3]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install SSH keys
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Get and Set PR number
id: pr
run: |
pr_num=${{ github.run_number }}
if [ "${pr_num}" == "" ]; then
echo "PR_NUM=rel" >> $GITHUB_ENV
else
echo "PR_NUM=${pr_num}" >> $GITHUB_ENV
fi
env:
GITHUB_TOKEN: ${{ github.token }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: current
- name: Generate multidev name
id: generate_name
run: |
os_short=""
case "${{ matrix.os }}" in
ubuntu-latest)
os_short="nix"
;;
macos-latest)
os_short="mac"
;;
windows-latest)
os_short="win"
;;
esac
php_short=$(echo "${{ matrix.php-version }}" | tr -d '.')
echo "PR number: $PR_NUM"
echo "OS: $os_short"
echo "PHP: $php_short"
multidev_name="${os_short}-${php_short}-${PR_NUM}"
echo "Generated multidev name: $multidev_name"
echo "multidev_name=$multidev_name" >> $GITHUB_ENV
- name: Get latest Terminus release
uses: pantheon-systems/action-terminus-install@v1
with:
os: ${{ matrix.os }}
- name: Validate Pantheon Host Key
run: |
echo "Host *.drush.in HostKeyAlgorithms +ssh-rsa" >> ~/.ssh/config
echo "Host *.drush.in PubkeyAcceptedKeyTypes +ssh-rsa" >> ~/.ssh/config
echo "StrictHostKeyChecking no" >> ~/.ssh/config
- name: Log into Terminus
run: |
terminus auth:login --machine-token=${{ secrets.TERMINUS_TOKEN }}
- name: Clone site and create multidev
run: |
echo "Cloning site..."
terminus local:clone wpcm-sage-install-tests
cd ~/pantheon-local-copies/wpcm-sage-install-tests
if [[ -n $(git status --porcelain) ]]; then
echo "❌ Local clone is dirty. Exiting..."
exit 1
fi
# If sage-test exists, delete it.
if [[ -d "web/app/themes/sage-test" ]]; then
echo "Deleting existing sage-test..."
rm -rf web/app/themes/sage-test
fi
echo "Checking for existing multidev..."
multidevs=$(terminus env:list wpcm-sage-install-tests --format=json --fields=id)
# Use jq to check if the key exists in the JSON
match_exists=$(echo "$json_output" | jq --arg id "$multidev_name" 'any(.[]; .id == $id)')
if [ "$match_exists" == "true" ]; then
echo "Environment $multidev_name exists."
terminus multidev:delete --delete-branch --yes wpcm-sage-install-tests.$multidev_name
else
echo "Environment $multidev_name does not exist."
fi
terminus multidev:create wpcm-sage-install-tests.dev $multidev_name
terminus workflow:wait wpcm-sage-install-tests."$multidev_name" --quiet --max=15
echo "Checking out multidev..."
git fetch --all
git checkout $multidev_name
- name: Copy latest repository changes
run: |
# Sync the files from checked-out repo to pantheon-local-copies, excluding the .git folder
rsync -av --exclude='.git/' ${{ github.workspace }}/ ~/pantheon-local-copies/wpcm-sage-install-tests/
# Navigate to Pantheon local copies directory
cd ~/pantheon-local-copies/wpcm-sage-install-tests/
git config --global user.email "[email protected]"
git config --global user.name "Pantheon TestBot"
# Add, commit and push
git add .
git commit -m "Sync latest changes to test environment"
git push origin $multidev_name
- name: Install Composer Dependencies
run: |
cd ~/pantheon-local-copies/wpcm-sage-install-tests
composer update
- name: Run Sage Install Script
env:
SAGENAME: sage-test
SITENAME: wpcm-sage-install-tests
CI: 1
PHPVERSION: ${{ matrix.php-version }}
SITEENV: ${{ env.multidev_name }}
run: |
export SITEENV=$multidev_name
cd ~/pantheon-local-copies/$SITENAME
composer install-sage
echo "✅ Sage Install Script passed!"
- name: Delete multidev
if: always()
run: terminus multidev:delete --delete-branch --yes "wpcm-sage-install-tests.${multidev_name}"
- name: Delete the multidev build artifact
if: always()
run: |
cd ~/pantheon-local-copies/wpcm-sage-install-tests
# Allow these to fail.
git fetch --tags origin || true
git tag -d "pantheon_build_artifacts_${multidev_name}" || true
git push origin --delete "pantheon_build_artifacts_${multidev_name}" || true