-
Notifications
You must be signed in to change notification settings - Fork 1
140 lines (120 loc) · 4.51 KB
/
run-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
name: Tests
on:
push:
branches: [dev, production]
tags:
- '*.*.*'
pull_request:
branches: [dev, production]
jobs:
tests:
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
php: [8.1, 8.2]
os: [ubuntu-20.04]
wordpress: [6.4.2, latest]
include:
- experimental: true
- experimental: false
php: 8.1
wordpress: 6.4.2
name: Tests - PHP ${{ matrix.php }} - WP ${{ matrix.wordpress }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Remove MySQL
run: sudo apt remove mysql-server-8.0 mysql-common
- name: Update apt
run: sudo apt-get update
- name: Install MariaDB
run: |
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
echo "deb http://downloads.mariadb.com/MariaDB/mariadb-10.5/repo/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/mariadb.list
sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/mariadb.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
sudo apt-get install mariadb-server-10.5 mariadb-client-10.5
sudo mysqladmin -p'' password 'root'
- name: Start required services
run: sudo systemctl start mysql && mysql --version
- name: Cache composer packages
uses: actions/cache@v3
with:
path: vendor
key: ${{ matrix.php }}-php-${{ hashFiles('**/composer.lock') }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
tools: composer
coverage: pcov
- name: Install dependencies
env:
COMPOSER_AUTH: '{"github-oauth": {"github.com": "${{secrets.PAT_FOR_GITHUB_ACTIONS}}"} }'
run: composer install --no-interaction --no-progress
- name: Install WP tests
run: bash bin/install-wp-tests.sh wordpress_test root root localhost ${{ matrix.wordpress }}
- name: Run tests
run: composer test
if: matrix.experimental == true
- name: Run tests with coverage
run: composer test-coverage
if: matrix.experimental == false
- name: Save code coverage to artifact
uses: actions/upload-artifact@v3
if: matrix.experimental == false
with:
name: code-coverage
path: "coverage.xml"
retention-days: 5
- name: Prepare Build
if: startsWith(github.ref, 'refs/tags/') && matrix.experimental == false
run: |
export COMPOSER_MEMORY_LIMIT=-1
export GITHUB_BUILD_PATH=${{github.workspace}}
export GITHUB_REPO_SLUG="$(basename ${{github.workspace}})"
export GITHUB_TAG="$(basename ${{github.ref}})"
echo "File to be created : $GITHUB_BUILD_PATH/$GITHUB_REPO_SLUG-$GITHUB_TAG.zip"
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp
wp package install wp-cli/dist-archive-command
npm install
npm run build
composer install --no-dev --optimize-autoloader
cd ..
wp dist-archive $GITHUB_REPO_SLUG $GITHUB_BUILD_PATH/$GITHUB_REPO_SLUG-$GITHUB_TAG.zip
cd $GITHUB_BUILD_PATH
ls $GITHUB_BUILD_PATH
- name: Deploy
if: startsWith(github.ref, 'refs/tags/') && matrix.experimental == false
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.PAT_FOR_GITHUB_ACTIONS }}
with:
files:
${{github.workspace}}/*.zip
- name: Trigger Bedrock Update
if: (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/production') && matrix.experimental == false
uses: pressbooks/composer-autoupdate-bedrock@v2
with:
triggered-by: ${{ github.repository }}
token: ${{ secrets.PAT_COMPOSER_UPDATE }}
branch: ${{ github.ref }}
coverage:
runs-on: ubuntu-latest
needs:
- tests
name: Upload coverage
if: needs.tests.outputs.coverage
steps:
- uses: actions/checkout@v4
- name: Fetch code coverage artifact
uses: actions/download-artifact@v3
with:
name: code-coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}