---
kind: pipeline
name: release-version

platform:
  os: linux
  arch: amd64

workspace:
  base: /source
  path: /

trigger:
  event:
    - tag

volumes:
  - name: deps
    temp: {}

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git fetch --tags --force

  - name: deps-frontend
    image: node:20
    pull: always
    commands:
      - make deps-frontend

  - name: deps-backend
    image: gitea/test_env:linux-1.20-amd64
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  - name: static
    image: techknowlogick/xgo:go-1.21.x
    pull: always
    commands:
      - apt-get update && apt-get -qqy install ca-certificates curl gnupg
      - mkdir -p /etc/apt/keyrings && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
      - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list
      - apt-get update && apt-get -qqy install nodejs
      - export PATH=$PATH:$GOPATH/bin
      - make release
    environment:
      GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not
      TAGS: bindata sqlite sqlite_unlock_notify
      DEBIAN_FRONTEND: noninteractive
    depends_on: [fetch-tags]
    volumes:
      - name: deps
        path: /go

  - name: gpg-sign
    image: plugins/gpgsign:1
    pull: always
    settings:
      detach_sign: true
      excludes:
        - "dist/release/*.sha256"
      files:
        - "dist/release/*"
    environment:
      GPGSIGN_KEY:
        from_secret: gpgsign_key
      GPGSIGN_PASSPHRASE:
        from_secret: gpgsign_passphrase
    depends_on: [static]

  - name: release-tag
    image: woodpeckerci/plugin-s3:latest
    pull: always
    settings:
      acl:
        from_secret: aws_s3_acl
      region:
        from_secret: aws_s3_region
      bucket:
        from_secret: aws_s3_bucket
      endpoint:
        from_secret: aws_s3_endpoint
      path_style:
        from_secret: aws_s3_path_style
      source: "dist/release/*"
      strip_prefix: dist/release/
      target: "/gitea/${DRONE_TAG##v}"
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: aws_secret_access_key
    depends_on: [gpg-sign]

  - name: github
    image: plugins/github-release:latest
    pull: always
    settings:
      files:
        - "dist/release/*"
      file_exists: overwrite
    environment:
      GITHUB_TOKEN:
        from_secret: github_token
    depends_on: [gpg-sign]

---
kind: pipeline
type: docker
name: docker-linux-amd64-release-version

platform:
  os: linux
  arch: amd64

trigger:
  ref:
    include:
      - "refs/tags/**"
    exclude:
      - "refs/tags/**-rc*"
  paths:
    exclude:
      - "docs/**"

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git fetch --tags --force

  - name: publish
    image: plugins/docker:latest
    pull: always
    settings:
      auto_tag: true
      auto_tag_suffix: linux-amd64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

  - name: publish-rootless
    image: plugins/docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      auto_tag: true
      auto_tag_suffix: linux-amd64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request
---

kind: pipeline
type: docker
name: docker-linux-amd64-release-candidate-version

platform:
  os: linux
  arch: amd64

trigger:
  ref:
    - "refs/tags/**-rc*"
  paths:
    exclude:
      - "docs/**"

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git fetch --tags --force

  - name: publish
    image: plugins/docker:latest
    pull: always
    settings:
      tags: ${DRONE_TAG##v}-linux-amd64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

  - name: publish-rootless
    image: plugins/docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      tags: ${DRONE_TAG##v}-linux-amd64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

---
kind: pipeline
type: docker
name: docker-linux-arm64-release-version

platform:
  os: linux
  arch: arm64

trigger:
  ref:
    include:
      - "refs/tags/**"
    exclude:
      - "refs/tags/**-rc*"
  paths:
    exclude:
      - "docs/**"

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git fetch --tags --force

  - name: publish
    image: plugins/docker:latest
    pull: always
    settings:
      auto_tag: true
      auto_tag_suffix: linux-arm64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

  - name: publish-rootless
    image: plugins/docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      auto_tag: true
      auto_tag_suffix: linux-arm64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

---
kind: pipeline
type: docker
name: docker-linux-arm64-release-candidate-version

platform:
  os: linux
  arch: arm64

trigger:
  ref:
    - "refs/tags/**-rc*"
  paths:
    exclude:
      - "docs/**"

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git fetch --tags --force

  - name: publish
    image: plugins/docker:latest
    pull: always
    settings:
      tags: ${DRONE_TAG##v}-linux-arm64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

  - name: publish-rootless
    image: plugins/docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      tags: ${DRONE_TAG##v}-linux-arm64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
      DOCKER_BUILDKIT: 1
    when:
      event:
        exclude:
          - pull_request

---
kind: pipeline
type: docker
name: docker-manifest-version

platform:
  os: linux
  arch: amd64

steps:
  - name: manifest-rootless
    image: plugins/manifest
    pull: always
    settings:
      auto_tag: true
      ignore_missing: true
      spec: docker/manifest.rootless.tmpl
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username

  - name: manifest
    image: plugins/manifest
    settings:
      auto_tag: true
      ignore_missing: true
      spec: docker/manifest.tmpl
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username

trigger:
  ref:
    - "refs/tags/**"
  paths:
    exclude:
      - "docs/**"

depends_on:
  - docker-linux-amd64-release-version
  - docker-linux-amd64-release-candidate-version
  - docker-linux-arm64-release-version
  - docker-linux-arm64-release-candidate-version