Auto: `auto shipit` verwendet einen falschen Token/Benutzer, um Commits in Git zu pushen

Erstellt am 6. MĂ€rz 2020  Â·  17Kommentare  Â·  Quelle: intuit/auto

ZunĂ€chst einmal vielen Dank fĂŒr die Veröffentlichung von Auto, es ist sehr angenehm zu verwenden und die Verhinderung von Commit Message Bike-Shorting ist ein GlĂŒcksfall!

Beschreibe den Fehler

Es sieht so aus, als ob auto shipit GH_TOKEN , um seinen Push an unser privates Repository und unsere Organisation zu authentifizieren:

npm notice integrity:     sha512-kXkHqsVqSmGJl[...]cfW+F0SWxcjBg==
npm notice total files:   57                                      
npm notice 

Error: Running command 'git' with args [push, --follow-tags, --set-upstream, https://github.com/COMPANY/REPO, master] failed

remote: error: GH006: Protected branch update failed for refs/heads/master.        
remote: error: At least 1 approving review is required by reviewers with write access.        
To https://github.com/finanzcheck/traversal-editor
 * [new tag]         v0.6.5 -> v0.6.5
 ! [remote rejected] master -> master (protected branch hook declined)
error: failed to push some refs to 'https://github.com/COMPANY/REPO'

    at ChildProcess.<anonymous> (/home/runner/work/REPO/REPO/node_modules/@auto-it/core/dist/utils/exec-promise.js:49:24)
    at ChildProcess.emit (events.js:311:20)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
##[error]Process completed with exit code 1.

Wir verwenden das Token eines Bot-Benutzers als GH_TOKEN , NPM_TOKEN und NODE_AUTH_TOKEN mit den richtigen GĂŒltigkeitsbereichen und es ist ein Administrator des Repositorys. StatusprĂŒfungen und ÜberprĂŒfungsanforderungen scheinen jedoch weiterhin zu gelten, unabhĂ€ngig vom Wert von "Administratoren einbeziehen" in den ZweigbeschrĂ€nkungen.

Wir haben ĂŒberprĂŒft, dass der Bot-Benutzer Commits direkt an den Master pushen kann. Wir haben auch versucht, Token von zwei Entwicklern zu verwenden, und sind auf das gleiche Problem gestoßen.

Interessantes Detail, der Github-Workflow wird "korrekt" ausgefĂŒhrt, wenn direkt auf master . Es schlĂ€gt immer noch fehl, Commits zu pushen, aber das Skript gibt keinen Fehler aus:

npm notice 
+ @COMPANY/[email protected]
remote: error: GH006: Protected branch update failed for refs/heads/master.        
remote: error: At least 1 approving review is required by reviewers with write access.        
To https://github.com/COMPANY/REPO.git
 * [new tag]         v0.6.2 -> v0.6.2
 ! [remote rejected] master -> master (protected branch hook declined)
error: failed to push some refs to '***github.com/COMPANY/REPO.git'
â„č  info      Current "Latest Release" on Github: v0.6.1
â„č  info      Using release notes:
#### ⚠  Pushed to `master`

- COMMIT

#### Authors: 1

- AUTHOR
â„č  info      Releasing v0.6.2 to GitHub.

auto shipit funktioniert gut fĂŒr PRs, was seltsam ist, da der Github-Workflow identisch ist, mit Ausnahme einiger if-Bedingungen, die auf Pr-Labels basieren.

Reproduzieren

  1. ÜberprĂŒfungseinschrĂ€nkungen und StatusprĂŒfungen fĂŒr Filiale aktivieren
  2. Filiale drĂŒcken und PR öffnen
  3. FĂŒhren Sie auto shipit auf PR . aus
  4. Akzeptieren
  5. auto shipit auf dem Master ausfĂŒhren -> schlĂ€gt fehl

  6. Direkt zum Master drĂŒcken

  7. FĂŒhren Sie auto shipit -> funktioniert-ish, der Push schlĂ€gt immer noch fehl, aber das Skript schlĂ€gt nicht fehl

Erwartetes Verhalten

Push schlÀgt nicht fehl

Screenshots

FĂŒgen Sie gegebenenfalls Screenshots hinzu, um Ihr Problem zu erklĂ€ren.

Umweltinformationen:

Bitte fĂŒhren Sie `npx auto info` aus und geben Sie die Ergebnisse in den folgenden Abschnitt ein
Environment Information:

"auto" version: v9.15.2
"git"  version: v2.25.0
"node" version: v13.8.0

Project Information:

✔ Repository:      COMPANY/REPO
✔ Author Name:     Robert Wawrzyniak
✔ Author Email:    [redacted]
✔ Current Version: v0.6.6
✔ Latest Release:  v0.6.2

✔ Labels configured on GitHub project

GitHub Token Information:

✔ Token:            [Token starting with 52ba]
✔ Repo Permission:  admin
✔ User:             thuringia
✔ API:              https://api.github.com
✔ Enabled Scopes:   gist, notifications, read:packages, repo, write:packages
✔ Rate Limit:       4997/5000

✹  Done in 42.03s.
Time: 0h:00m:43s

ZusÀtzlicher Kontext

Hier ist der Github-Workflow, der auto ausfĂŒhrt:

name: Release on master

on:
  push:
    branches:
      - master

jobs:
  release:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message , 'ci skip') && !contains(github.event.head_commit.message, 'skip ci')"
    steps:
      - uses: actions/checkout<strong i="9">@v2</strong>
      - run: git fetch --prune --unshallow --tags

      - uses: actions/setup-node<strong i="10">@v1</strong>
        with:
          node-version: "12.x"
          registry-url: "https://npm.pkg.github.com/"
          scope: "@COMPANY"

      - id: yarn-cache-dir
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - uses: actions/cache<strong i="11">@v1</strong>
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - run: yarn install
        env:
          NODE_AUTH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}

      - uses: actions/cache<strong i="12">@v1</strong>
        with:
          path: ${{ steps.yarn-cache-dir.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: Create Release
        env:
          GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
        run: |
          yarn install --frozen-lockfile
          yarn build:library
          yarn autorelease
        # yarn build: library runs babel
        # yarn autorelease is just "auto shipit" 
bug released

Alle 17 Kommentare

Hat das schon mal funktioniert? Ich habe vor kurzem an Code herumgefummelt, der dies bewirken könnte.

BTW Danke fĂŒr die tolle Problembeschreibung!

Ich bin mir nicht sicher, ob das jemals funktioniert hat, um ehrlich zu sein

Ich habe das letzte Jahr oder so mit Gitlab gearbeitet
 Also andere Regeln fĂŒr PRs und so

Lass es mich wissen, wenn ich dir beim Debuggen helfen oder dich anderweitig unterstĂŒtzen kann

Nach einigem Ausprobieren konnte ich mögliche Grundursachen weiter klÀren, eine könnte auto -bezogen sein, die andere könnte ein Problem mit Github selbst sein.

Wir haben es geschafft, mit einem Àhnlichen Trick wie in #945 erwÀhnt zu pushen, um das Git origin zu modifizieren.
Es funktionierte jedoch immer noch nicht ... es sei denn, wir deaktivieren die Anforderung fĂŒr PR-Genehmigungen im Zweigschutz ... Was kein Problem sein sollte, da wir einen Benutzer auf Administratorebene verwenden, aber hier sind wir.

_Korrektur:_ Es funktioniert nicht mehr, wenn StatusprĂŒfungen erforderlich sind. Der Schutz von Github-Zweigen ist definitiv ein Problem. Ich muss PR-Genehmigungen und StatusprĂŒfungen vorerst deaktivieren

Das Git origin könnte von auto mit GH_TOKEN adressiert werden, um seinen Push zu authentifizieren, vielleicht hinter einem Feature-Flag oder so. Der andere erfordert möglicherweise einige Dokumentation und Arbeiten rund um Github.

Glauben Sie, dass eine solche Einstellung fĂŒr auto eine gute Idee wĂ€re?

Als Referenz können wir mit dieser URL richtig pushen:
git remote add origin "https://[email protected]/COMPANY/REPO"

@hipstersmoothie Ich

Haben Sie dies mit aktivierten Verzweigungsvorhersagen getestet? Ich werde irgendwie Ă€ngstlich, wenn ich dieses MenĂŒ anfasse 😆

Ich habe nicht mit aktiviertem Verzweigungsschutz getestet. Aber wenn es aus diesem Grund fehlschlagen sollte, mĂŒssten Sie meiner Meinung nach nur Ihr eigenes GH_TOKEN mit repo Berechtigung hinzufĂŒgen

Scheint ein Problem mit GitHub-Aktionen zu sein. https://github.community/t5/GitHub-Actions/Allowing-github-actions-bot-to-push-to-protected-branch/td-p/34367

https://github.com/semantic-release/github/issues/175#issuecomment -527224825

Anscheinend sind die Lösungen:

  1. Deaktivieren Sie die Option Administratoren einschließen https://github.com/semantic-release/github/issues/175#issuecomment -527224825 (hat nicht funktioniert 😱)
  2. Erstellen Sie ein GH_TOKEN auf einem Administratorkonto mit repo Berechtigungen und verwenden Sie dieses anstelle von GH_TOKEN

Es ist bedauerlich, dass Sie den Bot nicht als Administrator hinzufĂŒgen können.

Ich habe große Probleme, alles zum Laufen zu bringen :(

Hmm seltsamerweise kann ich checkoutv1 zum Laufen bringen, aber nicht checkout v2

funktioniert

      - uses: actions/checkout<strong i="7">@v1</strong>

      - name: Prepare repository
        run: git checkout "${GITHUB_REF:11}"

funktioniert nicht

      - uses: actions/checkout<strong i="12">@v2</strong>

      - name: Prepare repository
        run: git fetch --prune --unshallow

@thuringia Kannst du v9.19.3 ausprobieren und deiner Aktion Folgendes hinzufĂŒgen?

    steps:
      - uses: actions/checkout<strong i="8">@v2</strong>
        with:
          # Make sure to get all the commits
          fetch-depth: 0

      - name: Prepare repository
        # Fetch the rest of the git info (tags)
        run: git fetch --prune

      - name: Unset header
        # checkout<strong i="9">@v2</strong> adds a header that makes branch protection report errors ):
        run: git config --local --unset http.https://github.com/.extraheader

@hipstersmoothie Alles funktioniert jetzt 😃

Dieser zusÀtzliche Header ist ziemlich interessant, ich habe ihn nicht viel erwÀhnt gesehen.

Ein Nebeneffekt des Entfernens des Headers scheint zu sein, dass das Pushen ohne explizite Anmeldeinformationen nicht mehr funktioniert:
fatal: could not read Username for 'https://github.com': No such device or address

Das Ersetzen des grĂ¶ĂŸten Teils des Release-Skripts durch auto shipit behebt dies jedoch:

export PATH=$(npm bin):$PATH

VERSION=`auto version`

## Support for label 'skip-release'
if [ ! -z "$VERSION" ]; then
  yarn auto shipit
fi

Vielen Dank fĂŒr die schnelle Hilfe!

auto shipit fĂŒhrt diese VersionsprĂŒfung fĂŒr Sie durch. Sie mĂŒssen also nur auto shipit ausfĂŒhren 🎉 Kein Skript erforderlich


:rocket: Ausgabe wurde in v9.19.4 :rocket:

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen