platform: linux/amd64

when:
  event: [ push, tag ]

variables:
  - &ci_verify_image 'sc.cryxtal.org/ci-img/git-curl-jq:latest'
  - &golang_image 'golang:1.20-bullseye'
  - &forgejo_test_image 'codeberg.org/forgejo/test_env:1.20'
  - &nodejs_image 'node:lts'
  - &bin_dl_image 'sc.cryxtal.org/ci-img/bin-dl:latest'
  - &deb_build_image 'sc.cryxtal.org/ci-img/dh:bullseye'
  - &deb_test_image_bullseye 'sc.cryxtal.org/ci-img/deb-test:bullseye'
  - &deb_test_image_bookworm 'sc.cryxtal.org/ci-img/deb-test:bookworm'
  - &deb_test_image_buster 'sc.cryxtal.org/ci-img/deb-test:buster'
  - &deb_test_image_sid 'sc.cryxtal.org/ci-img/deb-test:sid'
  - &deb_test_image_jammy 'sc.cryxtal.org/ci-img/deb-test-ubuntu:jammy'
  - &deb_test_image_focal 'sc.cryxtal.org/ci-img/deb-test-ubuntu:focal'
  - &deb_test_image_kinetic 'sc.cryxtal.org/ci-img/deb-test-ubuntu:kinetic'
  - &deb_test_image_lunar 'sc.cryxtal.org/ci-img/deb-test-ubuntu:lunar'
  - &build_submodule 'forgejo'
  - &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

workspace:
  base: /go
  path: src/cryxtal/forgejo-deb

clone:
  clone-recursive:
    image: woodpeckerci/plugin-git
    settings:
      recursive: true

pipeline:
  fetch-tags:
    image: *ci_verify_image
    pull: true
    commands:
      - git config --add safe.directory '*'
      - git fetch --tags --force
      - git submodule foreach 'git fetch --tags --force'

  ci-verify:
    image: *ci_verify_image
    group: deps
    environment:
      BUILD_SUBMODULE: *build_submodule
    commands:
      - ./.ci-make.sh ci-verify "$BUILD_SUBMODULE"

  deps-frontend:
    image: *nodejs_image
    group: deps
    environment:
      BUILD_SUBMODULE: *build_submodule
    commands:
      - ./.ci-make.sh submodule-make "$BUILD_SUBMODULE" deps-frontend

  deps-backend:
    image: *golang_image
    group: deps
    environment:
      BUILD_SUBMODULE: *build_submodule
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
      - *goproxy_setup
      - ./.ci-make.sh submodule-make "$BUILD_SUBMODULE" deps-backend

  tag-pre-condition:
    image: *ci_verify_image
    environment:
      BUILD_SUBMODULE: *build_submodule
    commands:
      - cd "$BUILD_SUBMODULE"
      - git update-ref refs/heads/tag_test $(git rev-parse --verify HEAD)

  security-check:
    image: *golang_image
    group: checks
    environment:
      BUILD_SUBMODULE: *build_submodule
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
      - *goproxy_setup
      - ./.ci-make.sh submodule-make "$BUILD_SUBMODULE" security-check

  build-frontend:
    image: *nodejs_image
    group: checks
    environment:
      BUILD_SUBMODULE: *build_submodule
    commands:
      - ./.ci-make.sh submodule-make "$BUILD_SUBMODULE" frontend

  checks-backend:
    image: *forgejo_test_image
    group: checks
    environment:
      BUILD_SUBMODULE: *build_submodule
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
      - *goproxy_setup
      - ./.ci-make.sh submodule-make "$BUILD_SUBMODULE" checks-backend

  download-bin-amd64:
    image: *bin_dl_image
    group: build-main
    commands:
      - ./.ci-make.sh download-binary forgejo-bin-dl
    when:
      event: [ tag ]

  build-forgejo-amd64:
    image: *golang_image
    group: build-main
    environment:
      BUILD_SUBMODULE: *build_submodule
      GOSUMDB: sum.golang.org
      TAGS: bindata
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
      - *goproxy_setup
      - ./.ci-make.sh submodule-build "$BUILD_SUBMODULE" forgejo-bin

  build-forgejo-sqlite-amd64:
    image: *golang_image
    environment:
      BUILD_SUBMODULE: *build_submodule
      GOSUMDB: sum.golang.org
      TAGS: bindata sqlite sqlite_unlock_notify
      GOPROXY_OVERRIDE: *goproxy_override
    secrets:
      - goproxy_default
    commands:
      - *goproxy_setup
      - ./.ci-make.sh submodule-build "$BUILD_SUBMODULE" forgejo-sqlite-bin

  package-bullseye:
    image: *deb_build_image
    group: package
    commands:
      - ./.ci-make.sh package-prep
      - ./.ci-make.sh package-build
      - ./.ci-make.sh package-clean
      
  package-repo:
    image: *deb_build_image
    group: package
    commands:
      - cd repo-deb
      - ./build.sh

  gen-sha256:
    image: *ci_verify_image
    commands:
      - ./.ci-make.sh pkg-gen-sha256
      - ./.ci-make.sh preview-sha256

  test-inst-bookworm:
    image: *deb_test_image_bookworm
    group: pkg-test-1
    commands:
      - ./.ci-make.sh install-run-test ./forgejo_*_amd64.deb

  test-inst-bookworm-user:
    image: *deb_test_image_bookworm
    group: pkg-test-1
    commands:
      - ./.ci-make.sh test-userinst-prep
      - ./.ci-make.sh install-run-test ./forgejo_*_amd64.deb

  test-inst-bullseye-sqlite:
    image: *deb_test_image_bullseye
    group: pkg-test-1
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-bookworm-sqlite:
    image: *deb_test_image_bookworm
    group: pkg-test-1
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-buster-sqlite:
    image: *deb_test_image_buster
    group: pkg-test-2
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-sid-sqlite:
    image: *deb_test_image_sid
    group: pkg-test-2
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-jammy-sqlite:
    image: *deb_test_image_jammy
    group: pkg-test-2
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-focal-sqlite:
    image: *deb_test_image_focal
    group: pkg-test-2
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-kinetic-sqlite:
    image: *deb_test_image_kinetic
    group: pkg-test-3
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-lunar-sqlite:
    image: *deb_test_image_lunar
    group: pkg-test-3
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-sqlite_*_amd64.deb

  test-inst-bullseye-bin:
    image: *deb_test_image_bullseye
    group: pkg-test-3
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-bookworm-bin:
    image: *deb_test_image_bookworm
    group: pkg-test-3
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-buster-bin:
    image: *deb_test_image_buster
    group: pkg-test-4
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-sid-bin:
    image: *deb_test_image_sid
    group: pkg-test-4
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-jammy-bin:
    image: *deb_test_image_jammy
    group: pkg-test-4
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-focal-bin:
    image: *deb_test_image_focal
    group: pkg-test-4
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-kinetic-bin:
    image: *deb_test_image_kinetic
    group: pkg-test-5
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]

  test-inst-lunar-bin:
    image: *deb_test_image_lunar
    group: pkg-test-5
    commands:
      - ./.ci-make.sh install-run-test ./forgejo-bin_*_amd64.deb
    when:
      event: [ tag ]
      
  test-repo-bookworm-bin:
    image: *deb_test_image_bookworm
    group: pkg-test-5
    commands:
      - ./.ci-make.sh install-repo-test ./repo-deb/forgejo-deb-repo_0-0_all.deb forgejo-bin

  upload-crystalcommit:
    image: woodpeckerci/plugin-gitea-release
    group: upload
    settings:
      base_url: https://sc.cryxtal.org
      files:
        - "*.deb"
        - "*.deb.sha256"
      api_key:
        from_secret: sc_api_key
      prerelease: false
      skip_verify: true
    when:
      event: [ tag ]

  upload-codeberg:
    image: woodpeckerci/plugin-gitea-release
    group: upload
    settings:
      base_url: https://codeberg.org
      files:
        - "*.deb"
        - "*.deb.sha256"
      api_key:
        from_secret: cb_api_key
      prerelease: false
      skip_verify: true
    when:
      event: [ tag ]

  publish-apt-repo:
    image: *ci_verify_image
    group: upload
    environment:
      FORGEJO_SITE: https://code.forgejo.org
      FORGEJO_OWNER: crystal
      DEBIAN_DIST: bullseye
      DEBIAN_COMPONENT: forgejo
    secrets: [ cfo_api_key ]
    commands:
      - export FORGEJO_KEY=$CFO_API_KEY
      - ./.ci-forgejo-apt.sh *.deb
    when:
      event: [ tag ]