Wie kann man in Github-Aktionen in ein anderes Repository pushen?
Lesezeit: 5 Minuten
Bjørn Olav Jalborg
In Github Actions versuche ich, einige Änderungen an einem anderen Repo als dem Repository vorzunehmen, zu dem der Workflow gehört. Siehe diesen Code:
- name: Generate API module
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git clone https://user:[email protected]/owner/my-repo # This works
cd my-repo
git config user.name "user"
git config user.email "[email protected]"
git checkout -b api-version-$COMMIT
touch new-file.sh
git add new-file.sh
git commit -m "Add new file"
git remote -v # Prints:
# origin ***github.com/owner/my-repo.git (fetch)
# origin ***github.com/owner/my-repo.git (push)
git push --set-upstream origin api-version-$COMMIT # This does not work
git push --set-upstream https://user:[email protected]/owner/my-repo api-version-$COMMIT # This does not work either
Ich kann das Owner/Repo-Repository problemlos klonen. Ich kann den neuen Zweig auschecken, die Datei hinzufügen und die Änderungen übernehmen. Das Problem tritt auf, wenn ich versuche, die Änderungen in den Upstream zu verschieben. Das funktioniert überhaupt nicht und ich bekomme diesen Fehler:
remote: Repository not found.
fatal: repository 'https://github.com/owner/my-repo/' not found
Ich vermute nur, dass es etwas mit der Authentifizierung zu tun hat. Die GITHUB_TOKEN ist ein persönliches Zugriffstoken und verfügt über alle möglichen Berechtigungen.
Was gibt?
Es gibt eine zusätzliche Konfiguration, die stillschweigend übergeben werden kann $GITHUB_TOKEN in AUTHORIZATION Header, der schlecht mit einem anderen Repo git auth interagiert.
Sie müssen es entfernen, bevor Sie es in ein anderes Repo verschieben:
Lösung aus einem anderen SO-Thread-Authentifizierungsfehler beim Versuch, ein Repo mit Github-Aktionen zu kopieren
Ich bin mir nicht sicher, ob Sie das schon lösen konnten, aber ich dachte, ich werde es posten einer potenzielle Lösung für zukünftige Leute, die auf dasselbe Problem stoßen, so wie ich. Ich hatte das gleiche Problem, das sich schließlich als fehlende Bearbeitungsberechtigungen für das Repo herausstellte, auf das ich übertragen wollte. Leider ist die Fehlermeldung von GitHub (remote: Repository not found.) war wirklich nicht hilfreich, um auf das eigentliche Problem hinzuweisen (ich nehme an, es ist eine Frage der Verschleierung aus Sicherheitsgründen, aber dann – wenn dieses Konto bereits dazu in der Lage war clone das Repo und haben Lesezugriff darauf – was ist der Sinn der Verschleierung? Dies ist offensichtlich ein Autorisierungsproblem für einen bereits authentifizierten Benutzer 🤷🏻♂️). So oder so – ich konnte das Problem lösen, indem ich Schreibzugriff auf das Repo erhielt. Nachdem ich die erforderlichen Berechtigungen erhalten hatte, konnte ich erfolgreich in dieses Repo pushen.
Habe es nie herausgefunden. Ich habe ein Monorepo erstellt, damit es funktioniert.
– Björn Olav Jalborg
8. November 2021 um 8:32 Uhr
GITHUB_TOKEN ist auch eine Systemvariable, siehe doc hier. Möglicherweise stoßen Sie auf einen Konflikt zwischen Ihrem Geheimnis und dem System. Das Umbenennen Ihres Geheimnisses in etwas anderes könnte funktionieren.
Danke, aber leider nicht. Gleiches Ergebnis, wenn die Variable einen anderen Namen hat.
– Björn Olav Jalborg
17. Oktober 2020 um 10:15 Uhr
Sind Sie sicher, dass das Token über alle erforderlichen Berechtigungen verfügt?
– Davide D’Alto
4. Dezember 2020 um 17:35 Uhr
Positiv, mehrfach nachgebaut! Ich habe nie herausgefunden, was falsch war. Am Ende habe ich den gesamten Code in einem Repo zusammengeführt.
– Björn Olav Jalborg
1. Februar 2021 um 19:55 Uhr
Sie müssen ein GitHub Private Access Token mit Berechtigungen für Repositories erstellen und es in einem Geheimnis speichern, sagen wir mal ACTIONS_GITHUB_TOKEN in dem Repository, in dem Sie Ihren Workflow/Ihre Aktion ausführen.
Übergeben Sie dann dieses Token an die Checkout-Aktion: