Skip to content

[Schema Inaccuracy] Create Or Update A Repository Secret Requires key_id #419

Open
@AjkayAlan

Description

@AjkayAlan

Schema Inaccuracy

Create or Update A Repository Secret currently doesn't require key_id based on the docs. However, the API requires it.

Expected

key_id should be marked as required.

Reproduction Steps

Request without key_id (fails):

Octokit:

const response = await this.makeRequest('PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}', {
  owner: "myorg",
  repo: "myrepo",
  secret_name: "mysecret",
  encrypted_value: "myencryptedvalue",
});

The error:

{
    "errorType": "HttpError",
    "errorMessage": "Invalid request.\n\n\"key_id\" wasn't supplied.",
    "code": 422,
    "name": "HttpError",
    "status": 422,
    "response": {
        "url": "https://api.github.com/repos/myorg/myrepo/actions/secrets/mysecret",
        "status": 422,
        "data": {
            "message": "Invalid request.\n\n\"key_id\" wasn't supplied.",
            "documentation_url": "https://docs.github.com/rest/reference/actions#create-or-update-a-repository-secret"
        }
    },
    "request": {
        "method": "PUT",
        "url": "https://api.github.com/repos/myorg/myrepo/actions/secrets/mysecret",
        "headers": {
            "accept": "application/vnd.github.v3+json",
            "user-agent": "octokit-request.js/5.6.0 Node.js/14.17.0 (linux; x64)",
            "authorization": "token [REDACTED]",
            "content-type": "application/json; charset=utf-8"
        },
        "body": "{\"encrypted_value\":\"TheEncryptedValueHere"}",
        "request": {}
    },
    "stack": [
        "HttpError: Invalid request.",
        "",
        "\"key_id\" wasn't supplied.",
        "    at /var/task/index.js:3:35066",
        "    at processTicksAndRejections (internal/process/task_queues.js:95:5)",
        "    at async XI (/var/task/index.js:5:53816)",
        "    at async DA.addSecretToRepo (/var/task/index.js:100:105846)",
        "    at async Promise.all (index 0)",
        "    at async DA.setSecretsOnRepo (/var/task/index.js:100:105423)",
        "    at async bL (/var/task/index.js:100:106485)",
        "    at async QOe (/var/task/index.js:101:1623)",
        "    at async Runtime.GOe [as handler] (/var/task/index.js:101:1073)"
    ]
}

However, the below request will work:

const keyResponse = await this.makeRequest('GET /repos/{owner}/{repo}/actions/secrets/public-key', {
  owner: "myorg",
  repo: "myrepo",
});

const response = await this.makeRequest('PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}', {
  owner: "myorg",
  repo: "myrepo",
  secret_name: "mysecret",
  encrypted_value: "myencryptedvalue",
  key_id: keyResponse.data.key_id,
});

Related

octokit/request.js#403

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions