# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This is a .pyl, or "Python Literal", file. You can treat it just like a
# .json file, with the following exceptions:
# * all keys must be quoted (use single quotes, please);
# * comments are allowed, using '#' syntax; and
# * trailing commas are allowed.
#
# List of files that are known to be _not_ deterministic. This is a "temporary"
# workaround to find regression on the deterministic builders.
#
# TODO(sebmarchand): Remove this once all the files are deterministic.
{
  # https://crbug.com/383340
  # TODO(thakis): Move android det bots to use two distinct build dirs,
  # https://crbug.com/899438
  'android': [
  ],

  'fuchsia': [
  ],

  'linux': [
  ],

  'linux_component': [
    # https://crbug.com/900696
    'remoting-webapp.v2.zip',

    # https://crbug.com/937268
    'swiftshader/libGLESv2.so',
    'swiftshader_vertex_routine_fuzzer',

    # https://crbug.com/954056
    'nacl_test_data/nonsfi/irt_exception_test_pnacl_newlib_x32_nonsfi.nexe',
    'nacl_test_data/nonsfi/irt_manifest_file_pnacl_newlib_x32_nonsfi.nexe',
    'test_data/ppapi/tests/extensions/packaged_app/nonsfi/ppapi_tests_extensions_packaged_app_pnacl_newlib_x32_nonsfi.nexe',
  ],

  # TODO(thakis): Move mac det bots to use two distinct build dirs,
  # https://crbug.com/899438
  'mac': [
  ],

  # https://crbug.com/330260
  'win': [
    # TODO(thakis): Figure out what's up with these three (and their isolate).
    'mini_installer.exe',
    'mini_installer.exe.pdb',
    'previous_version_mini_installer.exe',

    # These probably have mtimes in the zip headers and the scripts creating
    # them probably should use build_utils.ZipDir() instead.
    'mini_installer_tests.zip',
    'policy_templates.zip',
  ],
}
