From 0534aea2d83f7fbbeafe0c608ca7eb567a41f109 Mon Sep 17 00:00:00 2001 From: Caio Andrade Date: Tue, 1 Jun 2021 10:02:02 -0300 Subject: [PATCH] feat(python): pyenv manager (#10128) --- lib/manager/api.ts | 2 ++ .../pyenv/__snapshots__/extract.spec.ts.snap | 31 +++++++++++++++++++ lib/manager/pyenv/extract.spec.ts | 19 ++++++++++++ lib/manager/pyenv/extract.ts | 11 +++++++ lib/manager/pyenv/index.ts | 11 +++++++ lib/manager/pyenv/readme.md | 1 + 6 files changed, 75 insertions(+) create mode 100644 lib/manager/pyenv/__snapshots__/extract.spec.ts.snap create mode 100644 lib/manager/pyenv/extract.spec.ts create mode 100644 lib/manager/pyenv/extract.ts create mode 100644 lib/manager/pyenv/index.ts create mode 100644 lib/manager/pyenv/readme.md diff --git a/lib/manager/api.ts b/lib/manager/api.ts index 27ddd92efaf2f0..295cb5dfae9973 100644 --- a/lib/manager/api.ts +++ b/lib/manager/api.ts @@ -49,6 +49,7 @@ import * as pipenv from './pipenv'; import * as poetry from './poetry'; import * as preCommit from './pre-commit'; import * as pub from './pub'; +import * as pyenv from './pyenv'; import * as regex from './regex'; import * as rubyVersion from './ruby-version'; import * as sbt from './sbt'; @@ -115,6 +116,7 @@ api.set('pipenv', pipenv); api.set('poetry', poetry); api.set('pre-commit', preCommit); api.set('pub', pub); +api.set('pyenv', pyenv); api.set('regex', regex); api.set('ruby-version', rubyVersion); api.set('sbt', sbt); diff --git a/lib/manager/pyenv/__snapshots__/extract.spec.ts.snap b/lib/manager/pyenv/__snapshots__/extract.spec.ts.snap new file mode 100644 index 00000000000000..a81be83ad9211c --- /dev/null +++ b/lib/manager/pyenv/__snapshots__/extract.spec.ts.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/pyenv/extract extractPackageFile() returns a result 1`] = ` +Array [ + Object { + "currentValue": "3.7.1", + "datasource": "docker", + "depName": "python", + }, +] +`; + +exports[`manager/pyenv/extract extractPackageFile() skips non ranges 1`] = ` +Array [ + Object { + "currentValue": "latestn", + "datasource": "docker", + "depName": "python", + }, +] +`; + +exports[`manager/pyenv/extract extractPackageFile() supports ranges 1`] = ` +Array [ + Object { + "currentValue": "3.8", + "datasource": "docker", + "depName": "python", + }, +] +`; diff --git a/lib/manager/pyenv/extract.spec.ts b/lib/manager/pyenv/extract.spec.ts new file mode 100644 index 00000000000000..fb9a644b76d6ee --- /dev/null +++ b/lib/manager/pyenv/extract.spec.ts @@ -0,0 +1,19 @@ +import { getName } from '../../../test/util'; +import { extractPackageFile } from './extract'; + +describe(getName(), () => { + describe('extractPackageFile()', () => { + it('returns a result', () => { + const res = extractPackageFile('3.7.1\n'); + expect(res.deps).toMatchSnapshot(); + }); + it('supports ranges', () => { + const res = extractPackageFile('3.8\n'); + expect(res.deps).toMatchSnapshot(); + }); + it('skips non ranges', () => { + const res = extractPackageFile('latestn'); + expect(res.deps).toMatchSnapshot(); + }); + }); +}); diff --git a/lib/manager/pyenv/extract.ts b/lib/manager/pyenv/extract.ts new file mode 100644 index 00000000000000..8fee5607c1ff01 --- /dev/null +++ b/lib/manager/pyenv/extract.ts @@ -0,0 +1,11 @@ +import * as datasourceDocker from '../../datasource/docker'; +import type { PackageDependency, PackageFile } from '../types'; + +export function extractPackageFile(content: string): PackageFile { + const dep: PackageDependency = { + depName: 'python', + currentValue: content.trim(), + datasource: datasourceDocker.id, + }; + return { deps: [dep] }; +} diff --git a/lib/manager/pyenv/index.ts b/lib/manager/pyenv/index.ts new file mode 100644 index 00000000000000..7917135d678fc3 --- /dev/null +++ b/lib/manager/pyenv/index.ts @@ -0,0 +1,11 @@ +import { LANGUAGE_PYTHON } from '../../constants/languages'; +import * as dockerVersioning from '../../versioning/docker'; + +export { extractPackageFile } from './extract'; + +export const language = LANGUAGE_PYTHON; + +export const defaultConfig = { + fileMatch: ['(^|/).python-version$'], + versioning: dockerVersioning.id, +}; diff --git a/lib/manager/pyenv/readme.md b/lib/manager/pyenv/readme.md new file mode 100644 index 00000000000000..feadf30e9cf545 --- /dev/null +++ b/lib/manager/pyenv/readme.md @@ -0,0 +1 @@ +Simply keeps the `.python-version` file updated.