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

import("//build/assembly/bootfs_files_for_assembly.gni")
import("//build/bazel/bazel_inputs.gni")
import("//build/info/info.gni")

declare_args() {
  # Truncate the date in the build_info to midnight UTC, and replace the commit
  # hash with one that's synthesized from that date.
  # LINT.IfChange
  truncate_build_info_commit_date = false
  # LINT.ThenChange(//build/bazel/gn_build_args.txt)
}

if (current_toolchain == default_toolchain) {
  group("build_info_files") {
    public_deps = [
      ":latest-commit-date-and-hash",
      ":version",
    ]
  }

  # Ensure this action is invoked if integration HEAD moves
  _inputs = [
    # LINT.IfChange
    # https://fxbug.dev/335391299. These are generated by a Jiri
    # hook in //integration/fuchsia/stem. Until the hook is activated
    # these files have empty values but are still read by the
    # script before `git` is invoked.
    "//build/info/jiri_generated/integration_commit_stamp.txt",
    "//build/info/jiri_generated/integration_commit_hash.txt",

    # LINT.ThenChange(//build/info/create_jiri_hook_files.sh)

    # https://fxbug.dev/335391299. Remove the line below once
    # the Jiri hook has been added to //integration/fuchsia/stem.
    "//integration/.git/HEAD",
  ]

  # LINT.IfChange
  action("latest-commit-date-and-hash") {
    visibility = [
      ":*",
      "bootfs/*",
    ]

    inputs = _inputs
    outputs = [
      build_info_files.latest_commit_date,
      build_info_files.minimum_utc_stamp,
      build_info_files.latest_commit_hash,
    ]
    script = "gen_latest_commit_date.py"
    args = [
      "--repo",
      rebase_path("//integration/", root_build_dir),
      "--use-jiri-values",
      "--timestamp-file",
      rebase_path(build_info_files.minimum_utc_stamp, root_build_dir),
      "--date-file",
      rebase_path(build_info_files.latest_commit_date, root_build_dir),
      "--commit-hash-file",
      rebase_path(build_info_files.latest_commit_hash, root_build_dir),
    ]
    if (truncate_build_info_commit_date) {
      args += [ "--truncate" ]
    }

    # LINT.ThenChange(//build/info/info.bzl)
  }

  if (build_info_version != "") {
    generated_file("version") {
      outputs = [ build_info_files.version ]
      contents = build_info_version
    }
  } else {
    copy("version") {
      sources = [ build_info_files.latest_commit_date ]
      outputs = [ build_info_files.version ]
      deps = [ ":latest-commit-date-and-hash" ]
    }
  }
}
