---
kind: pipeline
type: docker
name: compliance

platform:
  os: linux
  arch: amd64

trigger:
  event:
    - push
    - tag
    - pull_request

volumes:
  - name: deps
    temp: {}

steps:
  - name: deps-frontend
    image: node:18
    pull: always
    commands:
      - make deps-frontend

  - name: deps-backend
    image: golang:1.19
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  - name: lint-frontend
    image: node:18
    commands:
      - make lint-frontend
    depends_on: [deps-frontend]

  - name: lint-backend
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    pull: always
    commands:
      - make lint-backend
    environment:
      GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not
      GOSUMDB: sum.golang.org
      TAGS: bindata sqlite sqlite_unlock_notify
    depends_on: [deps-backend]
    volumes:
      - name: deps
        path: /go

  - name: lint-backend-windows
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    commands:
      - make golangci-lint-windows vet
    environment:
      GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not
      GOSUMDB: sum.golang.org
      TAGS: bindata sqlite sqlite_unlock_notify
      GOOS: windows
      GOARCH: amd64
    depends_on: [deps-backend]
    volumes:
      - name: deps
        path: /go

  - name: lint-backend-gogit
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    commands:
      - make lint-backend
    environment:
      GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not
      GOSUMDB: sum.golang.org
      TAGS: bindata gogit sqlite sqlite_unlock_notify
    depends_on: [deps-backend]
    volumes:
      - name: deps
        path: /go

  - name: checks-frontend
    image: node:18
    commands:
      - make checks-frontend
    depends_on: [deps-frontend]

  - name: checks-backend
    image: golang:1.19
    commands:
      - make --always-make checks-backend # ensure the 'go-licenses' make target runs
    depends_on: [deps-backend]
    volumes:
      - name: deps
        path: /go

  - name: test-frontend
    image: node:18
    commands:
      - make test-frontend
    depends_on: [lint-frontend]

  - name: build-frontend
    image: node:18
    commands:
      - make frontend
    depends_on: [deps-frontend]

  - name: build-backend-no-gcc
    image: golang:1.18 # this step is kept as the lowest version of golang that we support
    pull: always
    environment:
      GO111MODULE: on
      GOPROXY: https://goproxy.io
    commands:
      - go build -o gitea_no_gcc # test if build succeeds without the sqlite tag
    depends_on: [deps-backend, checks-backend]
    volumes:
      - name: deps
        path: /go

  - name: build-backend-arm64
    image: golang:1.19
    environment:
      GO111MODULE: on
      GOPROXY: https://goproxy.io
      GOOS: linux
      GOARCH: arm64
      TAGS: bindata gogit
    commands:
      - make backend # test cross compile
      - rm ./gitea # clean
    depends_on: [deps-backend, checks-backend]
    volumes:
      - name: deps
        path: /go

  - name: build-backend-windows
    image: golang:1.19
    environment:
      GO111MODULE: on
      GOPROXY: https://goproxy.io
      GOOS: windows
      GOARCH: amd64
      TAGS: bindata gogit
    commands:
      - go build -o gitea_windows
    depends_on: [deps-backend, checks-backend]
    volumes:
      - name: deps
        path: /go

  - name: build-backend-386
    image: golang:1.19
    environment:
      GO111MODULE: on
      GOPROXY: https://goproxy.io
      GOOS: linux
      GOARCH: 386
    commands:
      - go build -o gitea_linux_386 # test if compatible with 32 bit
    depends_on: [deps-backend, checks-backend]
    volumes:
      - name: deps
        path: /go

---
kind: pipeline
type: docker
name: testing-amd64

platform:
  os: linux
  arch: amd64

depends_on:
  - compliance

trigger:
  event:
    - push
    - tag
    - pull_request

volumes:
  - name: deps
    temp: {}

services:
  - name: mysql
    image: mysql:5.7
    pull: always
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: yes
      MYSQL_DATABASE: test

  - name: mysql8
    image: mysql:8
    pull: always
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: yes
      MYSQL_DATABASE: testgitea

  - name: mssql
    image: mcr.microsoft.com/mssql/server:latest
    pull: always
    environment:
      ACCEPT_EULA: Y
      MSSQL_PID: Standard
      SA_PASSWORD: MwantsaSecurePassword1

  - name: ldap
    image: gitea/test-openldap:latest
    pull: always

  - name: elasticsearch
    image: elasticsearch:7.5.0
    pull: always
    environment:
      discovery.type: single-node

  - name: minio
    image: minio/minio:RELEASE.2021-03-12T00-00-47Z
    pull: always
    commands:
    - minio server /data
    environment:
      MINIO_ACCESS_KEY: 123456
      MINIO_SECRET_KEY: 12345678

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force
    when:
      event:
        exclude:
          - pull_request

  - name: deps-backend
    image: golang:1.19
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  - name: tag-pre-condition
    image: drone/git
    pull: always
    commands:
      - git update-ref refs/heads/tag_test ${DRONE_COMMIT_SHA}

  - name: prepare-test-env
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    pull: always
    commands:
      - ./build/test-env-prepare.sh

  - name: build
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - ./build/test-env-check.sh
      - make backend
    environment:
      GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not
      GOSUMDB: sum.golang.org
      TAGS: bindata sqlite sqlite_unlock_notify
    depends_on: [deps-backend, prepare-test-env]
    volumes:
      - name: deps
        path: /go

  - name: unit-test
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - make unit-test-coverage test-check
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata sqlite sqlite_unlock_notify
      RACE_ENABLED: true
      GITHUB_READ_TOKEN:
        from_secret: github_read_token
    depends_on: [deps-backend, prepare-test-env]
    volumes:
      - name: deps
        path: /go

  - name: unit-test-gogit
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - make unit-test-coverage test-check
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata gogit sqlite sqlite_unlock_notify
      RACE_ENABLED: true
      GITHUB_READ_TOKEN:
        from_secret: github_read_token
    depends_on: [deps-backend, prepare-test-env]
    volumes:
      - name: deps
        path: /go

  - name: test-mysql
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - make test-mysql-migration integration-test-coverage
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata
      RACE_ENABLED: true
      TEST_LDAP: 1
      USE_REPO_TEST_DIR: 1
      TEST_INDEXER_CODE_ES_URL: "http://elastic:changeme@elasticsearch:9200"
    depends_on: [build]
    volumes:
      - name: deps
        path: /go

  - name: test-mysql8
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - timeout -s ABRT 50m make test-mysql8-migration test-mysql8
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata
      RACE_ENABLED: true
      TEST_LDAP: 1
      USE_REPO_TEST_DIR: 1
    depends_on: [build]
    volumes:
      - name: deps
        path: /go

  - name: test-mssql
    image: gitea/test_env:linux-amd64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - make test-mssql-migration test-mssql
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata
      RACE_ENABLED: true
      TEST_LDAP: 1
      USE_REPO_TEST_DIR: 1
    depends_on: [build]
    volumes:
      - name: deps
        path: /go

  - name: generate-coverage
    image: golang:1.19
    commands:
      - make coverage
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata
    depends_on: [unit-test, test-mysql]
    when:
      branch:
        - main
      event:
        - push
        - pull_request

  - name: coverage-codecov
    image: woodpeckerci/plugin-codecov:next-alpine
    pull: always
    settings:
      files:
        - coverage.all
      token:
        from_secret: codecov_token
    depends_on: [generate-coverage]
    when:
      branch:
        - main
      event:
        - push
        - pull_request

---
kind: pipeline
name: testing-arm64

platform:
  os: linux
  arch: arm64

depends_on:
  - compliance

trigger:
  event:
    - push
    - tag
    - pull_request

volumes:
  - name: deps
    temp: {}

services:
  - name: pgsql
    pull: default
    image: postgres:10
    environment:
      POSTGRES_DB: test
      POSTGRES_PASSWORD: postgres

  - name: ldap
    pull: default
    image: gitea/test-openldap:latest

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force
    when:
      event:
        exclude:
          - pull_request

  - name: deps-backend
    image: golang:1.19
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  - name: prepare-test-env
    image: gitea/test_env:linux-arm64  # https://gitea.com/gitea/test-env
    pull: always
    commands:
      - ./build/test-env-prepare.sh

  - name: build
    image: gitea/test_env:linux-arm64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - ./build/test-env-check.sh
      - make backend
    environment:
      GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not
      GOSUMDB: sum.golang.org
      TAGS: bindata gogit sqlite sqlite_unlock_notify
    depends_on: [deps-backend, prepare-test-env]
    volumes:
      - name: deps
        path: /go

  - name: test-sqlite
    image: gitea/test_env:linux-arm64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - timeout -s ABRT 50m make test-sqlite-migration test-sqlite
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata gogit sqlite sqlite_unlock_notify
      RACE_ENABLED: true
      TEST_TAGS: gogit sqlite sqlite_unlock_notify
      USE_REPO_TEST_DIR: 1
    depends_on: [build]
    volumes:
      - name: deps
        path: /go

  - name: test-pgsql
    image: gitea/test_env:linux-arm64  # https://gitea.com/gitea/test-env
    user: gitea
    commands:
      - timeout -s ABRT 50m make test-pgsql-migration test-pgsql
    environment:
      GOPROXY: https://goproxy.io
      TAGS: bindata gogit
      RACE_ENABLED: true
      TEST_TAGS: gogit
      TEST_LDAP: 1
      USE_REPO_TEST_DIR: 1
    depends_on: [build]
    volumes:
      - name: deps
        path: /go

