diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index e77f6cce..227e6056 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -16,7 +16,11 @@ jobs: strategy: matrix: sls-version: [2, 3] - pipenv-version: ['2022.8.5', '2022.8.13'] + pipenv-version: ['2022.8.5', '2022.8.13', '2023.7.4', '2023.7.9'] + # pipenv 2202.8.13 marks deprecation of pipenv lock --requirements + # https://github.com/pypa/pipenv/blob/30067b458bd7a429f242736b7fde40c9bd4d4f14/CHANGELOG.rst#2022813-2022-08-13 + # pipenv 2023.7.9 marks deprecation of pipenv lock --keep-outdated + # https://github.com/pypa/pipenv/blob/30067b458bd7a429f242736b7fde40c9bd4d4f14/CHANGELOG.rst#202379-2023-07-09 steps: - name: Checkout repository uses: actions/checkout@v2 @@ -95,7 +99,7 @@ jobs: strategy: matrix: sls-version: [2, 3] - pipenv-version: ['2022.8.5', '2022.8.13'] + pipenv-version: ['2022.8.5', '2022.8.13', '2023.7.4', '2023.7.9'] steps: - name: Checkout repository uses: actions/checkout@v2 @@ -149,7 +153,7 @@ jobs: strategy: matrix: sls-version: [2, 3] - pipenv-version: ['2022.8.5', '2022.8.13'] + pipenv-version: ['2022.8.5', '2022.8.13', '2023.7.4', '2023.7.9'] steps: - name: Checkout repository uses: actions/checkout@v2 diff --git a/lib/pipenv.js b/lib/pipenv.js index c59fe26a..1099b651 100644 --- a/lib/pipenv.js +++ b/lib/pipenv.js @@ -77,26 +77,36 @@ async function pipfileToRequirements() { if (semver.gt(pipenvVersion, LEGACY_PIPENV_VERSION)) { // Using new pipenv syntax ( >= 2022.8.13) + // Generate requirements from existing lock file. + // See: https://pipenv.pypa.io/en/latest/advanced/#generating-a-requirements-txt try { - await spawn('pipenv', ['lock', '--keep-outdated'], { + res = await spawn('pipenv', ['requirements'], { cwd: this.servicePath, }); } catch (e) { const stderrBufferContent = (e.stderrBuffer && e.stderrBuffer.toString()) || ''; - if (stderrBufferContent.includes('must exist to use')) { + if (stderrBufferContent.includes('FileNotFoundError')) { // No previous Pipfile.lock, we will try to generate it here + if (this.log) { + this.log.warning( + 'No Pipfile.lock found! Review https://pipenv.pypa.io/en/latest/pipfile/ for recommendations.' + ); + } else { + this.serverless.cli.log( + 'WARNING: No Pipfile.lock found! Review https://pipenv.pypa.io/en/latest/pipfile/ for recommendations.' + ); + } await spawn('pipenv', ['lock'], { cwd: this.servicePath, }); + res = await spawn('pipenv', ['requirements'], { + cwd: this.servicePath, + }); } else { throw e; } } - - res = await spawn('pipenv', ['requirements'], { - cwd: this.servicePath, - }); } else { // Falling back to legacy pipenv syntax res = await spawn( diff --git a/tests/base/package.json b/tests/base/package.json index 38630491..781a4259 100644 --- a/tests/base/package.json +++ b/tests/base/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.3.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } } diff --git a/tests/individually/package.json b/tests/individually/package.json index 43ce4eee..781a4259 100644 --- a/tests/individually/package.json +++ b/tests/individually/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.1.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } } diff --git a/tests/non_build_pyproject/package.json b/tests/non_build_pyproject/package.json index 38630491..781a4259 100644 --- a/tests/non_build_pyproject/package.json +++ b/tests/non_build_pyproject/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.3.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } } diff --git a/tests/non_poetry_pyproject/package.json b/tests/non_poetry_pyproject/package.json index 38630491..781a4259 100644 --- a/tests/non_poetry_pyproject/package.json +++ b/tests/non_poetry_pyproject/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.3.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } } diff --git a/tests/pipenv/package.json b/tests/pipenv/package.json index 38630491..781a4259 100644 --- a/tests/pipenv/package.json +++ b/tests/pipenv/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.3.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } } diff --git a/tests/poetry/package.json b/tests/poetry/package.json index 38630491..781a4259 100644 --- a/tests/poetry/package.json +++ b/tests/poetry/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.3.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } } diff --git a/tests/poetry_individually/package.json b/tests/poetry_individually/package.json index 38630491..781a4259 100644 --- a/tests/poetry_individually/package.json +++ b/tests/poetry_individually/package.json @@ -9,6 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "serverless-python-requirements": "file:serverless-python-requirements-5.3.1.tgz" + "serverless-python-requirements": "file:serverless-python-requirements-6.0.0.tgz" } }