#!/usr/bin/env bash

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

# NB(sollyross): if you're modifying this file, please make sure any "global" operations
# (e.g. installing outside a tempdir, changing configuration files for the user, etc)
# are gated behind an ON_CI flag.  If possible, prefer local-to-shell-instance operations.

set -eo pipefail

echo "figuring out common paths and such..." >&2
export ci_dir="$(realpath $(dirname -- "${BASH_SOURCE[0]}"))"
export root_dir=${ci_dir:?could not figure out script dir}/../

node_version="${NODE_VERSION:-19.4.0}"

export PATH="${root_dir}/prebuilt/nodejs/bin/:${PATH}"

ensure-node() {
  echo "installing node ${node_version}..." >&2
  # TODO(sollyross): we probably just want to pull this from an internal
  # cache or CIPD, but this is fine for now

  [[ -d ${root_dir}/prebuilt ]] || mkdir ${root_dir}/prebuilt

  # subshell to not clobber our current path
  (
    cd ${root_dir}/prebuilt
    wget --no-verbose https://nodejs.org/dist/v${node_version}/node-v${node_version}-linux-x64.tar.xz
    tar -xJf node-v${node_version}-linux-x64.tar.xz

    # rename to make the rest of our script easier
    mv node-v${node_version}-linux-x64 nodejs
  )
}

setup-python() {
  if [[ -n "${ON_CI:-""}" ]]; then
    pyenv global 3.9

    echo "Using python version: $(python --version)" >&2
  fi
}

ensure-all() {
  ensure-node
  setup-python

  if [[ -n "${ON_CI:-""}" ]]; then
    echo "installing testing OS deps..." >&2
    # these are required by vscode itself, plus xvfb for for running vscode headless
    # xvfb should already be installed but better to be clear that we need it.
    # (libsecret-1-dev and below are for node deps)
    sudo apt-get update
    sudo apt-get install --fix-missing -y \
    libnss3 libatk1.0 libatk-bridge2.0 libdrm2 \
    libgtk-3-0 libpango-1.0 libcairo2 libgdk-pixbuf2.0 \
    libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
    libgbm1 libxkbcommon0 libasound2 xvfb \
    libsecret-1-dev

    # Install chrome for webview tests.
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    sudo apt install -y ./google-chrome-stable_current_amd64.deb
  fi
}
