Auto: Ermitteln Sie die Ursache für die automatische Ausführung von spawnSync /bin/sh E2BIG

Erstellt am 12. Juni 2020  ·  6Kommentare  ·  Quelle: intuit/auto

Beschreibe den Fehler

Derzeit schlägt mein neuestes Build beim Release-Schritt mit einem E2BIG- Fehler fehl. Ich habe einige Nachforschungen angestellt und festgestellt, dass dies an einigen Gründen liegen kann, z. B. an vielen Befehlsargumenten (scheint hier nicht der Fall zu sein) oder zu großen Texten.

Ich habe das Gefühl, dass es letzteres sein könnte, aber ich bin mir nicht sicher, wie ich das Problem beheben soll.

Ich werde eine vorübergehende Lösung versuchen und meine Auto-Exec- Zeilen kommentieren, aber alle Vorschläge sind willkommen!

Fortpflanzen

Versuche das jetzt herauszufinden.

Erwartetes Verhalten

Erwähnen Sie entweder die problematische Datei oder geben Sie keinen Fehler aus

Umweltinformationen:

Gitlab CI & Local (Arch-Linux-Maschine)

Zusätzlicher Kontext

Ich glaube nicht, dass das unbedingt an der Automatik liegt. Höchstwahrscheinlich ein Spawn-Problem, ich dachte nur, es wäre hilfreich, hier für jeden zu posten, der in Zukunft auf ein ähnliches Problem stößt, und Ideen zur Fehlersuche zu sammeln.

bug hacktoberfest

Hilfreichster Kommentar

Eine Lösung könnte darin bestehen, die args irgendwo auf der Festplatte zu speichern und den Befehl von dort ziehen zu lassen, anstatt eine env var. Aber das ist eine ziemlich große Breaking Change für das Plugin

Um dich zu entsperren, macht dieses Plugin dasselbe

const { SEMVER, execPromise, getCurrentBranch } = require("@auto-it/core");

module.exports = class NextCherryPickPlugin {
  constructor() {
    this.name = "update docs";
  }

  /**
   * Setup the plugin
   *
   * <strong i="7">@param</strong> {import('@auto-canary/core').default} auto
   */
  apply(auto) {
    auto.hooks.beforeCommitChangelog.tapPromise(this.name, async (config) => {
      await execPromise("yarn", ["lint:doc:fix"]);
      await execPromise("git", ["add", "."]);
    });
  }
};

Alle 6 Kommentare

Ich denke, dass dies ein fataler Fehler im exec Plugin sein könnte.

E2BIG bedeutet, dass der Aufruf von execSync zu viele Argumente enthält. Ich bin mir ziemlich sicher, dass die Argumente, über die es spricht, nur die ganzen Hook-Informationen sind, die wir durch env-Variablen ( $ARG0 ) übergeben.

Ich bin mir nicht sicher, ob wir das überhaupt beheben können. Möglicherweise müssen Sie diese Einschränkung dokumentieren und möglicherweise sogar eine Option hinzufügen, um auf die Weitergabe der Kontextinformationen zu verzichten.

Eine Lösung könnte darin bestehen, die args irgendwo auf der Festplatte zu speichern und den Befehl von dort ziehen zu lassen, anstatt eine env var. Aber das ist eine ziemlich große Breaking Change für das Plugin

Um dich zu entsperren, macht dieses Plugin dasselbe

const { SEMVER, execPromise, getCurrentBranch } = require("@auto-it/core");

module.exports = class NextCherryPickPlugin {
  constructor() {
    this.name = "update docs";
  }

  /**
   * Setup the plugin
   *
   * <strong i="7">@param</strong> {import('@auto-canary/core').default} auto
   */
  apply(auto) {
    auto.hooks.beforeCommitChangelog.tapPromise(this.name, async (config) => {
      await execPromise("yarn", ["lint:doc:fix"]);
      await execPromise("git", ["add", "."]);
    });
  }
};

Wenn Sie eine Lösung für E2BIG finden, wäre das großartig! (oder jeder andere, der dieses Problem sieht)

Ich werde auf jeden Fall darüber nachdenken, es sollte eine Möglichkeit geben, das zu umgehen. Vielen Dank!

Ich sehe in der execSpawn-Args-Liste, dass wir process.env vollständig über den Auto-Kontext übergeben. Vielleicht könnte die Option, die wir hinzufügen, angeben, dass nur autospezifische env-Variablen übergeben werden?

Ich (ein interessierter Zuschauer) befürworte von ganzem Herzen die Lösung "Args in einer Datei speichern". Ja, es ist eine bahnbrechende Veränderung, aber es ist eine bahnbrechende Veränderung, die Sie brauchen .

@hipstersmoothie

Um dich zu entsperren, macht dieses Plugin dasselbe

Um das klarzustellen, speichere ich es einfach in meinem (Nicht-Node/NPM/TypeScript-) Repository und setze "plugins": ["path/to/file"] in meiner Konfigurationsdatei, oder steckt mehr dahinter?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen