From f57cf4a13f73c5766dd148fcae79092fd9ebafe3 Mon Sep 17 00:00:00 2001 From: John Bampton Date: Tue, 17 Mar 2026 20:26:57 +1000 Subject: [PATCH] [CI] Create reusable pre-commit workflows --- .github/workflows/pre-commit-manual.yml | 35 ++++++++++++++ .github/workflows/pre-commit-reusable.yml | 57 +++++++++++++++++++++++ .github/workflows/pre-commit.yml | 23 ++------- README.md | 2 +- 4 files changed, 97 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/pre-commit-manual.yml create mode 100644 .github/workflows/pre-commit-reusable.yml diff --git a/.github/workflows/pre-commit-manual.yml b/.github/workflows/pre-commit-manual.yml new file mode 100644 index 000000000000..d887a41c3e3d --- /dev/null +++ b/.github/workflows/pre-commit-manual.yml @@ -0,0 +1,35 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: pre-commit + +on: [pull_request] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + run: + name: Run manual hooks + uses: ./.github/workflows/pre-commit-reusable.yml + with: + job_id: 'manual' + extra_args: '--hook-stage manual' diff --git a/.github/workflows/pre-commit-reusable.yml b/.github/workflows/pre-commit-reusable.yml new file mode 100644 index 000000000000..a856592fe994 --- /dev/null +++ b/.github/workflows/pre-commit-reusable.yml @@ -0,0 +1,57 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: _pre-commit-base + +on: + workflow_call: + inputs: + extra_args: + required: false + type: string + default: '' + job_id: + required: true + type: string + +permissions: + contents: read + +jobs: + run-hooks: + runs-on: ubuntu-latest + steps: + - name: 'Checkout ${{ github.ref }} ( ${{ github.sha }} )' + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: '3.10' + architecture: 'x64' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pre-commit + - name: set PY + run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> "$GITHUB_ENV" + - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + with: + path: ~/.cache/pre-commit + key: pre-commit|${{ inputs.job_id }}|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }} + - name: Run pre-commit + run: pre-commit run --color=always --all-files --show-diff-on-failure ${{ inputs.extra_args }} diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 11fe5c068814..64c61a8e7879 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -28,22 +28,7 @@ concurrency: jobs: pre-commit: - name: Run pre-commit - runs-on: ubuntu-22.04 - steps: - - name: Check Out - uses: actions/checkout@v5 - - name: Install - run: | - python -m pip install --upgrade pip - pip install pre-commit - - name: Set PY - run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV - - uses: actions/cache@v5 - with: - path: ~/.cache/pre-commit - key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }} - - name: Run pre-commit - run: pre-commit run --color=always --all-files - - name: Run manual pre-commit hooks - run: pre-commit run --color=always --all-files --hook-stage manual + name: Run pre-commit standard + uses: ./.github/workflows/pre-commit-reusable.yml + with: + job_id: 'standard' diff --git a/README.md b/README.md index a5aacb49f6b5..b341805d42f3 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ [![codecov](https://codecov.io/gh/apache/cloudstack/branch/main/graph/badge.svg)](https://codecov.io/gh/apache/cloudstack) [![Docker CloudStack Simulator Status](https://github.com/apache/cloudstack/actions/workflows/docker-cloudstack-simulator.yml/badge.svg?branch=main)](https://github.com/apache/cloudstack/actions/workflows/docker-cloudstack-simulator.yml) [![License Check](https://github.com/apache/cloudstack/actions/workflows/rat.yml/badge.svg?branch=main)](https://github.com/apache/cloudstack/actions/workflows/rat.yml) -[![Linter Status](https://github.com/apache/cloudstack/actions/workflows/linter.yml/badge.svg)](https://github.com/apache/cloudstack/actions/workflows/linter.yml) +[![Linter Status](https://github.com/apache/cloudstack/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/apache/cloudstack/actions/workflows/pre-commit.yml) [![Merge Conflict Checker Status](https://github.com/apache/cloudstack/actions/workflows/merge-conflict-checker.yml/badge.svg?branch=main)](https://github.com/apache/cloudstack/actions/workflows/merge-conflict-checker.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=apache_cloudstack&metric=alert_status)](https://sonarcloud.io/dashboard?id=apache_cloudstack) [![Simulator CI](https://github.com/apache/cloudstack/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/apache/cloudstack/actions/workflows/ci.yml)