Getting Error While pushing Changes to my own Public repo through github actions

Viewed 1706

While pushing changes to my own public repo through GitHub actions, I'm getting this error.

remote: Permission to spooky/repo.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/spooky/repo/': The requested URL returned error: 403
Error: Process completed with exit code 128.

The commit code in actions was

     - name: Commit Output files
        run: |
              git config remote.origin.url 'https://github_token@github.com/spooky/repo/'
              git config --local user.email "spook@gmail.com"
              git config --local user.name "spook"
              git init
              git add .
              git commit -m "Updated"
              git push origin main

- name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: github_token

I tried with git config remote.origin.url 'https://username:github_token@github.com/spooky/repo/' also, Getting the same error(the GitHub token has all permissions).

Can anyone help me to fix this?

2 Answers

I also had the same problem. I solved it by adding persist-credentials: false, fetch-depth: 0 to the workflow.

jobs:
  build:
    runs-on: ubuntu-latest
#    permissions:
#      contents: write
#      packages: write

    steps:
      - uses: actions/checkout@v2
        with:
          persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token.
          fetch-depth: 0 # otherwise, there would be errors pushing refs to the destination repository.

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
          server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
          settings-path: ${{ github.workspace }} # location for the settings.xml file


      - name: Commit files
        run: | 
          git config remote.origin.url https://github.com/<username>/<repo>.git
          git config --global user.name "$(git --no-pager log --format=format:'%an' -n 1)"
          git config --global user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
          git add -A
          git commit -am "update"

      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: ${{ github.ref }}

      - name: Build with Maven
        run: mvn -B package --file pom.xml

      - name: Publish to GitHub Packages  Apache Maven
        run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
        env:
          GITHUB_TOKEN: ${{ github.token }}

You can also achieve this by changing the contents: read to write without adding persist-credentials and fetch-depth.

    permissions:
      contents: write
      packages: write

Check first if a git push done locally (not on GitHub through a GitHub action workflow) would work with that same token:

git clone @github.com/spooky/repo
cd repo
# make a dummy commit
git push https://username:github_token@github.com/spooky/repo

If you are using the ad-m/github-push-action, you would not need a git push command in your action, since it would do it for you.

 - name: Push changes
      uses: ad-m/github-push-action@master
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        branch: ${{ github.ref }}
Related