131 lines
4.5 KiB
YAML
131 lines
4.5 KiB
YAML
variables:
|
|
PROJECT_NAME: glitchtip
|
|
PIP_DISABLE_PIP_VERSION_CHECK: "on"
|
|
POSTGRES_HOST_AUTH_METHOD: "trust"
|
|
UV_VERSION: 0.9
|
|
BASE_LAYER: trixie
|
|
UV_SYSTEM_PYTHON: "true"
|
|
UV_PYTHON_DOWNLOADS: "never"
|
|
UV_PROJECT_ENVIRONMENT: "/usr/local"
|
|
UV_CACHE_DIR: ".uv-cache"
|
|
DEBUG: "true"
|
|
|
|
include:
|
|
- template: SAST.gitlab-ci.yml
|
|
- template: Dependency-Scanning.gitlab-ci.yml
|
|
- template: Secret-Detection.gitlab-ci.yml
|
|
|
|
workflow:
|
|
rules:
|
|
# Run pipelines on pushes to default branch.
|
|
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
# Run pipelines for merge request events.
|
|
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
|
|
# Do not run pipelines for branch pushes if an MR exists.
|
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
when: never
|
|
# Run pipelines for branches without MR (yet).
|
|
- if: $CI_COMMIT_BRANCH
|
|
# Run pipelines for pushed tags, web UI, and schedules.
|
|
- if: $CI_COMMIT_TAG
|
|
- if: $CI_PIPELINE_SOURCE == 'web'
|
|
- if: $CI_PIPELINE_SOURCE == 'schedule'
|
|
|
|
test:
|
|
image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-$BASE_LAYER
|
|
variables:
|
|
SECRET_KEY: testing
|
|
ENABLE_TEST_API: "true"
|
|
ENABLE_OPEN_USER_REGISTRATION: "true"
|
|
services:
|
|
- postgres:$POSTGRES_VERSION
|
|
cache:
|
|
- key:
|
|
files:
|
|
- uv.lock
|
|
paths:
|
|
- $UV_CACHE_DIR
|
|
script:
|
|
- uv sync --frozen --no-install-project
|
|
- uv run ./manage.py test
|
|
- uv cache prune --ci
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE != "schedule"
|
|
parallel:
|
|
matrix:
|
|
- PYTHON_VERSION: '3.11'
|
|
POSTGRES_VERSION: '14'
|
|
- PYTHON_VERSION: '3.13'
|
|
POSTGRES_VERSION: '18'
|
|
|
|
lint:
|
|
image: python:3.13-slim
|
|
script:
|
|
- pip install ruff
|
|
- ruff check glitchtip/ apps/
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE != "schedule"
|
|
|
|
build:
|
|
image: docker:29
|
|
rules:
|
|
# Exclude merge requests and scheduled execution.
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "schedule"
|
|
when: never
|
|
# Run build only on protected branches and tags (master or v0.0.0).
|
|
- if: $CI_COMMIT_REF_PROTECTED
|
|
services:
|
|
- docker:29-dind
|
|
script:
|
|
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
|
|
- docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME//\//-} --build-arg IS_CI="True" .
|
|
- docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME//\//-}
|
|
|
|
build_arm_x86:
|
|
image: docker:29
|
|
services:
|
|
- docker:29-dind
|
|
before_script:
|
|
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
script:
|
|
- wget https://gitlab.com/api/v4/projects/15449363/jobs/artifacts/$CI_COMMIT_TAG/download?job=build-assets -O assets.zip
|
|
- unzip assets.zip
|
|
- rm assets.zip
|
|
- mv dist/glitchtip-frontend/browser/* dist/
|
|
- rmdir dist/glitchtip-frontend/browser/
|
|
|
|
# --- Updated Version Parsing ---
|
|
# Git tag (e.g., v5.0.1)
|
|
- VERSION_V_FULL=${CI_COMMIT_REF_NAME}
|
|
|
|
# No-v versions (e.g., 5.0.1, 5.0, 5)
|
|
- VERSION_NO_V_FULL=${CI_COMMIT_REF_NAME#*v}
|
|
- VERSION_NO_V_MINOR=${VERSION_NO_V_FULL%.*}
|
|
- VERSION_NO_V_MAJOR=${VERSION_NO_V_FULL%%.*}
|
|
|
|
# V-prefixed versions (e.g., v5.0, v5)
|
|
- VERSION_V_MINOR="v${VERSION_NO_V_MINOR}"
|
|
- VERSION_V_MAJOR="v${VERSION_NO_V_MAJOR}"
|
|
|
|
# Quoted to handle colons in echo
|
|
- 'echo "Building tags: latest, ${VERSION_NO_V_FULL}, ${VERSION_NO_V_MINOR}, ${VERSION_NO_V_MAJOR}, ${VERSION_V_FULL}, ${VERSION_V_MINOR}, ${VERSION_V_MAJOR}"'
|
|
|
|
- docker login -u ${DOCKER_CI_REGISTRY_USER} -p ${DOCKER_CI_REGISTRY_PASSWORD}
|
|
- docker buildx create --use
|
|
- docker buildx build --platform linux/arm64/v8,linux/amd64 --push -t ${DOCKER_CI_REGISTRY_IMAGE}:latest -t ${DOCKER_CI_REGISTRY_IMAGE}:${VERSION_NO_V_FULL} -t ${DOCKER_CI_REGISTRY_IMAGE}:${VERSION_NO_V_MINOR} -t ${DOCKER_CI_REGISTRY_IMAGE}:${VERSION_NO_V_MAJOR} -t ${DOCKER_CI_REGISTRY_IMAGE}:${VERSION_V_FULL} -t ${DOCKER_CI_REGISTRY_IMAGE}:${VERSION_V_MINOR} -t ${DOCKER_CI_REGISTRY_IMAGE}:${VERSION_V_MAJOR} --build-arg IS_CI="True" --build-arg GLITCHTIP_VERSION=${VERSION_NO_V_FULL} --build-arg COLLECT_STATIC="True" .
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "schedule"
|
|
when: never
|
|
- if: '$CI_COMMIT_TAG =~ /^v\d+.\d+.\d+/ && $CI_COMMIT_REF_PROTECTED == "true"'
|
|
|
|
update_deps:
|
|
image: renovate/renovate:42
|
|
variables:
|
|
RENOVATE_PLATFORM: gitlab
|
|
RENOVATE_ENDPOINT: https://gitlab.com/api/v4
|
|
RENOVATE_TOKEN: $GITLAB_ACCESS_TOKEN
|
|
RENOVATE_REPOSITORIES: glitchtip/glitchtip-backend
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "schedule"
|
|
script: renovate
|