---
### Drone configuration file for GoToSocial.
### Connects to https://drone.superseriousbusiness.org to perform testing, linting, and automatic builds/pushes to docker.
###
### For documentation on drone, see: https://docs.drone.io/
### For documentation on drone docker pipelines in particular: https://docs.drone.io/pipeline/docker/overview/
kind: pipeline
type: docker
name: default

steps:
  # We use golangci-lint for linting.
  # See: https://golangci-lint.run/
  - name: lint
    image: golangci/golangci-lint:v1.43.0
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: golangci-lint-cache
        path: /root/.cache/golangci-lint
      - name: go-src
        path: /go
    commands:
      - golangci-lint run
    when:
      event:
        include:
          - pull_request

  - name: test
    image: golang:1.17.5-alpine3.14
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: go-src
        path: /go
    commands:
      - CGO_ENABLED=0 GTS_DB_TYPE="sqlite" GTS_DB_ADDRESS=":memory:" go test ./...
      - CGO_ENABLED=0 ./test/cliparsing.sh
    when:
      event:
        include:
          - pull_request

  - name: snapshot
    image: superseriousbusiness/gotosocial-drone-build:0.0.1 # https://github.com/superseriousbusiness/gotosocial-drone-build
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: docker
        path: /var/run/docker.sock
    environment:
      DOCKER_USERNAME: gotosocial
      DOCKER_PASSWORD:
        from_secret: gts_docker_password
    commands:
      - git fetch --tags
      - /go/dockerlogin.sh
      - goreleaser release --rm-dist --snapshot
      - docker push superseriousbusiness/gotosocial:latest
    when:
      event:
        include:
          - push
      branch:
        include:
          - main

  - name: release
    image: superseriousbusiness/gotosocial-drone-build:0.0.1 # https://github.com/superseriousbusiness/gotosocial-drone-build
    volumes:
      - name: go-build-cache
        path: /root/.cache/go-build
      - name: docker
        path: /var/run/docker.sock
    environment:
      DOCKER_USERNAME: gotosocial
      DOCKER_PASSWORD:
        from_secret: gts_docker_password
      GITHUB_TOKEN:
        from_secret: github_token
    commands:
      - git fetch --tags
      - /go/dockerlogin.sh
      - goreleaser release --rm-dist
    when:
      event:
        include:
          - tag

# We can speed up builds significantly by caching build artifacts between runs.
# See: https://docs.drone.io/pipeline/docker/syntax/volumes/host/
volumes:
  - name: go-build-cache
    host:
      path: /drone/gotosocial/go-build
  - name: golangci-lint-cache
    host:
      path: /drone/gotosocial/golangci-lint
  - name: go-src
    host:
      path: /drone/gotosocial/go
  - name: docker
    host:
      path: /var/run/docker.sock

trigger:
  repo:
    - superseriousbusiness/gotosocial
    - NyaaaWhatsUpDoc/gotosocial
    - f0x52/gotosocial

---
kind: pipeline
type: docker
name: cron

trigger:
  event:
    - cron
  cron:
    - nightly

clone:
  disable: true

steps:
  - name: mirror
    image: alpine/git
    environment:
      CODEBERG_TOKEN:
        from_secret: gts_codeberg_token
    commands:
      # clone mirror
      - git clone --mirror https://github.com/superseriousbusiness/gotosocial .
      # configure git credentials
      - git config --global user.email "admin@gotosocial.org"
      - git config credential.helper store
      - printf "https://gotosocialbot:${CODEBERG_TOKEN}@codeberg.org\n" >> ~/.git-credentials
      # push mirror
      - git push --mirror https://codeberg.org/superseriousbusiness/gotosocial
      # clean up
      - rm ~/.git-credentials

---
kind: signature
hmac: 0487be0a2c9224c20cf067f94b3a458227e8b5465198b2245266d17156355b98

...