.gitlab-ci.yml 5.05 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
11
  PY36_IMAGE: thalia/python-thalia:3.6
Thom Wiggers's avatar
Thom Wiggers committed
12
  PY37_IMAGE: thalia/python-thalia:3.7
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
Thom Wiggers's avatar
Thom Wiggers committed
21
  image: $PY36_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
python36-django21:
Thom Wiggers's avatar
Thom Wiggers committed
52
  <<: *djangotest
Thom Wiggers's avatar
Thom Wiggers committed
53
  image: $PY36_IMAGE
Thom Wiggers's avatar
Thom Wiggers committed
54

Sébastiaan Versteeg's avatar
Sébastiaan Versteeg committed
55
python37-django21:
Thom Wiggers's avatar
Thom Wiggers committed
56
  <<: *djangotest
Thom Wiggers's avatar
Thom Wiggers committed
57
  image: $PY37_IMAGE
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
  after_script:
    - cd website
    - coverage html --directory=covhtml --title="${CI_COMMIT_REF_SLUG} Coverage Report"
  artifacts:
    paths:
      - website/covhtml/

.sshsetup: &sshsetup
  before_script:
    - mkdir -p ~/.ssh
    - echo "$IVO_KNOWN_HOST" > ~/.ssh/known_hosts
    - echo "$COVERAGE_DEPLOY_SSH_KEY" > ~/.ssh/id_coverage
    - chmod 0600 ~/.ssh/id_coverage
    - apt-get update
    - apt-get install -y openssh-client

coverage deploy:
  stage: deploy
  image: debian:stretch
  dependencies:
    - python37-django21
  environment:
    name: review/${CI_COMMIT_REF_NAME}
    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:
        name: review/${CI_COMMIT_REF_NAME}
        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
108

Thom Wiggers's avatar
Thom Wiggers committed
109
docs:
Thom Wiggers's avatar
Thom Wiggers committed
110
  stage: test
Thom Wiggers's avatar
Thom Wiggers committed
111
  image: $PY36_IMAGE
Thom Wiggers's avatar
Thom Wiggers committed
112 113
  before_script:
    # install django deps
Jelle Besseling's avatar
Jelle Besseling committed
114
    - poetry install --no-interaction --extras "docs"
Thom Wiggers's avatar
Thom Wiggers committed
115
  script:
Thom Wiggers's avatar
Thom Wiggers committed
116
    - echo "Building current docs"
Jelle Besseling's avatar
Jelle Besseling committed
117 118 119
    - 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
120
    - echo "Checking if there are changes"
Jelle Besseling's avatar
Jelle Besseling committed
121
    - poetry run ./generate-apidocs.sh
Thom Wiggers's avatar
Thom Wiggers committed
122
    - git diff --exit-code
Thom Wiggers's avatar
Thom Wiggers committed
123

Thom Wiggers's avatar
Thom Wiggers committed
124 125 126 127 128 129 130 131
build docker image:
  stage: test
  services:
    - docker:dind
  image: thalia/docker-compose
  tags:
    - docker
  before_script:
132
    - echo $DOCKER_REGISTRY_PASSWORD | docker login --username thaliawww --password-stdin registry.hub.docker.com
Thom Wiggers's avatar
Thom Wiggers committed
133
  script:
Joren Vrancken's avatar
Joren Vrancken committed
134
    - docker-compose config -q
135
    - docker-compose build --build-arg install_dev_requirements=0 --build-arg source_commit=$(git rev-parse HEAD) web
Thom Wiggers's avatar
Thom Wiggers committed
136 137 138 139
    - docker-compose run --rm web test
    - docker tag $DOCKER_LATEST $DOCKER_TAG
    - docker push $DOCKER_TAG
  variables:
140 141
    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
142 143 144 145 146 147 148 149 150 151 152 153 154

tag docker image:
  stage: deploy
  services:
    - docker:dind
  image: docker:git
  tags:
    - docker
  only:
    - tags
  dependencies:
    - build docker image
  before_script:
155
    - echo $DOCKER_REGISTRY_PASSWORD | docker login --username thaliawww --password-stdin registry.hub.docker.com
Thom Wiggers's avatar
Thom Wiggers committed
156 157
  script:
    - docker pull $DOCKER_TAG
Thom Wiggers's avatar
Thom Wiggers committed
158
    - docker tag $DOCKER_TAG $DOCKER_TAG_PRODUCTION
159
    - docker tag $DOCKER_TAG $DOCKER_LATEST
Thom Wiggers's avatar
Thom Wiggers committed
160
    - docker push $DOCKER_TAG_PRODUCTION
161
    - docker push $DOCKER_LATEST
Thom Wiggers's avatar
Thom Wiggers committed
162
  variables:
163 164
    DOCKER_TAG: registry.hub.docker.com/thalia/concrexit:$CI_COMMIT_SHA
    DOCKER_TAG_PRODUCTION: registry.hub.docker.com/thalia/concrexit:$CI_COMMIT_TAG
165
    DOCKER_LATEST: registry.hub.docker.com/thalia/concrexit:latest
Thom Wiggers's avatar
Thom Wiggers committed
166 167


Thom Wiggers's avatar
Thom Wiggers committed
168
cache:
169
  key: "$CI_JOB_NAME"
Thom Wiggers's avatar
Thom Wiggers committed
170
  paths:
Thom Wiggers's avatar
Thom Wiggers committed
171
    - "${PIP_CACHE_DIR}"
Thom Wiggers's avatar
Thom Wiggers committed
172 173

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