diff --git a/.github/workflows/ci-requirements.yaml b/.github/workflows/ci-requirements.yaml new file mode 100644 index 0000000..96ad0cd --- /dev/null +++ b/.github/workflows/ci-requirements.yaml @@ -0,0 +1,82 @@ +name: CI Requirement Checks +on: + push: + branches: + - "**" + workflow_call: + inputs: + runner: + required: false + description: Runner type + default: ubuntu-latest + type: string + outputs: + full_run_required: + description: Whether a full pipeline run is required + value: ${{ jobs.requirements.outputs.full_run_required }} + test_run_required: + description: Whether a test run is required + value: ${{ jobs.requirements.outputs.test_run_required }} +jobs: + requirements: + runs-on: ${{ inputs.runner || 'ubuntu-latest' }} + outputs: + full_run_required: ${{ steps.check_full_run_required.outputs.full_run_required }} + test_run_required: ${{ steps.check_test_run_required.outputs.test_run_required }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check full pipeline run required + id: check_full_run_required + run: | + base="${{ github.event.before }}" + if [ -z "$base" ] || [ "$base" = "0000000000000000000000000000000000000000" ]; then + base="HEAD^" + fi + if git diff --name-only "$base" HEAD | grep -qvE '^(\.chart|\.github)/'; then + echo "full_run_required=true" >> "$GITHUB_OUTPUT" + else + echo "full_run_required=false" >> "$GITHUB_OUTPUT" + fi + + - name: Check tests run required + id: check_test_run_required + uses: dorny/paths-filter@v4 + with: + predicate-quantifier: "some" + filters: | + test_run_required: + # Python / Django + - "**.py" + - "requirements*.txt" + - "pyproject.toml" + - "setup.cfg" + - "Pipfile" + - "Pipfile.lock" + - "poetry.lock" + - "uv.lock" + - "tox.ini" + - "pytest.ini" + - "**.html" + - "templates/**" + # JavaScript / TypeScript + - "**.js" + - "**.jsx" + - "**.ts" + - "**.tsx" + - "**.mjs" + - "**.cjs" + - "**.vue" + - "**.svelte" + - "package.json" + - "package-lock.json" + - "yarn.lock" + - "pnpm-lock.yaml" + - "tsconfig*.json" + - "jest.config.*" + - "vitest.config.*" + - "babel.config.*" + - "vite.config.*" + - "webpack.config.*"