---
kind: pipeline
name: default

node:
  nix-daemon: 1

steps:
  - name: check formatting
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-shell --attr rust --run "cargo fmt -- --check"

  - name: build
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}

  - name: unit + func tests
    image: nixpkgs/nix:nixos-22.05
    environment:
      GARAGE_TEST_INTEGRATION_EXE: result-bin/bin/garage
    commands:
      - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
      - nix-build --no-build-output --attr test.amd64
      - ./result/bin/garage_db-*
      - ./result/bin/garage_api-*
      - ./result/bin/garage_model-*
      - ./result/bin/garage_rpc-*
      - ./result/bin/garage_table-*
      - ./result/bin/garage_util-*
      - ./result/bin/garage_web-*
      - ./result/bin/garage-*
      - ./result/bin/integration-*
      - rm result

  - name: integration tests
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)

trigger:
  event:
  - custom
  - push
  - pull_request
  - tag
  - cron

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

node:
  nix-daemon: 1

steps:
  - name: build
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-build --no-build-output --attr pkgs.amd64.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage"

  - name: integration
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)

  - name: push static binary
    image: nixpkgs/nix:nixos-22.05
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: garagehq_aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: garagehq_aws_secret_access_key
      TARGET: "x86_64-unknown-linux-musl"
    commands:
      - nix-shell --attr release --run "to_s3"

  - name: docker build and publish
    image: nixpkgs/nix:nixos-22.05
    environment:
      DOCKER_AUTH:
        from_secret: docker_auth
      DOCKER_PLATFORM: "linux/amd64"
      CONTAINER_NAME: "dxflrs/amd64_garage"
      HOME: "/kaniko"
    commands:
      - mkdir -p /kaniko/.docker
      - echo $DOCKER_AUTH > /kaniko/.docker/config.json
      - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr release --run "to_docker"


trigger:
  event:
  - promote
  - cron

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

node:
  nix-daemon: 1

steps:
  - name: build
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-build --no-build-output --attr pkgs.i386.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage"

  - name: integration
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)

  - name: push static binary
    image: nixpkgs/nix:nixos-22.05
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: garagehq_aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: garagehq_aws_secret_access_key
      TARGET: "i686-unknown-linux-musl"
    commands:
      - nix-shell --attr release --run "to_s3"

  - name: docker build and publish
    image: nixpkgs/nix:nixos-22.05
    environment:
      DOCKER_AUTH:
        from_secret: docker_auth
      DOCKER_PLATFORM: "linux/386"
      CONTAINER_NAME: "dxflrs/386_garage"
      HOME: "/kaniko"
    commands:
      - mkdir -p /kaniko/.docker
      - echo $DOCKER_AUTH > /kaniko/.docker/config.json
      - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr release --run "to_docker"

trigger:
  event:
  - promote
  - cron

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

node:
  nix-daemon: 1

steps:
  - name: build
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-build --no-build-output --attr pkgs.arm64.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage"

  - name: push static binary
    image: nixpkgs/nix:nixos-22.05
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: garagehq_aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: garagehq_aws_secret_access_key
      TARGET: "aarch64-unknown-linux-musl"
    commands:
      - nix-shell --attr release --run "to_s3"

  - name: docker build and publish
    image: nixpkgs/nix:nixos-22.05
    environment:
      DOCKER_AUTH:
        from_secret: docker_auth
      DOCKER_PLATFORM: "linux/arm64"
      CONTAINER_NAME: "dxflrs/arm64_garage"
      HOME: "/kaniko"
    commands:
      - mkdir -p /kaniko/.docker
      - echo $DOCKER_AUTH > /kaniko/.docker/config.json
      - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr release --run "to_docker"

trigger:
  event:
  - promote
  - cron

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

node:
  nix-daemon: 1

steps:
  - name: build
    image: nixpkgs/nix:nixos-22.05
    commands:
      - nix-build --no-build-output --attr pkgs.arm.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage"

  - name: push static binary
    image: nixpkgs/nix:nixos-22.05
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: garagehq_aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: garagehq_aws_secret_access_key
      TARGET: "armv6l-unknown-linux-musleabihf"
    commands:
      - nix-shell --attr release --run "to_s3"

  - name: docker build and publish
    image: nixpkgs/nix:nixos-22.05
    environment:
      DOCKER_AUTH:
        from_secret: docker_auth
      DOCKER_PLATFORM: "linux/arm"
      CONTAINER_NAME: "dxflrs/arm_garage"
      HOME: "/kaniko"
    commands:
      - mkdir -p /kaniko/.docker
      - echo $DOCKER_AUTH > /kaniko/.docker/config.json
      - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr release --run "to_docker"

trigger:
  event:
  - promote
  - cron

---
kind: pipeline
type: docker
name: refresh-release-page

node:
  nix-daemon: 1

steps:
  - name: multiarch-docker
    image: nixpkgs/nix:nixos-22.05
    environment:
      DOCKER_AUTH:
        from_secret: docker_auth
      HOME: "/root"
    commands:
      - mkdir -p /root/.docker
      - echo $DOCKER_AUTH > /root/.docker/config.json
      - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
      - nix-shell --attr release --run "multiarch_docker"
  - name: refresh-index
    image: nixpkgs/nix:nixos-22.05
    environment:
      AWS_ACCESS_KEY_ID:
        from_secret: garagehq_aws_access_key_id
      AWS_SECRET_ACCESS_KEY:
        from_secret: garagehq_aws_secret_access_key
    commands:
      - mkdir -p /etc/nix && cp nix/nix.conf /etc/nix/nix.conf
      - nix-shell --attr release --run "refresh_index"

depends_on:
  - release-linux-amd64
  - release-linux-i386
  - release-linux-arm64
  - release-linux-arm

trigger:
  event:
  - promote
  - cron

---
kind: signature
hmac: ac09a5a8c82502f67271f93afa1e1e21ce66383b8e24a6deb26b285cc1c378ba

...