async function exportProject({
  projectDirectory,
  outputDirectory,
  suiteFiles,
  runner = RUNNER_PUPPETRY,
  snippets,
  sharedTargets,
  env,
  projectOptions,
  suiteOptions,
  exportOptions
}) {
  const testDir = join( outputDirectory, "specs" ),
        specFiles = [],
        JEST_PKG = getJestPkgDirectory();

  try {
    if ( exportOptions.cleanup ) {
      removeExport( outputDirectory );
    }

    shell.mkdir( "-p" , testDir );
    shell.rm( "-rf" , join( projectDirectory, DIR_SCREENSHOTS ) );

    if ( exportOptions.updateSnapshot ) {
      shell.rm( "-rf" , join( projectDirectory, DIR_SNAPSHOTS ) );
    } else {
      shell.rm( "-rf" , join( projectDirectory, DIR_SNAPSHOTS, "actual" ) );
      shell.rm( "-rf" , join( projectDirectory, DIR_SNAPSHOTS, "diff" ) );
    }

    shell.mkdir( "-p" , join( projectDirectory, DIR_SCREENSHOTS ) );
    shell.mkdir( "-p" , join( projectDirectory, DIR_SNAPSHOTS ) );

    shell.cp( "-RLf" , JEST_PKG + "/*", outputDirectory  );
    shell.chmod( "-R", 777, outputDirectory );
    shell.mkdir( "-p" , join( outputDirectory, "specs" ) );

    if ( runner === RUNNER_JEST && suiteOptions.allure  ) {
      await writeFile( join( outputDirectory, "jest.config.js" ), `module.exports = {
  setupFilesAfterEnv: [ "jest-allure/dist/setup" ]
};`, "utf8" );
    }

    await writeFile( join( outputDirectory, "puppeteer.config.json" ),
      JSON.stringify( projectOptions, null, 2 ) , "utf8"
    );

    for ( const filename of suiteFiles ) {
      let specContent = await exportSuite({
        projectDirectory,
        outputDirectory,
        filename,
        runner,
        snippets,
        sharedTargets,
        env,
        options: suiteOptions
      });

      const specFilename = parse( filename ).name + ".spec.js",
            specPath = join( testDir, specFilename );

      await writeFile( specPath, specContent, "utf8" );
      specFiles.push( specFilename );
    }


    return specFiles;
  } catch ( e ) {
    log.warn( `Renderer process: io.exportProject(${ testDir }): ${ e }` );
    if (  e instanceof CaughtException ) {
      throw e;
    }
    throw new IoError( `Cannot export into ${ outputDirectory }.
          Please make sure that you have write permission for it` );
  }
}
Export specified suite files to given directory

@returns {String[]} - ["foo.spec.js",..]