You cannot just capture return code as you typically would (Using [ "$?" -eq 0 ]). Since you will end up capturing the return code of tee which will be successful if tee was able to write to file.

Hence you need to use ${PIPESTATUS[0]}

some_func(){
  return 1
}
 
main() {
  some_func 2>&1 | tee /tmp/out
  return_code="${PIPESTATUS[0]}"
 
  echo "Return code from original command: ${return_code}"
 
  if [ "$return_code" -eq 0 ]; then
    echo_green "success"
  else
    echo_red "failure"
    return 1;
  fi
}
 
main "${@}" || exit 1