Skip to content

Sync with upstream#1

Open
ddfourtwo wants to merge 406 commits into
ddfourtwo:mainfrom
heroku:main
Open

Sync with upstream#1
ddfourtwo wants to merge 406 commits into
ddfourtwo:mainfrom
heroku:main

Conversation

@ddfourtwo

Copy link
Copy Markdown
Owner

No description provided.

dependabot Bot and others added 30 commits July 8, 2025 10:24
* Bump uv from 0.7.13 to 0.7.19

Bumps [uv](https://github.com/astral-sh/uv) from 0.7.13 to 0.7.19.
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.7.13...0.7.19)

---
updated-dependencies:
- dependency-name: uv
  dependency-version: 0.7.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update test fixture assertion

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
* Bump uv from 0.7.19 to 0.7.20

Bumps [uv](https://github.com/astral-sh/uv) from 0.7.19 to 0.7.20.
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.7.19...0.7.20)

---
updated-dependencies:
- dependency-name: uv
  dependency-version: 0.7.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
Builds will now error if either:
- The Python buildpack has been run multiple times in the same build.
- An existing `.heroku/python/` directory is found in the app source
  for any other reason (e.g. accidentally committed to Git)

This upgrades the warnings added in #1724 in December 2024
to errors.

No feedback/concerns were raised in the GitHub issue
linked from the warning:
#1704

And Honeycomb data shows:
- the number of apps hitting the warnings was minimal
- in most cases, the builds hitting the warnings were failing
  already (eg due to broken `python/` directories having been
  committed to Git, and so turning the warning into an error
  will actually give them a better error message than before).

Closes #1704.
GUS-W-17309720.
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
These are not set/used since #1830.
For historical reasons, the buildpack has supported using the package
manager Pipenv without a lockfile. However, doing so results in
non-deterministic installs (package versions can vary across
environments) and so is unsafe / not recommended.

As such, since #1695 in November 2024, we've shown a deprecation warning
if apps have only a `Pipfile` and no `Pipfile.lock` file.

Plenty of time has now passed, and metrics show usage very few apps
hitting this warning. In addition, upstream Pipenv has also
deprecated support for `--skip-lock`:
pypa/pipenv@8775d59

As such, it's time to change this warning to an error.

Affected apps will need to run `pipenv lock` and commit the resultant
`Pipfile.lock` to Git.

Closes #1702.
GUS-W-17308738.
Several improvements were made to uv's package manager related
tests when adding support for uv. This ports those improvements
to the tests for the other package managers too.

A couple of the new tests have to be marked as skipped, due to bugs
that they exposed upstream in Poetry and Pipenv.

GUS-W-18319828.
GUS-W-18319833.
After #1830, the two `checks::warn_if_*` functions now error
rather than warn, so the function names have been renamed
so they don't mislead about their behaviour.
Misc test improvements noticed while working on the
Pipenv refactor + version update.

GUS-W-17482289.
Bumps the ruby-dependencies group with 2 updates: [heroku_hatchet](https://github.com/heroku/hatchet) and [rubocop](https://github.com/rubocop/rubocop).


Updates `heroku_hatchet` from 8.0.5 to 8.0.6
- [Changelog](https://github.com/heroku/hatchet/blob/main/CHANGELOG.md)
- [Commits](heroku/hatchet@v8.0.5...v8.0.6)

Updates `rubocop` from 1.77.0 to 1.78.0
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.77.0...v1.78.0)

---
updated-dependencies:
- dependency-name: heroku_hatchet
  dependency-version: 8.0.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: ruby-dependencies
- dependency-name: rubocop
  dependency-version: 1.78.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Since more than 60 days have passed since the replacement metric
(`python_version_origin`) was added in #1785, so all build events
within the Honeycomb retention time span now have the new
metric name.

GUS-W-19116066.
* Updates Pipenv from 2024.0.1 to 2025.0.4. Changelog:
  https://github.com/pypa/pipenv/blob/main/CHANGELOG.md#202504-2025-07-07
* Switches to installing Pipenv into its own virtual environment, so
  that it and its dependencies don't leak into the app environment.
* Stops installing pip (in addition to Pipenv) when the chosen package
  manager is Pipenv, to match the behaviour when using Poetry or uv.
* Forces the build cache to be cleared if the contents of `Pipfile.lock`
  has changed since the last build. This is required to work around
  `pipenv {install,sync}` by design not uninstalling packages if they
  are removed from the lockfile (?!). We also can't use `pipenv clean`
  since it doesn't work with `--system` / `PIPENV_SYSTEM`.

Apps that have been inadvertently depending on Pipenv's own dependencies
implicitly, will need to add those dependencies explicitly to their
`Pipfile` and regenerate `Pipfile.lock`. Similarly, any apps that for
some reason use pip later in the build in addition to Pipenv, will need
to either add pip as an explicit dependency in their `Pipfile`, or else
for adhoc use-cases (such as in one-off dynos), can temporarily install
pip using `python -m ensurepip --default-pip`.

Supersedes #1828.
GUS-W-17482289.
GUS-W-17482412.
GUS-W-19116903.
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
After moving Pipenv to its own virtual environment in #1840 (to fix
leaking Pipenv's dependencies into the app environment), apps that
explicitly depend on a package that happen to also be a Pipenv
dependency were seeing `ModuleNotFoundError` failures.

For example:

```
ModuleNotFoundError: No module named 'certifi'
```

Or:

```
ModuleNotFoundError: No module named 'packaging'
```

It appears that Pipenv's `--system` feature has a bug whereby it sees
its own dependencies (installed in its own environment) as already
installed (even though they aren't actually installed in the app
environment), so incorrectly skips installing them.

In general, it seems Pipenv's support for `--system` is pretty buggy
(for example, it doesn't work with `pipenv run` either):
https://github.com/pypa/pipenv/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22--system%20flag%22

The classic Python buildpack doesn't currently use virtual environments
(since it installs a dedicated Python install for the app, that's
already separate from system Python), and switching to them would
be a significant change that may cause other types of breakage
(for example, to apps that hardcode the path to Python).

As such for now, we need to continue to use `pipenv install --system`
(as the buildpack has done for some time), but I have found the bug
can be worked around if we set `VIRTUAL_ENV` to the Python install
location, to trick Pipenv into thinking it's operating in a virtual
environment.

The Pipenv tests have been updated to confirm that an explicit
`certifi` install now works.

GUS-W-19118553.
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
To distinguish it from the installation dependencies step, particularly
since copying files into the cache directory can take a while for apps
with a large number of dependencies.

GUS-W-19144883.
By moving the Python directory instead of copying, which internally
performs a rename instead of a copy if the cache directory is on the
same filesystem mount as the build directory (which is the case for
standard builds).

This should be particularly beneficial for apps with a large number
of Python dependencies (and so a large site-packages) - where we
see cache restoration taking up to 30 seconds in Honeycomb (P99.9).

GUS-W-19144883.
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
* Bump uv from 0.7.20 to 0.8.4

Bumps [uv](https://github.com/astral-sh/uv) from 0.7.20 to 0.8.4.
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.7.20...0.8.4)

---
updated-dependencies:
- dependency-name: uv
  dependency-version: 0.8.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update test fixture for new output

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
)

Bumps the ruby-dependencies group with 1 update: [rubocop](https://github.com/rubocop/rubocop).


Updates `rubocop` from 1.78.0 to 1.79.1
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.78.0...v1.79.1)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.79.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Updates the test for Python 3.9 with pip to perform a second
  build that tests the cached rebuild, ready for a fix to the log
  output cleanup regex in a later PR (pip outputs a different path
  style with older Python).
* Moves the outdated version tests around to be more consistent
  with the equivalent tests for other package managers.

GUS-W-19183260.
…1851)

On older Python pip outputs paths in a different format.

The log output cleanup regex has now been updated to match against that
output too (in addition to that of newer Python), so the log lines are
cleaned up on Python 3.10 and older too.

GUS-W-19183260.
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
A new Shellcheck version was just released:
https://github.com/koalaman/shellcheck/releases/tag/v0.11.0

...which reports some new lint errors:

```
$ make lint

In builds/build_python_runtime.sh line 38:
if [[ ! " ${SUPPORTED_PYTHON_VERSIONS[*]} " == *" ${PYTHON_MAJOR_VERSION} "* ]]; then
   ^-- SC2335 (style): Use a != b instead of ! a == b.

For more information:
 https://www.shellcheck.net/wiki/SC2335 -- Use a != b instead of ! a == b.
make: *** [lint-scripts] Error 1
```

GUS-W-19245644.
For historical reasons, the classic Python buildpack has installed the
`libsqlite3-dev`, `libsqlite3-0` and `sqlite3` packages as part of the
build.

However, these are not actually required for the Python `sqlite3`
stdlib module to work (since the headers are installed in the
`Dockerfile` used specifically for those builds):
https://docs.python.org/3/library/sqlite3.html

There is also a `pysqlite3` package on PyPI that uses the headers,
however:
1. It's virtually identical to the stdlib module with Python, and so
   most apps should just use the stdlib's `sqlite3` module instead.
2. For apps that absolutely must use `pysqlite3`, the maintainer
   of that package makes a pre-compiled binary version of the
   package available that can be used without the need for headers:
   `pysqlite3-binary`
3. For apps that really want to install `pysqlite3` from source (or
   have some other need for the SQLite headers), they can be installed
   using the APT buildpack by adding `libsqlite3-dev` and `libsqlite3-0`
   to the `Aptfile`.

Metrics show that only two apps built in the last 60 days use the
`pysqlite3` package, confirming that including the headers by default
does not make sense.

This just leaves the SQLite CLI, which:
- Won't be very commonly used, given that most apps don't use SQLite
  due to the ephemeral storage on dynos
- Is outside the scope of what this buildpack should be installing,
  and is why the APT buildpack exists

...and so is also something the buildpack shouldn't be installing
itself. Instead, any apps that need the SQLite CLI should use the
APT buildpack and add `sqlite3` to their `Aptfile`.

By removing the installation of these packages, we:
- Speed up the build (metrics show the install time over last
  60 days has a P50 of 4.2s, average of 6.4s, P99.9 of 667s)
- Improve build reliability, since it no longer depends on the
  uptime of the Ubuntu APT mirror
- Improve parity with the Python CNB, which doesn't install the
  SQLite headers or CLI either
- (As an added bonus) Reduce the slug size slightly

The buildpack already doesn't install these packages when using
Python 3.13 (which is the buildpack's default Python version),
or when using Poetry or uv. As such, this change only affects
apps using Python 3.12 or older, with pip or Pipenv.

Closes #1703.
GUS-W-18915614.
)

Bumps the ruby-dependencies group with 1 update: [rubocop](https://github.com/rubocop/rubocop).


Updates `rubocop` from 1.79.1 to 1.79.2
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.79.1...v1.79.2)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.79.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
* Bump pip from 25.1.1 to 25.2

Bumps [pip](https://github.com/pypa/pip) from 25.1.1 to 25.2.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](pypa/pip@25.1.1...25.2)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: '25.2'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

* Update build log assertion for new pip output

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
* Bump poetry from 2.1.3 to 2.1.4

Bumps [poetry](https://github.com/python-poetry/poetry) from 2.1.3 to 2.1.4.
- [Release notes](https://github.com/python-poetry/poetry/releases)
- [Changelog](https://github.com/python-poetry/poetry/blob/main/CHANGELOG.md)
- [Commits](python-poetry/poetry@2.1.3...2.1.4)

---
updated-dependencies:
- dependency-name: poetry
  dependency-version: 2.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
* Bump uv from 0.8.4 to 0.8.5

Bumps [uv](https://github.com/astral-sh/uv) from 0.8.4 to 0.8.5.
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.8.4...0.8.5)

---
updated-dependencies:
- dependency-name: uv
  dependency-version: 0.8.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
dependabot Bot and others added 30 commits May 7, 2026 13:24
* Bump uv from 0.11.6 to 0.11.11

Bumps [uv](https://github.com/astral-sh/uv) from 0.11.6 to 0.11.11.
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.11.6...0.11.11)

---
updated-dependencies:
- dependency-name: uv
  dependency-version: 0.11.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
* Bump pip from 26.0.1 to 26.1.1

Bumps [pip](https://github.com/pypa/pip) from 26.0.1 to 26.1.1.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](pypa/pip@26.0.1...26.1.1)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: 26.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
Bumps [poetry](https://github.com/python-poetry/poetry) from 2.3.4 to 2.4.0.
- [Release notes](https://github.com/python-poetry/poetry/releases)
- [Changelog](https://github.com/python-poetry/poetry/blob/main/CHANGELOG.md)
- [Commits](python-poetry/poetry@2.3.4...2.4.0)

---
updated-dependencies:
- dependency-name: poetry
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Bump pipenv from 2026.5.2 to 2026.6.1

Bumps [pipenv](https://github.com/pypa/pipenv) from 2026.5.2 to 2026.6.1.
- [Release notes](https://github.com/pypa/pipenv/releases)
- [Changelog](https://github.com/pypa/pipenv/blob/main/CHANGELOG.md)
- [Commits](pypa/pipenv@v2026.5.2...v2026.6.1)

---
updated-dependencies:
- dependency-name: pipenv
  dependency-version: 2026.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entry

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
To reduce the amount of PR rebasing that has to occur each month
when we update the Python package manager versions, given that
they need CHANGELOG.md entries each, which otherwise cause
conflicts.

See:
https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference#groups--

GUS-W-22400243.
Since the schema requires at least one property to be specified
under the `groups` key, even if we're not wanting to add filters.

See:
https://www.schemastore.org/dependabot-2.0.json

GUS-W-22400243.
* Prepare release v344

* Fix misc typo

---------

Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
)

* Bump rubocop from 1.86.1 to 1.87.0 in the ruby-dependencies group

Bumps the ruby-dependencies group with 1 update: [rubocop](https://github.com/rubocop/rubocop).


Updates `rubocop` from 1.86.1 to 1.87.0
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.86.1...v1.87.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.87.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix and refresh lockfile

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
…2098)

* Bump the python-dependencies group across 1 directory with 3 updates

Bumps the python-dependencies group with 3 updates in the / directory: [poetry](https://github.com/python-poetry/poetry), [uv](https://github.com/astral-sh/uv) and [pip](https://github.com/pypa/pip).


Updates `poetry` from 2.4.0 to 2.4.1
- [Release notes](https://github.com/python-poetry/poetry/releases)
- [Changelog](https://github.com/python-poetry/poetry/blob/main/CHANGELOG.md)
- [Commits](python-poetry/poetry@2.4.0...2.4.1)

Updates `uv` from 0.11.11 to 0.11.19
- [Release notes](https://github.com/astral-sh/uv/releases)
- [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)
- [Commits](astral-sh/uv@0.11.11...0.11.19)

Updates `pip` from 26.1.1 to 26.1.2
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](pypa/pip@26.1.1...26.1.2)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: 26.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-dependencies
- dependency-name: poetry
  dependency-version: 2.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-dependencies
- dependency-name: uv
  dependency-version: 0.11.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update changelog

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
The original v345 release (prepared in #2095) never ended up being published (I forgot to run the final `make publish` step), and so was superseded by #2100 - which resulted in two v345 entries being present in CHANGELOG.

Signed-off-by: Ed Morley <501702+edmorley@users.noreply.github.com>
Calls the shared `_classic-buildpack-publish.yml` workflow from
`heroku/languages-github-actions` to publish the `heroku/python`
buildpack to the registry via OIDC.

Auto-triggers when the Linguist-authored "Prepare release" PR is
merged to `main` (guarded on event, branch, repo, and PR author).
Also supports manual `workflow_dispatch`.

Mirrors the pattern established in heroku/heroku-buildpack-nodejs#1653.

GUS-W-22295409 is the reference implementation; this is the python
caller workflow for the OIDC-Based Classic Buildpack Publishing epic.

GUS-W-22295419.
…g newline (#2102)

The `profile.d/` scripts test asserts on captured `run_multi` command output
using an exact match against a heredoc. The platform log stream that captures
the output occasionally appends an extra trailing newline, which intermittently
breaks these exact assertions.

For example:
https://github.com/heroku/heroku-buildpack-python/actions/runs/27144980449/job/80156740097?pr=2099#step:5:628

```
Failures:

  1) .profile.d/ scripts sets the required run-time env vars
     Failure/Error:
       expect(output).to eq(<<~OUTPUT)
         Python buildpack: Detected 512 MB available memory and 8 CPU cores.
         Python buildpack: Skipping automatic configuration of WEB_CONCURRENCY since it's already set.
         DYNO_RAM=512
         WEB_CONCURRENCY=999
       OUTPUT

       expected: "Python buildpack: Detected 512 MB available memory and 8 CPU cores.\nPython buildpack: Skipping auto...matic configuration of WEB_CONCURRENCY since it's already set.\nDYNO_RAM=512\nWEB_CONCURRENCY=999\n"
            got: "Python buildpack: Detected 512 MB available memory and 8 CPU cores.\nPython buildpack: Skipping auto...tic configuration of WEB_CONCURRENCY since it's already set.\nDYNO_RAM=512\nWEB_CONCURRENCY=999\n\n"

       (compared using ==)
     # ./spec/hatchet/profile_d_scripts_spec.rb:128:in 'block (4 levels) in <top (required)>'
     # ./vendor/bundle/ruby/4.0.0/gems/heroku_hatchet-8.0.6/lib/hatchet/app.rb:255:in 'block in Hatchet::App#run_multi'
```

Adds a `normalize_trailing_newlines` spec helper that collapses any trailing
newlines down to a single one, and applies it to the exact-match assertions in
the test. This absorbs the spurious trailing newline whilst still asserting on
the rest of the output exactly.

GUS-W-22900269.
#2103)

Bumps the ruby-dependencies group with 1 update: [rubocop-rspec](https://github.com/rubocop/rubocop-rspec).


Updates `rubocop-rspec` from 3.9.0 to 3.10.2
- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop-rspec@v3.9.0...v3.10.2)

---
updated-dependencies:
- dependency-name: rubocop-rspec
  dependency-version: 3.10.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
`PYTHONUNBUFFERED` affects stdout and stderr, not stdin:
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED

And updates the comment to actually explain the why not the what.

GUS-W-23030029.
…2113)

builds/Dockerfile matched only the `* @heroku/languages` catch-all, so
Dependabot cosign bumps requested team review. Add an override to route
it to the maintainer, like the other Dependabot-touched paths.

GUS-W-23276629.
Bumps sigstore/cosign/cosign from v3.0.6 to v3.1.1.

---
updated-dependencies:
- dependency-name: sigstore/cosign/cosign
  dependency-version: v3.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

Bumps the ruby-dependencies group with 1 update: [rubocop](https://github.com/rubocop/rubocop).


Updates `rubocop` from 1.87.0 to 1.88.1
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.87.0...v1.88.1)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.88.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Passes `HONEYCOMB_API_KEY` through to the shared `_classic-buildpack-publish.yml@latest`
workflow, enabling a Honeycomb release marker on the `builds` dataset for each production
publish of this classic buildpack.

GUS-W-22846373.
…ne (#2115)

The platform log stream that captures one-off dyno (`app.run`) output
occasionally appends an extra trailing newline, which intermittently
breaks exact-match (`.to eq`) output assertions. For example:
https://github.com/heroku/heroku-buildpack-python/actions/runs/28526498507/job/85081876325?pr=2110#step:5:589

This is the same flakiness that #2102 fixed for the `profile.d/` scripts
test. Reuses the existing `normalize_trailing_newlines` spec helper to
absorb the spurious newline while still asserting on the rest of the
output exactly, applying it to the seven `app.run` exact-match
assertions.

GUS-W-23366753.
…2111)

* Bump the python-dependencies group across 1 directory with 2 updates

---
updated-dependencies:
- dependency-name: pipenv
  dependency-version: 2026.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-dependencies
- dependency-name: uv
  dependency-version: 0.11.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* Add changelog entries

* Fix uv lockfile-out-of-sync spec assertion

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ed Morley <emorley@salesforce.com>
Co-authored-by: heroku-linguist[bot] <136119646+heroku-linguist[bot]@users.noreply.github.com>
We're not updating setuptools to v71+ due to its new approach to
vendored dependencies, so it doesn't need to be managed by Dependabot:
#1630 (comment)

Remove the requirements file and Dependabot ignore entry, and hardcode
the version directly where it's used. This also stops Dependabot
security updates from re-opening PRs for it (which bypass the ignore
list).

GUS-W-23572996.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants