#github-api #github-actions
#github-api #github-действия
Вопрос:
Я работаю над рабочим процессом GitHub, который обновляет содержимое в другом репозитории.
рабочий процесс:
issues:
types: [opened, reopened]
jobs:
forking:
name: 'Test'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Forking
uses: ./.github/actions/fork
env:
jump2header_token: ${{ secrets.JUMP2HEADER_TOKEN }}
# - name: Sleep for 30 seconds
# uses: jakejarvis/wait-action@master
# with:
# time: '30s'
- name: Update file
uses: ./.github/actions/update_file
env:
jump2header_token: ${{ secrets.JUMP2HEADER_TOKEN } # "x-oauth-scopes": "repo"
import { context, getOctokit } from "@actions/github";
const octokit = getOctokit(process.env.jump2header_token || "");
const response = await octokit.request(
`PUT /repos/{owner}/{repo}/contents/{path}`,
{
owner,
repo,
path: file,
message: generateCommitMessage(),
content,
sha,
branch,
}
);
Это ошибка, которую я получаю в рабочем процессе действий:
{
"name": "HttpError",
"status": 404,
"headers": {
"access-control-allow-origin": "*",
"access-control-expose-headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset",
"connection": "close",
"content-encoding": "gzip",
"content-security-policy": "default-src 'none'",
"content-type": "application/json; charset=utf-8",
"date": "Sun, 13 Dec 2020 18:02:20 GMT",
"referrer-policy": "origin-when-cross-origin, strict-origin-when-cross-origin",
"server": "GitHub.com",
"status": "404 Not Found",
"strict-transport-security": "max-age=31536000; includeSubdomains; preload",
"transfer-encoding": "chunked",
"vary": "Accept-Encoding, Accept, X-Requested-With",
"x-accepted-oauth-scopes": "",
"x-content-type-options": "nosniff",
"x-frame-options": "deny",
"x-github-media-type": "github.v3; format=json",
"x-github-request-id": "0403:379D:747844:12E9DA7:5FD6572B",
"x-oauth-scopes": "repo",
"x-ratelimit-limit": "5000",
"x-ratelimit-remaining": "4994",
"x-ratelimit-reset": "1607885212",
"x-ratelimit-used": "6",
"x-xss-protection": "1; mode=block"
},
"request": {
"method": "PUT",
"url": "https://api.github.com/repos/strdr4605/TMPS/contents/README.md",
"headers": {
"accept": "application/vnd.github.v3 json",
"user-agent": "octokit-core.js/3.2.4 Node.js/12.13.1 (linux; x64)",
"authorization": "token [REDACTED]",
"content-type": "application/json; charset=utf-8"
},
"body": "{"message":"docs: add links to top with jump2header","content":"IyBUTVBTCg==","sha":"e734b6a1805da1b08294715d5ede2761fd4807e5","branch":"jump2header"}",
...
}
Почему ошибка 404, если репозиторий существует: https://api.github.com/repos/strdr4605/TMPS/contents/README.md ?
Правильно ли я делаю обновление?
Ответ №1:
404 обычно означает проблему с аутентификацией: по соображениям безопасности API притворяется, что такого ресурса нет (даже если он существует), когда обнаруживает, что вам не разрешен доступ к нему / обновление.
Действие action-update-file должно требовать токен GitHub для аутентификации
Пример:
name: Resources
on: repository_dispatch
jobs:
resources:
name: Update resources
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- name: Fetch resources
run: ./scripts/fetch-resources.sh
- name: Update resources
uses: test-room-7/action-update-file@v1
with:
file-path: path/to/file
commit-msg: Update resources
github-token: ${{ secrets.GITHUB_TOKEN }}
Комментарии:
1. Разве
jump2header_token: ${{ secrets.JUMP2HEADER_TOKEN } # "x-oauth-scopes": "repo
этого недостаточно?. Также я обновляю другой репозиторий, может быть, это проблема ?!2. @strdr4605 Я не думаю, что это правильный токен в вашем случае.
3. хорошо, попробую
github-token: ${{ secrets.GITHUB_TOKEN }}
позже сегодня и посмотрю, работает ли это. Но у меня такое ощущение, что проблема может быть в обновлении другого репозитория.4. @strdr4605 Если под «другим репозиторием» вы подразумеваете тот, у которого нет доступа на запись, то да, это будет проблемой, независимо от используемого токена.
5. «другой репозиторий» — это разветвленный репозиторий в моей учетной записи.