-
-
Notifications
You must be signed in to change notification settings - Fork 20
225 lines (195 loc) · 7.66 KB
/
tests.yaml
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
name: Unit Tests
on:
push:
branches:
- '[0-9]+.0'
paths:
- '**/workflows/**'
- '**/src/**'
- '**/i18n/**'
- '**.py'
- '**.xml'
pull_request:
branches:
- '[0-9]+.0'
env:
REQUIRED_MODULES: 'session_redis' # list of addional addons to install separated by comma
TEST_TAGS: '0'
jobs:
test:
name: Test Modules
runs-on: ubuntu-latest
outputs:
get_modules: ${{ steps.get_modules.outputs.modules }}
services:
db:
image: postgres:13-alpine
env:
POSTGRES_DB: postgres
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
# needed because the postgres container does not provide a healthcheck
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: INDEXA ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}
uses: actions/checkout@v3
with:
path: ${{ env.GITHUB_REPOSITORY_SLUG_URL }}
- name: Download python addons script
run: curl https://raw.githubusercontent.com/iterativo-git/dockerdoo/${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}/resources/getaddons.py -o getaddons.py
- name: CamptoCamp odoo-cloud-platform
uses: actions/checkout@v3
with:
repository: camptocamp/odoo-cloud-platform
path: odoo-cloud-platform
ref: '${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}'
- name: Odoo Enterprise
uses: actions/checkout@v3
with:
repository: odoo/enterprise
token: ${{ secrets.ACTIONS_PAT }}
path: enterprise
ref: '${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}'
- name: INDEXA l10n-dominicana
uses: actions/checkout@v3
with:
repository: indexa-git/l10n-dominicana
path: l10n-dominicana
# TODO change this to ${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}
ref: '${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}'
- name: Select Odoo modules to install
id: get_modules
run: |
output=$(python -c "from getaddons import get_modules; print(','.join(get_modules('$GITHUB_WORKSPACE/${{ env.GITHUB_REPOSITORY_SLUG_URL }}', depth=3)))")
echo $output
echo "::set-output name=modules::$output"
- name: Set test all tag
if: ${{ github.event.label.name == 'test all' }}
run: |
echo "WITHOUT_TEST_TAGS=1" >> $GITHUB_ENV
- name: Run Odoo tests
run: |
docker pull gcr.io/iterativo/dockerdoo:${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}
docker run -e RUN_TESTS -e WITHOUT_TEST_TAGS -e PIP_AUTO_INSTALL -e LOG_LEVEL -e WITHOUT_DEMO -e EXTRA_MODULES -e ODOO_EXTRA_ADDONS -e PGHOST \
-v $GITHUB_WORKSPACE:/github/workspace \
--network="host" --name odoo -t gcr.io/iterativo/dockerdoo:${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}
env:
RUN_TESTS: '1'
WITHOUT_TEST_TAGS: ${{ env.WITHOUT_TEST_TAGS }}
PIP_AUTO_INSTALL: '1'
LOG_LEVEL: test
WITHOUT_DEMO: 'False'
EXTRA_MODULES: ${{ steps.get_modules.outputs.modules }},${{ env.REQUIRED_MODULES }}
ODOO_EXTRA_ADDONS: /github/workspace
PGHOST: localhost
- name: Zip modules for upload
run: sudo apt-get update && sudo apt-get install -y zip && zip -r modules.zip .
- name: Upload repository results
uses: actions/upload-artifact@v2
with:
name: modules
path: modules.zip
retention-days: 1
build-gcp:
name: Build & Push to GCR
needs: ['test']
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: Download repository results
uses: actions/download-artifact@v2
with:
name: modules
- run: unzip modules.zip
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: Push to Google Cloud Registry
uses: docker/build-push-action@v1
with:
dockerfile: ${{ env.GITHUB_REPOSITORY_SLUG_URL }}/Dockerfile
cache_froms: docker.pkg.github.com/${{ github.repository }}/${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}:${{ env.GITHUB_HEAD_REF_SLUG_URL }}
username: _json_key
password: ${{ secrets.GKE_SA_KEY }}
registry: gcr.io
repository: ${{ secrets.GKE_PROJECT }}/${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}
tags: ${{ env.GITHUB_SHA_SHORT }}
deploy:
name: GKE Deploy
needs: ['test', 'build-gcp']
runs-on: ubuntu-latest
env:
PROJECT_ID: ${{ secrets.GKE_PROJECT }}
GKE_CLUSTER: ${{ secrets.GKE_CLUSTER }}
GKE_ZONE: ${{ secrets.GKE_ZONE }}
if: ${{ github.event_name == 'pull_request' }}
continue-on-error: true
steps:
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: K8s Template
uses: actions/checkout@v3
with:
repository: indexa-git/gke-dev-cluster.git
path: gke-dev-cluster
token: ${{ secrets.ACTIONS_PAT }}
ref: master
- name: Set up Kustomize
run: |
curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64
chmod u+x ./kustomize
./kustomize build gke-dev-cluster/deployments/odoo/${{ env.GITHUB_BASE_REF_SLUG || env.GITHUB_REF_SLUG }}/dev -o deployment.yaml.tmpl
- name: Render Deployment YAML
uses: nowactions/envsubst@v1
with:
input: ./deployment.yaml.tmpl
output: ./deployment.yaml
env:
ENV: dev
GKE_LOCATION: ${{ secrets.GKE_PROJECT }}
# Modules to Install
EXTRA_MODULES: ${{ needs.test.outputs.get_modules }},${{ env.REQUIRED_MODULES }}
# Image to Deploy
PROJECT_ID: ${{ secrets.GKE_PROJECT }}
REPO_NAME: ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}
BRANCH_NAME: ${{ env.GITHUB_SHA_SHORT }}
# URL to acccess
REPO_URL: ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}
BRANCH_URL: ${{ env.GITHUB_HEAD_REF_SLUG_URL }}
SHORT_SHA: ${{ env.GITHUB_SHA_SHORT }}
- run: cat deployment.yaml
- name: Upload deployment
uses: actions/upload-artifact@v2
with:
name: deployment
path: deployment.yaml
retention-days: 10
- name: Setup gcloud CLI
uses: google-github-actions/setup-gcloud@main
with:
service_account_key: ${{ secrets.GKE_SA_KEY }}
project_id: ${{ secrets.GKE_PROJECT }}
# Configure Docker to use the gcloud command-line tool as a credential
# helper for authentication
- name: Get Cluster & Docker credentials
run: |
gcloud container clusters get-credentials "$GKE_CLUSTER" --zone "$GKE_ZONE" --project "$PROJECT_ID"
gcloud --quiet auth configure-docker
# Deploy the Docker image to the GKE cluster
- name: Deploy
run: |
kubectl apply -f deployment.yaml
url=$(echo "${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}-${{ env.GITHUB_HEAD_REF_SLUG_URL }}.indexa.do")
echo "$url" > url.txt
- name: Upload repository results
uses: actions/upload-artifact@v2
with:
name: ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}-${{ env.GITHUB_HEAD_REF_SLUG_URL }}.indexa.do
path: url.txt