The action extracts the commits from a GitHub pull-request and submits them to an upstream Gerrit repository. This allows GitHub developers to contribute to Gerrit-based repositories that are primarily maintained on Gerrit servers and replicated onto GitHub.
The action and workflow are written with bash scripts using well known Git SCM tools, gh, jq and git-review.
Squash all the commits in the pull request into a single commit, with one of these two options:
Or, submit each commit as a separate single commit preserving the git history (SUBMIT_SINGLE_COMMITS).
inputs.SUBMIT_SINGLE_COMMITS
is set to 'false' by default.Change-id: <SHA>
is retried from the
comment on the pull request if one exist. It's the developer responsibility to ensure change-Id's are reused.inputs.USE_PR_AS_COMMIT
to 'true'.inputs.SUBMIT_SINGLE_COMMITS
and cannot be used together.inputs.SUBMIT_SINGLE_COMMITS
to be set to 'true' in the caller.inputs.SUBMIT_SINGLE_COMMITS
has not be tested extensively for handling large pull requests.GERRIT_KNOWN_HOSTS
: Known host of the Gerrit repository.GERRIT_SSH_PRIVKEY_G2G
: SSH private key pair (The private key has to be added to the Gerrit user's account settings. Gerrit -> User Settings).GERRIT_SSH_USER_G2G
: Gerrit server username (Required to connect to Gerrit).GERRIT_SSH_USER_G2G_EMAIL
: Email of the Gerrit user.SUBMIT_SINGLE_COMMITS
: Submit one commit at a time to the Gerrit repository (Default: false)USE_PR_AS_COMMIT
: Use commit body and title from pull-request (Default: false)FETCH_DEPTH
: fetch-depth of the clone repo. (Default: 10)GERRIT_PROJECT
: Gerrit project repository (Default read from .gitreview).GERRIT_SERVER
: Gerrit server FQDN (Default read from .gitreview).GERRIT_SERVER_PORT
: Gerrit server port (Default: 29418)ORGANIZATION
: The GitHub Organization or Project.REVIEWER_EMAIL
: Committers' email list (comma-separated list without spaces).Use the composite action as a step in the workflow for further processing.
Example workflow does not enable SUBMIT_SINGLE_COMMITS
and USE_PR_AS_COMMIT
---
# SPDX-License-Identifier: Apache-2.0
# Copyright 2024 The Linux Foundation <abelur@linux.com>
name: call-github2gerrit-composite-action
# yamllint disable-line rule:truthy
on:
pull_request_target:
types: [opened, reopened, edited, synchronize]
branches:
- master
- main
jobs:
call-in-g2g-workflow:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: "Call the lfit/github2gerrit composite action"
id: gerrit-upload
uses: lfit/github2gerrit@main
with:
SUBMIT_SINGLE_COMMITS: "false"
USE_PR_AS_COMMIT: "false"
FETCH_DEPTH: 10
GERRIT_KNOWN_HOSTS: ${{ vars.GERRIT_KNOWN_HOSTS }}
GERRIT_SSH_PRIVKEY_G2G: ${{ secrets.GERRIT_SSH_PRIVKEY_G2G }}
GERRIT_SSH_USER_G2G: ${{ vars.GERRIT_SSH_USER_G2G }}
GERRIT_SSH_USER_G2G_EMAIL: ${{ vars.GERRIT_SSH_USER_G2G_EMAIL }}
ORGANIZATION: ${{ vars.ORGANIZATION }}
- name: "Output change-number and change URL"
shell: bash
run: |
echo "Change URL: ${{ steps.change_num.outputs.GERRIT_CHANGE_REQUEST_URL }}"
echo "Change number: ${{ steps.change_num.outputs.GERRIT_CHANGE_REQUEST_NUMBER }}"
Call the reusable workflow as standalone job.
---
# SPDX-License-Identifier: Apache-2.0
# Copyright 2024 The Linux Foundation <abelur@linux.com>
name: call-github2gerrit-reusable-workflow
# yamllint disable-line rule:truthy
on:
workflow_dispatch:
pull_request_target:
types: [opened, reopened, edited, synchronize]
branches:
- master
- main
concurrency:
# yamllint disable-line rule:line-length
group: ${{ github.workflow }}-${{ github.run_id }}
cancel-in-progress: true
jobs:
call-in-g2g-workflow:
permissions:
contents: read
pull-requests: write
uses: lfit/github2gerrit/.github/workflows/github2gerrit.yaml@main
with:
GERRIT_KNOWN_HOSTS: ${{ vars.GERRIT_KNOWN_HOSTS }}
GERRIT_SSH_USER_G2G: ${{ vars.GERRIT_SSH_USER_G2G }}
GERRIT_SSH_USER_G2G_EMAIL: ${{ vars.GERRIT_SSH_USER_G2G_EMAIL }}
ORGANIZATION: ${{ vars.ORGANIZATION }}
secrets:
GERRIT_SSH_PRIVKEY_G2G: ${{ secrets.GERRIT_SSH_PRIVKEY_G2G }}
We welcome contributions! If you have any ideas, suggestions, or improvements, please feel free to open an issue or submit a pull request. Your contributions are greatly appreciated!