---
kind: pipeline
type: docker
name: testing-e2e

platform:
  os: linux
  arch: amd64

depends_on:
  - compliance

trigger:
  event:
    - pull_request

volumes:
  - name: deps
    temp: {}

services:
  - name: pgsql
    pull: default
    image: postgres:10
    environment:
      POSTGRES_DB: testgitea-e2e
      POSTGRES_PASSWORD: postgres
      POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8'

steps:
  - name: deps-frontend
    image: node:18
    pull: always
    commands:
      - make deps-frontend

  - name: build-frontend
    image: node:18
    commands:
      - make frontend
    depends_on: [deps-frontend]

  - name: deps-backend
    image: golang:1.18
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  # TODO: We should probably build all dependencies into a test image
  - name: test-e2e
    image: mcr.microsoft.com/playwright:v1.28.0-focal
    commands:
      - curl -sLO https://go.dev/dl/go1.19.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz
      - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea
      - apt-get -qq update && apt-get -qqy install build-essential
      - export TEST_PGSQL_SCHEMA=''
      - ./build/test-env-prepare.sh
      - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql"
    environment:
      GOPROXY: https://goproxy.io
      GOSUMDB: sum.golang.org
      USE_REPO_TEST_DIR: 1
      TEST_PGSQL_DBNAME: 'testgitea-e2e'
      DEBIAN_FRONTEND: noninteractive
    depends_on: [build-frontend, deps-backend]
    volumes:
      - name: deps
        path: /go

---
kind: pipeline
name: update_translations

platform:
  os: linux
  arch: arm64

trigger:
  branch:
    - main
  event:
    - cron
  cron:
    - update_translations

steps:
  - name: download
    image: jonasfranz/crowdin
    pull: always
    settings:
      download: true
      export_dir: options/locale/
      ignore_branch: true
      project_identifier: gitea
    environment:
      CROWDIN_KEY:
        from_secret: crowdin_key

  - name: update
    image: alpine:3.17
    pull: always
    commands:
      - ./build/update-locales.sh

  - name: push
    image: appleboy/drone-git-push
    pull: always
    settings:
      author_email: "teabot@gitea.io"
      author_name: GiteaBot
      branch: main
      commit: true
      commit_message: "[skip ci] Updated translations via Crowdin"
      remote: "git@github.com:go-gitea/gitea.git"
    environment:
      DRONE_COMMIT_AUTHOR_EMAIL: "teabot@gitea.io"
      DRONE_COMMIT_AUTHOR: GiteaBot
      GIT_PUSH_SSH_KEY:
        from_secret: git_push_ssh_key

  - name: upload_translations
    image: jonasfranz/crowdin
    pull: always
    settings:
      files:
        locale_en-US.ini: options/locale/locale_en-US.ini
      ignore_branch: true
      project_identifier: gitea
    environment:
      CROWDIN_KEY:
        from_secret: crowdin_key

---
kind: pipeline
type: docker
name: update_gitignore_and_licenses

platform:
  os: linux
  arch: arm64

trigger:
  branch:
    - main
  event:
    - cron
  cron:
    - update_gitignore_and_licenses

steps:
  - name: download
    image: golang:1.19
    pull: always
    commands:
      - timeout -s ABRT 40m make generate-license generate-gitignore

  - name: push
    image: appleboy/drone-git-push
    pull: always
    settings:
      author_email: "teabot@gitea.io"
      author_name: "GiteaBot"
      branch: main
      commit: true
      commit_message: "[skip ci] Updated licenses and gitignores"
      remote: "git@github.com:go-gitea/gitea.git"
    environment:
      DRONE_COMMIT_AUTHOR_EMAIL: "teabot@gitea.io"
      DRONE_COMMIT_AUTHOR: "GiteaBot"
      GIT_PUSH_SSH_KEY:
        from_secret: git_push_ssh_key

---
kind: pipeline
type: docker
name: release-latest

platform:
  os: linux
  arch: amd64

workspace:
  base: /source
  path: /

