# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can
# found in the LICENSE file.

import("//build/go/go_binary.gni")
import("//build/go/go_library.gni")
import("//build/go/go_test.gni")

go_binary("artifactory") {
  gopackage = "go.fuchsia.dev/fuchsia/tools/artifactory/cmd"

  deps = [ ":main" ]
}

group("tests") {
  testonly = true
  deps = [
    ":artifactory_lib_tests($host_toolchain)",
    ":artifactory_main_tests($host_toolchain)",
  ]
}

go_library("main") {
  name = "go.fuchsia.dev/fuchsia/tools/artifactory/cmd"
  source_dir = "cmd"
  deps = [
    ":lib",
    "//third_party/golibs:cloud.google.com/go/storage",
    "//third_party/golibs:github.com/google/subcommands",
    "//tools/build",
    "//tools/lib/color",
    "//tools/lib/iomisc",
    "//tools/lib/logger",
    "//tools/lib/retry",
  ]
}

go_library("lib") {
  name = "go.fuchsia.dev/fuchsia/tools/artifactory/lib"
  deps = [
    "//tools/build",
    "//tools/lib/logger",
  ]
}

go_test("artifactory_lib_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/artifactory/lib" ]
  deps = [ ":lib" ]
}

go_test("artifactory_main_tests") {
  gopackages = [ "go.fuchsia.dev/fuchsia/tools/artifactory/cmd" ]
  deps = [ ":main" ]
}
