Skip to content

Gerrit Verify

Gerrit Verify #72

---
name: Gerrit Verify
# yamllint disable-line rule:truthy
on:
workflow_dispatch:
inputs:
GERRIT_BRANCH:
description: "Branch that change is against"
required: true
type: string
GERRIT_CHANGE_ID:
description: "The ID for the change"
required: true
type: string
GERRIT_CHANGE_NUMBER:
description: "The Gerrit number"
required: true
type: string
GERRIT_CHANGE_URL:
description: "URL to the change"
required: true
type: string
GERRIT_EVENT_TYPE:
description: "Type of Gerrit event"
required: true
type: string
GERRIT_PATCHSET_NUMBER:
description: "The patch number for the change"
required: true
type: string
GERRIT_PATCHSET_REVISION:
description: "The revision sha"
required: true
type: string
GERRIT_PROJECT:
description: "Project in Gerrit"
required: true
type: string
GERRIT_REFSPEC:
description: "Gerrit refspec of change"
required: true
type: string
concurrency:
group: ${{ github.event.inputs.GERRIT_CHANGE_ID || github.run_id }}
cancel-in-progress: true
jobs:
clear-vote:
runs-on: ubuntu-latest
steps:
- name: Clear votes
uses: lfit/[email protected]
with:
host: ${{ vars.LFIT_GERRIT_SERVER }}
username: ${{ vars.LFIT_GERRIT_SSH_USER }}
key: ${{ secrets.LFIT_GERRIT_SSH_PRIVKEY_NP }}
known_hosts: ${{ vars.LFIT_GERRIT_KNOWN_HOSTS }}
gerrit-change-number: ${{ inputs.GERRIT_CHANGE_NUMBER }}
gerrit-patchset-number: ${{ inputs.GERRIT_PATCHSET_NUMBER }}
vote-type: clear
prepare:
needs: clear-vote
runs-on: ubuntu-latest
outputs:
wheel-distribution: ${{ steps.wheel-distribution.outputs.path }}
steps:
- name: Checkout change
uses: lfit/[email protected]
with:
gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
- name: Configure Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
- name: Build package distribution files
run: >-
pipx run tox -e clean,build
- name: Record the path of wheel distribution
id: wheel-distribution
run: echo "path=$(ls dist/*.whl)" >> $GITHUB_OUTPUT
- name: Store the distribution files for use in other stages
# `tests` and `publish` will use the same pre-built distributions,
# so we make sure to release the exact same package that was tested
uses: actions/upload-artifact@v4
with:
name: python-distribution-files
path: dist/
retention-days: 1
pre-commit:
needs: clear-vote
runs-on: ubuntu-latest
steps:
- name: Checkout change
uses: lfit/[email protected]
with:
gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
- name: Configure Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
- name: Run static analysis and format checkers
run: pipx run pre-commit run --all-files --show-diff-on-failure
test:
needs: prepare
runs-on: ubuntu-latest
strategy:
matrix:
python:
- "3.8"
- "3.9"
steps:
- name: Checkout change
uses: lfit/[email protected]
with:
gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
delay: "0s"
- name: Configure Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: ${{ matrix.python }}
- name: Retrieve pre-built distribution files
uses: actions/download-artifact@v4
with: {name: python-distribution-files, path: dist/}
- name: Enable sar
run: |
sudo systemctl start sysstat
- name: Run tests
run: >-
TOX_SKIP_ENV='(docs*|license|pre-commit)'
pipx run --python '${{ steps.setup-python.outputs.python-path }}'
tox --installpkg '${{ needs.prepare.outputs.wheel-distribution }}'
-- -rFEx --durations 10 --color yes # pytest args
docs:
needs: clear-vote
runs-on: ubuntu-latest
steps:
- name: Checkout change
uses: lfit/[email protected]
with:
gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
delay: "0s"
fetch-depth: "0"
- name: Configure Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: "3.8"
- name: Run docs tests
run: >-
pipx run tox -e docs
docs-linkcheck:
needs: clear-vote
runs-on: ubuntu-latest
steps:
- name: Checkout change
uses: lfit/[email protected]
with:
gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
delay: "0s"
fetch-depth: "0"
- name: Configure Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: "3.8"
- name: Run docs-linkcheck tests
run: >-
pipx run tox -e docs-linkcheck
license:
needs: clear-vote
runs-on: ubuntu-latest
steps:
- name: Checkout change
uses: lfit/[email protected]
with:
gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
delay: "0s"
fetch-depth: "0"
- name: Configure Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: "3.8"
- name: Run license tests
run: >-
pipx run tox -e license
vote:
if: ${{ always() }}
needs: [prepare, pre-commit, test, docs, docs-linkcheck, license]
runs-on: ubuntu-latest
steps:
- name: Get workflow conclusion
uses: technote-space/workflow-conclusion-action@v3
- name: Set vote
uses: lfit/[email protected]
with:
host: ${{ vars.LFIT_GERRIT_SERVER }}
username: ${{ vars.LFIT_GERRIT_SSH_USER }}
key: ${{ secrets.LFIT_GERRIT_SSH_PRIVKEY_NP }}
known_hosts: ${{ vars.LFIT_GERRIT_KNOWN_HOSTS }}
gerrit-change-number: ${{ inputs.GERRIT_CHANGE_NUMBER }}
gerrit-patchset-number: ${{ inputs.GERRIT_PATCHSET_NUMBER }}
vote-type: ${{ env.WORKFLOW_CONCLUSION }}