trigger:
  branch:
    - main
    - "release/*"
  event:
    - push

depends_on:
  - testing-amd64
  - testing-arm64

volumes:
  - name: deps
    temp: {}

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

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

  - name: deps-backend
    image: golang:1.19
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  - name: static
    image: techknowlogick/xgo:go-1.19.x
    pull: always
    commands:
      # Upgrade to node 18 once https://github.com/techknowlogick/xgo/issues/163 is resolved
      - curl -sL https://deb.nodesource.com/setup_16.x | bash - && 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
    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

  - name: release-branch
    image: woodpeckerci/plugin-s3:latest
    pull: always
    settings:
      acl: public-read
      bucket: gitea-artifacts
      endpoint: https://ams3.digitaloceanspaces.com
      path_style: true
      source: "dist/release/*"
      strip_prefix: dist/release/
      target: "/gitea/${DRONE_BRANCH##release/v}"
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: aws_secret_access_key
    when:
      branch:
        - "release/*"
      event:
        - push

  - name: release-main
    image: woodpeckerci/plugin-s3:latest
    settings:
      acl: public-read
      bucket: gitea-artifacts
      endpoint: https://ams3.digitaloceanspaces.com
      path_style: true
      source: "dist/release/*"
      strip_prefix: dist/release/
      target: /gitea/main
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: aws_secret_access_key
    when:
      branch:
        - main
      event:
        - push

---
kind: pipeline
name: release-version

platform:
  os: linux
  arch: amd64

workspace:
  base: /source
  path: /

trigger:
  event:
    - tag

depends_on:
  - testing-arm64
  - testing-amd64

volumes:
  - name: deps
    temp: {}

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

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

  - name: deps-backend
    image: golang:1.19
    pull: always
    commands:
      - make deps-backend
    volumes:
      - name: deps
        path: /go

  - name: static
    image: techknowlogick/xgo:go-1.19.x
    pull: always
    commands:
      # Upgrade to node 18 once https://github.com/techknowlogick/xgo/issues/163 is resolved
      - curl -sL https://deb.nodesource.com/setup_16.x | bash - && 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: public-read
      bucket: gitea-artifacts
      endpoint: https://ams3.digitaloceanspaces.com
      path_style: true
      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: docs

platform:
  os: linux
  arch: arm64

depends_on:
  - compliance

trigger:
  event:
    - push
    - tag
    - pull_request

steps:
  - name: build-docs
    image: plugins/hugo:latest
    pull: always
    commands:
      - apk add --no-cache make bash curl
      - cd docs
      - make trans-copy clean build

  - name: publish-docs
    image: techknowlogick/drone-netlify:latest
    pull: always
    settings:
      path: docs/public/
      site_id: d2260bae-7861-4c02-8646-8f6440b12672
    environment:
      NETLIFY_TOKEN:
        from_secret: netlify_token
    when:
      branch:
        - main
      event:
        - push

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

platform:
  os: linux
  arch: amd64

depends_on:
  - testing-amd64
  - testing-arm64

trigger:
  ref:
  - "refs/tags/**"
  event:
    exclude:
    - cron

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

  - name: publish
    image: techknowlogick/drone-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
    when:
      event:
        exclude:
        - pull_request

  - name: publish-rootless
    image: techknowlogick/drone-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
    when:
      event:
        exclude:
        - pull_request

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

platform:
  os: linux
  arch: amd64

depends_on:
  - testing-amd64
  - testing-arm64

trigger:
  ref:
  - refs/heads/main
  event:
    exclude:
    - cron

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

  - name: publish
    image: techknowlogick/drone-docker:latest
    pull: always
    settings:
      auto_tag: false
      tags: dev-linux-amd64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

  - name: publish-rootless
    image: techknowlogick/drone-docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      auto_tag: false
      tags: dev-linux-amd64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

---
kind: pipeline
name: docker-linux-amd64-release-branch

platform:
  os: linux
  arch: amd64

depends_on:
  - testing-amd64
  - testing-arm64

