docs: function addLocalSingleFile(rootFolder, fileName) {
      // Read every local file and create a correct local.json file
      const fileNameWithoutExtension = path.join(path.parse(fileName).dir, path.parse(fileName).name);
      const extension = path.parse(fileName).ext;
  
      // Get valid extensions for code files
      const extensions = eaft.getCodeExtensions();
  
      // Get contents of .gasignore file
      const ignoreRegexes = ignore.getIgnoreRegexes(rootFolder);
  
      // Test if the file is pushable
      if (!eaft.isPushable(extension, fileNameWithoutExtension, extensions, ignoreRegexes)) {
          checkbox.display('red');
          throw {
              message: `Can't push this file to remote because of an invalid extension or name`,
              print: true,
          };
      }
  
      // Read remote
      const remote = path.join(rootFolder, constants.META_DIR, constants.META_REMOTE);
      const remoteData = fs.readJsonSync(remote, 'utf8');
  
      // Read the file we are going to include
      let source = '';
      try {
          source = fs.readFileSync(path.join(rootFolder, fileName), 'utf8');
      } catch (err) {
          throw {
              message: `Can't seem to find '${fileName}' in the local filesystem`,
              print: true,
          };
      }
  
      // Check if file already in remote
      let alreadyInRemote = false;
      for (const file of remoteData.files) {
          if (file.name === fileNameWithoutExtension) {
              file.source = source;
              alreadyInRemote = true;
              break;
          }
      }
  
      // Add the file if not already in remote
      if (!alreadyInRemote) {
          const extension = path.parse(fileName).ext;
          const type = eaft.getFiletypeFromExtension(extension);
          remoteData.files.push({
              name: fileNameWithoutExtension,
              type,
              source,
          });
      }
  
      // Write local.json
      writeLocalJson(remoteData, rootFolder);
  }