.gitlab-ci.yml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. variables:
  2. PROJECT_NAME: glitchtip
  3. PIP_DISABLE_PIP_VERSION_CHECK: "on"
  4. PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
  5. POETRY_VIRTUALENVS_CREATE: "false"
  6. POETRY_HOME: "/opt/poetry"
  7. POSTGRES_HOST_AUTH_METHOD: "trust"
  8. DEBUG: "true"
  9. include:
  10. - template: SAST.gitlab-ci.yml
  11. - template: Dependency-Scanning.gitlab-ci.yml
  12. - template: Secret-Detection.gitlab-ci.yml
  13. workflow:
  14. rules:
  15. - when: always
  16. test:
  17. image: python:$VERSION
  18. variables:
  19. SECRET_KEY: testing
  20. ENABLE_TEST_API: "true"
  21. ENABLE_OPEN_USER_REGISTRATION: "true"
  22. services:
  23. - postgres:$POSTGRES_VERSION
  24. cache:
  25. key: ${CI_COMMIT_REF_SLUG}${VERSION}
  26. paths:
  27. - .cache/pip
  28. script:
  29. - curl -sSL https://install.python-poetry.org | python3 -
  30. - $POETRY_HOME/bin/poetry install --no-interaction --no-ansi
  31. - ./manage.py test
  32. rules:
  33. - if: $CI_PIPELINE_SOURCE != "schedule"
  34. parallel:
  35. matrix:
  36. - VERSION: '3.11'
  37. POSTGRES_VERSION: '13'
  38. - VERSION: '3.12'
  39. POSTGRES_VERSION: '16'
  40. lint:
  41. image: python:3.12
  42. script:
  43. - curl -sSL https://install.python-poetry.org | python3 -
  44. - $POETRY_HOME/bin/poetry install --no-interaction --no-ansi
  45. - ruff check glitchtip/ apps/
  46. rules:
  47. - if: $CI_PIPELINE_SOURCE != "schedule"
  48. build:
  49. image: docker:27
  50. rules:
  51. # Run only on protected branches that are not tagged and not merge requests
  52. - if: '$CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_TAG =~ "/^$/"'
  53. services:
  54. - docker:27-dind
  55. script:
  56. - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
  57. - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME//\//-} --build-arg IS_CI="True" .
  58. - docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME//\//-}
  59. rules:
  60. - if: $CI_PIPELINE_SOURCE != "schedule"
  61. buildx:
  62. image: docker:25-git
  63. variables:
  64. GIT_STRATEGY: none
  65. artifacts:
  66. paths:
  67. - buildx
  68. expire_in: 1 hour
  69. services:
  70. - docker:27-dind
  71. script:
  72. - export DOCKER_BUILDKIT=1
  73. - git clone https://github.com/docker/buildx.git ./docker-buildx
  74. - docker build --platform=local -o . ./docker-buildx
  75. rules:
  76. - if: $CI_PIPELINE_SOURCE =~ "schedule"
  77. when: never
  78. - if: $CI_COMMIT_TAG =~ /^v\d+.\d+.\d+/
  79. build_arm_x86:
  80. image: docker:27
  81. needs:
  82. - buildx
  83. services:
  84. - docker:27-dind
  85. before_script:
  86. - mkdir -p ~/.docker/cli-plugins
  87. - mv buildx ~/.docker/cli-plugins/docker-buildx
  88. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  89. script:
  90. - wget https://gitlab.com/api/v4/projects/15449363/jobs/artifacts/$CI_COMMIT_TAG/download?job=build-assets -O assets.zip
  91. - unzip assets.zip
  92. - rm assets.zip
  93. - mv dist/glitchtip-frontend/* dist/
  94. - rmdir dist/glitchtip-frontend/
  95. - VERSION=${CI_COMMIT_REF_NAME#*v}
  96. - MINOR_VERSION=$(echo "$CI_COMMIT_REF_NAME" | sed 's/\.[^.]*$//')
  97. - echo "Build version $VERSION ci registry image $CI_REGISTRY_IMAGE commit ref $CI_COMMIT_REF_NAME"
  98. - docker login -u ${DOCKER_CI_REGISTRY_USER} -p ${DOCKER_CI_REGISTRY_PASSWORD}
  99. - docker buildx create --use
  100. - docker buildx build --platform linux/arm64/v8,linux/amd64 --push -t ${DOCKER_CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME} -t ${DOCKER_CI_REGISTRY_IMAGE}:${MINOR_VERSION} -t ${DOCKER_CI_REGISTRY_IMAGE}:latest --build-arg IS_CI="True" --build-arg GLITCHTIP_VERSION=$VERSION --build-arg COLLECT_STATIC="True" .
  101. rules:
  102. - if: $CI_PIPELINE_SOURCE =~ "schedule"
  103. when: never
  104. - if: '$CI_COMMIT_TAG =~ /^v\d+.\d+.\d+/ && $CI_COMMIT_REF_PROTECTED == "true"'
  105. update_deps:
  106. image: renovate/renovate:38
  107. variables:
  108. RENOVATE_PLATFORM: gitlab
  109. RENOVATE_ENDPOINT: https://gitlab.com/api/v4
  110. RENOVATE_TOKEN: $GITLAB_ACCESS_TOKEN
  111. RENOVATE_REPOSITORIES: glitchtip/glitchtip-backend
  112. rules:
  113. - if: $CI_PIPELINE_SOURCE == "schedule"
  114. script: renovate