pipeline:
  # use vendor to cache dependencies
  vendor:
    image: golang:1.18
    commands:
      - go mod vendor

  lint:
    image: golangci/golangci-lint:latest
    group: compliant
    pull: true
    commands:
      - go version
      - go install mvdan.cc/gofumpt@latest
      - "[ $(gofumpt -extra -l . | wc -l) != 0 ] && { echo 'code not formated'; exit 1; }"
      - golangci-lint run --timeout 5m --build-tags integration

  editor-config:
    group: compliant
    image: mstruebing/editorconfig-checker

  build:
    group: compliant
    image: codeberg.org/6543/docker-images/golang_just
    commands:
      - go version
      - just build
    when:
      event: [ "pull_request", "push" ]

  docker-dryrun:
    group: compliant
    image: plugins/kaniko
    settings:
      dockerfile: Dockerfile
      no_push: true
      tags: latest
    when:
      event: [ "pull_request", "push" ]
      path: Dockerfile

  build-tag:
    group: compliant
    image: codeberg.org/6543/docker-images/golang_just
    commands:
      - go version
      - just build-tag ${CI_COMMIT_TAG##v}
    when:
      event: [ "tag" ]

  test:
    group: test
    image: codeberg.org/6543/docker-images/golang_just
    commands:
      - just test

  integration-tests:
    group: test
    image: codeberg.org/6543/docker-images/golang_just
    commands:
      - just integration
    environment:
      - ACME_API=https://acme.mock.directory
      - PAGES_DOMAIN=localhost.mock.directory
      - RAW_DOMAIN=raw.localhost.mock.directory
      - PORT=4430

  release:
    image: plugins/gitea-release
    settings:
      base_url: https://codeberg.org
      file_exists: overwrite
      files: build/codeberg-pages-server
      api_key:
        from_secret: bot_token
    environment:
      - DRONE_REPO_OWNER=${CI_REPO_OWNER}
      - DRONE_REPO_NAME=${CI_REPO_NAME}
      - DRONE_BUILD_EVENT=${CI_BUILD_EVENT}
      - DRONE_COMMIT_REF=${CI_COMMIT_REF}
    when:
      event: [ "tag" ]

  docker-next:
    image: plugins/kaniko
    settings:
      registry: codeberg.org
      dockerfile: Dockerfile
      repo: codeberg.org/codeberg/pages-server
      tags: next
      username:
        from_secret: bot_user
      password:
        from_secret: bot_token
    when:
      event: [ "push" ]
      branch: ${CI_REPO_DEFAULT_BRANCH}

  docker-tag:
    image: plugins/kaniko
    settings:
      registry: codeberg.org
      dockerfile: Dockerfile
      repo: codeberg.org/codeberg/pages-server
      tag: [ latest, "${CI_COMMIT_TAG}" ]
      username:
        from_secret: bot_user
      password:
        from_secret: bot_token
    when:
      event: [ "tag" ]