Dies ist das erste von vier Skripten, die ich gemäß der Systemarchitektur schreiben wollte. Fühlte mich aufgepumpt! Es war ein Schritt in Richtung der Schaffung des „Wiki“-Erlebnisses, das einen Beitrag zu Open Source leistet, ohne eine Schnittstelle zur GitHub-Benutzeroberfläche herzustellen ?.
Was sind das für Skripte?
Dies sind JS-Dateien, die einige verwandte wiederverwendbare Funktionen enthalten, die insbesondere für die Interaktion mit den GitHub-APIs gedacht sind; Sie werden entweder im selben Skript verwendet oder exportiert, um ihre Grundfunktionalität an anderer Stelle im Projekt auszuführen. Sie akzeptieren eine authentifizierte Octokit-Instanz eines Benutzers als Parameter von anderen. Diese Instanz wird verwendet, um Aktionen/Funktionen über die GitHub-APIs im Namen des authentifizierten Benutzers auszuführen.
Die Notwendigkeit, einen Beitragsfluss zu Open Source ohne Schnittstelle zur GitHub-Benutzeroberfläche zu erstellen, bedeutete, dass wir einen Prozess automatisieren mussten – indem wir alle Schritte simulierten, die ein Benutzer unternehmen würde, wenn er über die GitHub-Benutzeroberfläche beitragen würde. Die Schritte sind wie folgt folgt..
- Fork Project Repo
- Erstellen Sie einen Zweig
- Änderungen an der Verzweigung übernehmen (fügen Sie in unserem Fall eine neue mdx-Datei im Verzeichnis src/pages/word/ für ein neues Wort hinzu oder bearbeiten Sie vorhandene)
- Erstellen Sie eine Pull-Anfrage (übermitteln Sie in unserem Fall die Wortänderungen)
Eine Wahrheit, die es wert ist, ausgesprochen zu werden
Ich habe gleich nach dem ersten Commit mit dem Schreiben dieses Skripts begonnen, das war eigentlich die PR Nr. 2, aber es hat während der langen einmonatigen Pause einen Rückschlag erlitten? Ich habe aus dem Projekt übernommen, bevor ich mich wieder an die Arbeit an der Basis-Wörterbuchfunktion gemacht habe.
Das Drehbuch
Die Aufgabe hier bestand darin, „The Fork Script“ zu erstellen – dessen Endziel darin besteht, einen Fork des jargons.dev-Repos auf/von einem Benutzerkonto zu erstellen/zu erhalten. Es sollte alle Funktionen enthalten, die Folgendes tun.
- Überprüfen Sie, ob im Konto eines Benutzers bereits ein Fork von jargons.dev vorhanden ist
- Wenn Fork vorhanden ist
- Überprüfen Sie, ob der Fork mit dem Upstream synchronisiert ist (d. h. mit dem jargons.dev-Repo-Hauptzweig auf dem neuesten Stand ist); WENN NICHT – Aktualisieren Sie den Fork
- Wenn KEIN Fork gefunden wird
- Erstellen Sie den Fork
- Wenn Fork vorhanden ist
Als ich die Aufgabe verstand, „vertiefte“ ich mich direkt in die Arbeit am Drehbuch.
Ich bin bereits sehr an die GitHub-APIs gewöhnt, da ich sie bei meiner täglichen Arbeit an Hearts häufig konsumiere ❤️... Die Fork-Dokumentation von GitHub sah für mich also wie ein Broski aus ?...
Die Schritte
- Ich habe eine Hauptfunktion forkRepository erstellt, die den Haupteinstiegspunkt für die Ausführung der Fork-Funktionalität darstellte – sie führt überall hin
- Ich habe die folgenden Funktionen hinzugefügt, die hauptsächlich als Hilfsfunktionen für die offensichtliche Hauptfunktion forkRepository dienten
- isRepositoryForked – diese Funktion prüft, ob das jargons.dev-Repository bereits auf das Konto des aktuellen authentifizierten Benutzers geforkt wurde
- isRepositoryForkUpdated – um zu überprüfen, ob der Fork (falls gefunden) (in Synchronisierung mit dem Head-Repo) mit dem Haupt-Jargons.dev-Repo auf dem neuesten Stand ist
- updateRepositoryFork – wird verwendet, um das Repository auf den Status des Haupt-(Haupt-)jargons.dev-Repositorys zu aktualisieren (synchronisieren)
- getBranch – ist ein Basisdienstprogramm (zum Zeitpunkt des Schreibens dieses Skripts erforderlich), das zum Abrufen von Branch-/Ref-Details für das jargons.dev-Repo und den Fork des Benutzers verwendet wird, um sie im Vergleich zu verwenden, der im isRepositoryForkUpdated-Helfer durchgeführt wird, um seine Hauptfunktion auszuführen; Es verwendet den Endpunkt GitHub References.
Meine seltsame Annahme
Geht mir durch den Kopf? Als ich dieses Skript schrieb, war das ein Gedanke, an dem ich festhielt, nachdem ich den unten zitierten Absatz in der GitHub Fork-Dokumentation gelesen hatte
Hinweis: Das Forken eines Repositorys erfolgt asynchron. Möglicherweise müssen Sie eine kurze Zeit warten, bevor Sie auf die Git-Objekte zugreifen können. Wenn dies länger als 5 Minuten dauert, wenden Sie sich unbedingt an den GitHub-Support.
Ich habe das falsch verstanden und bin davon ausgegangen, dass wir nur einen Fork-Prozess initiieren, weitermachen und sicher nicht auf ein Antwortobjekt warten können, das die Details des neuen Forks zurückgibt, weil wir es nicht wissen wenn der Fork-Prozess abgeschlossen ist.
Diese Annahme zwang mich dazu, keine Daten von der Hauptfunktion forkRepository zurückzugeben, und ich begann zu diesem Zeitpunkt bereits darüber nachzudenken: Wie bekomme ich die Fork-Details zur Verarbeitung in die nächste Phase des Beitragsprozesses? Hmm, vielleicht verwende ich Webhooks?!?
Es stellte sich heraus, dass ich zu viel darüber nachgedacht hatte? Später wurde mir klar, dass ich tatsächlich Antwortdetails für den Fork erhalten würde, und dies veranlasste mich dazu, eine Folge-PR durchzuführen, um die Rückgabe der vom Fork-Antwortobjekt für die Verwendung erforderlichen Daten anzugehen der Beitragsprozess.
Die PR
Haupt:
Kunststück: „Fork“-Repository-Skript implementieren
#3

Dieser Pull Request implementiert das Fork-Skript; Dieses Skript soll verwendet werden, um das Hauptprojekt-Repository programmgesteuert auf ein Benutzerkonto zu übertragen. Es beherbergt eine Hauptfunktion und andere Hilfsfunktionen, mit denen es einige notwendige Aktionen ausführt, um einen effizienten Repo-Fork-Betrieb sicherzustellen.
Änderungen vorgenommen
- Die Hauptfunktion forkRepository innerhalb des Skripts implementiert; Diese Funktion ist die wichtigste exportierte Funktion, die die Hauptverzweigungsoperation ausführt. Es akzeptiert eine userOctokit-Instanz (ein vom Benutzer authentifiziertes Objekt mit der Berechtigung, im Namen des Benutzers zu handeln) und die Repository-Details des Projekts, d. h. das repoDetails-Objekt, und führt Folgendes aus ...
- Mit der Hilfsfunktion isRepositoryForked wird überprüft, ob das Projekt-Repository bereits auf das Konto des Benutzers geforkt wurde. Dies gibt die Abzweigung von null zurück
- Wenn das Repo bereits geforkt wurde, prüfen wir mithilfe der Hilfsfunktion isRepositoryForkUpdated, ob der Fork aktuell/synchron mit dem Hauptprojekt-Repo ist. Dies gibt die aktualisierte SHA und eine boolesche isUpdated-Eigenschaft zurück, die bestätigt, ob Fork aktuell ist
- Wenn die Gabel nicht auf dem neuesten Stand ist; Anschließend führen wir das Update durch, indem wir es mit der Hilfsfunktion „updateRepositoryFork“ mit dem Hauptprojekt-Repository synchronisieren
- Wenn das Repo aktuell/synchron mit dem Hauptprojekt-Repo ist; wir brechen den Betrieb an dieser Stelle mit einer vorzeitigen Rückkehr ab;
- Wenn das Repo bereits geforkt wurde, prüfen wir mithilfe der Hilfsfunktion isRepositoryForkUpdated, ob der Fork aktuell/synchron mit dem Hauptprojekt-Repo ist. Dies gibt die aktualisierte SHA und eine boolesche isUpdated-Eigenschaft zurück, die bestätigt, ob Fork aktuell ist
- Wenn das Projekt-Repository nicht auf das Konto des Benutzers verzweigt ist; Anschließend initiieren wir einen Fork-Prozess, indem wir den Endpunkt „POST /repos/{owner}/{repo}/forks“ mithilfe der userOctokit-Instanz aufrufen. (Damit wird der Fork-Prozess gestartet, wir wissen nicht genau, wann der Prozess abgeschlossen ist?)
- Mit der Hilfsfunktion isRepositoryForked wird überprüft, ob das Projekt-Repository bereits auf das Konto des Benutzers geforkt wurde. Dies gibt die Abzweigung von null zurück
- Implementieren Sie die folgenden Hilfsfunktionen, die in der Hauptfunktion forkRepository und auch in anderen Hilfsfunktionen verwendet werden
- updateRepositoryFork – wird zum Aktualisieren (Synchronisieren) des Repositorys auf den Status des Haupt-(Haupt-)Repositorys verwendet
- isRepositoryForkUpdated – wird verwendet, um zu überprüfen, ob ein Fork (synchron mit dem Haupt-Repo) mit dem Haupt-Repo auf dem neuesten Stand ist
- getBranch – wird zum Abrufen von Branch-/Ref-Details verwendet
- isRepositoryForked – wird verwendet, um zu überprüfen, ob ein bestimmtes Repo in der Fork-Repo-Liste eines Benutzers vorhanden ist
- getRepoParts zu /lib/utils hinzugefügt; Es handelt sich um eine Dienstprogrammfunktion, die zum Auflösen von repoOwner und repoName aus einem Repository-Vollnamen verwendet wird.
Verwandtes Problem
Löst #2
Screencast/Screenshot
https://github.com/babblebey/jargons.dev/assets/25631971/16221b7e-3c28-4c6c-a1f3-24d583ce7e3a
?
Follow-up:
feat: Repo „fullname“ im Fork-Skript zurückgeben
#29

