Compare commits

...

6 Commits

Author SHA1 Message Date
dependabot[bot]
0c35162ab0 Bump @types/node from 20.11.25 to 24.3.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.25 to 24.3.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.3.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-04 02:58:57 +00:00
Salman Chishti
e797f83bcb Upgrade to node 24 (#1164)
* Upgrade to node 24

Upgrade ot node

* licence manual updates

* pckage.json version update

* version update

* update package-lock.json

* upgrade `actions/checkout` to v5 and `actions/setup-python` to v6 in README.md

* upgrade `actions/checkout` to v5 and `actions/setup-python` to v6 in advanced-usage.md

Updated GitHub Actions to use newer versions of checkout and setup-python actions.

* node-version update in the workflows

---------

Co-authored-by: Aparna Jyothi <aparnajyothi-y@github.com>
Co-authored-by: priya-kinthali <147703874+priya-kinthali@users.noreply.github.com>
2025-09-03 21:57:37 -05:00
aparnajyothi-y
3d1e2d2ca0 Revert "Enhance cache-dependency-path handling to support files outside the workspace root" (#1186)
* Revert "Enhance cache-dependency-path handling to support files outside the w…"

This reverts commit 1264885983.

* pckage.json version update

---------

Co-authored-by: Haritha <73516759+HarithaVattikuti@users.noreply.github.com>
2025-08-28 13:30:09 -05:00
aparnajyothi-y
65b071217a Clarify pythonLocation behavior for PyPy and GraalPy in environment variables (#1183)
* documentation update

* spaces update
2025-08-25 21:51:55 -05:00
dependabot[bot]
5b668cf765 Bump actions/checkout from 4 to 5 (#1181)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  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>
2025-08-25 21:49:07 -05:00
aparnajyothi-y
f62a0e252f Change missing cache directory error to warning (#1182)
* update error to warning when no dependency to cache

* updated the return
2025-08-25 21:45:55 -05:00
22 changed files with 168 additions and 397 deletions

View File

@@ -14,4 +14,4 @@ jobs:
name: Basic validation
uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main
with:
node-version: '20.x'
node-version: '24.x'

View File

@@ -16,4 +16,4 @@ jobs:
name: Check dist/
uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main
with:
node-version: '20.x'
node-version: '24.x'

View File

@@ -33,7 +33,7 @@ jobs:
]
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:
@@ -60,7 +60,7 @@ jobs:
]
python-version: [3.13.1t, 3.13.2t, 3.13.5t]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
id: cache-pipenv
uses: ./
@@ -90,7 +90,7 @@ jobs:
]
python-version: [3.13.0, 3.13.1, 3.13.2]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install poetry
run: pipx install poetry
- name: Init pyproject.toml
@@ -122,7 +122,7 @@ jobs:
]
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:
@@ -150,7 +150,7 @@ jobs:
]
python-version: [3.13.1t, 3.13.2t, 3.13.5t]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
id: cache-pipenv
uses: ./
@@ -181,7 +181,7 @@ jobs:
]
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:
@@ -209,7 +209,7 @@ jobs:
]
python-version: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:

View File

@@ -46,7 +46,7 @@ jobs:
- os: windows-latest
python-version: pypy-3.11-v7.x
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:
@@ -85,7 +85,7 @@ jobs:
- os: ubuntu-22.04-arm
python-version: pypy-3.10-v7.x
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
id: cache-pipenv
uses: ./
@@ -140,7 +140,7 @@ jobs:
'3.13'
]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install poetry
run: pipx install poetry
- name: Init pyproject.toml
@@ -184,7 +184,7 @@ jobs:
- os: windows-latest
python-version: pypy-3.11-v7.x
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:
@@ -222,7 +222,7 @@ jobs:
- os: ubuntu-22.04-arm
python-version: pypy-3.11-v7.x
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
id: cache-pipenv
uses: ./
@@ -268,7 +268,7 @@ jobs:
]
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:
@@ -296,7 +296,7 @@ jobs:
]
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python
uses: ./
with:

View File

@@ -29,7 +29,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Run with setup-python 3.9.13
uses: ./

View File

@@ -14,7 +14,7 @@ jobs:
steps:
- name: Checking out
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Publish
id: publish
uses: actions/publish-immutable-action@v0.0.4

View File

@@ -35,7 +35,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.graalpy }}
id: setup-python
@@ -86,7 +86,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.graalpy }}
id: setup-python
@@ -108,7 +108,7 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest, macos-13]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup GraalPy and check latest
uses: ./
id: graalpy

View File

@@ -46,7 +46,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.pypy }}
id: setup-python
@@ -98,7 +98,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.pypy }}
id: setup-python
@@ -150,7 +150,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.pypy }}
id: setup-python
@@ -181,7 +181,7 @@ jobs:
macos-13
]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup PyPy and check latest
uses: ./
with:
@@ -223,7 +223,7 @@ jobs:
macos-13
]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup PyPy and check latest
uses: ./
with:

View File

@@ -33,7 +33,7 @@ jobs:
python: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.python }}
id: setup-python
@@ -70,7 +70,7 @@ jobs:
python: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: echo ${{ matrix.python }} > .python-version
@@ -110,7 +110,7 @@ jobs:
python: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: echo ${{ matrix.python }} > .python-version
@@ -148,7 +148,7 @@ jobs:
python: [3.13.0, 3.13.1, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -189,7 +189,7 @@ jobs:
python: [3.13.0, 3.13.1, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -230,7 +230,7 @@ jobs:
python: [3.13.0t, 3.13.1t, 3.13.2t, 3.14t-dev]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-tool-versions-file ${{ matrix.python }}
run: |
@@ -261,7 +261,7 @@ jobs:
python: [3.13t, 3.14t-dev]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -301,7 +301,7 @@ jobs:
python: [3.13.0t, 3.13.1t, 3.13.2t, 3.14t-dev]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -340,7 +340,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python 3.14.0-alpha.6
id: setup-python
@@ -377,7 +377,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python 3.14t-dev
id: setup-python
@@ -414,7 +414,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python 3.14t
id: setup-python
@@ -453,7 +453,7 @@ jobs:
python: [3.13.0t, 3.13.1t, 3.13.2t]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.python }}
id: setup-python
@@ -485,7 +485,7 @@ jobs:
]
python-version: [3.13t, 3.14t-dev]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python and check latest
id: setup-python
uses: ./
@@ -511,7 +511,7 @@ jobs:
macos-13
]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python and check latest
id: setup-python
uses: ./
@@ -542,7 +542,7 @@ jobs:
python: [3.13.1, 3.13.2, 3.14-dev, 3.14.0-alpha.6]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.python }}
id: setup-python
uses: ./

View File

@@ -33,7 +33,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.python }}
id: setup-python
@@ -77,7 +77,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: echo ${{ matrix.python }} > .python-version
@@ -124,7 +124,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: echo ${{ matrix.python }} > .python-version
@@ -169,7 +169,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, '==3.12.3', 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -219,7 +219,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, 3.12.3, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -272,7 +272,7 @@ jobs:
python: graalpy-24.1.2
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-tool-versions-file ${{ matrix.python }}
run: |
@@ -303,7 +303,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -353,7 +353,7 @@ jobs:
python: [3.9.13, 3.10.11, 3.11.9, 3.13.2]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: build-version-file ${{ matrix.python }}
run: |
@@ -402,7 +402,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python 3.14.0-alpha.6
id: setup-python
@@ -445,7 +445,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python 3.14-dev
id: setup-python
@@ -482,7 +482,7 @@ jobs:
]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python 3.14
id: setup-python
@@ -521,7 +521,7 @@ jobs:
python: ['3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: setup-python ${{ matrix.python }}
id: setup-python
@@ -553,7 +553,7 @@ jobs:
]
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python and check latest
uses: ./
with:
@@ -585,7 +585,7 @@ jobs:
macos-13
]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Setup Python and check latest
uses: ./
with:

View File

@@ -1,6 +1,6 @@
---
name: "@types/node"
version: 20.11.25
version: 24.1.0
type: npm
summary: TypeScript definitions for node
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node

View File

@@ -1,6 +1,6 @@
---
name: undici-types
version: 5.26.5
version: 7.8.0
type: npm
summary: A stand-alone types package for Undici
homepage: https://undici.nodejs.org

View File

@@ -18,8 +18,8 @@ See [action.yml](action.yml)
**Python**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
- run: python my_script.py
@@ -28,8 +28,8 @@ steps:
**PyPy**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: 'pypy3.10'
- run: python my_script.py
@@ -38,8 +38,8 @@ steps:
**GraalPy**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: 'graalpy-24.0'
- run: python my_script.py
@@ -48,8 +48,8 @@ steps:
**Free threaded Python**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13t'
- run: python my_script.py
@@ -83,8 +83,8 @@ The action defaults to searching for a dependency file (`requirements.txt` or `p
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pip' # caching pip dependencies

View File

@@ -1,149 +0,0 @@
import * as core from '@actions/core';
import * as fs from 'fs';
import * as path from 'path';
import {cacheDependencies} from '../src/setup-python';
import {getCacheDistributor} from '../src/cache-distributions/cache-factory';
jest.mock('fs', () => {
const actualFs = jest.requireActual('fs');
return {
...actualFs,
promises: {
access: jest.fn(),
mkdir: jest.fn(),
copyFile: jest.fn(),
writeFile: jest.fn(),
appendFile: jest.fn()
}
};
});
jest.mock('@actions/core');
jest.mock('../src/cache-distributions/cache-factory');
const mockedFsPromises = fs.promises as jest.Mocked<typeof fs.promises>;
const mockedCore = core as jest.Mocked<typeof core>;
const mockedGetCacheDistributor = getCacheDistributor as jest.Mock;
describe('cacheDependencies', () => {
const mockRestoreCache = jest.fn();
beforeEach(() => {
jest.clearAllMocks();
process.env.GITHUB_ACTION_PATH = '/github/action';
process.env.GITHUB_WORKSPACE = '/github/workspace';
mockedCore.getInput.mockReturnValue('nested/deps.lock');
// Simulate file exists by resolving access without error
mockedFsPromises.access.mockImplementation(async p => {
const pathStr = typeof p === 'string' ? p : p.toString();
if (pathStr === '/github/action/nested/deps.lock') {
return Promise.resolve();
}
// Simulate directory doesn't exist to test mkdir
if (pathStr === path.dirname('/github/workspace/nested/deps.lock')) {
return Promise.reject(new Error('no dir'));
}
return Promise.resolve();
});
// Simulate mkdir success
mockedFsPromises.mkdir.mockResolvedValue(undefined);
// Simulate copyFile success
mockedFsPromises.copyFile.mockResolvedValue(undefined);
mockedGetCacheDistributor.mockReturnValue({restoreCache: mockRestoreCache});
});
it('copies the dependency file and resolves the path with directory structure', async () => {
await cacheDependencies('pip', '3.12');
const sourcePath = path.resolve('/github/action', 'nested/deps.lock');
const targetPath = path.resolve('/github/workspace', 'nested/deps.lock');
expect(mockedFsPromises.access).toHaveBeenCalledWith(
sourcePath,
fs.constants.F_OK
);
expect(mockedFsPromises.mkdir).toHaveBeenCalledWith(
path.dirname(targetPath),
{
recursive: true
}
);
expect(mockedFsPromises.copyFile).toHaveBeenCalledWith(
sourcePath,
targetPath
);
expect(mockedCore.info).toHaveBeenCalledWith(
`Copied ${sourcePath} to ${targetPath}`
);
expect(mockedCore.info).toHaveBeenCalledWith(
`Resolved cache-dependency-path: nested/deps.lock`
);
expect(mockRestoreCache).toHaveBeenCalled();
});
it('warns if the dependency file does not exist', async () => {
// Simulate file does not exist by rejecting access
mockedFsPromises.access.mockRejectedValue(new Error('file not found'));
await cacheDependencies('pip', '3.12');
expect(mockedCore.warning).toHaveBeenCalledWith(
expect.stringContaining('does not exist')
);
expect(mockedFsPromises.copyFile).not.toHaveBeenCalled();
expect(mockRestoreCache).toHaveBeenCalled();
});
it('warns if file copy fails', async () => {
// Simulate copyFile failure
mockedFsPromises.copyFile.mockRejectedValue(new Error('copy failed'));
await cacheDependencies('pip', '3.12');
expect(mockedCore.warning).toHaveBeenCalledWith(
expect.stringContaining('Failed to copy file')
);
expect(mockRestoreCache).toHaveBeenCalled();
});
it('skips path logic if no input is provided', async () => {
mockedCore.getInput.mockReturnValue('');
await cacheDependencies('pip', '3.12');
expect(mockedFsPromises.copyFile).not.toHaveBeenCalled();
expect(mockedCore.warning).not.toHaveBeenCalled();
expect(mockRestoreCache).toHaveBeenCalled();
});
it('does not copy if dependency file is already inside the workspace but still sets resolved path', async () => {
// Simulate cacheDependencyPath inside workspace
mockedCore.getInput.mockReturnValue('deps.lock');
// Override sourcePath and targetPath to be equal
const actionPath = '/github/workspace'; // same path for action and workspace
process.env.GITHUB_ACTION_PATH = actionPath;
process.env.GITHUB_WORKSPACE = actionPath;
// access resolves to simulate file exists
mockedFsPromises.access.mockResolvedValue();
await cacheDependencies('pip', '3.12');
const sourcePath = path.resolve(actionPath, 'deps.lock');
const targetPath = sourcePath; // same path
expect(mockedFsPromises.copyFile).not.toHaveBeenCalled();
expect(mockedCore.info).toHaveBeenCalledWith(
`Dependency file is already inside the workspace: ${sourcePath}`
);
expect(mockedCore.info).toHaveBeenCalledWith(
`Resolved cache-dependency-path: deps.lock`
);
expect(mockRestoreCache).toHaveBeenCalled();
});
});

View File

@@ -39,7 +39,7 @@ outputs:
python-path:
description: "The absolute path to the Python or PyPy executable."
runs:
using: 'node20'
using: 'node24'
main: 'dist/setup/index.js'
post: 'dist/cache-save/index.js'
post-if: success()

View File

@@ -87883,7 +87883,8 @@ function saveCache(packageManager) {
const cachePaths = JSON.parse(cachePathState);
core.debug(`paths for caching are ${cachePaths.join(', ')}`);
if (!isCacheDirectoryExists(cachePaths)) {
throw new Error(`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePaths.join(', ')}. This likely indicates that there are no dependencies to cache. Consider removing the cache step if it is not needed.`);
core.warning(`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePaths.join(', ')}. This likely indicates that there are no dependencies to cache. Consider removing the cache step if it is not needed.`);
return;
}
const primaryKey = core.getState(cache_distributor_1.State.STATE_CACHE_PRIMARY_KEY);
const matchedKey = core.getState(cache_distributor_1.State.CACHE_MATCHED_KEY);

43
dist/setup/index.js vendored
View File

@@ -97935,7 +97935,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.cacheDependencies = void 0;
const core = __importStar(__nccwpck_require__(7484));
const finder = __importStar(__nccwpck_require__(6843));
const finderPyPy = __importStar(__nccwpck_require__(2625));
@@ -97954,50 +97953,10 @@ function isGraalPyVersion(versionSpec) {
function cacheDependencies(cache, pythonVersion) {
return __awaiter(this, void 0, void 0, function* () {
const cacheDependencyPath = core.getInput('cache-dependency-path') || undefined;
let resolvedDependencyPath = undefined;
if (cacheDependencyPath) {
const actionPath = process.env.GITHUB_ACTION_PATH || '';
const workspace = process.env.GITHUB_WORKSPACE || process.cwd();
const sourcePath = path.resolve(actionPath, cacheDependencyPath);
const relativePath = path.relative(actionPath, sourcePath);
const targetPath = path.resolve(workspace, relativePath);
try {
const sourceExists = yield fs_1.default.promises
.access(sourcePath, fs_1.default.constants.F_OK)
.then(() => true)
.catch(() => false);
if (!sourceExists) {
core.warning(`The resolved cache-dependency-path does not exist: ${sourcePath}`);
}
else {
if (sourcePath !== targetPath) {
const targetDir = path.dirname(targetPath);
// Create target directory if it doesn't exist
yield fs_1.default.promises.mkdir(targetDir, { recursive: true });
// Copy file asynchronously
yield fs_1.default.promises.copyFile(sourcePath, targetPath);
core.info(`Copied ${sourcePath} to ${targetPath}`);
}
else {
core.info(`Dependency file is already inside the workspace: ${sourcePath}`);
}
resolvedDependencyPath = path
.relative(workspace, targetPath)
.replace(/\\/g, '/');
core.info(`Resolved cache-dependency-path: ${resolvedDependencyPath}`);
}
}
catch (error) {
core.warning(`Failed to copy file from ${sourcePath} to ${targetPath}: ${error}`);
}
}
// Pass resolvedDependencyPath if available, else fallback to original input
const dependencyPathForCache = resolvedDependencyPath !== null && resolvedDependencyPath !== void 0 ? resolvedDependencyPath : cacheDependencyPath;
const cacheDistributor = (0, cache_factory_1.getCacheDistributor)(cache, pythonVersion, dependencyPathForCache);
const cacheDistributor = (0, cache_factory_1.getCacheDistributor)(cache, pythonVersion, cacheDependencyPath);
yield cacheDistributor.restoreCache();
});
}
exports.cacheDependencies = cacheDependencies;
function resolveVersionInputFromDefaultFile() {
const couples = [
['.python-version', utils_1.getVersionsInputFromPlainFile]

View File

@@ -32,8 +32,8 @@ If there is a specific version of Python that you need and you don't want to wor
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.12.6'
- run: python my_script.py
@@ -46,8 +46,8 @@ You can specify **only a major and minor version** if you are okay with the most
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
- run: python my_script.py
@@ -60,8 +60,8 @@ You can specify the version with **prerelease tag** to download and set up an ac
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.14.0-alpha.1'
- run: python my_script.py
@@ -71,8 +71,8 @@ It's also possible to use **x.y-dev syntax** to download and set up the latest p
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.14-dev'
- run: python my_script.py
@@ -84,8 +84,8 @@ Free threaded Python is only available starting with the 3.13 release.
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13t'
- run: python my_script.py
@@ -95,8 +95,8 @@ Note that the **t** suffix is not `semver` syntax. If you wish to specify a rang
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '>=3.13'
freethreaded: true
@@ -109,8 +109,8 @@ You can also use several types of ranges that are specified in [semver](https://
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '>=3.9 <3.14'
- run: python my_script.py
@@ -120,8 +120,8 @@ steps:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13.0-alpha - 3.13.0'
- run: python my_script.py
@@ -131,8 +131,8 @@ steps:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.x'
- run: python my_script.py
@@ -164,8 +164,8 @@ jobs:
- 'pypy3.10' # the latest available version of PyPy that supports Python 3.10
- 'pypy3.10-v7.3.17' # Python 3.10 and PyPy 7.3.17
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- run: python my_script.py
@@ -182,8 +182,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: |
3.11
@@ -199,8 +199,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: |
pypy-3.10-v7.3.x
@@ -216,8 +216,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: |
3.11
@@ -241,9 +241,9 @@ jobs:
python-version: ['3.x', 'pypy3.8', 'pypy3.9' ]
name: Python ${{ matrix.python-version }} sample
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
architecture: x64
@@ -267,9 +267,9 @@ jobs:
- os: windows-latest
python-version: '3.9'
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
@@ -285,8 +285,8 @@ jobs:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version-file: '.python-version' # Read python version from a file .python-version
- run: python my_script.py
@@ -294,8 +294,8 @@ steps:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version-file: 'pyproject.toml' # Read python version from a file pyproject.toml
- run: python my_script.py
@@ -303,8 +303,8 @@ steps:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version-file: '.tool-versions' # Read python version from a file .tool-versions
- run: python my_script.py
@@ -312,8 +312,8 @@ steps:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version-file: 'Pipfile' # Read python version from a file Pipfile
- run: python my_script.py
@@ -327,8 +327,8 @@ If `check-latest` is set to `true`, the action first checks if the cached versio
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
check-latest: true
@@ -342,8 +342,8 @@ steps:
**Caching pipenv dependencies:**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pipenv'
@@ -355,10 +355,10 @@ steps:
**Caching poetry dependencies:**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install poetry
run: pipx install poetry
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'poetry'
@@ -370,8 +370,8 @@ steps:
**Using a list of file paths to cache dependencies**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pipenv'
@@ -385,8 +385,8 @@ steps:
**Using wildcard patterns to cache dependencies**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pip'
@@ -397,8 +397,8 @@ steps:
**Using a list of wildcard patterns to cache dependencies**
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pip'
@@ -412,8 +412,8 @@ steps:
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pip'
@@ -421,7 +421,7 @@ steps:
- run: pip install -e .
# Or pip install -e '.[test]' to install test dependencies
```
Note: cache-dependency-path supports files located outside the workspace root by copying them into the workspace to enable proper caching.
# Outputs and environment variables
## Outputs
@@ -435,8 +435,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
id: cp312
with:
python-version: "3.9.0 - 3.12.0"
@@ -452,8 +452,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
id: cp313
with:
python-version: "3.13"
@@ -468,8 +468,8 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
id: cp313
with:
python-version: "3.13.0"
@@ -477,16 +477,16 @@ jobs:
- run: echo '${{ steps.cp313.outputs.cache-hit }}' # true if cache-hit occurred on the primary key
```
## Environment variables
### Environment variables
These environment variables become available after setup-python action execution:
| **Env.variable** | **Description** |
| ----------- | ----------- |
| pythonLocation |Contains the absolute path to the folder where the requested version of Python or PyPy is installed|
| Python_ROOT_DIR | https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython |
| Python2_ROOT_DIR |https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2|
| Python3_ROOT_DIR |https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3|
| **Env.variable** | **Description**|
|----------------------|-------------|
| `pythonLocation` | Contains the absolute path to the folder where the requested version of Python, PyPy, or GraalPy is installed. <br><br>**Executable location by implementation:** <br>**CPython** `$pythonLocation/bin/python` (Linux/macOS), `$pythonLocation/python.exe` (Windows) <br>**PyPy** `$pythonLocation/bin/python` (Linux/macOS), `$pythonLocation/python.exe` (Windows) <br>**GraalPy** `$pythonLocation/bin/python` (Linux/macOS) <br><br>Note: CPython versions include a symlink or copy of the Python executable at the root, while PyPy and GraalPy retain upstream directory layouts. |
| `Python_ROOT_DIR` | https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython |
| `Python2_ROOT_DIR` | https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 |
| `Python3_ROOT_DIR` | https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 |
## Using `update-environment` flag
@@ -499,8 +499,8 @@ Such a requirement on side-effect could be because you don't want your composite
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
id: cp313
with:
python-version: '3.13'
@@ -645,8 +645,8 @@ jobs:
python_version: ["3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "${{ matrix.python_version }}"
allow-prereleases: true
@@ -660,9 +660,9 @@ The version of Pip should be specified in the format `major`, `major.minor`, or
```yaml
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.13'
pip-version: '25.0.1'
@@ -671,4 +671,4 @@ The version of Pip should be specified in the format `major`, `major.minor`, or
```
> The `pip-version` input is supported only with standard Python versions. It is not available when using PyPy or GraalPy.
> Using a specific or outdated version of pip may result in compatibility or security issues and can cause job failures. For best practices and guidance, refer to the official [pip documentation](https://pip.pypa.io/en/stable/).
> Using a specific or outdated version of pip may result in compatibility or security issues and can cause job failures. For best practices and guidance, refer to the official [pip documentation](https://pip.pypa.io/en/stable/).

25
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "setup-python",
"version": "5.0.0",
"version": "6.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "setup-python",
"version": "5.0.0",
"version": "6.0.0",
"license": "MIT",
"dependencies": {
"@actions/cache": "^4.0.3",
@@ -21,7 +21,7 @@
},
"devDependencies": {
"@types/jest": "^29.5.12",
"@types/node": "^20.11.25",
"@types/node": "^24.3.0",
"@types/semver": "^7.7.0",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",
@@ -35,6 +35,9 @@
"prettier": "^3.5.3",
"ts-jest": "^29.3.2",
"typescript": "^5.4.2"
},
"engines": {
"node": ">=24.0.0"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -1593,11 +1596,12 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
"integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
"version": "24.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz",
"integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==",
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
"undici-types": "~7.10.0"
}
},
"node_modules/@types/node-fetch": {
@@ -5467,9 +5471,10 @@
}
},
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
"version": "7.10.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz",
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
"license": "MIT"
},
"node_modules/update-browserslist-db": {
"version": "1.0.13",

View File

@@ -1,9 +1,12 @@
{
"name": "setup-python",
"version": "5.0.0",
"version": "6.0.0",
"private": true,
"description": "Setup python action",
"main": "dist/index.js",
"engines": {
"node": ">=24.0.0"
},
"scripts": {
"build": "ncc build -o dist/setup src/setup-python.ts && ncc build -o dist/cache-save src/cache-save.ts",
"format": "prettier --no-error-on-unmatched-pattern --config ./.prettierrc.js --write \"**/*.{ts,yml,yaml}\"",
@@ -37,7 +40,7 @@
},
"devDependencies": {
"@types/jest": "^29.5.12",
"@types/node": "^20.11.25",
"@types/node": "^24.3.0",
"@types/semver": "^7.7.0",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",

View File

@@ -38,11 +38,12 @@ async function saveCache(packageManager: string) {
core.debug(`paths for caching are ${cachePaths.join(', ')}`);
if (!isCacheDirectoryExists(cachePaths)) {
throw new Error(
core.warning(
`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePaths.join(
', '
)}. This likely indicates that there are no dependencies to cache. Consider removing the cache step if it is not needed.`
);
return;
}
const primaryKey = core.getState(State.STATE_CACHE_PRIMARY_KEY);

View File

@@ -22,62 +22,13 @@ function isGraalPyVersion(versionSpec: string) {
return versionSpec.startsWith('graalpy');
}
export async function cacheDependencies(cache: string, pythonVersion: string) {
async function cacheDependencies(cache: string, pythonVersion: string) {
const cacheDependencyPath =
core.getInput('cache-dependency-path') || undefined;
let resolvedDependencyPath: string | undefined = undefined;
if (cacheDependencyPath) {
const actionPath = process.env.GITHUB_ACTION_PATH || '';
const workspace = process.env.GITHUB_WORKSPACE || process.cwd();
const sourcePath = path.resolve(actionPath, cacheDependencyPath);
const relativePath = path.relative(actionPath, sourcePath);
const targetPath = path.resolve(workspace, relativePath);
try {
const sourceExists = await fs.promises
.access(sourcePath, fs.constants.F_OK)
.then(() => true)
.catch(() => false);
if (!sourceExists) {
core.warning(
`The resolved cache-dependency-path does not exist: ${sourcePath}`
);
} else {
if (sourcePath !== targetPath) {
const targetDir = path.dirname(targetPath);
// Create target directory if it doesn't exist
await fs.promises.mkdir(targetDir, {recursive: true});
// Copy file asynchronously
await fs.promises.copyFile(sourcePath, targetPath);
core.info(`Copied ${sourcePath} to ${targetPath}`);
} else {
core.info(
`Dependency file is already inside the workspace: ${sourcePath}`
);
}
resolvedDependencyPath = path
.relative(workspace, targetPath)
.replace(/\\/g, '/');
core.info(`Resolved cache-dependency-path: ${resolvedDependencyPath}`);
}
} catch (error) {
core.warning(
`Failed to copy file from ${sourcePath} to ${targetPath}: ${error}`
);
}
}
// Pass resolvedDependencyPath if available, else fallback to original input
const dependencyPathForCache = resolvedDependencyPath ?? cacheDependencyPath;
const cacheDistributor = getCacheDistributor(
cache,
pythonVersion,
dependencyPathForCache
cacheDependencyPath
);
await cacheDistributor.restoreCache();
}