-
Notifications
You must be signed in to change notification settings - Fork 2
/
.gitlab-ci.yml
175 lines (143 loc) · 4.73 KB
/
.gitlab-ci.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
# vim:set sw=2 ts=2 et:
# This is a sample .gitlab-ci.yml created by wagtail-kit. You should review
# it for any necessary changes.
# Stages are groups that jobs can be groupped into.
# Jobs within each stage run in parallel and if one of them fails, the next
# stage won't be run.
# This will set up the following:
#
# - Build stage: build of static assets.
# - Test stage: code style, migration, basic configuration checks and unit
# tests.
# - Deploy stage: deploy to Heroku or Dokku.
stages:
- build
- test
- deploy
# Global variables accessible to the all jobs.
variables:
# What SSH user and host to use for connecting to Dokku.
# We host dev server and staging on the same instance so that's why it's set
# as global for all the cases.
DOKKU_SSH_USER: dokku
DOKKU_HOST: staging.torchbox.com
# Test if static assets can be built succesfully.
static:
image: node:12-alpine
stage: build
before_script:
- apk add --no-cache rsync
script:
- cd ./website/static_src
- npm ci
- npm run build:prod
# Saving the job result as an artifact means that the files can be used by
# other jobs.
artifacts:
name: "static-$CI_JOB_ID"
paths:
- ./website/static_compiled
expire_in: 1 week
# Check python code style.
flake8:
image: python:3.6
stage: test
script:
- pip install flake8
- flake8 website
# Check imports sort order, i.e. check whether they are in an alphabetical
# order and grouped properly.
isort:
image: python:3.6
stage: test
before_script:
- pip install isort
script:
- isort --check-only --diff --recursive website
# Check settings, migrations and run tests.
test:
# Make sure this Python version matches the version in your Dockerfile.
image: python:3.6.6
stage: test
services:
# Make sure this matches the Postgres version you run on your servers.
- postgres:9.6
dependencies:
- static
variables:
# Run tests with the production settings.
DJANGO_SETTINGS_MODULE: website.settings.production
# SECRET_KEY is required by Django to start.
SECRET_KEY: fake_secret_key_to_run_tests
# This is the URL used by databases on our CI.
DATABASE_URL: postgres://postgres@postgres/postgres
POSTGRES_HOST_AUTH_METHOD: trust
# Don't redirect to HTTPS in tests.
SECURE_SSL_REDIRECT: "false"
before_script:
# Install requirements
- pip install wheel
- pip install -r requirements.txt
script:
# We need to run the collectstatic command, because we use ManifestStaticFilesStorage.
# Otherwise the check command will fail
- python manage.py collectstatic --verbosity 0 --noinput --clear
# Run system checks
- python manage.py check
# Check for missing migrations
- python manage.py makemigrations --check --noinput
# Create cache table.
- python manage.py createcachetable
# Run tests
- python manage.py test
# Deploy to the dev server.
#deploy_dev:
# Use Alpine image since it's lightweight. We only require SSH and Git for
# this job.
# image: alpine:3.7
# stage: deploy
# variables:
# Name of your Dokku app.
# $ dokku apps
# DOKKU_APP_INSTANCE: website-dev
# Branch used by Dokku to deploy. You can verify the branch with:
# $ dokku git:report [your-app-name]
# DOKKU_DEPLOY_BRANCH: develop
# only:
# - develop
# before_script:
# Git and SSH is required to push to Git via SSH.
# - apk add --no-cache git openssh-client
# Create a directory used by the SSH agent.
# - mkdir -p ~/.ssh
# Start up SSH agent.
# - eval $(ssh-agent -s)
# Add our Dokku server as a known host so the push to Git succeeds.
# - ssh-keyscan -H "$DOKKU_HOST" >> ~/.ssh/known_hosts
# Add the private key set in your project settings on GitLab to the
# SSH agent. You can obtain it from sysadmin.
# - echo "$DOKKU_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
# script:
# Push the HEAD of this job to the specified branch. It seems that the CI
# does not run on a specific branch, so we need to use HEAD.
# - git push $DOKKU_SSH_USER@$DOKKU_HOST:$DOKKU_APP_INSTANCE HEAD:$DOKKU_DEPLOY_BRANCH
.heroku_deployment_template: &heroku_deployment_template
stage: deploy
script:
- 'echo "Deploying to Heroku. To see progress, go to: https://dashboard.heroku.com/apps/$HEROKU_APP/activity"'
- curl -sf -X POST -m 900 https://heroku-deploy.torchbox.com/$HEROKU_APP/$CI_COMMIT_SHA?key=$DEPLOYMENT_KEY
# Deploy to the staging server.
deploy_staging:
variables:
HEROKU_APP: norwegianehealth-staging
only:
- staging
<<: *heroku_deployment_template
# Deploy to the production site.
deploy_production:
variables:
HEROKU_APP: norwegianehealth-production
only:
- master
when: manual
<<: *heroku_deployment_template