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

gh-101981: Build macOS as recommended by the devguide #102070

Conversation

erlend-aasland
Copy link
Contributor

@erlend-aasland erlend-aasland commented Feb 20, 2023

Automerge-Triggered-By: GH:erlend-aasland

@erlend-aasland erlend-aasland force-pushed the ci/build-macos-as-recommended-by-the-devguide branch from e02118a to 5aa9d55 Compare February 20, 2023 12:36
@erlend-aasland erlend-aasland force-pushed the ci/build-macos-as-recommended-by-the-devguide branch from 5aa9d55 to 3eaab15 Compare February 20, 2023 12:40
@erlend-aasland erlend-aasland changed the title CI: Build macOS as recommended by the devguide gh-101981: Build macOS as recommended by the devguide Feb 20, 2023
@erlend-aasland erlend-aasland marked this pull request as ready for review February 20, 2023 12:46
@erlend-aasland
Copy link
Contributor Author

Installing the Homebrew dependencies takes between 10 to 20 seconds of CI time. We can consider caching those deps (cc. @hugovk, as our CI/GitHub/DevOps oracle).

@erlend-aasland
Copy link
Contributor Author

Apparently Tools/build/check_extension_modules.py is too fragile. We should harden it and ensure that it dumps enough debug info on failure, so we won't end up with a week of red CI crosses again.

@erlend-aasland erlend-aasland added needs backport to 3.10 only security fixes needs backport to 3.11 only security fixes labels Feb 20, 2023
@erlend-aasland
Copy link
Contributor Author

I intend to merge this as soon as the CI turns green. If there are objections, we can always revert or create a follow-up PR.

@corona10
Copy link
Member

corona10 commented Feb 20, 2023

@erlend-aasland What's difference between #101991?

Copy link
Member

@corona10 corona10 left a comment

Choose a reason for hiding this comment

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

lgtm

@erlend-aasland
Copy link
Contributor Author

@erlend-aasland What's difference between #101991?

Oh, sorry, I missed you had a similar PR!

@erlend-aasland
Copy link
Contributor Author

@erlend-aasland What's difference between #101991?

AFAICS, my PR is slightly cleaner in that it still uses multiple build steps (first set environment variables, then run configure, etc.); it makes debugging the CI easier. Also, I did not touch any of the tests.

@miss-islington
Copy link
Contributor

Status check is done, and it's a success ✅.

@miss-islington miss-islington merged commit 2713631 into python:main Feb 20, 2023
@miss-islington
Copy link
Contributor

Thanks @erlend-aasland for the PR 🌮🎉.. I'm working now to backport this PR to: 3.10, 3.11.
🐍🍒⛏🤖

@erlend-aasland erlend-aasland deleted the ci/build-macos-as-recommended-by-the-devguide branch February 20, 2023 13:07
@erlend-aasland
Copy link
Contributor Author

Thanks for the review, Dong-hee!

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Feb 20, 2023
…-102070)

(cherry picked from commit 2713631)

Co-authored-by: Erlend E. Aasland <[email protected]>
Automerge-Triggered-By: GH:erlend-aasland
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Feb 20, 2023
…-102070)

(cherry picked from commit 2713631)

Co-authored-by: Erlend E. Aasland <[email protected]>
Automerge-Triggered-By: GH:erlend-aasland
@corona10
Copy link
Member

corona10 commented Feb 20, 2023

it makes debugging the CI easier. Also, I did not touch any of the tests.

It looks like the GHA performance issue is resolved.
During the weekend it was not.

@corona10
Copy link
Member

