-
Notifications
You must be signed in to change notification settings - Fork 68
185 lines (171 loc) · 7.34 KB
/
build-shop.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
name: Build PrestaShop and export sources and SQL dump as artifacts
on:
workflow_call:
inputs:
pr_number:
type: string
description: Pull request Id
required: true
base_branch:
type: string
description: Base branch to rebase the PR
required: true
ps_mode_dev:
type: boolean
description: Enable/Disable the developer mode
required: true
rebase_or_merge:
type: string
required: true
description: Rebase or merge the pull request
php_version:
type: string
description: PHP version
required: true
node_version:
type: string
description: Node version
required: true
backoffice_layout:
type: string
description: Backoffice layout
required: true
jobs:
build-shop-artifacts:
runs-on: ubuntu-latest
name: Build shop artifacts
env:
# Input values
PS_MODE_DEV: ${{ inputs.ps_mode_dev && '1' || '0' }}
PS_DEV_MODE: ${{ inputs.ps_mode_dev && '1' || '0' }}
PHP_VERSION: ${{ inputs.php_version }}
NODE_VERSION: ${{ inputs.node_version }}
VERSION: ${{ inputs.php_version }}-apache
PS_DOMAIN: ${{ ((inputs.base_branch == '8.0.x') || (inputs.base_branch == '1.7.8.x')) && 'localhost:8001' || 'localhost:8002' }}
PS_ENABLE_SSL: ${{ ((inputs.base_branch == '8.0.x') || (inputs.base_branch == '1.7.8.x')) && '0' || '1' }}
ADMIN_PASSWD: ${{ (inputs.base_branch == '1.7.8.x') && 'prestashop_demo' || 'Correct Horse Battery Staple' }}
URL_FO: ${{ ((inputs.base_branch == '8.0.x') || (inputs.base_branch == '1.7.8.x')) && 'http://localhost:8001/' || 'https://localhost:8002/' }}
# Fixed values
DB_USER: root
DB_PASSWD: prestashop
DB_NAME: prestashop
DB_PREFIX: tst_
PS_DIR: 'my_prestashop'
PS_FOLDER_INSTALL: install-dev
PS_FOLDER_ADMIN: admin-dev
PS_COUNTRY: fr
PS_LANGUAGE: en
ADMIN_MAIL: '[email protected]'
# Build assets and install shop
PS_INSTALL_AUTO: 1
DISABLE_MAKE: 0
steps:
- name: Print Inputs values
shell: bash
run: echo "${{ toJSON(inputs) }}"
# Checkout repository to use custom actions
- uses: actions/checkout@v3
with:
path: custom_actions
- name: Checkout PrestaShop
uses: ./custom_actions/.github/workflows/actions/checkout-prestashop
with:
pr_number: ${{ inputs.pr_number }}
base_branch: ${{ inputs.base_branch }}
rebase_or_merge: ${{ inputs.rebase_or_merge }}
backoffice_layout: ${{ inputs.backoffice_layout }}
ps_dir: ${{ env.PS_DIR }}
# Certificate
- name: Generate a certificate
if: (inputs.base_branch == '8.1.x') || (inputs.base_branch == 'develop')
run: |
## Install MkCert
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
## Generate certificate
mkcert -key-file ./${{ env.PS_DIR }}/.docker/ssl.key -cert-file ./${{ env.PS_DIR }}/.docker/ssl.crt localhost
## Link certificate to Chrome Trust Store
mkdir -p $HOME/.pki/nssdb
certutil -d $HOME/.pki/nssdb -N
certutil -d sql:$HOME/.pki/nssdb -n localhost -A -t "TCu,Cu,Tu" -i ./${{ env.PS_DIR }}/.docker/ssl.crt
## Add self-signed certificate to Chrome Trust Store
mkcert -install
# Install composer vendors
- name: Get Composer Cache Directory
id: composer-cache
run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
working-directory: '${{ env.PS_DIR }}'
- uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-
- name: Install Composer dependencies
run: composer install --prefer-dist --optimize-autoloader
working-directory: '${{ env.PS_DIR }}'
# Install node dependencies
- uses: custom_actions/.github/workflows/actions/install-node-modules
with:
node_version: ${{ inputs.node_version }}
js_folder: ${{ env.PS_DIR }}/admin-dev/themes/new-theme
- uses: custom_actions/.github/workflows/actions/install-node-modules
with:
node_version: ${{ inputs.node_version }}
js_folder: ${{ env.PS_DIR }}/admin-dev/themes/default
- uses: custom_actions/.github/workflows/actions/install-node-modules
with:
node_version: ${{ inputs.node_version }}
js_folder: ${{ env.PS_DIR }}/themes/classic/_dev
- uses: custom_actions/.github/workflows/actions/install-node-modules
with:
node_version: ${{ inputs.node_version }}
js_folder: ${{ env.PS_DIR }}/themes/
# Build assets
- run: (pushd ${{ env.PS_DIR }}/admin-dev/themes/new-theme; npm run build; popd)
& (pushd ${{ env.PS_DIR }}/admin-dev/themes/default; npm run build; popd)
& (pushd ${{ env.PS_DIR }}/themes/classic/_dev; npm run build; popd)
& (pushd ${{ env.PS_DIR }}/themes; npm run build; popd)
# Create shop with Docker build assets, and initialize database and shop content
- name: Build and run shop with docker
working-directory: ${{ env.PS_DIR }}
timeout-minutes: 15
env:
URL_FO: ${{ ((inputs.base_branch == '8.0.x') || (inputs.base_branch == '1.7.8.x')) && 'http://localhost:8001/' || 'https://localhost:8002/' }}
VERSION: ${{ (inputs.base_branch == '1.7.8.x') && inputs.php_version || env.VERSION }}
# Initial build, install shop data but assets are already built
DISABLE_MAKE: 1
PS_INSTALL_AUTO: 1
run: |
echo Build docker via docker composer
USER_ID=$(id -u) GROUP_ID=$(id -g) docker-compose -f docker-compose.yml up -d --build
echo Waiting for response from the FO
bash -c 'while [[ "$(curl -L -s -o /dev/null -w %{http_code} ${{ env.URL_FO }}en/)" != "200" ]]; do sleep 1; done'
# Prepare archive contents to share with following jobs
- name: Archive shop content
run: |
mkdir -p /tmp/shop-artifacts
echo Clean node_modules
rm -fR ${{ env.PS_DIR }}/admin-dev/themes/new-theme/node_modules
rm -fR ${{ env.PS_DIR }}/admin-dev/themes/default/node_modules
rm -fR ${{ env.PS_DIR }}/themes/classic/_dev
rm -fR ${{ env.PS_DIR }}/themes/_core
rm -fR ${{ env.PS_DIR }}/themes/node_modules
rm -fR ${{ env.PS_DIR }}/var/cache/*
rm -fR ${{ env.PS_DIR }}/.git
zip -q -r /tmp/shop-artifacts/sources.zip ${{ env.PS_DIR }}
docker exec my_prestashop_mysql_1 /usr/bin/mysqldump -u ${{ env.DB_USER }} -p${{ env.DB_PASSWD }} ${{ env.DB_NAME }} > /tmp/shop-artifacts/db_dump.sql
- name: Upload shop artifacts
uses: actions/upload-artifact@v3
with:
name: shop-artifacts
path: /tmp/shop-artifacts
- uses: actions/upload-artifact@v3
if: failure()
with:
name: Build error export logs
path: |
${{ env.PS_DIR }}/var/logs