GitHub Actions - CI/CD automatizálás
A GitHub Actions a GitHub beépített CI/CD platformja, amely lehetővé teszi a fejlesztési workflow-k automatizálását. WordPress projektekhez ideális tesztelésre, build-elésre és deployment-re.
Miért használd?
- Beépített GitHub-ba - Nincs külső szolgáltatás
- Ingyenes - Public repokhoz korlátlan, private-hoz 2000 perc/hó
- YAML konfiguráció - Verziókezelt workflow-k
- Marketplace - Kész action-ök ezrei
Alapfogalmak
Workflow
Automatizált folyamat, amely eseményekre reagál.
# .github/workflows/main.yml
name: My Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "Hello World"
Trigger (on)
Mikor fusson a workflow:
| Trigger | Mikor |
|---|---|
push | Kód push-olásakor |
pull_request | PR nyitáskor/frissítéskor |
schedule | Ütemezve (cron) |
workflow_dispatch | Manuális indítás |
release | Release létrehozásakor |
Job
Egy végrehajtási egység a workflow-ban.
Step
Egyetlen parancs vagy action a job-ban.
Runner
A virtuális gép, ahol a job fut:
ubuntu-latestwindows-latestmacos-latest
WordPress workflow-k
PHP linting és PHPCS
name: PHP Quality
on: [push, pull_request]
jobs:
phpcs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
tools: composer, cs2pr
- name: Install dependencies
run: composer install --prefer-dist --no-progress
- name: Run PHPCS
run: vendor/bin/phpcs --report=checkstyle | cs2pr
PHPUnit tesztek
name: PHPUnit Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress_test
ports:
- 3306:3306
options: >-
--health-cmd="mysqladmin ping"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mysqli
coverage: xdebug
- name: Install dependencies
run: composer install --prefer-dist --no-progress
- name: Install WordPress test suite
run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 latest
- name: Run tests
run: vendor/bin/phpunit --coverage-text
JavaScript build
name: Build Assets
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: build
path: dist/
Deployment workflow-k
FTP/SFTP deploy
name: Deploy to Server
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy via SFTP
uses: SamKirkland/FTP-Deploy-[email protected]
with:
server: ${{ secrets.FTP_SERVER }}
username: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
local-dir: ./
server-dir: /public_html/wp-content/themes/my-theme/
exclude: |
**/.git*
**/.git*/**
**/node_modules/**
.env
SSH deploy
name: Deploy via SSH
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to server
uses: appleboy/ssh-[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/html
git pull origin main
composer install --no-dev
wp cache flush
WP Engine deploy
name: Deploy to WP Engine
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Deploy to WP Engine
uses: wpengine/github-action-wpe-site-deploy@v3
with:
WPE_SSHG_KEY_PRIVATE: ${{ secrets.WPE_SSHG_KEY_PRIVATE }}
WPE_ENV: production
SRC_PATH: wp-content/themes/my-theme/
REMOTE_PATH: wp-content/themes/my-theme/
Matrix tesztelés
Több PHP/WordPress verzió tesztelése:
name: PHP Compatibility
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
php: ['7.4', '8.0', '8.1', '8.2', '8.3']
wordpress: ['6.2', '6.3', '6.4', 'latest']
steps:
- uses: actions/checkout@v4
- name: Setup PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- name: Install WP ${{ matrix.wordpress }}
run: |
bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1 ${{ matrix.wordpress }}
- name: Run tests
run: vendor/bin/phpunit
Secrets kezelés
Secret létrehozása
- Repository → Settings → Secrets and variables → Actions
- New repository secret
- Add meg a nevet és értéket
Használat workflow-ban
env:
API_KEY: ${{ secrets.API_KEY }}
steps:
- run: curl -H "Authorization: $API_KEY" https://api.example.com
Gyakori secrets
| Secret | Mire |
|---|---|
FTP_SERVER | FTP szerver cím |
FTP_USERNAME | FTP felhasználó |
FTP_PASSWORD | FTP jelszó |
SSH_PRIVATE_KEY | SSH kulcs |
COMPOSER_AUTH | Private package auth |
Hasznos action-ök
PHP
| Action | Funkció |
|---|---|
shivammathur/setup-php | PHP telepítés |
ramsey/composer-install | Composer install |
php-actions/phpunit | PHPUnit futtatás |
JavaScript
| Action | Funkció |
|---|---|
actions/setup-node | Node.js telepítés |
actions/cache | npm cache |
Deployment
| Action | Funkció |
|---|---|
SamKirkland/FTP-Deploy-Action | FTP deploy |
appleboy/ssh-action | SSH parancsok |
wpengine/github-action-wpe-site-deploy | WP Engine |
Utility
| Action | Funkció |
|---|---|
actions/checkout | Repo checkout |
actions/upload-artifact | Fájlok mentése |
actions/download-artifact | Fájlok letöltése |
WordPress.org plugin deploy
name: Deploy to WordPress.org
on:
release:
types: [published]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: |
npm ci
npm run build
- name: WordPress Plugin Deploy
uses: 10up/action-wordpress-plugin-deploy@stable
env:
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
SLUG: my-plugin
Caching
Composer cache
- name: Get Composer Cache Directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
npm cache
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
Feltételes futtatás
Branch alapján
on:
push:
branches:
- main
- 'release/**'
branches-ignore:
- 'feature/**'
Fájl változás alapján
on:
push:
paths:
- 'src/**'
- 'package.json'
paths-ignore:
- '**.md'
- 'docs/**'
Job feltételek
jobs:
deploy:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
Költségek
Ingyenes keretben
| Repo típus | Percek/hó |
|---|---|
| Public | Korlátlan |
| Private | 2000 perc |
Túllépés
- Linux: $0.008/perc
- Windows: $0.016/perc
- macOS: $0.08/perc