Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document how to clone with a PAT as a read-only action #779

Open
Gby56 opened this issue Apr 22, 2022 · 14 comments · May be fixed by #989
Open

Document how to clone with a PAT as a read-only action #779

Gby56 opened this issue Apr 22, 2022 · 14 comments · May be fixed by #989

Comments

@Gby56
Copy link

Gby56 commented Apr 22, 2022

I'm struggling to understand how I could simply clone repositories in an action, without using deploy keys because they have to be added in each repository to work.
PAT permissions are really not user-friendly, and I'd just like to have a simple read:repository permission to have the right to clone a repository's code.
I'm hitting the bug for cloning with a token defined: remote: Write access to repository not granted. but I don't care about write access to that repository, with my PAT.
Is this something possible with a PAT that can only clone and not push ?

@Gby56
Copy link
Author

Gby56 commented Apr 22, 2022

FYI: the documentation simply states:
" # We recommend using a service account with the least permissions necessary. Also
# when generating a new PAT, select the least scopes necessary."
This is extremely vague, good PAT configurations should be given for common use cases, and I expect pure read-only cloning to be a big one

@Gby56
Copy link
Author

Gby56 commented Apr 22, 2022

it looks like it requires to give the full "repo" scope, and not just repo:status, repo_deployment, public_repo, repo:invite, security_events ?

@matheo-lucak
Copy link

Hello,

I'm facing the exact same issue.

I want to give the least permission (Read only on public and private repository) for an action using a PAT.
But it only works with the full repo scope which gives a lot more.

Thanks

@mifi
Copy link

mifi commented Oct 25, 2022

After searching a bit I found that a basic minimal setup would be to use the same set of (restricted) permissions as the GITHUB_TOKEN gives.

It means we can create a "fine-grained personal access token" with the content and metadata permissions.

@mifi mifi linked a pull request Oct 25, 2022 that will close this issue
@twistedpair
Copy link

twistedpair commented Oct 27, 2022

@mifi , is that content: read and metadata: read?

I'm seeing the same problem with fine grained PATs and @actions/checkout@v3

When I use a FG PAT with content: read and metadata: read, and give the PAT's user read access to the given repo, I still see the remote: Write access to repository not granted. error in GitHub Actions.

Why do we need write access to do a read operation?

@mifi
Copy link

mifi commented Oct 27, 2022

@mifi , is that content: read and metadata: read?

correct. that's what worked for me. I only do a checkout though, nothing else fancy

@NorseGaud
Copy link

@mifi , is that content: read and metadata: read?

I'm seeing the same problem with fine grained PATs and @actions/checkout@v3

When I use a FG PAT with content: read and metadata: read, and give the PAT's user read access to the given repo, I still see the remote: Write access to repository not granted. error in GitHub Actions.

Why do we need write access to do a read operation?

I even tried with full read + write for every permission and I still get that error. Are you by chance specifying a specific ref? and is the repo private?

@mifi
Copy link

mifi commented Nov 2, 2022

Clarification: I'm using this for a submodule which is a private repo.

$ git submodule
COMMIT_HASH_REDACTED assets (heads/main)

Here's my workflow:

name: Test

on:
  push:

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
          token: ${{ secrets.GH_PAT }}

      - uses: actions/setup-node@v3
        with:
          node-version: 16
          cache: 'yarn'

      - run: yarn install --frozen-lockfile
      - ...

@NorseGaud
Copy link

I was able to get around this problem with classic tokens with "repo" permission. Unsure what's wrong with Fine-grained, but they are technically "Beta".

@twistedpair
Copy link

+1 on @NorseGaud 's situation.

I cannot get a checkout of a private repo as a submodule using FG PATs. Works fine with classic PATs and "Repo" permission.

I wonder if this could have to do with the additional Organization settings recently added to allow/block/require approval for FG PATs in organizations? I set FG PATs to be allowed in my org, but I still get these "remote: Write access to repository not granted. " errors when trying to do read operations with this action.

@igor-zmitrovich
Copy link

Same issue as @NorseGaud and @twistedpair have. Not able to get a checkout of private organization's repo despite having permission in FG PAT.

@hermanbanken
Copy link

https://stackoverflow.com/questions/42148841/github-clone-with-oauth-access-token/66156992#66156992

Apparently you need to set the username to oauth2. For me it isn't working, but maybe this works for you.

@fkromer
Copy link

fkromer commented Feb 23, 2023

Today I've created and configured a fine grained PAT on a GitHub organization level successfully. The only required permissions are read access to code and metadata. This issue seems to be resolved.

image

Setting the token value as GH_PAT in the repository secrets does the job.

      - uses: actions/checkout@v3
        with:
          submodules: true
          token: ${{ secrets.GH_PAT }}

@codezninja
Copy link

So just leaving this here. I had the same issue when trying to checkout a private org repo in my workflow. I was using the latest actions/checkout@v4. I create a FG token on my user and it was throwing the write error and it only had read access to content & metadata.

I then found out that at the org level settings I had to enable FG permissions cause by default FG tokens do not have access to org repos.

This way I was able to create an FG for that organization under the resources with just content and metadata read-only permissions

This is the comment that helped me get there https://github.com/orgs/community/discussions/40910#discussioncomment-4454056

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

9 participants