Diese PR ist eine Folgemaßnahme zu einem fehlenden Schritt in der ersten Implementierung des Fork-Skripts bei #3; Das Fork-Skript konnte kein Repo zurückgeben, das im nächsten Berechnungsschritt verwendet werden kann. Dies lag an einer seltsamen Annahme, die ich bei der ersten Implementierung hatte. ?Siehe meine Annahme unten...
Ich gehe davon aus, dass der Aufruf des Endpunkts „POST /repos/{owner}/{repo}/forks“ lediglich die Initiierung eines Fork-Prozesses gewährleistet, ohne uns überhaupt eine Antwort zuzusichern. Das bedeutet, dass wir nach dem Anruf möglicherweise nicht genau die Antwortdaten erhalten
...aber das stimmte nicht, ich habe herausgefunden, dass tatsächlich eine Antwort.Daten kommt, aber es kann nur einige Zeit dauern und nur in Fällen, in denen das geforkte Repo riesig ist... und im Moment Das Forken des Projekt-Repos erfolgt in weniger als 5 Sekunden.
Änderungen vorgenommen
- Zurückgegebenes Fork-Repo – dies ist ein Repo-Vollnamenswert, der von der isRepositoryForked-Hilfsfunktion zurückgegeben wird; Hiermit gebe ich es als Hauptrückgabewert aus der Ausführung der forkRepository-Funktion zurück, wenn das Repo bereits auf dem Konto eines ausführenden Benutzers gegabelt ist
- Zurückgegebener „response.data.full_name“ – dies ist der vollständige Name eines neu erstellten Fork-Repos; Es handelt sich um einen Wert aus der Antwort auf den Endpunktaufruf „POST /repos/{owner}/{repo}/forks“. Hiermit gebe ich ihn als neu abgestimmten Hauptwert aus der Ausführung der forkRepository-Funktion zurück, wenn im Konto des ausführenden Benutzers noch kein Fork gefunden wurde
- Cherry hat einige Änderungen aus #25 ausgewählt, um sie hier zu verwenden
- f12f25f548a5c5836e9be7d601ed226c5269f5ee
- 436ceea649b67812c0ec1164fde95d443ce556e0
?
Das obige ist der detaillierte Inhalt vonErstellen von jargons.dev [# Das Fork-Skript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)