skip to Main Content

I made this workflow to push changes from my private github repo to push it to another private repo on another platform

name: Push to repo
on:
  workflow_dispatch:
    BRANCH:
      description: 'Branch to use'
      required: true
      default: 'production'
      type: choice
      options:
        - production
        - develop
jobs:
  push-to-ccfe:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup SSH Keys and known_hosts
        env:
          SSH_AUTH_SOCK: /tmp/ssh_agent.sock
        run: |
          mkdir -p ~/.ssh
          ssh-keyscan git.something  >> ~/.ssh/known_hosts
          ssh-agent -a ${{ env.SSH_AUTH_SOCK }} > /dev/null
          ssh-add - <<< "${{ secrets.SSH_PRIVATE_KEY }}"
          
      - name: setup git and push to remote
        env:
          SSH_AUTH_SOCK: /tmp/ssh_agent.sock
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "${{ secrets.GH_MAIL }}"
          git remote add newremote [email protected]
      - name: Check branch and push
        env:
          SSH_AUTH_SOCK: /tmp/ssh_agent.sock
        run: |
          git fetch origin -a        
          git push newremote ${{ inputs.BRANCH }}:${{ inputs.BRANCH }}

it’s all good up until I actually try to push

where I first get a warning:

warning: no common commits

and then the actual error:

 ! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'git.something'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

I don’t understand if I try from the terminal and push I get no errors.

p.s.
the point of this workflow is to avoid using the terminal, I want to put a cronjob so that changes to this repo are pushed in another remote.

2

Answers


  1. Chosen as BEST ANSWER

    apparently the solution was to change the checkout command at the beginning.

    this gets me what I needed

    name: Push to repo
    on:
      workflow_dispatch:
        inputs:
          BRANCH:
            description: 'Branch to use'
            required: true
    
    jobs:
      push-to-domainXXX:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
            with:
              fetch-depth: 0
    
          - name: Setup SSH Keys and known_hosts
            env:
              SSH_AUTH_SOCK: /tmp/ssh_agent.sock
            run: |
              mkdir -p ~/.ssh
              ssh-keyscan git.domainXXX  >> ~/.ssh/known_hosts
              ssh-agent -a ${{ env.SSH_AUTH_SOCK }} > /dev/null
              ssh-add - <<< "${{ secrets.SSH_PRIVATE_KEY }}"
    
          - name: setup git and push to remote
            env:
              SSH_AUTH_SOCK: /tmp/ssh_agent.sock
            run: |
              git config --global user.name "github-actions[bot]"
              git config --global user.email "${{ secrets.GH_MAIL }}"
              git remote add second_origin git@domainXXX:myusername/repo_name
              
          - name: Check branch and push
            env:
              SSH_AUTH_SOCK: /tmp/ssh_agent.sock
            run: |
              git push second_origin ${{ inputs.BRANCH }}
              
    

  2. Your commands are:

    git remote add origin [email protected]
    git fetch origin -a   
    git push origin ${{ inputs.BRANCH }}:${{ inputs.BRANCH }}
    

    You are fetching and pushing to the same origin (same remote repository)

    Assuming that the original checkout did set origin, I would rather set a second remote, for referencing the second remote repository (you want to push to).
    Then fetch from the first and push from the second:

    git remote add second [email protected]
    git fetch origin -a   
    git push second ${{ inputs.BRANCH }}:${{ inputs.BRANCH }}
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search