when:
  - event: [push, pull_request, tag, cron]
    branch: ${CI_REPO_DEFAULT_BRANCH}

steps:
  # use vendor to cache dependencies
  vendor:
    image: golang:1.24
    commands:
      - go mod vendor

  build:
    depends_on: vendor
    image: codeberg.org/6543/docker-images/golang_just:go-1.24
    commands:
      - go version
      - just build
    when:
      - event: [push, pull_request, tag]

  docker-dryrun:
    depends_on: vendor
    image: woodpeckerci/plugin-docker-buildx:5.2.1
    settings:
      dockerfile: Dockerfile
      platforms: linux/amd64
      dry-run: true
      tags: latest
    when:
      - event: [pull_request]
        path: Dockerfile

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

  test:
    depends_on: build
    image: codeberg.org/6543/docker-images/golang_just:go-1.24
    commands:
      - just test
    when:
      - event: [pull_request]

  integration-tests:
    failure: ignore
    depends_on: build
    image: codeberg.org/6543/docker-images/golang_just:go-1.24
    commands:
      - just integration
    environment:
      ACME_API: https://acme.mock.directory
      PAGES_DOMAIN: localhost.mock.directory
      RAW_DOMAIN: raw.localhost.mock.directory
      PORT: 4430
    when:
      - event: [pull_request]

  release:
    depends_on: build
    image: woodpeckerci/plugin-release:0.2.5
    settings:
      base_url: https://codeberg.org
      file_exists: overwrite
      files: build/codeberg-pages-server
      api_key:
        from_secret: bot_token
    when:
      - event: [tag]

  docker-next:
    depends_on: vendor
    image: woodpeckerci/plugin-docker-buildx:5.2.1
    settings:
      registry: codeberg.org
      dockerfile: Dockerfile
      platforms: linux/amd64,arm64
      repo: codeberg.org/codeberg/pages-server
      tags: next
      username:
        from_secret: bot_user
      password:
        from_secret: bot_token
    when:
      - event: [push]

  'Publish PR image':
    image: woodpeckerci/plugin-docker-buildx:5.2.1
    depends_on: test
    settings:
      registry: codeberg.org
      dockerfile: Dockerfile
      platforms: linux/amd64
      repo: codeberg.org/codeberg/pages-server
      tags: next
      username:
        from_secret: bot_user
      password:
        from_secret: bot_token
    when:
      evaluate: 'CI_COMMIT_PULL_REQUEST_LABELS contains "build_pr_image"'
      event: pull_request

  docker-release:
    depends_on: vendor
    image: woodpeckerci/plugin-docker-buildx:5.2.1
    settings:
      registry: codeberg.org
      dockerfile: Dockerfile
      platforms: linux/amd64,arm64
      repo: codeberg.org/codeberg/pages-server
      tags: [latest, '${CI_COMMIT_TAG}']
      username:
        from_secret: bot_user
      password:
        from_secret: bot_token
    when:
      - event: [tag]