From f4eb8e57fb0bef1ed0248ff79e17a360b6dc2154 Mon Sep 17 00:00:00 2001 From: Freso Date: Thu, 18 Sep 2025 08:08:57 +0000 Subject: [PATCH] feat: add pre-commit hook for validator (#1002) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will allow users to validate their Forgejo Actions files (both actions and workflows) prior to committing them to their repositories, using a `pre-commit` configuration similar to ```yaml - repo: https://code.forgejo.org/forgejo/runner rev: v11.1.0 hooks: - id: forgejo-runner-validate ``` - features - [PR](https://code.forgejo.org/forgejo/runner/pulls/1002): feat: add pre-commit hook for validator Co-authored-by: Frederik “Freso” S. Olesen Reviewed-on: https://code.forgejo.org/forgejo/runner/pulls/1002 Reviewed-by: earl-warren Co-authored-by: Freso Co-committed-by: Freso --- .forgejo/workflows/test.yml | 50 +++++++++++++++++++++++++++++++++++++ .pre-commit-hooks.yaml | 16 ++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 .pre-commit-hooks.yaml diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 28ab84b9..773e0ae2 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -222,3 +222,53 @@ jobs: git diff --color=always exit 1 } + + validate-pre-commit: + name: validate pre-commit-hooks file + if: vars.ROLE == 'forgejo-coding' + runs-on: docker + container: + image: 'code.forgejo.org/oci/ci:1' + + steps: + - uses: https://data.forgejo.org/actions/checkout@v4 + + - name: install pre-commit + env: + DEBIAN_FRONTEND: noninteractive + PIP_ROOT_USER_ACTION: ignore + PIP_BREAK_SYSTEM_PACKAGES: 1 + PIP_PROGRESS_BAR: off + run: | + apt-get update -qq + apt-get -q install -qq -y python3-pip + python3 -m pip install 'pre-commit>=3.2.0' + + - name: validate .pre-commit-hooks.yaml + run: pre-commit validate-manifest .pre-commit-hooks.yaml + + # Will fail due to `act/runner/testdata/local-action-fails-schema-validation/action/action.yml` + - name: check pre-commit hook against local action files (should fail) + continue-on-error: true + run: | + pre-commit try-repo --all-files --verbose . forgejo-runner-validate + + - name: check that a bad workflow file doesn’t validate (should fail) + continue-on-error: true + run: | + mkdir -p test-repo + cd test-repo + git config set advice.defaultBranchName false + git init --quiet + mkdir -p .forgejo/workflows + cp ../act/runner/testdata/local-action-fails-schema-validation/action/action.yml ./ + touch .forgejo/workflows/bad-workflow.yml + cat > .pre-commit-config.yaml <