Skip to content

Stable release-please job skipped due to GitHub Actions needs cascade from conditional Python CI jobs #1042

@WilliamBerryiii

Description

@WilliamBerryiii

Summary

Two related bugs in the stable release pipeline prevent release-please from running on pushes to main.

Bug 1: GitHub Actions needs-cascade skips release-please

Since commit f89f0eb6 (March 13 — "feat(workflows): add Python linting CI workflow with Ruff (#951)"), every push to main skips the release-please job due to GitHub Actions' needs-cascade behavior.

Root cause: The release-please job depends on all 9 CI jobs via needs:. Two of those — python-lint and pytest — are conditional on discover-python-projects.outputs.has-projects == 'true'. When discovery outputs false, both jobs are skipped. GitHub Actions then skips any downstream job whose needs: includes a skipped dependency, unless that job has an if: expression that overrides the default behavior.

Fix: Add if: ${{ !cancelled() && !failure() }} to the release-please job so it runs when dependencies succeeded or were skipped, while still blocking on actual failures or cancellations.

Bug 2: Python discovery fails to find projects under hidden directories

The discover-python-projects job in both release-stable.yml and pr-validation.yml uses Get-ChildItem -Recurse -Filter pyproject.toml to find Python projects. PowerShell's Get-ChildItem -Recurse does not traverse hidden directories (those prefixed with . such as .github/) by default.

The only pyproject.toml in the repository is at .github/skills/experimental/powerpoint/pyproject.toml — under the hidden .github/ directory, so the discovery script always outputs has-projects=false.

Fix: Add -Force to the Get-ChildItem call so PowerShell traverses hidden directories.

Reproduction (local PowerShell):

# Without -Force: finds nothing
Get-ChildItem -Recurse -Filter pyproject.toml |
  Where-Object { $_.FullName -notmatch 'node_modules' }
# Count: 0

# With -Force: finds the project
Get-ChildItem -Recurse -Force -Filter pyproject.toml |
  Where-Object { $_.FullName -notmatch 'node_modules' }
# .github/skills/experimental/powerpoint/pyproject.toml

Impact

  • No stable release-please PR has been created since March 13 (the last successful stable release was hve-core-v3.0.2).
  • Python linting and testing have never run in CI against the powerpoint skill because the project was never discovered.

Files Changed

  • .github/workflows/release-stable.yml — add if: guard to release-please job; add -Force to Get-ChildItem
  • .github/workflows/pr-validation.yml — add -Force to Get-ChildItem

Verification

After merging, the next push to main should:

  1. discover-python-projects outputs has-projects=true with the powerpoint skill directory
  2. python-lint and pytest run against the powerpoint skill
  3. release-please runs regardless of whether Python projects exist

Metadata

Metadata

Labels

bugSomething isn't workingciContinuous integrationpriority-1Critical priority, address immediatelyworkflowsGitHub Actions workflows

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions