Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
Unreleased
=====================

* Remove Python 3.10 and change the default runtime from Python 3.10 to
Python 3.14. Applications without an explicit runtime selection will use
Python 3.14 on their next staging. Verify application and dependency
compatibility before upgrading, or explicitly select another supported
Python version.

* Remove support for the cflinuxfs3 stack. Migrate applications to a supported
stack before upgrading.

v1.8.43
=====================

Expand Down
2 changes: 1 addition & 1 deletion fixtures/miscellaneous/hooks/requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
gunicorn==20.1.0
gunicorn==26.2.0
14 changes: 7 additions & 7 deletions fixtures/pipenv/Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ verify_ssl = true
name = "pypi"

[packages]
Flask = "==2.2.2"
gunicorn = "==20.1.0"
itsdangerous = "==2.1.2"
Jinja2 = "==3.1.2"
MarkupSafe = "==2.1.2"
Werkzeug = "==2.2.2"
Flask = "==3.1.3"
gunicorn = "==26.2.0"
itsdangerous = "==2.2.0"
Jinja2 = "==3.1.6"
MarkupSafe = "==3.0.4"
Werkzeug = "==3.1.9"

[requires]
python_version = '3.10'
python_version = '3.14'
267 changes: 187 additions & 80 deletions fixtures/pipenv/Pipfile.lock

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions fixtures/services/appdynamics/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Flask==2.2.2
Jinja2==3.1.2
MarkupSafe==2.1.2
Werkzeug==2.2.2
itsdangerous==2.1.2
Flask==3.1.3
Jinja2==3.1.6
MarkupSafe==3.0.4
Werkzeug==3.1.9
itsdangerous==2.2.0
pylibmc==1.6.3
cffi==1.15.1
appdynamics==23.2.0.5678
cffi==2.1.1
appdynamics==26.7.2.9185
2 changes: 1 addition & 1 deletion fixtures/services/sealights/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Flask==2.3.2
Flask==3.1.3
requests==2.30.0
sealights-python-agent
1 change: 0 additions & 1 deletion fixtures/util/override_buildpack/override.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ python:
file: BUILDPACK_DIR/python.tgz
sha256: 062d906c87839d03b243e2821e10653c89b4c92878bfe2bf995dec231e117bfc
cf_stacks:
- cflinuxfs3
- cflinuxfs4
14 changes: 7 additions & 7 deletions fixtures/vendored/pipenv/Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ verify_ssl = true
name = "pypi"

[packages]
Flask = "==2.2.2"
gunicorn = "==20.1.0"
itsdangerous = "==2.1.2"
Jinja2 = "==3.1.2"
MarkupSafe = "==2.1.2"
Werkzeug = "==2.2.2"
Flask = "==3.1.3"
gunicorn = "==26.2.0"
itsdangerous = "==2.2.0"
Jinja2 = "==3.1.6"
MarkupSafe = "==3.0.4"
Werkzeug = "==3.1.9"

[requires]
python_version = '3.10'
python_version = '3.14'
267 changes: 187 additions & 80 deletions fixtures/vendored/pipenv/Pipfile.lock

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
14 changes: 7 additions & 7 deletions fixtures/vendored/simple/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Flask==2.2.2
Jinja2==3.1.2
MarkupSafe==2.1.2
Werkzeug==2.2.2
gunicorn==20.1.0
itsdangerous==2.1.2
Flask==3.1.3
Jinja2==3.1.6
MarkupSafe==3.0.4
Werkzeug==3.1.9
gunicorn==26.2.0
itsdangerous==2.2.0
pylibmc==1.6.3
cffi==1.15.1
cffi==2.1.1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
14 changes: 7 additions & 7 deletions fixtures/vendored/transitive/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Flask==2.2.2
Jinja2==3.1.2
MarkupSafe==2.1.2
Werkzeug==2.2.2
click==8.1.3
itsdangerous==2.1.2
jsonschema==4.17.3
Flask==3.1.3
Jinja2==3.1.6
MarkupSafe==3.0.4
Werkzeug==3.1.9
click==8.5.0
itsdangerous==2.2.0
jsonschema==4.26.0
2 changes: 1 addition & 1 deletion fixtures/vendored/transitive/runtime.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
python-3.10.x
python-3.14.x
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
74 changes: 1 addition & 73 deletions manifest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,8 @@
language: python
default_versions:
- name: python
version: 3.10.x
version: 3.14.x
dependency_deprecation_dates:
- version_line: 3.10.x
name: python
date: 2026-10-04
link: https://www.python.org/dev/peps/pep-0619/
- version_line: 3.11.x
name: python
date: 2027-10-24
Expand Down Expand Up @@ -46,7 +42,6 @@ dependencies:
cf_stacks:
- cflinuxfs5
- cflinuxfs4
- cflinuxfs3
uri: https://buildpacks.cloudfoundry.org/dependencies/manual-binaries/python/libffi-3.2.1-linux-x64-5f5bf32c.tgz
sha256: ff6f2f33aa3d3978a2c1764d6992ac8c384bc84a4c5d193deef891eef2555dc9
source: https://sourceware.org/ftp/libffi/libffi-3.2.1.tar.gz
Expand All @@ -56,7 +51,6 @@ dependencies:
cf_stacks:
- cflinuxfs5
- cflinuxfs4
- cflinuxfs3
uri: https://buildpacks.cloudfoundry.org/dependencies/manual-binaries/python/libmemcache-1.0.18-linux-x64-6d33aa02.tgz
sha256: '009a3476197030e30d0ce924cc044ee4851ef27324e132b29fd12d8cde071915'
source: https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
Expand All @@ -67,7 +61,6 @@ dependencies:
sha256: 790e8ea347cf49ba250fceacdc0b022237a9150717b9e4c17f2e70abc075c05d
cf_stacks:
- cflinuxfs4
- cflinuxfs3
source: https://github.com/conda/conda/archive/25.7.0.tar.gz
source_sha256: 790e8ea347cf49ba250fceacdc0b022237a9150717b9e4c17f2e70abc075c05d
- name: miniforge
Expand All @@ -76,17 +69,8 @@ dependencies:
sha256: b64f77042cf8eafd31ced64f9253a74fb85db63545fe167ba5756aea0e8125be
cf_stacks:
- cflinuxfs4
- cflinuxfs3
source: https://github.com/conda-forge/miniforge/archive/refs/tags/24.7.1-0.tar.gz
source_sha256: ca2f3cea67d6a1dbfd6acb9743891014768b12ad774755c57fbbcbfcd1fd8200
- name: pip
version: '25.2'
uri: https://buildpacks.cloudfoundry.org/dependencies/pip/pip_25.2_linux_noarch_any-stack_7dc1e988.tgz
sha256: 7dc1e9882eb18f53150261c3a0cde7d5a39cdb18843c930ee01db8582f6b4f27
cf_stacks:
- cflinuxfs3
source: https://files.pythonhosted.org/packages/20/16/650289cd3f43d5a2fadfd98c68bd1e1e7f2550a1a5326768cddfbcedb2c5/pip-25.2.tar.gz
source_sha256: 578283f006390f85bb6282dffb876454593d637f5d1be494b5202ce4877e71f2
- name: pip
version: 26.2.2
uri: https://buildpacks.cloudfoundry.org/dependencies/pip/pip_26.2.2_linux_noarch_cflinuxfs4_d876df6b.tgz
Expand All @@ -103,14 +87,6 @@ dependencies:
- cflinuxfs5
source: https://files.pythonhosted.org/packages/fa/e8/0842d757e483e895e670f655084cfe8b8c72580c6769a76b30b2789a0608/pip-26.2.2.tar.gz
source_sha256: 3a8e5c800492787f33a4114ef54444546c340df428974ebba17e0fd47e11af2f
- name: pipenv
version: 2024.4.1
uri: https://buildpacks.cloudfoundry.org/dependencies/pipenv/pipenv_2024.4.1_linux_noarch_cflinuxfs3_b3c74c78.tgz
sha256: b3c74c78ef410ef910ca203f788cb5b0e095fa06b63e47ebc095b2785cc44c01
cf_stacks:
- cflinuxfs3
source: https://files.pythonhosted.org/packages/ca/5b/8ce5227713d692913c186d9a3164eee0236fbc3eaca87d7e2bd5dbb1da36/pipenv-2024.4.1.tar.gz
source_sha256: e8ea6105c1cdda7d5c19df7bd6439a006751f3d4e017602c791e7b51314adf84
- name: pipenv
version: 2026.10.3
uri: https://buildpacks.cloudfoundry.org/dependencies/pipenv/pipenv_2026.10.3_linux_noarch_cflinuxfs4_c0d825fc.tgz
Expand Down Expand Up @@ -143,38 +119,6 @@ dependencies:
- cflinuxfs5
source: https://files.pythonhosted.org/packages/42/b5/50f1fda26c4fe5b1d6ce5cdf0391bdfa1ca12fdcb8ad68344d5cf678fc90/poetry_core-2.5.0.tar.gz
source_sha256: 81d04c9253b19d0604718268d781867c8f7b2128e5b25bbf1e84141eec6b89c4
- name: python
version: 3.10.19
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.10.19_linux_x64_cflinuxfs3_d754b71d.tgz
sha256: d754b71d6ee49fa556e22a0cf8370ab822716f0571eff5024fbc1d5918dd2ee6
cf_stacks:
- cflinuxfs3
source: https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tgz
source_sha256: a078fb2d7a216071ebbe2e34b5f5355dd6b6e9b0cd1bacc4a41c63990c5a0eec
- name: python
version: 3.10.22
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.10.22_linux_x64_cflinuxfs4_e1af3723.tgz
sha256: e1af372322dcbf05a0458bfb792b811abafd944d40035c63ce367f6ee334e75c
cf_stacks:
- cflinuxfs4
source: https://www.python.org/ftp/python/3.10.22/Python-3.10.22.tgz
source_sha256: 9448b34d16f8e3db0964ac3ed9fb283197747543c2c021f283ffd2c8b7287357
- name: python
version: 3.10.22
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.10.22_linux_x64_cflinuxfs5_d8a723d9.tgz
sha256: d8a723d94bda5eb0e28bcaeaaa51fcccfd28174d09562bc85133b470b5689057
cf_stacks:
- cflinuxfs5
source: https://www.python.org/ftp/python/3.10.22/Python-3.10.22.tgz
source_sha256: 9448b34d16f8e3db0964ac3ed9fb283197747543c2c021f283ffd2c8b7287357
- name: python
version: 3.11.14
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.11.14_linux_x64_cflinuxfs3_294394be.tgz
sha256: 294394be5406d1f8a507672445d57ef4a6ae7398839b47832d29ac0aba8508de
cf_stacks:
- cflinuxfs3
source: https://www.python.org/ftp/python/3.11.14/Python-3.11.14.tgz
source_sha256: 563d2a1b2a5ba5d5409b5ecd05a0e1bf9b028cf3e6a6f0c87a5dc8dc3f2d9182
- name: python
version: 3.11.18
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.11.18_linux_x64_cflinuxfs4_2dd696f8.tgz
Expand Down Expand Up @@ -207,14 +151,6 @@ dependencies:
- cflinuxfs5
source: https://www.python.org/ftp/python/3.12.16/Python-3.12.16.tgz
source_sha256: 710c3e75dac8b2f258d9cd0f76e5c4c2e9175fac9e249c98901552f7cf33b7dd
- name: python
version: 3.13.9
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.13.9_linux_x64_cflinuxfs3_1c04ba8c.tgz
sha256: 1c04ba8c1c4eaa86834888d4e8291189674c1f7508cfac850c2c9ccec13c79a3
cf_stacks:
- cflinuxfs3
source: https://www.python.org/ftp/python/3.13.9/Python-3.13.9.tgz
source_sha256: c4c066af19c98fb7835d473bebd7e23be84f6e9874d47db9e39a68ee5d0ce35c
- name: python
version: 3.13.18
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.13.18_linux_x64_cflinuxfs4_86d7d323.tgz
Expand All @@ -231,14 +167,6 @@ dependencies:
- cflinuxfs5
source: https://www.python.org/ftp/python/3.13.18/Python-3.13.18.tgz
source_sha256: 99dbc847fb6a3fb26358370fb4c591215864116ebb584f2b89ab0b74c51dfa2a
- name: python
version: 3.14.2
uri: https://buildpack-dependencies.tanzu.vmware.com/cf/python/python_3.14.2_linux_x64_cflinuxfs3_82c1798d.tgz
sha256: 82c1798db9c1af3c4e6bd589cb1016b3c38981f809a63338f6708d6385c6e97b
cf_stacks:
- cflinuxfs3
source: https://www.python.org/ftp/python/3.14.2/Python-3.14.2.tgz
source_sha256: c609e078adab90e2c6bacb6afafacd5eaf60cd94cf670f1e159565725fcd448d
- name: python
version: 3.14.10
uri: https://buildpacks.cloudfoundry.org/dependencies/python/python_3.14.10_linux_x64_cflinuxfs4_fb1e502b.tgz
Expand Down
16 changes: 2 additions & 14 deletions src/python/brats/brats_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,10 @@ var _ = Describe("Python buildpack", func() {
Expect(bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte("Hello, bcrypt"))).ToNot(HaveOccurred())
})
By("supports postgres by raising a no connection error", func() {
Expect(app.GetBody("/pg")).To(
Or(
// cflinuxfs3 and cflinuxfs4 have different messages for the same error.
ContainSubstring("could not connect to server: No such file or directory"),
ContainSubstring("failed: No such file or directory"),
),
)
Expect(app.GetBody("/pg")).To(ContainSubstring("failed: No such file or directory"))
})
By("supports mysql by raising a no connection error", func() {
Expect(app.GetBody("/mysql")).To(
Or(
// cflinuxfs3 and cflinuxfs4 have different messages for the same error.
ContainSubstring("Can't connect to local MySQL server through socket"),
ContainSubstring("Can't connect to local server through socket"),
),
)
Expect(app.GetBody("/mysql")).To(ContainSubstring("Can't connect to local server through socket"))
})
By("supports loading and running the hiredis lib", func() {
Expect(app.GetBody("/redis")).To(ContainSubstring("Hello"))
Expand Down
2 changes: 1 addition & 1 deletion src/python/integration/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func init() {
flag.BoolVar(&settings.Serial, "serial", false, "run serial buildpack tests")
flag.StringVar(&settings.Platform, "platform", "cf", `switchblade platform to test against ("cf" or "docker")`)
flag.StringVar(&settings.GitHubToken, "github-token", "", "use the token to make GitHub API requests")
flag.StringVar(&settings.Stack, "stack", "cflinuxfs3", "stack to use when pushing apps")
flag.StringVar(&settings.Stack, "stack", "cflinuxfs4", "stack to use when pushing apps")
}

func TestIntegration(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions src/python/integration/versions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func testVersions(platform switchblade.Platform, fixtures, root string) func(*te
file, err := os.OpenFile(filepath.Join(source, "runtime.txt"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
Expect(err).NotTo(HaveOccurred())

_, err = file.WriteString("python-3.10.x")
_, err = file.WriteString("python-3.14.x")
Expect(err).NotTo(HaveOccurred())

Expect(file.Close()).To(Succeed())
Expand All @@ -94,7 +94,7 @@ func testVersions(platform switchblade.Platform, fixtures, root string) func(*te
Eventually(deployment).Should(Serve("Hello, World!"))

Expect(logs.String()).To(SatisfyAll(
ContainSubstring("Installing python 3.10"),
ContainSubstring("Installing python 3.14"),
))
})
})
Expand Down
Loading