kind: pipeline
type: docker
name: clippy

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: clippy
  image: asonix/rust-builder:latest-linux-amd64
  pull: always
  commands:
  - rustup component add clippy
  - cargo clippy --no-default-features -- -D warnings
  - cargo clippy --no-default-features --features io-uring -- -D warnings

trigger:
  event:
  - push
  - pull_request
  - tag

---

kind: pipeline
type: docker
name: tests

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: tests
  image: asonix/rust-builder:latest-linux-amd64
  pull: always
  commands:
  - cargo test

trigger:
  event:
  - push
  - pull_request
  - tag

---

kind: pipeline
type: docker
name: check-amd64

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: check
  image: asonix/rust-builder:latest-linux-amd64
  pull: always
  commands:
  - cargo check --target=$TARGET

trigger:
  event:
  - push
  - pull_request

---

kind: pipeline
type: docker
name: build-amd64

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: build
  image: asonix/rust-builder:latest-linux-amd64
  pull: always
  commands:
  - cargo build --target=$TARGET --release
  - cp target/$TARGET/release/pict-rs .
  - cp pict-rs pict-rs-linux-amd64

- name: push
  image: plugins/docker:20
  settings:
    username: asonix
    password:
      from_secret: dockerhub_token
    repo: asonix/pictrs
    dockerfile: docker/drone/Dockerfile
    auto_tag: true
    auto_tag_suffix: linux-amd64
    build_args:
    - REPO_ARCH=amd64

- name: publish
  image: plugins/gitea-release:1
  settings:
    api_key:
      from_secret: gitea_token
    base_url: https://git.asonix.dog
    files:
    - pict-rs-linux-amd64

depends_on:
- clippy
- tests

trigger:
  event:
  - tag

---

kind: pipeline
type: docker
name: check-arm64v8

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: check
  image: asonix/rust-builder:latest-linux-arm64v8
  pull: always
  commands:
  - cargo check --target=$TARGET

trigger:
  event:
  - push
  - pull_request

---

kind: pipeline
type: docker
name: build-arm64v8

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: build
  image: asonix/rust-builder:latest-linux-arm64v8
  pull: always
  commands:
  - cargo build --target=$TARGET --release
  - cp target/$TARGET/release/pict-rs .
  - cp pict-rs pict-rs-linux-arm64v8

- name: push
  image: plugins/docker:20
  settings:
    username: asonix
    password:
      from_secret: dockerhub_token
    repo: asonix/pictrs
    dockerfile: docker/drone/Dockerfile
    auto_tag: true
    auto_tag_suffix: linux-arm64v8
    build_args:
    - REPO_ARCH=arm64v8

- name: publish
  image: plugins/gitea-release:1
  settings:
    api_key:
      from_secret: gitea_token
    base_url: https://git.asonix.dog
    files:
    - pict-rs-linux-arm64v8

depends_on:
- clippy
- tests

trigger:
  event:
  - tag

---

kind: pipeline
type: docker
name: check-arm32v7

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: check
  image: asonix/rust-builder:latest-linux-arm32v7
  pull: always
  commands:
  - cargo check --target=$TARGET

trigger:
  event:
  - push
  - pull_request

---

kind: pipeline
type: docker
name: build-arm32v7

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: build
  image: asonix/rust-builder:latest-linux-arm32v7
  pull: always
  commands:
  - cargo build --target=$TARGET --release
  - cp target/$TARGET/release/pict-rs .
  - cp pict-rs pict-rs-linux-arm32v7

- name: push
  image: plugins/docker:20
  settings:
    username: asonix
    password:
      from_secret: dockerhub_token
    repo: asonix/pictrs
    dockerfile: docker/drone/Dockerfile
    auto_tag: true
    auto_tag_suffix: linux-arm32v7
    build_args:
    - REPO_ARCH=arm32v7

- name: publish
  image: plugins/gitea-release:1
  settings:
    api_key:
      from_secret: gitea_token
    base_url: https://git.asonix.dog
    files:
    - pict-rs-linux-arm32v7

depends_on:
- clippy
- tests

trigger:
  event:
  - tag

---

kind: pipeline
type: docker
name: manifest

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: manifest
  image: plugins/manifest:1
  settings:
    username: asonix
    password:
      from_secret: dockerhub_token
    dump: true
    auto_tag: true
    ignore_missing: true
    spec: docker/drone/manifest.tmpl


depends_on:
- build-amd64
- build-arm64v8
- build-arm32v7

trigger:
  event:
  - tag

---

kind: pipeline
type: docker
name: publish-crate

platform:
  arch: amd64

clone:
  disable: true

steps:
- name: clone
  image: alpine/git:latest
  user: root
  commands:
  - git clone $DRONE_GIT_HTTP_URL .
  - git checkout $DRONE_COMMIT
  - chown -R 991:991 .

- name: publish
  image: asonix/rust-builder:latest-linux-amd64
  pull: always
  environment:
    CRATES_IO_TOKEN:
      from_secret: crates_io_token
  commands:
  - cargo publish --token $CRATES_IO_TOKEN

depends_on:
- build-amd64
- build-arm64v8
- build-arm32v7

trigger:
  event:
  - tag
