platform: linux/amd64

when:
  event: [ push, pull_request, manual ]
  branch:
    exclude: [ soft-fork/*/*, soft-fork/*/*/* ]

depends_on:
- compliance

variables:
 - &golang_image 'golang:1.20'
 - &test_image 'codeberg.org/forgejo/test_env:main'
 - &mysql_image 'mysql:8'
 - &pgsql_image 'postgres:10'
 - &goproxy_override ''
 - &goproxy_setup |-
      if [ -n "$${GOPROXY_OVERRIDE:-}" ]; then
        export GOPROXY="$${GOPROXY_OVERRIDE}";
        echo "Using goproxy from goproxy_override \"$${GOPROXY}\"";
      elif [ -n "$${GOPROXY_DEFAULT:-}" ]; then
        export GOPROXY="$${GOPROXY_DEFAULT}";
        echo "Using goproxy from goproxy_default (secret) not displaying";
      else
        export GOPROXY="https://proxy.golang.org,direct";
        echo "No goproxy overrides or defaults given, using \"$${GOPROXY}\"";
      fi

services:
  mysql8:
    image: *mysql_image
    pull: true
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: yes
      MYSQL_DATABASE: testgitea

  pgsql:
    image: *pgsql_image
    pull: true
    environment:
      POSTGRES_DB: test
      POSTGRES_PASSWORD: postgres

workspace:
  base: /go
  path: src/codeberg/gitea

pipeline:
  git-safe:
    image: *golang_image
    pull: true
    commands:
    - git config --add safe.directory '*'

  deps-backend:
    image: *golang_image
    pull: true
    environment:
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
    - *goproxy_setup
    - make deps-backend

  tag-pre-condition:
    image: *golang_image
    pull: true
    commands:
    - git update-ref refs/heads/tag_test ${CI_COMMIT_SHA}

  prepare-test-env:
    image: *test_image
    pull: true
    commands:
    - ./build/test-env-prepare.sh

  environment-to-ini:
    image: *golang_image
    environment:
      GOPROXY_OVERRIDE: *goproxy_override
    commands:
      - *goproxy_setup
      - go test contrib/environment-to-ini/environment-to-ini.go contrib/environment-to-ini/environment-to-ini_test.go

  build:
    image: *test_image
    environment:
      GOSUMDB: sum.golang.org
      TAGS: bindata sqlite sqlite_unlock_notify
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
    - *goproxy_setup
    - su gitea -c './build/test-env-check.sh'
    - su gitea -c 'make backend'

  unit-test:
    image: *test_image
    environment:
      TAGS: 'bindata sqlite sqlite_unlock_notify'
      RACE_ENABLED: 'true'
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
    - github_read_token
    - goproxy_default
    commands:
    - *goproxy_setup
    - su gitea -c 'make unit-test-coverage test-check'

  test-mysql8:
    group: integration
    image: *test_image
    commands:
      - *goproxy_setup
      - su gitea -c 'timeout -s ABRT 50m make test-mysql8-migration test-mysql8'
    environment:
      TAGS: 'bindata'
      RACE_ENABLED: 'true'
      USE_REPO_TEST_DIR: '1'
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default

  test-pgsql:
    group: integration
    image: *test_image
    commands:
      - *goproxy_setup
      - su gitea -c 'timeout -s ABRT 50m make test-pgsql-migration test-pgsql'
    environment:
      TAGS: 'bindata'
      RACE_ENABLED: 'true'
      USE_REPO_TEST_DIR: '1'
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default

  test-sqlite:
    group: integration
    image: *test_image
    environment:
    - USE_REPO_TEST_DIR=1
    - GOPROXY=off
    - TAGS=bindata gogit sqlite sqlite_unlock_notify
    - TEST_TAGS=bindata gogit sqlite sqlite_unlock_notify
    commands:
    - su gitea -c 'timeout -s ABRT 120m make test-sqlite-migration test-sqlite'
