repo_description: :cloud: :rocket: :bar_chart: :chart_with_upwards_trend: Evaluating state of the art in AI
repo_topics: ai ai-challenges angularjs artificial-intelligence challenge codecov coveralls django docker evalai evaluation leaderboard machine-learning python reproducibility reproducible-research travis-ci
code: // Set CHROME_BIN based on availability
  const isArm = require('os').arch().includes('arm');
  
  // Use system Chrome/Chromium paths (Docker container has Chrome installed)
  process.env.CHROME_BIN = process.env.CHROME_BIN || (isArm ? '/usr/bin/chromium' : '/usr/bin/google-chrome');
  module.exports = function(config) {
      var configuration = {
    
        // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: '',
    
        // frameworks to use
        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: ['jasmine'],
  
      customLaunchers: {
          ChromiumHeadlessNoSandbox: {
            base: 'ChromiumHeadless',
            flags: [
              '--no-sandbox', 
              '--disable-gpu', 
              '--disable-dev-shm-usage',
              '--disable-web-security',
              '--disable-features=VizDisplayCompositor'
            ]
          },
          ChromeWithNoSandbox: {
            base: 'ChromeHeadless',
            flags: [
              '--no-sandbox',
              '--disable-gpu',
              '--disable-dev-shm-usage',
              '--disable-web-security',
              '--disable-features=VizDisplayCompositor',
              '--disable-software-rasterizer',
              '--disable-extensions',
              '--disable-background-timer-throttling',
              '--disable-backgrounding-occluded-windows',
              '--disable-renderer-backgrounding',
              '--disable-ipc-flooding-protection'
            ],
          },
        },
    
        browsers: [isArm ? 'ChromiumHeadlessNoSandbox' : 'ChromeWithNoSandbox'],  
      // list of files / patterns to load in the browser
      files: [
          'frontend/dist/vendors/*.js',
          'frontend/dist/js/config.js',
          'node_modules/angular-mocks/angular-mocks.js',
          'frontend/src/js/app.js',
          'frontend/src/**/*.js',
          'frontend/tests/**/*.test.js'
      ],
  
  
      // list of files / patterns to exclude
      exclude: [
      ],
  
  
      // preprocess matching files before serving them to the browser
      // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
      preprocessors: {
          'frontend/src/js/controllers/*.js': ['coverage']
      },
  
      plugins: [
          'karma-jasmine',
          'karma-chrome-launcher',
          'karma-coverage',
          'karma-brief-reporter',
          'karma-junit-reporter',
      ],
  
      // test results reporter to use
      // possible values: 'dots', 'progress'
      // available reporters: https://npmjs.org/browse/keyword/karma-reporter
      reporters: ['coverage', 'brief', 'junit'],
  
      // JUnit reporter configuration
      junitReporter: {
          outputDir: 'coverage/frontend/',
          outputFile: 'TEST-frontend.xml',
          suite: 'frontend'
      },
  
  
      // web server port
      port: 9876,
  
  
      // enable / disable colors in the output (reporters and logs)
      colors: true,
  
  
      // level of logging
      // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
      logLevel: config.LOG_INFO,
  
  
      // enable / disable watching file and executing tests whenever any file changes
      autoWatch: false,
  
  
      // Continuous Integration mode
      // if true, Karma captures browsers, runs the tests and exits
      singleRun: true,
  
      // Concurrency level
      // how many browser should be started simultaneous
      concurrency: 1,
  
      // Browser disconnect timeout
      browserDisconnectTimeout: 10000,
      browserDisconnectTolerance: 3,
      browserNoActivityTimeout: 30000,
      
      // Force process exit after tests complete
      processKillTimeout: 5000,
      captureTimeout: 30000,
      
      // Ensure Karma exits after single run
      failOnEmptyTestSuite: false,
  
      coverageReporter: {
          includeAllSources: true,
          dir: 'coverage/',
          reporters: [
              { type: 'lcovonly', subdir: 'frontend', file: 'lcov.info' },
              { type: 'text-summary' }
          ]
      }
    };
  
    // Detect CI providers and use resilient headless browser settings.
    if (process.env.TRAVIS || process.env.GITHUB_ACTIONS === 'true') {
        configuration.browsers = ['ChromeWithNoSandbox'];
        configuration.browserDisconnectTimeout = 20000;
        configuration.browserDisconnectTolerance = 5;
        configuration.browserNoActivityTimeout = 120000;
    }
  
    config.set(configuration);
  }
  