AFAICS, my PR is slightly cleaner in that it still uses multiple build steps (first set environment variables, then run configure

see: #101991 (comment)

@hugovk
Copy link
Member

hugovk commented Feb 20, 2023

Re: caching Homebrew:

https://stackoverflow.com/a/65056232/724176 shows how to do it, but warns:

You should note that this cache is unlikely to speed up your workflow. Installing Homebrew bottles (the default) will usually have similar performance to downloading from GitHub/Azure's own storage cache since the bottle files are served on bintray's CDN.

https://stackoverflow.com/a/63681598/724176 has 3 options, which aren't great: 1 is caching everything; 2 means identifying and copying binaries; 3 is Docker.


Looking at the log:

==> Running `brew cleanup pkg-config`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.

We can set that if it makes things quicker, we don't need to do any cleanup, the whole CI run is disposed of after the run. And the first SO answer above sets HOMEBREW_NO_AUTO_UPDATE, that may save time too.

Here's a run of main with this PR, brew install takes 25s:

With HOMEBREW_NO_AUTO_UPDATE it drops to 15s:

And with HOMEBREW_NO_INSTALL_CLEANUP it's 16s, basically the same:

So let's add them.

     needs: check_source
     if: needs.check_source.outputs.run_tests == 'true'
     env:
+      HOMEBREW_NO_AUTO_UPDATE: 1
+      HOMEBREW_NO_INSTALL_CLEANUP: 1
       PYTHONSTRICTEXTENSIONBUILD: 1
     steps:
     - uses: actions/checkout@v3

Edit: Well, these are all within the expected range anyway:

Installing the Homebrew dependencies takes between 10 to 20 seconds of CI time.

But these env vars shouldn't add time :)

miss-islington added a commit that referenced this pull request Feb 20, 2023
(cherry picked from commit 2713631)

Co-authored-by: Erlend E. Aasland <[email protected]>
Automerge-Triggered-By: GH:erlend-aasland
@erlend-aasland
Copy link
Contributor Author

@hugovk, yeah adding the HOMEBREW_* variables makes sense. @corona10, can you update your PR to include those?

@hugovk
Copy link
Member

hugovk commented Feb 20, 2023

And they're documented at https://docs.brew.sh/Manpage#environment

erlend-aasland pushed a commit that referenced this pull request Feb 20, 2023
…) (#102073)

gh-101981: Build macOS as recommended by the devguide (GH-102070)

(cherry picked from commit 2713631)
jaraco pushed a commit to jaraco/cpython that referenced this pull request Feb 20, 2023
carljm added a commit to carljm/cpython that referenced this pull request Feb 20, 2023
* main: (60 commits)
  pythongh-102056: Fix a few bugs in error handling of exception printing code (python#102078)
  pythongh-102011: use sys.exception() instead of sys.exc_info() in docs where possible (python#102012)
  pythongh-101566: Sync with zipp 3.14. (pythonGH-102018)
  pythonGH-99818: improve the documentation for zipfile.Path and Traversable (pythonGH-101589)
  pythongh-88233: zipfile: handle extras after a zip64 extra (pythonGH-96161)
  pythongh-101981: Apply HOMEBREW related environment variables (pythongh-102074)
  pythongh-101907: Stop using `_Py_OPCODE` and `_Py_OPARG` macros (pythonGH-101912)
  pythongh-101819: Adapt _io types to heap types, batch 1 (pythonGH-101949)
  pythongh-101981: Build macOS as recommended by the devguide (pythonGH-102070)
  pythongh-97786: Fix compiler warnings in pytime.c (python#101826)
  pythongh-101578: Amend PyErr_{Set,Get}RaisedException docs (python#101962)
  Misc improvements to the float tutorial (pythonGH-102052)
  pythongh-85417: Clarify behaviour on branch cuts in cmath module (python#102046)
  pythongh-100425: Update tutorial docs related to sum() accuracy (FH-101854)
  Add missing 'is' to `cmath.log()` docstring (python#102049)
  pythongh-100210: Correct the comment link for unescaping HTML (python#100212)
  pythongh-97930: Also include subdirectory in makefile. (python#102030)
  pythongh-99735: Use required=True in argparse subparsers example (python#100927)
  Fix incorrectly documented attribute in csv docs (python#101250)
  pythonGH-84783: Make the slice object hashable (pythonGH-101264)
  ...
@ned-deily
Copy link
Member

ned-deily commented Feb 21, 2023

Sorry that I'm a bit late to this discussion but I have to point out that there appears to be a bit of a misunderstanding here of what configure does and, thus, this PR is not doing what its title asserts :)

configure goes to great lengths to ensure that the necessary environment specified at the time configure is run is preserved in the generated Makefile such that whenever make is run the necessary environment variable values are created in the make environment. That means that, once you have run configure, you can go back later, in a different terminal session, say, and run make without having to define the essential environment variables (like CFLAGS and LDFLAGS) as they were set at configure time.

However, the Makefile does allow for augmenting those environment variables if they are defined in the environment when running make. So, if those environment variables have been defined externally when running make, you may get different results of a build. That's fine if that's what you want to do. But, by default, you should not have to define those variables for a normal build after running configure. That's the way things have worked for a very long time.

Note that the devguide recipe for 3.10+ deliberately does not export any environment variables in the shell environment when running configue and make; by placing the environment variables definitions on the configure command line, they are local to the configure process and its children (and preserved by it in the Makefile). With the github workflow as merged here, the CFLAGS and LDFLAGS values are effectively unnecessarily being exported into each subsequent build step by using GITHUB_ENV. This isn't just a stylistic change; it bypasses a small but important test of the build process that those variables are being properly preserved and recreated by make steps so that we are confident that the Makefile stands alone and is not dependent on externally defining any configuration-related variables.

@erlend-aasland
Copy link
Contributor Author

@ned-deily, this is true (I noticed my error post merge, see my comments on Discord). Dong-hee had a fixup PR ready at some point, but he reverted that specific change. I definitely agree that we should provide the environment variables only when configure is run!

@miss-islington
Copy link
Contributor

Thanks @erlend-aasland for the PR 🌮🎉.. I'm working now to backport this PR to: 3.9.
🐍🍒⛏🤖

@miss-islington
Copy link
Contributor

Thanks @erlend-aasland for the PR 🌮🎉.. I'm working now to backport this PR to: 3.8.
🐍🍒⛏🤖

@miss-islington
Copy link
Contributor

Sorry, @erlend-aasland, I could not cleanly backport this to 3.9 due to a conflict.
Please backport using cherry_picker on command line.
cherry_picker 27136310414965a3ea7f835e416cf74b91cefb48 3.9

@miss-islington miss-islington self-assigned this Feb 21, 2023
@miss-islington
Copy link
Contributor

Sorry @erlend-aasland, 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 27136310414965a3ea7f835e416cf74b91cefb48 3.8

@erlend-aasland
Copy link
Contributor Author

I'll create backports for 3.9 and 3.8 with the fixup in #102131 applied.

carljm added a commit to carljm/cpython that referenced this pull request Feb 22, 2023
* main: (225 commits)
  pythongh-102056: Fix a few bugs in error handling of exception printing code (python#102078)
  pythongh-102011: use sys.exception() instead of sys.exc_info() in docs where possible (python#102012)
  pythongh-101566: Sync with zipp 3.14. (pythonGH-102018)
  pythonGH-99818: improve the documentation for zipfile.Path and Traversable (pythonGH-101589)
  pythongh-88233: zipfile: handle extras after a zip64 extra (pythonGH-96161)
  pythongh-101981: Apply HOMEBREW related environment variables (pythongh-102074)
  pythongh-101907: Stop using `_Py_OPCODE` and `_Py_OPARG` macros (pythonGH-101912)
  pythongh-101819: Adapt _io types to heap types, batch 1 (pythonGH-101949)
  pythongh-101981: Build macOS as recommended by the devguide (pythonGH-102070)
  pythongh-97786: Fix compiler warnings in pytime.c (python#101826)
  pythongh-101578: Amend PyErr_{Set,Get}RaisedException docs (python#101962)
  Misc improvements to the float tutorial (pythonGH-102052)
  pythongh-85417: Clarify behaviour on branch cuts in cmath module (python#102046)
  pythongh-100425: Update tutorial docs related to sum() accuracy (FH-101854)
  Add missing 'is' to `cmath.log()` docstring (python#102049)
  pythongh-100210: Correct the comment link for unescaping HTML (python#100212)
  pythongh-97930: Also include subdirectory in makefile. (python#102030)
  pythongh-99735: Use required=True in argparse subparsers example (python#100927)
  Fix incorrectly documented attribute in csv docs (python#101250)
  pythonGH-84783: Make the slice object hashable (pythonGH-101264)
  ...
@bedevere-bot
Copy link

GH-102186 is a backport of this pull request to the 3.9 branch.

@bedevere-bot bedevere-bot removed the needs backport to 3.9 only security fixes label Feb 23, 2023
erlend-aasland added a commit to erlend-aasland/cpython that referenced this pull request Feb 23, 2023
…thonGH-102070)

Automerge-Triggered-By: GH:erlend-aasland.
(cherry picked from commit 2713631)

Co-authored-by: Erlend E. Aasland <[email protected]>
@bedevere-bot
Copy link

GH-102187 is a backport of this pull request to the 3.8 branch.

python-sidebar pushed a commit to python-sidebar/Python-Documentation-Fork-With-TOC that referenced this pull request Sep 1, 2024
python-sidebar pushed a commit to python-sidebar/Python-Documentation-Fork-With-TOC that referenced this pull request Sep 1, 2024
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.

6 participants