# Copyright 2022 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.

set -e

# go to the right build directory
cd "${KOKORO_ARTIFACTS_DIR}/git/vscode-plugins"

# ensure we can run git commands (used when determining version info by
# npm and vsce, and below to get the commit sha)
git config --global --add safe.directory "${KOKORO_ARTIFACTS_DIR}/git/vscode-plugins"


# prefix the output directory with the artifacts directory
mkdir -p ${KOKORO_ARTIFACTS_DIR}/output/mocha-tests
export TEST_XML_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/mocha-tests/sponge_log.xml"
export TEST_LOG_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/mocha-tests/sponge_log.log"

mkdir -p ${KOKORO_ARTIFACTS_DIR}/output/lint
export LINT_XML_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/lint/sponge_log.xml"
export LINT_LOG_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/lint/sponge_log.log"

mkdir -p ${KOKORO_ARTIFACTS_DIR}/output/package
export PACKAGE_XML_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/package/sponge_log.xml"
export PACKAGE_LOG_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/package/sponge_log.log"

mkdir -p ${KOKORO_ARTIFACTS_DIR}/output/build
export BUILD_XML_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/build/sponge_log.xml"
export BUILD_LOG_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/build/sponge_log.log"

mkdir -p ${KOKORO_ARTIFACTS_DIR}/output/typecheck
export TYPECHECK_XML_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/typecheck/sponge_log.xml"
export TYPECHECK_LOG_OUTPUT="${KOKORO_ARTIFACTS_DIR}/output/typecheck/sponge_log.log"

mkdir -p "${KOKORO_ARTIFACTS_DIR}/plugin"
commit_sha="$(git rev-parse --short HEAD)"
export PLUGIN_OUT="${KOKORO_ARTIFACTS_DIR}/plugin/vscode-fuchsia-ci-${commit_sha}.vsix"

if [[ -z "${NOT_CI}" ]]; then
  export ON_CI="true"
fi