trigger:
  ref:
  - "refs/heads/release/v*"
  event:
    exclude:
    - cron

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

  - name: publish
    image: techknowlogick/drone-docker:latest
    pull: always
    settings:
      auto_tag: false
      tags: ${DRONE_BRANCH##release/v}-dev-linux-amd64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

  - name: publish-rootless
    image: techknowlogick/drone-docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      auto_tag: false
      tags: ${DRONE_BRANCH##release/v}-dev-linux-amd64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

---
kind: pipeline
type: docker
name: docker-linux-arm64-dry-run

platform:
  os: linux
  arch: arm64

depends_on:
  - compliance

trigger:
  ref:
  - "refs/pull/**"

steps:
  - name: dryrun
    image: techknowlogick/drone-docker:latest
    pull: always
    settings:
      dry_run: true
      repo: gitea/gitea
      tags: linux-arm64
      build_args:
        - GOPROXY=https://goproxy.io
    environment:
      PLUGIN_MIRROR:
        from_secret: plugin_mirror
    when:
      event:
        - pull_request

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

platform:
  os: linux
  arch: arm64

depends_on:
  - testing-amd64
  - testing-arm64

trigger:
  ref:
  - "refs/tags/**"
  event:
    exclude:
    - cron

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

  - name: publish
    image: techknowlogick/drone-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
    when:
      event:
        exclude:
        - pull_request

  - name: publish-rootless
    image: techknowlogick/drone-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
    when:
      event:
        exclude:
        - pull_request

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

platform:
  os: linux
  arch: arm64

depends_on:
  - testing-amd64
  - testing-arm64

trigger:
  ref:
  - refs/heads/main
  event:
    exclude:
    - cron

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

  - name: publish
    image: techknowlogick/drone-docker:latest
    pull: always
    settings:
      auto_tag: false
      tags: dev-linux-arm64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

  - name: publish-rootless
    image: techknowlogick/drone-docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      auto_tag: false
      tags: dev-linux-arm64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

---
kind: pipeline
name: docker-linux-arm64-release-branch

platform:
  os: linux
  arch: arm64

depends_on:
  - testing-amd64
  - testing-arm64

trigger:
  ref:
  - "refs/heads/release/v*"
  event:
    exclude:
    - cron

steps:
  - name: fetch-tags
    image: docker:git
    pull: always
    commands:
      - git config --global --add safe.directory /drone/src
      - git fetch --tags --force

  - name: publish
    image: techknowlogick/drone-docker:latest
    pull: always
    settings:
      auto_tag: false
      tags: ${DRONE_BRANCH##release/v}-dev-linux-arm64
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    when:
      event:
        exclude:
        - pull_request

  - name: publish-rootless
    image: techknowlogick/drone-docker:latest
    settings:
      dockerfile: Dockerfile.rootless
      auto_tag: false
      tags: ${DRONE_BRANCH##release/v}-dev-linux-arm64-rootless
      repo: gitea/gitea
      build_args:
        - GOPROXY=https://goproxy.io
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username
    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/**"
  event:
    exclude:
    - cron

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

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

platform:
  os: linux
  arch: amd64

steps:
  - name: manifest-rootless
    pull: always
    image: plugins/manifest
    pull: always
    settings:
      auto_tag: false
      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: false
      ignore_missing: true
      spec: docker/manifest.tmpl
      password:
        from_secret: docker_password
      username:
        from_secret: docker_username

trigger:
  ref:
  - refs/heads/main
  - "refs/heads/release/v*"
  event:
    exclude:
    - cron

depends_on:
  - docker-linux-amd64-release
  - docker-linux-arm64-release
  - docker-linux-amd64-release-branch
  - docker-linux-arm64-release-branch

---
kind: pipeline
type: docker
name: notifications

platform:
  os: linux
  arch: arm64

clone:
  disable: true

trigger:
  branch:
    - main
    - "release/*"
  event:
    - push
    - tag
  status:
    - success
    - failure

depends_on:
  - testing-amd64
  - testing-arm64
  - release-version
  - release-latest
  - docker-linux-amd64-release
  - docker-linux-arm64-release
  - docker-linux-amd64-release-version
  - docker-linux-arm64-release-version
  - docker-linux-amd64-release-branch
  - docker-linux-arm64-release-branch
  - docker-manifest
  - docker-manifest-version
  - docs

steps:
  - name: discord
    image: appleboy/drone-discord:1.2.4
    pull: always
    settings:
      message: "{{#success build.status}} āœ…  Build #{{build.number}} of `{{repo.name}}` succeeded.\n\nšŸ“ Commit by {{commit.author}} on `{{commit.branch}}`:\n``` {{commit.message}} ```\n\nšŸŒ {{ build.link }} {{else}} āŒ  Build #{{build.number}} of `{{repo.name}}` failed.\n\nšŸ“ Commit by {{commit.author}} on `{{commit.branch}}`:\n``` {{commit.message}} ```\n\nšŸŒ {{ build.link }} {{/success}}\n"
      webhook_id:
        from_secret: discord_webhook_id
      webhook_token:
        from_secret: discord_webhook_token