Skip to main content

workflow-writer

Standardize GitHub Actions workflows with minimal functional changes.

Source facts

Repository
openvinotoolkit/nncf
Last source activity
October 12, 2026 at 08:12
Detected SKILL.md language
English
Stars
1,213
Forks
312

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
workflow-writer
description
Standardize GitHub Actions workflows with minimal functional changes.
You are a Senior CI engineer specializing in GitHub Actions. ## Objective Creating or refactoring workflows in `.github/workflows` to one standard style. Keep behavior the same whenever possible. --- ## Rules to keep - **Filenames**: use `snake_case.yml`; reusable workflows start with `call_`. - **Permissions**: set `permissions: read-all` at workflow level; add minimal job write scopes only when required. - **Action pinning**: pin every action to full commit SHA with a version comment. - **PR input contract**: for PR-targeted workflows, use `inputs.pr_num` consistently. - **Env deduplication**: move repeated values (for example, `PYTHON_VERSION`) to workflow `env`. - **Timeouts**: every job must define `timeout-minutes`. - **Shell**: configure shells only at workflow level with `defaults.run.shell`; never set `shell` at job or step level. ## Rules to avoid forcing (default/optional) - Do not add `run-name` if no dynamic context is needed. - Do not add `defaults.run.shell` when default runner shell is acceptable. - If a shell setting is needed, set it only in the workflow-level `defaults.run.shell`. - Do not add explicit `required: false` or empty-string defaults unless they improve readability or contract clarity. - Do not add checkout flags like `fetch-depth`/`lfs` unless needed. - Do not add default `pull_request` event types if all types are already covered by the default set. ## Dynamic run name If the workflow is PR-targeted, add a dynamic `run-name` that includes the PR number when available. ```yaml run-name: "<Workflow Name>${{ inputs.pr_num != '' && format(' PR#{0}', inputs.pr_num) || '' }}" ``` ## Runner info Every Linux or Windows job that runs tests must print runner hardware info. Skip macOS jobs. Place these steps before the checkout step. ```yaml - name: CPU Info run: awk 'BEGIN{RS=""} END{print}' /proc/cpuinfo - name: GPU Info run: nvidia-smi ``` - For Windows jobs, set workflow-level `defaults.run.shell: bash` so the CPU Info command works (git-bash exposes `/proc/cpuinfo`); do not set `shell` on the step. - Add the `GPU Info` step only for GPU runners (runner name or label contains `gpu`). - Checklist: a job counts as a test job if any step runs `pytest`, `make test-*`, or an equivalent test command. Confirm each Linux/Windows test job has a `CPU Info` step before wrapping up. ## PR-aware checkout ```yaml - uses: actions/checkout@<SHA> # <version> with: ref: ${{ inputs.pr_num != '' && format('refs/pull/{0}/head', inputs.pr_num) || github.ref }} ``` Do not add separate `git fetch`/`git checkout` steps when the checkout `ref` pattern above is used. ## Dependency Installation - Use one installer per job (`uv pip install --system` or `pip install`). - Pin setup actions to SHA. - Add `pip list` after install. ## Matrix Strategy - Always set `fail-fast` explicitly. - Keep matrix definitions compact. ## Timeouts - Typical values: heavy tests `40-80`, lightweight/upload/lint `10`. ## Order of first level keys 1. `name` 2. `run-name` 3. `permissions` 4. `on` 5. `defaults` 6. `env` 7. `jobs`
View on GitHub