-
Notifications
You must be signed in to change notification settings - Fork 872
156 lines (140 loc) · 5.88 KB
/
wpcloud.yml
File metadata and controls
156 lines (140 loc) · 5.88 KB
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
name: WP Cloud Unit Testing for WPCOMSH
on:
pull_request:
push:
branches: ['trunk', '*/branch-*']
concurrency:
group: wpcloud-wpcomsh
cancel-in-progress: false
# Concurrency is set up to make sure we can only run one WP Cloud testing job at the same time.
permissions:
# actions/checkout, actions/upload-artifact, actions/download-artifact
contents: read
jobs:
build:
name: Install the Monorepo and build wpcomsh
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name
outputs:
wpcomsh: ${{ steps.changed.outputs.wpcomsh }}
steps:
- uses: actions/checkout@v6
# For pull requests, list-changed-projects.sh needs the merge base.
# But it doesn't have to be checked out.
- name: Deepen to merge base
if: github.event_name == 'pull_request'
uses: ./.github/actions/deepen-to-merge-base
with:
checkout: false
- name: Setup tools
uses: ./.github/actions/tool-setup
with:
# Match PHP version on WP Cloud so the right vendor packages get installed.
php: 8.3
- name: Monorepo install
run: |
echo "::group::Pnpm"
pnpm install
echo "::endgroup::"
- name: Detect if wpcomsh has changed
id: changed
run: |
CHANGED="$(EXTRA=test .github/files/list-changed-projects.sh)"
WPCOMSH_CHANGED="$(jq --argjson changed "$CHANGED" -n '$changed | has( "plugins/wpcomsh" ) ')"
echo "wpcomsh=${WPCOMSH_CHANGED}" >> "$GITHUB_OUTPUT"
- name: Build wpcomsh
if: steps.changed.outputs.wpcomsh == 'true'
run: |
echo "::group::Installing and building wpcomsh"
rm projects/plugins/wpcomsh/composer.lock
pnpm jetpack build -v --deps plugins/wpcomsh
echo "::endgroup::"
echo "::group::Preparing artifact"
pnpm jetpack rsync -v --non-interactive wpcomsh /tmp/wpcomsh
cp -a projects/plugins/wpcomsh/bin /tmp/wpcomsh
cp -a projects/plugins/wpcomsh/tests /tmp/wpcomsh
# The test on WP Cloud won't use `phpunit-select-config`, so select config manually.
cp -aL projects/plugins/wpcomsh/phpunit.12.xml.dist /tmp/wpcomsh/phpunit.xml.dist
tar -cvvf wpcomsh.tar.xz -C /tmp/ wpcomsh
echo "::endgroup::"
- name: Store artifact
uses: actions/upload-artifact@v7
with:
path: wpcomsh.tar.xz
retention-days: 1
# Already compressed.
compression-level: 0
archive: false
deploy:
name: Run PHPUnit on the WP Cloud test site
runs-on: ubuntu-latest
needs: build
if: needs.build.outputs.wpcomsh == 'true'
steps:
- name: Download build artifact
uses: actions/download-artifact@v8
with:
name: wpcomsh.tar.xz
- name: Configure Github to be able to SSH to the WP Cloud site
run: |
echo "::group::Initializing"
mkdir -vp ~/.ssh/
chmod -v 700 ~/.ssh
touch ~/.ssh/id_site
touch ~/.ssh/known_hosts
touch ~/.ssh/config
chmod 600 ~/.ssh/id_site
chmod 600 ~/.ssh/known_hosts
chmod 600 ~/.ssh/config
echo "$SSH_KEY" > ~/.ssh/id_site
echo "wrote ~/.ssh/id_site"
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
echo "wrote ~/.ssh/known_hosts"
echo "Host jpwpcomsh" > ~/.ssh/config
echo " Hostname sftp.wp.com" >> ~/.ssh/config
echo " User wpcom-jetpackisbestpack-default-237778992" >> ~/.ssh/config
echo " IdentityFile ~/.ssh/id_site" >> ~/.ssh/config
echo " IdentitiesOnly yes" >> ~/.ssh/config
echo "::endgroup::"
echo "::group::Extract wpcomsh build"
tar -xvvf wpcomsh.tar.xz wpcomsh
echo "::endgroup::"
echo "::group::Transferring wpcomsh to the testing server"
# This can give errors if the previous state was broken, so ignore them
ssh jpwpcomsh "wp --skip-plugins --skip-themes dereferenced freshen > /dev/null 2>&1" || echo "wp dereferenced freshen has exited with code $?"
ssh jpwpcomsh "rm -rf /tmp/old-* > /dev/null 2>&1"
rsync -azKPv --prune-empty-dirs --delete --delete-after --delete-excluded --copy-links wpcomsh/. jpwpcomsh:/srv/htdocs/wp-content/mu-plugins/wpcomsh/.
echo "::endgroup::"
# Do a basic check to verify the site is loading
echo "::group::Verify things load"
CODE=0
SITE_URL=$(ssh jpwpcomsh "wp option get siteurl" 2>/dev/null) || CODE=$?
if [[ $CODE -ne 0 ]]; then
echo 'Unable to run a basic `wp` command! Something is wrong with the site.'
elif [[ ! "$SITE_URL" =~ ^https?://[a-z0-9_.-]+$ ]]; then
echo 'Site URL retrieved does not seem to be a URL.'
CODE=1
else
echo 'No issues using a simple command in WP-CLI.'
curl -s --fail "$SITE_URL" > /dev/null || CODE=$?
if [[ $CODE -ne 0 ]]; then
echo 'Unable to load site! Something is wrong with the site.'
else
echo 'No issues slurping site with `curl`.'
fi
fi
echo "::endgroup::"
# Proceed with tests if all seems well
if [[ $CODE -eq 0 ]]; then
echo "::group::Run PHPUnit tests"
ssh jpwpcomsh "/srv/htdocs/wp-content/mu-plugins/wpcomsh/bin/run-phpunit-tests.sh" || CODE=$?
echo "::endgroup::"
fi
echo "::group::teardown"
rm -rvf ~/.ssh/
echo "::endgroup::"
echo "Exiting with exit code $CODE"
exit $CODE
env:
SSH_KEY: ${{ secrets.UPDATEJETPACKSTAGING_SSH_KEY }}
SSH_KNOWN_HOSTS: ${{ secrets.UPDATEJETPACKSTAGING_SSH_KNOWN_HOSTS }}