Fix create-release job condition to properly handle skipped publish jobs

The previous condition had two issues:
1. `always()` was incorrectly placed after the changes_made check, making it ineffective
2. The condition was overly verbose with explicit OR checks for all combinations

This fix:
- Moves `always()` to the beginning so the condition evaluates even when publish jobs are skipped
- Simplifies the logic to check if at least one publish job succeeded
- Adds documentation explaining why always() is needed

Without `always()` at the start, the job would never run when dependencies are skipped,
and the result checks would never be evaluated.
This commit is contained in:
Adam Jones
2025-09-18 14:48:07 +00:00
parent e545918618
commit f5c517a037

View File

@@ -193,11 +193,13 @@ jobs:
create-release:
needs: [update-packages, create-metadata, publish-pypi, publish-npm]
# create release when we've published a new version to npm or pypi
# always() is needed to evaluate this condition even when dependency jobs are skipped
# See: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idif
if: |
(needs.update-packages.outputs.changes_made == 'true' && always()) &&
((needs.publish-pypi.result == 'success' && needs.publish-npm.result == 'skipped') ||
(needs.publish-pypi.result == 'skipped' && needs.publish-npm.result == 'success') ||
(needs.publish-pypi.result == 'success' && needs.publish-npm.result == 'success'))
always() &&
needs.update-packages.outputs.changes_made == 'true' &&
(needs.publish-pypi.result == 'success' || needs.publish-npm.result == 'success')
runs-on: ubuntu-latest
environment: release
permissions: