Octokit: ПОМЕСТИТЬ / репозитории/{владелец}/{репозиторий}/содержимое/{путь} статус: 404

#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. «другой репозиторий» — это разветвленный репозиторий в моей учетной записи.