Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert doc.yml workflow to be reusable #103914

Merged

Conversation

webknjaz
Copy link
Contributor

This patch is meant to simplify the maintenance of multiple complex workflow definitions that are tied together into a single workflow later on.

It is separated out of #97533 for atomicity.

Copy link
Contributor Author

@webknjaz webknjaz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ambv I've added a few annotations below, hopefully they're helpful

@@ -26,7 +26,7 @@ permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-reusable
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This collides with the “parent” workflow if it's exactly the same, which is why it was required to introduce some difference.

Misc/**
.github/workflows/reusable-docs.yml
- name: Check for docs changes
if: >-
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this step is skipped, the job output above will fall back to false.

@@ -35,6 +35,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
run-docs: ${{ steps.docs-changes.outputs.run-docs || false }}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The part after || is only used as a fallback when the first part of the expression is empty (like when that step didn't even get executed).

Comment on lines +69 to +91
filter: |
Doc/**
Misc/**
.github/workflows/reusable-docs.yml
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reimplements what was implemented through paths:.

check-docs:
name: 📝
needs: check_source
if: fromJSON(needs.check_source.outputs.run-docs)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The job above sets either true or false as strings, parsing that as JSON allows not having equality checks.

.github/workflows/reusable-docs.yml Outdated Show resolved Hide resolved
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made the workflow file name prefixed with reusable- to start a convention that would help distinguish standalone workflows from the “inclusion snippets”.


on:
workflow_call:
workflow_dispatch:
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I kept this to make it possible to still trigger just this workflow separately, via a manual request.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hugovk this is the only bit I wasn't sure about — is it useful to keep this trigger at all. If not, deleting it could improve maintainability..

Comment on lines 5 to 28
#push:
# branches:
# - 'main'
# - '3.11'
# - '3.10'
# - '3.9'
# - '3.8'
# - '3.7'
# paths:
# - 'Doc/**'
pull_request:
branches:
- 'main'
- '3.11'
- '3.10'
- '3.9'
- '3.8'
- '3.7'
paths:
- 'Doc/**'
- 'Misc/**'
- '.github/workflows/doc.yml'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reimplemented the filtering on the calling side. Dropping the pull_request trigger means that it won't run standalone on PRs, but it will run via inclusion into the main build workflow.


on:
workflow_call:
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This bit is what allows to “include” this workflow into another.

@webknjaz webknjaz force-pushed the maintenance/gha-reusable-docs-workflow branch 3 times, most recently from cbf7985 to 3f8d6d2 Compare April 27, 2023 22:23
hugovk
hugovk previously requested changes Apr 30, 2023
.github/workflows/reusable-docs.yml Outdated Show resolved Hide resolved
.github/workflows/build.yml Outdated Show resolved Hide resolved
@bedevere-bot
Copy link

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

@cpython-cla-bot
Copy link

cpython-cla-bot bot commented May 2, 2023

All commit authors signed the Contributor License Agreement.
CLA signed

@webknjaz webknjaz requested a review from hugovk May 2, 2023 15:47
@webknjaz
Copy link
Contributor Author

webknjaz commented May 2, 2023

I have made the requested changes; please review again.

cc @ambv @hugovk

@bedevere-bot
Copy link

Thanks for making the requested changes!

@hugovk: please review the changes made to this pull request.

@hugovk
Copy link
Member

hugovk commented May 10, 2023

How far back do we want to backport this (and its parent #97533), if at all?

@webknjaz
Copy link
Contributor Author

@hugovk are there huge differences? I think it's okay to backport all the way back to 3.7, if the difference isn't big. Even if it is, I'm willing to explore solving all the cherry-picking conflicts, if necessary.

@webknjaz
Copy link
Contributor Author

As for the "parent PR" I envision that @ambv would want it fully backported because he wanted to make auto-merge painless...

@hugovk
Copy link
Member

hugovk commented May 11, 2023

The general policy is to only backport non-security things for bugfix branches (i.e. 3.11), but CI changes can usually go further back because we need to test older security branches (i.e. 3.7-3.10) when we do get security fixes, and keeping them in sync makes backporting easier.

https://devguide.python.org/versions/

So we're probably fine backporting to 3.7, and we can always check with the release managers.

@webknjaz
Copy link
Contributor Author

Yep, that was my thinking too.

@webknjaz
Copy link
Contributor Author

I've implemented a similar change in pypa/build recently, it seems to work well so far: pypa/build@04df94c.

@webknjaz webknjaz force-pushed the maintenance/gha-reusable-docs-workflow branch 2 times, most recently from 1c7f95d to 0a04207 Compare May 24, 2023 16:50
@hugovk hugovk dismissed their stale review May 24, 2023 18:03

Changes made

@webknjaz
Copy link
Contributor Author

@hugovk this should fix the problem: #105151.

hugovk pushed a commit to hugovk/cpython that referenced this pull request Jun 1, 2023
This is necessary because paths with whitespaces tend to crash said
action[[1]][[2]][[3]]. Also, we don't need to use JSON as it's harder
to parse while the value isn't used except for the emptiness check.

The change fixes [[4]]

[1]: https://github.com/Ana06/get-changed-files#get-all-changed-files-as-space-delimited
[2]: python#103914 (comment)
[3]: python#103914 (comment)
[4]: python#103914 (comment)
hugovk pushed a commit to hugovk/cpython that referenced this pull request Jun 1, 2023
This is necessary because paths with whitespaces tend to crash said
action[[1]][[2]][[3]]. Also, we don't need to use JSON as it's harder
to parse while the value isn't used except for the emptiness check.

The change fixes [[4]]

[1]: https://github.com/Ana06/get-changed-files#get-all-changed-files-as-space-delimited
[2]: python#103914 (comment)
[3]: python#103914 (comment)
[4]: python#103914 (comment)
@pablogsal pablogsal added needs backport to 3.11 only security fixes needs backport to 3.12 bug and security fixes labels Jul 22, 2023
@miss-islington
Copy link
Contributor

Thanks @webknjaz for the PR, and @pradyunsg for merging it 🌮🎉.. I'm working now to backport this PR to: 3.12.
🐍🍒⛏🤖

@miss-islington
Copy link
Contributor

Thanks @webknjaz for the PR, and @pradyunsg for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11.
🐍🍒⛏🤖

@miss-islington
Copy link
Contributor

Sorry, @webknjaz and @pradyunsg, I could not cleanly backport this to 3.11 due to a conflict.
Please backport using cherry_picker on command line.
cherry_picker 88d14da76f579fe014cbd7c15e42be4234135fe9 3.11

@miss-islington
Copy link
Contributor

Sorry @webknjaz and @pradyunsg, I had trouble checking out the 3.12 backport branch.
Please retry by removing and re-adding the "needs backport to 3.12" label.
Alternatively, you can backport using cherry_picker on the command line.
cherry_picker 88d14da76f579fe014cbd7c15e42be4234135fe9 3.12

@pablogsal pablogsal added the needs backport to 3.10 only security fixes label Jul 22, 2023
@miss-islington
Copy link
Contributor

Thanks @webknjaz for the PR, and @pradyunsg for merging it 🌮🎉.. I'm working now to backport this PR to: 3.10.
🐍🍒⛏🤖

@miss-islington
Copy link
Contributor

Sorry, @webknjaz and @pradyunsg, I could not cleanly backport this to 3.10 due to a conflict.
Please backport using cherry_picker on command line.
cherry_picker 88d14da76f579fe014cbd7c15e42be4234135fe9 3.10

@miss-islington
Copy link
Contributor

Thanks @webknjaz for the PR, and @pradyunsg for merging it 🌮🎉.. I'm working now to backport this PR to: 3.8.
🐍🍒⛏🤖 I'm not a witch! I'm not a witch!

@miss-islington
Copy link
Contributor

Sorry @webknjaz and @pradyunsg, I had trouble checking out the 3.8 backport branch.
Please retry by removing and re-adding the "needs backport to 3.8" label.
Alternatively, you can backport using cherry_picker on the command line.
cherry_picker 88d14da76f579fe014cbd7c15e42be4234135fe9 3.8

@miss-islington
Copy link
Contributor

Thanks @webknjaz for the PR, and @pradyunsg for merging it 🌮🎉.. I'm working now to backport this PR to: 3.9.
🐍🍒⛏🤖

@miss-islington
Copy link
Contributor

Sorry, @webknjaz and @pradyunsg, I could not cleanly backport this to 3.9 due to a conflict.
Please backport using cherry_picker on command line.
cherry_picker 88d14da76f579fe014cbd7c15e42be4234135fe9 3.9

@pablogsal pablogsal removed needs backport to 3.8 needs backport to 3.9 only security fixes needs backport to 3.10 only security fixes needs backport to 3.11 only security fixes needs backport to 3.12 bug and security fixes labels Jul 22, 2023
webknjaz added a commit to webknjaz/cpython that referenced this pull request Jul 22, 2023
Co-authored-by: Adam Turner <[email protected]>
Co-authored-by: Hugo van Kemenade <[email protected]>
(cherry picked from commit 88d14da)

Co-authored-by: Sviatoslav Sydorenko <[email protected]>
@bedevere-bot
Copy link

GH-107042 is a backport of this pull request to the 3.12 branch.

@bedevere-bot
Copy link

GH-107043 is a backport of this pull request to the 3.11 branch.

ambv pushed a commit that referenced this pull request Jul 23, 2023
…) (#107043)

Co-authored-by: Sviatoslav Sydorenko <[email protected]>
Co-authored-by: Adam Turner <[email protected]>
Co-authored-by: Hugo van Kemenade <[email protected]>.

(cherry picked from commit 88d14da)
(cherry picked from commit eaa6702)
ambv pushed a commit that referenced this pull request Jul 23, 2023
…) (#107042)

Co-authored-by: Sviatoslav Sydorenko <[email protected]>
Co-authored-by: Adam Turner <[email protected]>
Co-authored-by: Hugo van Kemenade <[email protected]>

(cherry picked from commit 88d14da)
(cherry picked from commit eaa6702)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants