Bjorn Olav Jalborg
En Github Actions, intento hacer algunos cambios en un repositorio diferente al repositorio al que pertenece el flujo de trabajo. Ver este código:
- name: Generate API module
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git clone https://user:$GITHUB_TOKEN@github.com/owner/my-repo # This works
cd my-repo
git config user.name "user"
git config user.email "dev@example.com"
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:$GITHUB_TOKEN@github.com/owner/my-repo api-version-$COMMIT # This does not work either
Puedo clonar el repositorio propietario/repositorio sin problemas. Puedo pagar la nueva rama, agregar el archivo y confirmar los cambios. El problema ocurre cuando trato de impulsar los cambios aguas arriba. Eso no funciona en absoluto, y me sale este error:
remote: Repository not found.
fatal: repository 'https://github.com/owner/my-repo/' not found
Supongo que tiene algo que ver con la autenticación. Él GITHUB_TOKEN
es un token de acceso personal y tiene todos los permisos posibles.
¿Lo que da?
Hay una configuración extra para pasar en silencio $GITHUB_TOKEN
en AUTHORIZATION
header, que interactúa mal con otro repo git auth.
Debe eliminarlo antes de pasar a otro repositorio:
git config --unset-all http.https://github.com/.extraheader
Solución tomada de otro error de autenticación de subproceso SO al intentar copiar un repositorio con Github Actions
No estoy seguro si pudiste resolver eso todavía, pero pensé que publicaré uno posible solución para futuras personas que se encuentren con el mismo problema, al igual que yo. Tuve el mismo problema, que finalmente resultó ser la falta de permisos de edición en el repositorio al que estaba tratando de empujar. Desafortunadamente, el mensaje de error de GitHub (remote: Repository not found.
) fue realmente inútil al señalar el problema real (supongo que es una cuestión de ofuscación por motivos de seguridad, pero entonces, si esa cuenta ya pudo clone
el repositorio y tengo acceso de lectura a él, ¿cuál es el punto de ofuscación? Esto obviamente es un problema de autorización para un usuario ya autenticado 🤷🏻♂️). De cualquier manera, pude resolver esto por mi parte al obtener acceso de escritura al repositorio. Después de obtener los permisos necesarios, pude acceder con éxito a ese repositorio.
-
Nunca lo descubrí. Creé un monorepo para que funcione.
–Bjorn Olav Jalborg
8 de noviembre de 2021 a las 8:32
GITHUB_TOKEN
es también una variable del sistema, consulte el documento aquí. Es posible que se encuentre con algún conflicto entre su secreto y el del sistema. Cambiar el nombre de su secreto a otra cosa podría funcionar.
-
Gracias, pero lamentablemente no. Mismo resultado si la variable tiene otro nombre.
–Bjorn Olav Jalborg
17 oct 2020 a las 10:15
-
¿Estás seguro de que el token tiene todos los permisos necesarios?
– Davide D´Alto
4 de diciembre de 2020 a las 17:35
-
¡Positivo, lo recreé varias veces! Nunca me di cuenta de lo que estaba mal. Lo que terminé haciendo fue fusionar todo el código en un repositorio.
–Bjorn Olav Jalborg
1 de febrero de 2021 a las 19:55
necesita crear un token de acceso privado de GitHub con permisos para repositorios y almacenarlo en un secreto, digamos ACTIONS_GITHUB_TOKEN
en el repositorio en el que está ejecutando su flujo de trabajo/acción.
luego pase este token a la acción de pago:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
repository: <repo name>
ref: 'master'
token: ${{ secrets.ACTIONS_GITHUB_TOKEN }}
- name: setup git config
run: |
git config user.name "GitHub Actions Bot"
git config user.email "<>"
- <make changes and commit >
- run: git push origin master
# .github/workflows/deploy.yml
name: Deploy GitHub Pages to external repository
on:
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
# push:
# branches: [ "main" ]
push:
tags:
- "*"
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: yarn
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Build website
run: yarn build
- name: Deploy to external repository
uses: cpina/github-action-push-to-another-repository@main
env:
# 🏗️ <internal repository>, run GitHub Action.
# 🎁 <external repository>, receiving Artifacts.
#
# Way 1: using Personal Access Token
# @see https://cpina.github.io/push-to-another-repository-docs/setup-using-personal-access-token.html#setup-personal-access-token
# 1.1 Generate Personal Access Token: <external repository>/<Avatar>/Settings/Developer settings/Personal access tokens/Generate new token
# Select `No expiration` and Check `✅️ repo Full control of private repositories`, Generate and then Copy the Token
# 1.2 Then make the token available to the GitHub Action: <internal repository>/Settings/Secrets/Actions/New repository secret
# Name: EXTERNAL_REPOSITORY_PERSONAL_ACCESS_TOKEN, Value Paste the Token
API_TOKEN_GITHUB: ${{ secrets.EXTERNAL_REPOSITORY_PERSONAL_ACCESS_TOKEN }}
# Way 2: using SSH deploy keys
# @see https://cpina.github.io/push-to-another-repository-docs/setup-using-ssh-deploy-keys.html#setup-ssh-deploy-keys
# 2.1 Generate an SSH key in terminal (Leave the passphrase empty)
# 2.2 Add public key in the external repository: <external repository>/Settings/Deploy keys/Add deploy key
# Name: DEPLOY_PUBLIC_KEY, Value Paste the public key. Enable "✅️ Allow write access"
# 2.3 Add private key in the source repository: <external repository>/Settings/Secrets/Actions/New repository secret
# Name: DEPLOY_PRIVATE_KEY, Value Paste the private key.
# SSH_DEPLOY_KEY: ${{ secrets.DEPLOY_PRIVATE_KEY }}
with:
# GitHub Action output files
source-directory: public/
destination-github-username: <external org/user name>
destination-repository-name: <external repository>
user-email: <your email>
# It defaults to `main`
target-branch: "gh-pages"
- name: Test get variable exported by push-to-another-repository
run: echo $DESTINATION_CLONED_DIRECTORY
Александр Савин
Hay una acción para esto:
name: Push File(or Dir) to another repository
on: push
jobs:
copy-file:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Push to another repo
uses: dmnemec/copy_file_to_another_repo_action@main
env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
with:
source_file: 'test2.md'
destination_repo: 'another_repo/release-test'
destination_folder: 'test-dir' # optional
user_email: 'example@email.com'# your email
user_name: 'dmnemec' # your login
commit_message: 'A custom message for the commit'