.gitlab-ci.yml 6.29 KB
Newer Older
Wietse Kuipers's avatar
Wietse Kuipers committed
1 2 3 4
variables:
  POSTGRES_DB: thalia
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: ""
5 6
  # https://hub.docker.com/r/thalia/python-thalia/
  # https://github.com/thaliawww/python-thalia
7 8
  # Should get auto-updated with the official 'python' repository
  # Installs:
Jelle Besseling's avatar
Jelle Besseling committed
9
  #  - pip: coverage, poetry
10
  #  - apt: ghostscript
Thom Wiggers's avatar
Thom Wiggers committed
11
  PY37_IMAGE: thalia/python-thalia:3.7
Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
12
  PY38_IMAGE: thalia/python-thalia:3.8
Thom Wiggers's avatar
Thom Wiggers committed
13
  PIP_CACHE_DIR: "${CI_PROJECT_DIR}/pip-cache"
Wietse Kuipers's avatar
Wietse Kuipers committed
14

Thom Wiggers's avatar
Thom Wiggers committed
15 16 17 18
stages:
  - test
  - deploy

19
codestyle:
Thom Wiggers's avatar
Thom Wiggers committed
20
  stage: test
Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
21
  image: $PY37_IMAGE
Jelle Besseling's avatar
Jelle Besseling committed
22 23
  before_script:
    - poetry install --no-interaction
Thom Wiggers's avatar
Thom Wiggers committed
24
  script:
Jelle Besseling's avatar
Jelle Besseling committed
25
    - poetry run flake8 website
26
    # Check for obsolete translations in .po files (starting with `#~`).
27
    - cd website
28
    - grep --include="*.po" --files-with-matches --recursive "^#~" && exit 1 || echo "No obsolete translations found."
29 30 31 32 33 34
    # Check for untranslated strings in .po files
    - empty_strings=$(sed '$a\\' **/locale/nl/LC_MESSAGES/django.po | tac | sed '/^$/N;/\nmsgstr ""$/,/^msgid/!d' | tac)
    - empty_strings+=$(sed '$a\\' locale/nl/LC_MESSAGES/django.po | tac | sed '/^$/N;/\nmsgstr ""$/,/^msgid/!d' | tac)
    - if [[ $empty_strings ]]; then echo $empty_strings && exit 1; else echo "No untranslated strings found."; fi
    # Check for fuzzy translations in .po files
    - grep --include="*.po" --files-with-matches --recursive "#, fuzzy" && exit 1 || echo "No fuzzy translations found."
Thom Wiggers's avatar
Thom Wiggers committed
35 36

.djangotest: &djangotest
Thom Wiggers's avatar
Thom Wiggers committed
37
  stage: test
Thom Wiggers's avatar
Thom Wiggers committed
38 39
  services:
    - postgres:latest
Thom Wiggers's avatar
Thom Wiggers committed
40 41
  before_script:
    - git log -1
Jelle Besseling's avatar
Jelle Besseling committed
42
    - poetry install --no-interaction
Thom Wiggers's avatar
Thom Wiggers committed
43
  script:
Thom Wiggers's avatar
Thom Wiggers committed
44
    - cd website
Jelle Besseling's avatar
Jelle Besseling committed
45 46 47
    - poetry run python manage.py check
    - poetry run python manage.py templatecheck --project-only
    - poetry run python manage.py makemigrations --no-input --check --dry-run
48
    - poetry run python -Wall -mcoverage run manage.py test
Thom Wiggers's avatar
Thom Wiggers committed
49
    - coverage report
Thom Wiggers's avatar
Thom Wiggers committed
50

Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
51
python37-django22:
Thom Wiggers's avatar
Thom Wiggers committed
52
  <<: *djangotest
Thom Wiggers's avatar
Thom Wiggers committed
53
  image: $PY37_IMAGE
54 55 56 57 58 59 60
  after_script:
    - cd website
    - coverage html --directory=covhtml --title="${CI_COMMIT_REF_SLUG} Coverage Report"
  artifacts:
    paths:
      - website/covhtml/

Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
61 62 63 64 65
python38-django22:
  <<: *djangotest
  image: $PY38_IMAGE
  allow_failure: true

66 67 68 69 70
.sshsetup: &sshsetup
  before_script:
    - mkdir -p ~/.ssh
    - echo "$IVO_KNOWN_HOST" > ~/.ssh/known_hosts
    - echo "$COVERAGE_DEPLOY_SSH_KEY" > ~/.ssh/id_coverage
71 72
    - echo "$DOCS_DEPLOY_SSH_KEY" > ~/.ssh/id_docs
    - chmod 0600 ~/.ssh/id_*
73 74 75 76 77 78 79
    - apt-get update
    - apt-get install -y openssh-client

coverage deploy:
  stage: deploy
  image: debian:stretch
  dependencies:
Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
80
    - python37-django22
81
  environment:
82
    name: coverage/${CI_COMMIT_REF_NAME}
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
    url: https://coverage.technicie.nl/${CI_COMMIT_REF_SLUG}/
    on_stop: coverage remove
  <<: *sshsetup
  script:
    - |
      sftp -i ~/.ssh/id_coverage coveragewww@ivo.thalia.nu -b <<EOF
      -rm ${CI_COMMIT_REF_SLUG}/*
      -rmdir ${CI_COMMIT_REF_SLUG}
      put -r website/covhtml ${CI_COMMIT_REF_SLUG}
      EOF

coverage remove:
    stage: deploy
    when: manual
    image: debian:stretch
    environment:
99
        name: coverage/${CI_COMMIT_REF_NAME}
100 101 102 103 104 105 106 107 108 109
        action: stop
    variables:
        GIT_STRATEGY: none
    <<: *sshsetup
    script:
      - |
        sftp -i ~/.ssh/id_coverage coveragewww@ivo.thalia.nu -b <<EOF
        rm ${CI_COMMIT_REF_SLUG}/*
        rmdir ${CI_COMMIT_REF_SLUG}
        EOF
Thom Wiggers's avatar
Thom Wiggers committed
110

111
docs tests:
Thom Wiggers's avatar
Thom Wiggers committed
112
  stage: test
Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
113
  image: $PY37_IMAGE
Thom Wiggers's avatar
Thom Wiggers committed
114 115
  before_script:
    # install django deps
Jelle Besseling's avatar
Jelle Besseling committed
116
    - poetry install --no-interaction --extras "docs"
Thom Wiggers's avatar
Thom Wiggers committed
117
  script:
Thom Wiggers's avatar
Thom Wiggers committed
118
    - echo "Building current docs"
Jelle Besseling's avatar
Jelle Besseling committed
119 120 121
    - cd docs
    - env -u GITLAB_CI poetry run make doctest
    - env -u GITLAB_CI poetry run sphinx-build -W . _build
Thom Wiggers's avatar
Thom Wiggers committed
122
    - echo "Checking if there are changes"
Jelle Besseling's avatar
Jelle Besseling committed
123
    - poetry run ./generate-apidocs.sh
Thom Wiggers's avatar
Thom Wiggers committed
124
    - git diff --exit-code
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
  artifacts:
    paths:
      - docs/_build

docs deploy:
  stage: deploy
  image: debian:stretch
  dependencies:
    - docs tests
  environment:
    name: docs/${CI_COMMIT_REF_NAME}
    url: https://docs.technicie.nl/${CI_COMMIT_REF_SLUG}/
    on_stop: docs remove
  <<: *sshsetup
  script:
    - |
      sftp -i ~/.ssh/id_docs docswww@ivo.thalia.nu -b <<EOF
      -rm ${CI_COMMIT_REF_SLUG}/*/*
      -rm ${CI_COMMIT_REF_SLUG}/*
      -rmdir ${CI_COMMIT_REF_SLUG}/_images
      -rmdir ${CI_COMMIT_REF_SLUG}/_modules
      -rmdir ${CI_COMMIT_REF_SLUG}/_sources
      -rmdir ${CI_COMMIT_REF_SLUG}/_static
      -rmdir ${CI_COMMIT_REF_SLUG}/doctest
      -rmdir ${CI_COMMIT_REF_SLUG}/doctrees
      -rmdir ${CI_COMMIT_REF_SLUG}
      -mkdir ${CI_COMMIT_REF_SLUG}
      put -r docs/_build/* ${CI_COMMIT_REF_SLUG}
      EOF

docs remove:
  stage: deploy
  when: manual
  image: debian:stretch
  environment:
    name: docs/${CI_COMMIT_REF_NAME}
    action: stop
  variables:
    GIT_STRATEGY: none
  <<: *sshsetup
  script:
    - |
      sftp -i ~/.ssh/id_docs docswww@ivo.thalia.nu -b <<EOF
      rm ${CI_COMMIT_REF_SLUG}/*/*
      rm ${CI_COMMIT_REF_SLUG}/*
      rmdir ${CI_COMMIT_REF_SLUG}/_images
      rmdir ${CI_COMMIT_REF_SLUG}/_modules
      rmdir ${CI_COMMIT_REF_SLUG}/_sources
      rmdir ${CI_COMMIT_REF_SLUG}/_static
      rmdir ${CI_COMMIT_REF_SLUG}/doctest
      rmdir ${CI_COMMIT_REF_SLUG}/doctrees
      rmdir ${CI_COMMIT_REF_SLUG}
      EOF
Thom Wiggers's avatar
Thom Wiggers committed
178

Thom Wiggers's avatar
Thom Wiggers committed
179 180 181 182 183 184 185
build docker image:
  stage: test
  services:
    - docker:dind
  image: thalia/docker-compose
  tags:
    - docker
186 187
  except:
    - tags
Thom Wiggers's avatar
Thom Wiggers committed
188
  before_script:
189
    - echo $DOCKER_REGISTRY_PASSWORD | docker login --username thaliawww --password-stdin registry.hub.docker.com
Thom Wiggers's avatar
Thom Wiggers committed
190
  script:
Joren Vrancken's avatar
Joren Vrancken committed
191
    - docker-compose config -q
192
    - docker-compose build --build-arg install_dev_requirements=$DEV_REQUIREMENTS --build-arg source_commit=$(git rev-parse HEAD) web
Thom Wiggers's avatar
Thom Wiggers committed
193 194 195 196
    - docker-compose run --rm web test
    - docker tag $DOCKER_LATEST $DOCKER_TAG
    - docker push $DOCKER_TAG
  variables:
197
    DEV_REQUIREMENTS: 1
198 199
    DOCKER_LATEST: registry.hub.docker.com/thalia/concrexit:latest
    DOCKER_TAG: registry.hub.docker.com/thalia/concrexit:$CI_COMMIT_SHA
Thom Wiggers's avatar
Thom Wiggers committed
200

201 202
build production docker image:
  extends: build docker image
Thom Wiggers's avatar
Thom Wiggers committed
203 204
  only:
    - tags
205 206
  except:
    - master
207
  after_script:
Thom Wiggers's avatar
Thom Wiggers committed
208
    - docker tag $DOCKER_TAG $DOCKER_TAG_PRODUCTION
209
    - docker tag $DOCKER_TAG $DOCKER_LATEST
Thom Wiggers's avatar
Thom Wiggers committed
210
    - docker push $DOCKER_TAG_PRODUCTION
211
    - docker push $DOCKER_LATEST    
Thom Wiggers's avatar
Thom Wiggers committed
212
  variables:
213
    DOCKER_TAG_PRODUCTION: registry.hub.docker.com/thalia/concrexit:$CI_COMMIT_TAG
214
    DEV_REQUIREMENTS: 0
Thom Wiggers's avatar
Thom Wiggers committed
215

Thom Wiggers's avatar
Thom Wiggers committed
216
cache:
217
  key: "$CI_JOB_NAME"
Thom Wiggers's avatar
Thom Wiggers committed
218
  paths:
Thom Wiggers's avatar
Thom Wiggers committed
219
    - "${PIP_CACHE_DIR}"
Thom Wiggers's avatar
Thom Wiggers committed
220 221

# vim: set sw=2 ts=2 et :