diff --git a/.github/workflows/e2e-cache-freethreaded.yml b/.github/workflows/e2e-cache-freethreaded.yml index 6f1a667b..97cc44bc 100644 --- a/.github/workflows/e2e-cache-freethreaded.yml +++ b/.github/workflows/e2e-cache-freethreaded.yml @@ -29,7 +29,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.0t, 3.13.1t, 3.13.2t] steps: @@ -56,7 +56,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.1t, 3.13.2t, 3.13.5t] steps: @@ -86,7 +86,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.0, 3.13.1, 3.13.2] steps: @@ -118,7 +118,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.0t, 3.13.1t, 3.13.2t] steps: @@ -146,7 +146,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.1t, 3.13.2t, 3.13.5t] steps: @@ -177,7 +177,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.0t, 3.13.1t, 3.13.2t] steps: @@ -205,7 +205,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [3.13.0t, 3.13.1t, 3.13.2t] steps: @@ -219,56 +219,3 @@ jobs: pip-version: '25.0.1' - name: Install dependencies run: pip install numpy pandas requests - - python-pip-dependencies-caching-with-pip-install: - name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}) - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: - [ - ubuntu-latest, - ubuntu-22.04, - ubuntu-24.04-arm, - ubuntu-22.04-arm, - windows-latest, - macos-latest, - macos-15-intel - ] - python-version: [3.13.0t, 3.13.1t, 3.13.2t] - steps: - - uses: actions/checkout@v5 - - name: Setup Python - uses: ./ - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - pip-install: numpy pandas requests - - python-pip-dependencies-caching-path-with-pip-install: - name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}, caching path) - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: - [ - ubuntu-latest, - ubuntu-22.04, - ubuntu-24.04-arm, - ubuntu-22.04-arm, - windows-latest, - macos-latest, - macos-15-intel - ] - python-version: [3.13.0t, 3.13.1t, 3.13.2t] - steps: - - uses: actions/checkout@v5 - - name: Setup Python - uses: ./ - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - cache-dependency-path: __tests__/data/requirements.txt - pip-install: numpy pandas requests diff --git a/.github/workflows/e2e-cache.yml b/.github/workflows/e2e-cache.yml index 6365a853..1e5dec8c 100644 --- a/.github/workflows/e2e-cache.yml +++ b/.github/workflows/e2e-cache.yml @@ -29,7 +29,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [ @@ -45,9 +45,6 @@ jobs: exclude: - os: windows-latest python-version: pypy-3.11-v7.x - - os: macos-latest - python-version: pypy-3.9-v7.x - steps: - uses: actions/checkout@v5 - name: Setup Python @@ -72,7 +69,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: ['3.10', 'pypy-3.10-v7.x', '3.11', 'pypy-3.11-v7.x', '3.12', '3.13'] @@ -129,7 +126,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [ @@ -170,7 +167,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: [ @@ -186,8 +183,6 @@ jobs: exclude: - os: windows-latest python-version: pypy-3.11-v7.x - - os: macos-latest - python-version: pypy-3.9-v7.x steps: - uses: actions/checkout@v5 - name: Setup Python @@ -213,7 +208,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: ['3.10', 'pypy-3.10-v7.x', '3.11', 'pypy-3.11-v7.x', '3.12', '3.13'] @@ -269,7 +264,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: @@ -297,7 +292,7 @@ jobs: ubuntu-22.04-arm, windows-latest, macos-latest, - macos-15-intel + macos-13 ] python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: @@ -311,56 +306,3 @@ jobs: pip-version: '25.0.1' - name: Install dependencies run: pip install numpy pandas requests - - python-pip-dependencies-caching-with-pip-install: - name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}) - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: - [ - ubuntu-latest, - ubuntu-24.04-arm, - ubuntu-22.04, - ubuntu-22.04-arm, - windows-latest, - macos-latest, - macos-15-intel - ] - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] - steps: - - uses: actions/checkout@v5 - - name: Setup Python - uses: ./ - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - pip-install: numpy pandas requests - - python-pip-dependencies-caching-path-with-pip-install: - name: Test pip (Python ${{ matrix.python-version}}, ${{ matrix.os }}, caching path) - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: - [ - ubuntu-latest, - ubuntu-24.04-arm, - ubuntu-22.04, - ubuntu-22.04-arm, - windows-latest, - macos-latest, - macos-15-intel - ] - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] - steps: - - uses: actions/checkout@v5 - - name: Setup Python - uses: ./ - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - cache-dependency-path: __tests__/data/requirements.txt - pip-install: numpy pandas requests diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index d4401928..84586171 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -25,7 +25,7 @@ jobs: ubuntu-latest, ubuntu-24.04-arm, macos-latest, - macos-15-intel + macos-13 ] steps: - name: Checkout diff --git a/.github/workflows/release-new-action-version.yml b/.github/workflows/release-new-action-version.yml index 959ef8d8..7e5de347 100644 --- a/.github/workflows/release-new-action-version.yml +++ b/.github/workflows/release-new-action-version.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Update the ${{ env.TAG_NAME }} tag - uses: actions/publish-action@v0.4.0 + uses: actions/publish-action@v0.3.0 with: source-tag: ${{ env.TAG_NAME }} slack-webhook: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.github/workflows/test-graalpy.yml b/.github/workflows/test-graalpy.yml index 3453ee9f..eabe0b38 100644 --- a/.github/workflows/test-graalpy.yml +++ b/.github/workflows/test-graalpy.yml @@ -25,7 +25,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] graalpy: - 'graalpy-22.3' @@ -80,7 +80,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] graalpy: ['graalpy22.3', 'graalpy23.0', 'graalpy23.1', 'graalpy24.1'] @@ -106,7 +106,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-latest, macos-15-intel] + os: [ubuntu-latest, macos-latest, macos-13] steps: - uses: actions/checkout@v5 - name: Setup GraalPy and check latest diff --git a/.github/workflows/test-pypy.yml b/.github/workflows/test-pypy.yml index e231514a..e11ef272 100644 --- a/.github/workflows/test-pypy.yml +++ b/.github/workflows/test-pypy.yml @@ -28,7 +28,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] pypy: - 'pypy-2.7' @@ -85,7 +85,7 @@ jobs: fail-fast: false matrix: os: - - macos-15-intel + - macos-13 - macos-14 - macos-15 - windows-2022 @@ -144,7 +144,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] pypy: ['pypy2.7', 'pypy3.9', 'pypy3.10-nightly', 'pypy3.11'] @@ -178,7 +178,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - uses: actions/checkout@v5 @@ -220,7 +220,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - uses: actions/checkout@v5 diff --git a/.github/workflows/test-python-freethreaded.yml b/.github/workflows/test-python-freethreaded.yml index abba7a62..d7496dad 100644 --- a/.github/workflows/test-python-freethreaded.yml +++ b/.github/workflows/test-python-freethreaded.yml @@ -26,7 +26,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -63,7 +63,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -103,7 +103,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -141,7 +141,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -182,7 +182,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -223,7 +223,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -254,7 +254,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -294,7 +294,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -334,7 +334,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -373,7 +373,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - name: Checkout @@ -410,7 +410,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - name: Checkout @@ -446,7 +446,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -481,7 +481,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] python-version: [3.13t, 3.14t-dev] steps: @@ -508,7 +508,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - uses: actions/checkout@v5 @@ -535,7 +535,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index e9487245..602114ed 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -26,7 +26,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -70,7 +70,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -117,7 +117,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -162,7 +162,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -212,7 +212,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -262,7 +262,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -296,7 +296,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -346,7 +346,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -396,7 +396,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -441,7 +441,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - name: Checkout @@ -478,7 +478,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - name: Checkout @@ -514,7 +514,7 @@ jobs: windows-latest, ubuntu-22.04, ubuntu-22.04-arm, - macos-15-intel, + macos-13, ubuntu-latest, ubuntu-24.04-arm ] @@ -549,7 +549,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: @@ -582,7 +582,7 @@ jobs: ubuntu-22.04-arm, ubuntu-24.04-arm, ubuntu-latest, - macos-15-intel + macos-13 ] steps: - uses: actions/checkout@v5 diff --git a/.licenses/npm/@types/node.dep.yml b/.licenses/npm/@types/node.dep.yml index 5f9ba75a..86544f48 100644 --- a/.licenses/npm/@types/node.dep.yml +++ b/.licenses/npm/@types/node.dep.yml @@ -1,6 +1,6 @@ --- name: "@types/node" -version: 24.10.1 +version: 24.1.0 type: npm summary: TypeScript definitions for node homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node diff --git a/.licenses/npm/undici-types.dep.yml b/.licenses/npm/undici-types.dep.yml index b8ccaf1c..b6cb69f7 100644 --- a/.licenses/npm/undici-types.dep.yml +++ b/.licenses/npm/undici-types.dep.yml @@ -1,17 +1,15 @@ --- name: undici-types -version: 7.16.0 +version: 7.8.0 type: npm summary: A stand-alone types package for Undici homepage: https://undici.nodejs.org license: mit licenses: -- sources: LICENSE +- sources: Auto-generated MIT license text text: | MIT License - Copyright (c) Matteo Collina and Undici contributors - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights diff --git a/README.md b/README.md index a6fb5bc5..173c0976 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,6 @@ This action provides the following functionality for GitHub Actions users: - Optionally caching dependencies for pip, pipenv and poetry - Registering problem matchers for error output -## Breaking changes in V6 - -- Upgraded action from node20 to node24 - > Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. See [Release Notes](https://github.com/actions/runner/releases/tag/v2.327.1) - -For more details, see the full release notes on the [releases page](https://github.com/actions/setup-python/releases/tag/v6.0.0) - ## Basic usage See [action.yml](action.yml) @@ -118,7 +111,6 @@ See examples of using `cache` and `cache-dependency-path` for `pipenv` and `poet - [Using `setup-python` on GHES](docs/advanced-usage.md#using-setup-python-on-ghes) - [Allow pre-releases](docs/advanced-usage.md#allow-pre-releases) - [Using the pip-version input](docs/advanced-usage.md#using-the-pip-version-input) -- [Using the pip-install input](docs/advanced-usage.md#using-the-pip-install-input) ## Recommended permissions diff --git a/__tests__/data/graalpy.json b/__tests__/data/graalpy.json index f6e28997..b753d713 100644 --- a/__tests__/data/graalpy.json +++ b/__tests__/data/graalpy.json @@ -1,4 +1,872 @@ [ + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/108323629", + "assets_url": "https://api.github.com/repos/oracle/graalpython/releases/108323629/assets", + "upload_url": "https://uploads.github.com/repos/oracle/graalpython/releases/108323629/assets{?name,label}", + "html_url": "https://github.com/oracle/graalpython/releases/tag/graal-23.1.0a1", + "id": 108323629, + "author": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "node_id": "RE_kwDOB73d0M4GdOMt", + "tag_name": "graal-23.1.0a1", + "target_commitish": "master", + "name": "GraalPy - GraalVm Community 23.1.0a1", + "draft": false, + "prerelease": false, + "created_at": "2023-06-06T22:30:49Z", + "published_at": "2023-06-13T15:04:15Z", + "assets": [ + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510243", + "id": 112510243, + "node_id": "RA_kwDOB73d0M4GtMUj", + "name": "graalpython-23.1.0a1-linux-aarch64.tar.gz", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 208285038, + "download_count": 3, + "created_at": "2023-06-13T07:29:25Z", + "updated_at": "2023-06-13T07:29:38Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-linux-aarch64.tar.gz" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510610", + "id": 112510610, + "node_id": "RA_kwDOB73d0M4GtMaS", + "name": "graalpython-23.1.0a1-linux-aarch64.tar.gz.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 3, + "created_at": "2023-06-13T07:32:07Z", + "updated_at": "2023-06-13T07:32:07Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-linux-aarch64.tar.gz.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510269", + "id": 112510269, + "node_id": "RA_kwDOB73d0M4GtMU9", + "name": "graalpython-23.1.0a1-linux-amd64.tar.gz", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 213747624, + "download_count": 86, + "created_at": "2023-06-13T07:29:38Z", + "updated_at": "2023-06-13T07:29:53Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-linux-amd64.tar.gz" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510612", + "id": 112510612, + "node_id": "RA_kwDOB73d0M4GtMaU", + "name": "graalpython-23.1.0a1-linux-amd64.tar.gz.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 5, + "created_at": "2023-06-13T07:32:08Z", + "updated_at": "2023-06-13T07:32:08Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-linux-amd64.tar.gz.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510291", + "id": 112510291, + "node_id": "RA_kwDOB73d0M4GtMVT", + "name": "graalpython-23.1.0a1-macos-aarch64.tar.gz", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 217696547, + "download_count": 13, + "created_at": "2023-06-13T07:29:54Z", + "updated_at": "2023-06-13T07:30:17Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-macos-aarch64.tar.gz" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510615", + "id": 112510615, + "node_id": "RA_kwDOB73d0M4GtMaX", + "name": "graalpython-23.1.0a1-macos-aarch64.tar.gz.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 3, + "created_at": "2023-06-13T07:32:09Z", + "updated_at": "2023-06-13T07:32:09Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-macos-aarch64.tar.gz.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510352", + "id": 112510352, + "node_id": "RA_kwDOB73d0M4GtMWQ", + "name": "graalpython-23.1.0a1-macos-amd64.tar.gz", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 227762432, + "download_count": 11, + "created_at": "2023-06-13T07:30:17Z", + "updated_at": "2023-06-13T07:30:31Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-macos-amd64.tar.gz" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510616", + "id": 112510616, + "node_id": "RA_kwDOB73d0M4GtMaY", + "name": "graalpython-23.1.0a1-macos-amd64.tar.gz.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 3, + "created_at": "2023-06-13T07:32:09Z", + "updated_at": "2023-06-13T07:32:10Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-macos-amd64.tar.gz.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510387", + "id": 112510387, + "node_id": "RA_kwDOB73d0M4GtMWz", + "name": "python-installable-svm-java17-darwin-aarch64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 151774852, + "download_count": 8, + "created_at": "2023-06-13T07:30:31Z", + "updated_at": "2023-06-13T07:30:46Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-darwin-aarch64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510618", + "id": 112510618, + "node_id": "RA_kwDOB73d0M4GtMaa", + "name": "python-installable-svm-java17-darwin-aarch64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:10Z", + "updated_at": "2023-06-13T07:32:10Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-darwin-aarch64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510423", + "id": 112510423, + "node_id": "RA_kwDOB73d0M4GtMXX", + "name": "python-installable-svm-java17-darwin-amd64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 155958615, + "download_count": 9, + "created_at": "2023-06-13T07:30:46Z", + "updated_at": "2023-06-13T07:30:56Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-darwin-amd64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510621", + "id": 112510621, + "node_id": "RA_kwDOB73d0M4GtMad", + "name": "python-installable-svm-java17-darwin-amd64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:11Z", + "updated_at": "2023-06-13T07:32:11Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-darwin-amd64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510439", + "id": 112510439, + "node_id": "RA_kwDOB73d0M4GtMXn", + "name": "python-installable-svm-java17-linux-aarch64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 149559953, + "download_count": 7, + "created_at": "2023-06-13T07:30:57Z", + "updated_at": "2023-06-13T07:31:09Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-linux-aarch64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510623", + "id": 112510623, + "node_id": "RA_kwDOB73d0M4GtMaf", + "name": "python-installable-svm-java17-linux-aarch64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:12Z", + "updated_at": "2023-06-13T07:32:12Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-linux-aarch64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510482", + "id": 112510482, + "node_id": "RA_kwDOB73d0M4GtMYS", + "name": "python-installable-svm-java17-linux-amd64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 153700590, + "download_count": 50, + "created_at": "2023-06-13T07:31:10Z", + "updated_at": "2023-06-13T07:31:20Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-linux-amd64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510639", + "id": 112510639, + "node_id": "RA_kwDOB73d0M4GtMav", + "name": "python-installable-svm-java17-linux-amd64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:12Z", + "updated_at": "2023-06-13T07:32:13Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java17-linux-amd64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510502", + "id": 112510502, + "node_id": "RA_kwDOB73d0M4GtMYm", + "name": "python-installable-svm-java20-darwin-aarch64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 152397687, + "download_count": 12, + "created_at": "2023-06-13T07:31:21Z", + "updated_at": "2023-06-13T07:31:33Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-darwin-aarch64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510644", + "id": 112510644, + "node_id": "RA_kwDOB73d0M4GtMa0", + "name": "python-installable-svm-java20-darwin-aarch64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:13Z", + "updated_at": "2023-06-13T07:32:13Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-darwin-aarch64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510532", + "id": 112510532, + "node_id": "RA_kwDOB73d0M4GtMZE", + "name": "python-installable-svm-java20-darwin-amd64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 156585204, + "download_count": 12, + "created_at": "2023-06-13T07:31:34Z", + "updated_at": "2023-06-13T07:31:44Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-darwin-amd64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510646", + "id": 112510646, + "node_id": "RA_kwDOB73d0M4GtMa2", + "name": "python-installable-svm-java20-darwin-amd64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:14Z", + "updated_at": "2023-06-13T07:32:14Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-darwin-amd64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510561", + "id": 112510561, + "node_id": "RA_kwDOB73d0M4GtMZh", + "name": "python-installable-svm-java20-linux-aarch64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 150007420, + "download_count": 7, + "created_at": "2023-06-13T07:31:45Z", + "updated_at": "2023-06-13T07:31:56Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-linux-aarch64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510651", + "id": 112510651, + "node_id": "RA_kwDOB73d0M4GtMa7", + "name": "python-installable-svm-java20-linux-aarch64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:14Z", + "updated_at": "2023-06-13T07:32:14Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-linux-aarch64-23.1.0a1.jar.sha256" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510584", + "id": 112510584, + "node_id": "RA_kwDOB73d0M4GtMZ4", + "name": "python-installable-svm-java20-linux-amd64-23.1.0a1.jar", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 154254267, + "download_count": 29, + "created_at": "2023-06-13T07:31:56Z", + "updated_at": "2023-06-13T07:32:07Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-linux-amd64-23.1.0a1.jar" + }, + { + "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510654", + "id": 112510654, + "node_id": "RA_kwDOB73d0M4GtMa-", + "name": "python-installable-svm-java20-linux-amd64-23.1.0a1.jar.sha256", + "label": "", + "uploader": { + "login": "ezzarghili", + "id": 8616968, + "node_id": "MDQ6VXNlcjg2MTY5Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezzarghili", + "html_url": "https://github.com/ezzarghili", + "followers_url": "https://api.github.com/users/ezzarghili/followers", + "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", + "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", + "organizations_url": "https://api.github.com/users/ezzarghili/orgs", + "repos_url": "https://api.github.com/users/ezzarghili/repos", + "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezzarghili/received_events", + "type": "User", + "site_admin": false + }, + "content_type": "application/binary", + "state": "uploaded", + "size": 64, + "download_count": 2, + "created_at": "2023-06-13T07:32:15Z", + "updated_at": "2023-06-13T07:32:15Z", + "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/python-installable-svm-java20-linux-amd64-23.1.0a1.jar.sha256" + } + ], + "tarball_url": "https://api.github.com/repos/oracle/graalpython/tarball/graal-23.1.0a1", + "zipball_url": "https://api.github.com/repos/oracle/graalpython/zipball/graal-23.1.0a1", + "body": "This is a Python 3.10 implementation on top of GraalVM. Currently, it is under development and as such, it is not ready for any production use beyond simple usecases and scripting. The main focus of development right now is to get NumPy, SciPy and related libraries working.\r\n\r\nThe Python language component can be added to GraalVM using the `gu` utility.\r\n\r\nMore information is available on the GraalVM website: http://www.graalvm.org/reference-manual/python/\r\n", + "reactions": { + "url": "https://api.github.com/repos/oracle/graalpython/releases/108323629/reactions", + "total_count": 2, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 2, + "eyes": 0 + } + }, { "url": "https://api.github.com/repos/oracle/graalpython/releases/108323629", "assets_url": "https://api.github.com/repos/oracle/graalpython/releases/108323629/assets", @@ -68,40 +936,6 @@ "updated_at": "2023-06-13T07:29:38Z", "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.0.0/graalpython-23.0.0-linux-aarch64.tar.gz" }, - { - "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510243", - "id": 112510243, - "node_id": "RA_kwDOB73d0M4GtMUj", - "name": "graalpython-23.0.0-windows-amd64.zip", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 208285038, - "download_count": 3, - "created_at": "2023-06-13T07:29:25Z", - "updated_at": "2023-06-13T07:29:38Z", - "browser_download_url": "https://github.com/oracle/graalpython/releases/download/graal-23.0.0/graalpython-23.0.0-windows-amd64.zip" - }, { "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/112510610", "id": 112510610, @@ -4548,40 +5382,6 @@ "created_at": "2021-10-16T22:00:22Z", "published_at": "2021-10-19T14:21:48Z", "assets": [ - { - "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/47332770", - "id": 47332770, - "node_id": "RA_kwDOB73d0M4C0j2i", - "name": "graalpython-21.3.0-windows-amd64.zip", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 164083526, - "download_count": 74, - "created_at": "2021-10-19T08:37:05Z", - "updated_at": "2021-10-19T08:37:36Z", - "browser_download_url": "https://github.com/oracle/graalpython/releases/download/vm-21.3.0/graalpython-21.3.0-windows-amd64.zip" - }, { "url": "https://api.github.com/repos/oracle/graalpython/releases/assets/47332770", "id": 47332770, @@ -4994,725 +5794,5 @@ "tarball_url": "https://api.github.com/repos/oracle/graalpython/tarball/vm-21.3.0", "zipball_url": "https://api.github.com/repos/oracle/graalpython/zipball/vm-21.3.0", "body": "This is a Python 3.8.5 implementation on top of GraalVM. Currently, it is under development and as such, it is not ready for any production use beyond simple usecases and scripting. The main focus of development right now is to get NumPy, SciPy and related libraries working.\r\n\r\nThe Python language component can be added to GraalVM using the `gu` utility.\r\n\r\nMore information is available on the GraalVM website: http://www.graalvm.org/reference-manual/python/\r\n" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/155409803", - "assets_url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/155409803/assets", - "upload_url": "https://uploads.github.com/repos/graalvm/graal-languages-ea-builds/releases/155409803/assets{?name,label}", - "html_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/tag/graalpy-24.1.0-ea.09", - "id": 155409803, - "author": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "node_id": "RE_kwDOLY7PkM4JQ12L", - "tag_name": "graalpy-24.1.0-ea.09", - "target_commitish": "main", - "name": "GraalPy - early access build - 24.1.0-ea.09", - "draft": false, - "prerelease": true, - "created_at": "2024-04-25T07:44:54Z", - "published_at": "2024-05-12T20:16:41Z", - "assets": [ - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503202", - "id": 167503202, - "node_id": "RA_kwDOLY7PkM4J--Vi", - "name": "graalpy-24.1.0-ea.09-linux-aarch64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 356399017, - "download_count": 9, - "created_at": "2024-05-12T20:05:31Z", - "updated_at": "2024-05-12T20:05:57Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-linux-aarch64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503836", - "id": 167503836, - "node_id": "RA_kwDOLY7PkM4J--fc", - "name": "graalpy-24.1.0-ea.09-linux-aarch64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:15Z", - "updated_at": "2024-05-12T20:10:15Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-linux-aarch64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503279", - "id": 167503279, - "node_id": "RA_kwDOLY7PkM4J--Wv", - "name": "graalpy-24.1.0-ea.09-linux-amd64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 359705071, - "download_count": 9, - "created_at": "2024-05-12T20:05:57Z", - "updated_at": "2024-05-12T20:06:18Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-linux-amd64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503840", - "id": 167503840, - "node_id": "RA_kwDOLY7PkM4J--fg", - "name": "graalpy-24.1.0-ea.09-linux-amd64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:16Z", - "updated_at": "2024-05-12T20:10:16Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-linux-amd64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503330", - "id": 167503330, - "node_id": "RA_kwDOLY7PkM4J--Xi", - "name": "graalpy-24.1.0-ea.09-macos-aarch64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 341242552, - "download_count": 9, - "created_at": "2024-05-12T20:06:19Z", - "updated_at": "2024-05-12T20:07:00Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-macos-aarch64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503842", - "id": 167503842, - "node_id": "RA_kwDOLY7PkM4J--fi", - "name": "graalpy-24.1.0-ea.09-macos-aarch64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:16Z", - "updated_at": "2024-05-12T20:10:17Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-macos-aarch64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503434", - "id": 167503434, - "node_id": "RA_kwDOLY7PkM4J--ZK", - "name": "graalpy-24.1.0-ea.09-macos-amd64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 342281282, - "download_count": 9, - "created_at": "2024-05-12T20:07:00Z", - "updated_at": "2024-05-12T20:07:20Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-macos-amd64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503844", - "id": 167503844, - "node_id": "RA_kwDOLY7PkM4J--fk", - "name": "graalpy-24.1.0-ea.09-macos-amd64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:17Z", - "updated_at": "2024-05-12T20:10:17Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-macos-amd64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503451", - "id": 167503451, - "node_id": "RA_kwDOLY7PkM4J--Zb", - "name": "graalpy-24.1.0-ea.09-windows-amd64.zip", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/zip", - "state": "uploaded", - "size": 606942068, - "download_count": 9, - "created_at": "2024-05-12T20:07:20Z", - "updated_at": "2024-05-12T20:07:57Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-windows-amd64.zip" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503847", - "id": 167503847, - "node_id": "RA_kwDOLY7PkM4J--fn", - "name": "graalpy-24.1.0-ea.09-windows-amd64.zip.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:18Z", - "updated_at": "2024-05-12T20:10:18Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-windows-amd64.zip.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503494", - "id": 167503494, - "node_id": "RA_kwDOLY7PkM4J--aG", - "name": "graalpy-jvm-24.1.0-ea.09-linux-aarch64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 404689619, - "download_count": 9, - "created_at": "2024-05-12T20:07:57Z", - "updated_at": "2024-05-12T20:08:23Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-linux-aarch64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503849", - "id": 167503849, - "node_id": "RA_kwDOLY7PkM4J--fp", - "name": "graalpy-jvm-24.1.0-ea.09-linux-aarch64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:18Z", - "updated_at": "2024-05-12T20:10:19Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-linux-aarch64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503631", - "id": 167503631, - "node_id": "RA_kwDOLY7PkM4J--cP", - "name": "graalpy-jvm-24.1.0-ea.09-linux-amd64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 407319499, - "download_count": 9, - "created_at": "2024-05-12T20:08:24Z", - "updated_at": "2024-05-12T20:08:49Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-linux-amd64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503850", - "id": 167503850, - "node_id": "RA_kwDOLY7PkM4J--fq", - "name": "graalpy-jvm-24.1.0-ea.09-linux-amd64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:19Z", - "updated_at": "2024-05-12T20:10:19Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-linux-amd64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503685", - "id": 167503685, - "node_id": "RA_kwDOLY7PkM4J--dF", - "name": "graalpy-jvm-24.1.0-ea.09-macos-aarch64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 391600854, - "download_count": 9, - "created_at": "2024-05-12T20:08:49Z", - "updated_at": "2024-05-12T20:09:13Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-macos-aarch64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503852", - "id": 167503852, - "node_id": "RA_kwDOLY7PkM4J--fs", - "name": "graalpy-jvm-24.1.0-ea.09-macos-aarch64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:19Z", - "updated_at": "2024-05-12T20:10:20Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-macos-aarch64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503723", - "id": 167503723, - "node_id": "RA_kwDOLY7PkM4J--dr", - "name": "graalpy-jvm-24.1.0-ea.09-macos-amd64.tar.gz", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 392140765, - "download_count": 9, - "created_at": "2024-05-12T20:09:14Z", - "updated_at": "2024-05-12T20:09:37Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-macos-amd64.tar.gz" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503854", - "id": 167503854, - "node_id": "RA_kwDOLY7PkM4J--fu", - "name": "graalpy-jvm-24.1.0-ea.09-macos-amd64.tar.gz.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:20Z", - "updated_at": "2024-05-12T20:10:20Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-macos-amd64.tar.gz.sha256" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503758", - "id": 167503758, - "node_id": "RA_kwDOLY7PkM4J--eO", - "name": "graalpy-jvm-24.1.0-ea.09-windows-amd64.zip", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/zip", - "state": "uploaded", - "size": 656623535, - "download_count": 9, - "created_at": "2024-05-12T20:09:38Z", - "updated_at": "2024-05-12T20:10:15Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-windows-amd64.zip" - }, - { - "url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases/assets/167503856", - "id": 167503856, - "node_id": "RA_kwDOLY7PkM4J--fw", - "name": "graalpy-jvm-24.1.0-ea.09-windows-amd64.zip.sha256", - "label": "", - "uploader": { - "login": "ezzarghili", - "id": 8616968, - "node_id": "MDQ6VXNlcjg2MTY5Njg=", - "avatar_url": "https://avatars.githubusercontent.com/u/8616968?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ezzarghili", - "html_url": "https://github.com/ezzarghili", - "followers_url": "https://api.github.com/users/ezzarghili/followers", - "following_url": "https://api.github.com/users/ezzarghili/following{/other_user}", - "gists_url": "https://api.github.com/users/ezzarghili/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ezzarghili/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ezzarghili/subscriptions", - "organizations_url": "https://api.github.com/users/ezzarghili/orgs", - "repos_url": "https://api.github.com/users/ezzarghili/repos", - "events_url": "https://api.github.com/users/ezzarghili/events{/privacy}", - "received_events_url": "https://api.github.com/users/ezzarghili/received_events", - "type": "User", - "site_admin": false - }, - "content_type": "application/binary", - "state": "uploaded", - "size": 64, - "download_count": 8, - "created_at": "2024-05-12T20:10:21Z", - "updated_at": "2024-05-12T20:10:21Z", - "browser_download_url": "https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-windows-amd64.zip.sha256" - } - ], - "tarball_url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/tarball/graalpy-24.1.0-ea.09", - "zipball_url": "https://api.github.com/repos/graalvm/graal-languages-ea-builds/zipball/graalpy-24.1.0-ea.09", - "body": "GraalPy is a high-performance implementation of the python programming language.\r\nMore information is available on the website: http://www.graalvm.org/python/\r\nGraalPy comes in two standalone modes, `native` and `jvm` for Oracle GraalVM.\r\nSee [the documentation](https://github.com/oracle/graalpy/blob/master/doc/user/installing-graalpy.md) for which asset corresponds to what.\r\n\r\n**Disclaimer**:\r\n\r\n> This is a daily development build of the Oracle product and is offered to you as part of the development and testing process. Oracle does not recommend bundling this build with your products or otherwise using for any production purpose. This build is offered to and received by you solely under the GraalVM Free Terms and Conditions (GFTC), and is not governed by any other license between you and Oracle, including without limitation the Oracle Master Agreement. The features and functionality of the product are subject to change at any time and the existence of any features or functionality in this build should not be relied upon in making purchasing decisions. The existence of particular features or functionality in this build is not a commitment to deliver any hardware, software or other material, or code, or functionality, and you should not rely on the future availability of any feature or functionality in the product. The development, release, and timing of any features or functionality for this product remain at the sole discretion of Oracle. In the event you decide to provide any input to Oracle regarding the product, you acknowledge that Oracle may use that input for any purpose, including but not limited to incorporation or implementation of the input in any Oracle product or service, and the display, marketing, sublicensing and distribution of the input as incorporated or embedded in any product or service distributed or offered by Oracle.\r\n\r\n\r\nHere are the convenience links GraalPy standalones:\r\n\r\n| Platform | Native | JVM |\r\n|----------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------:|-----------------------------------------------------------------------------------|\r\n| Linux (amd64) | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-linux-amd64.tar.gz) | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-linux-amd64.tar.gz) |\r\n| Linux (aarch64) | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-linux-aarch64.tar.gz) |[:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-linux-aarch64.tar.gz) |\r\n| macOS (amd64) * | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-macos-amd64.tar.gz) | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-macos-amd64.tar.gz) |\r\n| macOS (aarch64) * | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-macos-aarch64.tar.gz) |[:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-macos-aarch64.tar.gz) |\r\n| Windows (amd64) | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-windows-amd64.tar.gz) | [:arrow_down: download](https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-jvm-24.1.0-ea.09-windows-amd64.tar.gz) |\r\n\r\nBased on GraalVM commit: oracle/graal@d719a133492c71209ded8121341ffdabdc2b8b66\r\nUsing GraalPy: oracle/graalpython@7ff89fe0f0b3833d869da4f3cce199705adc2571\r\n\r\n\\* If you are using **macOS Catalina** and **later** you may need to remove the quarantine attribute from the bits before you can use them. To do this, run the following:\r\n```\r\n$ sudo xattr -r -d com.apple.quarantine path/to/graalpy\r\n```\r\n" } ] diff --git a/__tests__/data/requirements-linux.txt b/__tests__/data/requirements-linux.txt index ad047003..0e93594b 100644 --- a/__tests__/data/requirements-linux.txt +++ b/__tests__/data/requirements-linux.txt @@ -7,6 +7,6 @@ Kivy-Garden==0.1.4 packaging==20.7 pdf2image==1.12.1 Pygments==2.6.1 -requests==2.32.4 -urllib3==2.5.0 +requests==2.32.2 +urllib3==1.26.19 xlrd==1.2.0 \ No newline at end of file diff --git a/__tests__/data/requirements.txt b/__tests__/data/requirements.txt index db0af784..cfe5ff8c 100644 --- a/__tests__/data/requirements.txt +++ b/__tests__/data/requirements.txt @@ -40,8 +40,8 @@ pyparsing==2.4.7; python_version >= '2.6' and python_version not in '3.0, 3.1, 3 pywin32-ctypes==0.2.0 -requests==2.32.4 +requests==2.32.2 -urllib3==2.5.0 +urllib3==1.26.19 xlrd==1.2.0 \ No newline at end of file diff --git a/__tests__/find-graalpy.test.ts b/__tests__/find-graalpy.test.ts index 0d287bef..8eaf3b4f 100644 --- a/__tests__/find-graalpy.test.ts +++ b/__tests__/find-graalpy.test.ts @@ -10,7 +10,7 @@ import * as path from 'path'; import * as semver from 'semver'; import * as finder from '../src/find-graalpy'; -import {IGraalPyManifestRelease} from '../src/utils'; +import {IGraalPyManifestRelease, IS_WINDOWS} from '../src/utils'; import manifestData from './data/graalpy.json'; @@ -19,6 +19,9 @@ const architecture = 'x64'; const toolDir = path.join(__dirname, 'runner', 'tools'); const tempDir = path.join(__dirname, 'runner', 'temp'); +/* GraalPy doesn't have a windows release yet */ +const describeSkipOnWindows = IS_WINDOWS ? describe.skip : describe; + describe('parseGraalPyVersion', () => { it.each([ ['graalpy-23', '23'], @@ -105,7 +108,7 @@ describe('findGraalPyToolCache', () => { }); }); -describe('findGraalPyVersion', () => { +describeSkipOnWindows('findGraalPyVersion', () => { let getBooleanInputSpy: jest.SpyInstance; let warningSpy: jest.SpyInstance; let debugSpy: jest.SpyInstance; @@ -355,13 +358,13 @@ describe('findGraalPyVersion', () => { it('found and install successfully, pre-release fallback', async () => { spyCacheDir = jest.spyOn(tc, 'cacheDir'); spyCacheDir.mockImplementation(() => - path.join(toolDir, 'GraalPy', '24.1', architecture) + path.join(toolDir, 'GraalPy', '23.1', architecture) ); spyChmodSync = jest.spyOn(fs, 'chmodSync'); spyChmodSync.mockImplementation(() => undefined); await expect( finder.findGraalPyVersion( - 'graalpy24.1', + 'graalpy23.1', architecture, false, false, @@ -369,7 +372,7 @@ describe('findGraalPyVersion', () => { ) ).rejects.toThrow(); await expect( - finder.findGraalPyVersion('graalpy24.1', architecture, false, false, true) - ).resolves.toEqual('24.1.0-ea.9'); + finder.findGraalPyVersion('graalpy23.1', architecture, false, false, true) + ).resolves.toEqual('23.1.0-a.1'); }); }); diff --git a/__tests__/install-graalpy.test.ts b/__tests__/install-graalpy.test.ts index fda3348f..45769f64 100644 --- a/__tests__/install-graalpy.test.ts +++ b/__tests__/install-graalpy.test.ts @@ -21,21 +21,24 @@ const architecture = 'x64'; const toolDir = path.join(__dirname, 'runner', 'tools'); const tempDir = path.join(__dirname, 'runner', 'temp'); +/* GraalPy doesn't have a windows release yet */ +const describeSkipOnWindows = IS_WINDOWS ? describe.skip : describe; + describe('graalpyVersionToSemantic', () => { it.each([ - ['graalpy-24.1.0-ea.09', '24.1.0-ea.9'], - ['graal-23.0.0', '23.0.0'], - ['vm-23.0.x', '23.0.x'], - ['graal-23.x', '23.x'] + ['23.0.0a1', '23.0.0a1'], + ['23.0.0', '23.0.0'], + ['23.0.x', '23.0.x'], + ['23.x', '23.x'] ])('%s -> %s', (input, expected) => { expect(installer.graalPyTagToVersion(input)).toEqual(expected); }); }); -describe('findRelease', () => { +describeSkipOnWindows('findRelease', () => { const result = JSON.stringify(manifestData); const releases = JSON.parse(result) as IGraalPyManifestRelease[]; - const extension = IS_WINDOWS ? 'zip' : 'tar.gz'; + const extension = 'tar.gz'; const arch = installer.toGraalPyArchitecture(architecture); const platform = installer.toGraalPyPlatform(process.platform); const extensionName = `${platform}-${arch}.${extension}`; @@ -44,8 +47,8 @@ describe('findRelease', () => { browser_download_url: `https://github.com/oracle/graalpython/releases/download/graal-23.0.0/graalpython-23.0.0-${extensionName}` }; const filesRC1: IGraalPyManifestAsset = { - name: `graalpy-24.1.0-ea.09-${extensionName}`, - browser_download_url: `https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-${extensionName}` + name: `graalpython-23.1.0a1-${extensionName}`, + browser_download_url: `https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-${extensionName}` }; let warningSpy: jest.SpyInstance; @@ -81,15 +84,15 @@ describe('findRelease', () => { }); it('Preview version of GraalPy is found', () => { - const graalpyVersion = installer.graalPyTagToVersion('vm-24.1.0-ea.09'); + const graalpyVersion = installer.graalPyTagToVersion('vm-23.1.0a1'); expect( installer.findRelease(releases, graalpyVersion, architecture, false) ).toMatchObject({ foundAsset: { - name: `graalpy-24.1.0-ea.09-${extensionName}`, - browser_download_url: `https://github.com/graalvm/graal-languages-ea-builds/releases/download/graalpy-24.1.0-ea.09/graalpy-24.1.0-ea.09-${extensionName}` + name: `graalpython-23.1.0a1-${extensionName}`, + browser_download_url: `https://github.com/oracle/graalpython/releases/download/graal-23.1.0a1/graalpython-23.1.0a1-${extensionName}` }, - resolvedGraalPyVersion: '24.1.0-ea.9' + resolvedGraalPyVersion: '23.1.0-a.1' }); }); @@ -104,7 +107,7 @@ describe('findRelease', () => { }); it('GraalPy version matches semver (pre-release)', () => { - const graalpyVersion = '24.1.x'; + const graalpyVersion = '23.1.x'; expect( installer.findRelease(releases, graalpyVersion, architecture, false) ).toBeNull(); @@ -112,12 +115,12 @@ describe('findRelease', () => { installer.findRelease(releases, graalpyVersion, architecture, true) ).toMatchObject({ foundAsset: filesRC1, - resolvedGraalPyVersion: '24.1.0-ea.9' + resolvedGraalPyVersion: '23.1.0-a.1' }); }); }); -describe('installGraalPy', () => { +describeSkipOnWindows('installGraalPy', () => { let tcFind: jest.SpyInstance; let warningSpy: jest.SpyInstance; let debugSpy: jest.SpyInstance; @@ -229,20 +232,20 @@ describe('installGraalPy', () => { it('found and install GraalPy, pre-release fallback', async () => { spyCacheDir = jest.spyOn(tc, 'cacheDir'); spyCacheDir.mockImplementation(() => - path.join(toolDir, 'GraalPy', '24.1.0', architecture) + path.join(toolDir, 'GraalPy', '23.1.0', architecture) ); spyChmodSync = jest.spyOn(fs, 'chmodSync'); spyChmodSync.mockImplementation(() => undefined); await expect( - installer.installGraalPy('24.1.x', architecture, false, undefined) + installer.installGraalPy('23.1.x', architecture, false, undefined) ).rejects.toThrow(); await expect( - installer.installGraalPy('24.1.x', architecture, true, undefined) + installer.installGraalPy('23.1.x', architecture, true, undefined) ).resolves.toEqual({ - installDir: path.join(toolDir, 'GraalPy', '24.1.0', architecture), - resolvedGraalPyVersion: '24.1.0-ea.9' + installDir: path.join(toolDir, 'GraalPy', '23.1.0', architecture), + resolvedGraalPyVersion: '23.1.0-a.1' }); expect(spyHttpClient).toHaveBeenCalled(); diff --git a/action.yml b/action.yml index 7a9a7b63..df6c8235 100644 --- a/action.yml +++ b/action.yml @@ -31,8 +31,6 @@ inputs: default: false pip-version: description: "Used to specify the version of pip to install with the Python. Supported format: major[.minor][.patch]." - pip-install: - description: "Used to specify the packages to install with pip after setting up Python. Can be a requirements file or package names." outputs: python-version: description: "The installed Python or PyPy version. Useful when given a version range as input." diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js index 36c6311a..0506d476 100644 --- a/dist/cache-save/index.js +++ b/dist/cache-save/index.js @@ -87714,23 +87714,22 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.State = void 0; const cache = __importStar(__nccwpck_require__(5116)); @@ -87743,39 +87742,41 @@ var State; State["CACHE_PATHS"] = "cache-paths"; })(State || (exports.State = State = {})); class CacheDistributor { - packageManager; - cacheDependencyPath; - CACHE_KEY_PREFIX = 'setup-python'; constructor(packageManager, cacheDependencyPath) { this.packageManager = packageManager; this.cacheDependencyPath = cacheDependencyPath; + this.CACHE_KEY_PREFIX = 'setup-python'; } - async handleLoadedCache() { } - async restoreCache() { - const { primaryKey, restoreKey } = await this.computeKeys(); - if (primaryKey.endsWith('-')) { - const file = this.packageManager === 'pip' - ? `${this.cacheDependencyPath - .split('\n') - .join(',')} or ${constants_1.CACHE_DEPENDENCY_BACKUP_PATH}` - : this.cacheDependencyPath.split('\n').join(','); - throw new Error(`No file in ${process.cwd()} matched to [${file}], make sure you have checked out the target repository`); - } - const cachePath = await this.getCacheGlobalDirectories(); - core.saveState(State.CACHE_PATHS, cachePath); - let matchedKey; - try { - matchedKey = await cache.restoreCache(cachePath, primaryKey, restoreKey); - } - catch (err) { - const message = err.message; - core.info(`[warning]${message}`); - core.setOutput('cache-hit', false); - return; - } - core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); - await this.handleLoadedCache(); - this.handleMatchResult(matchedKey, primaryKey); + handleLoadedCache() { + return __awaiter(this, void 0, void 0, function* () { }); + } + restoreCache() { + return __awaiter(this, void 0, void 0, function* () { + const { primaryKey, restoreKey } = yield this.computeKeys(); + if (primaryKey.endsWith('-')) { + const file = this.packageManager === 'pip' + ? `${this.cacheDependencyPath + .split('\n') + .join(',')} or ${constants_1.CACHE_DEPENDENCY_BACKUP_PATH}` + : this.cacheDependencyPath.split('\n').join(','); + throw new Error(`No file in ${process.cwd()} matched to [${file}], make sure you have checked out the target repository`); + } + const cachePath = yield this.getCacheGlobalDirectories(); + core.saveState(State.CACHE_PATHS, cachePath); + let matchedKey; + try { + matchedKey = yield cache.restoreCache(cachePath, primaryKey, restoreKey); + } + catch (err) { + const message = err.message; + core.info(`[warning]${message}`); + core.setOutput('cache-hit', false); + return; + } + core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); + yield this.handleLoadedCache(); + this.handleMatchResult(matchedKey, primaryKey); + }); } handleMatchResult(matchedKey, primaryKey) { if (matchedKey) { @@ -87826,28 +87827,27 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.run = run; +exports.run = void 0; const core = __importStar(__nccwpck_require__(7484)); const cache = __importStar(__nccwpck_require__(5116)); const fs_1 = __importDefault(__nccwpck_require__(9896)); @@ -87855,57 +87855,62 @@ const cache_distributor_1 = __nccwpck_require__(2326); // Added early exit to resolve issue with slow post action step: // - https://github.com/actions/setup-node/issues/878 // https://github.com/actions/cache/pull/1217 -async function run(earlyExit) { - try { - const cache = core.getInput('cache'); - if (cache) { - await saveCache(cache); - if (earlyExit) { - process.exit(0); +function run(earlyExit) { + return __awaiter(this, void 0, void 0, function* () { + try { + const cache = core.getInput('cache'); + if (cache) { + yield saveCache(cache); + if (earlyExit) { + process.exit(0); + } } } - } - catch (error) { - const err = error; - core.setFailed(err.message); - } + catch (error) { + const err = error; + core.setFailed(err.message); + } + }); } -async function saveCache(packageManager) { - const cachePathState = core.getState(cache_distributor_1.State.CACHE_PATHS); - if (!cachePathState) { - core.warning('Cache paths are empty. Please check the previous logs and make sure that the python version is specified'); - return; - } - const cachePaths = JSON.parse(cachePathState); - core.debug(`paths for caching are ${cachePaths.join(', ')}`); - if (!isCacheDirectoryExists(cachePaths)) { - 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); - if (!primaryKey) { - core.warning('Error retrieving key from state.'); - return; - } - else if (matchedKey === primaryKey) { - // no change in target directories - core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); - return; - } - let cacheId = 0; - try { - cacheId = await cache.saveCache(cachePaths, primaryKey); - } - catch (err) { - const message = err.message; - core.info(`[warning]${message}`); - return; - } - if (cacheId == -1) { - return; - } - core.info(`Cache saved with the key: ${primaryKey}`); +exports.run = run; +function saveCache(packageManager) { + return __awaiter(this, void 0, void 0, function* () { + const cachePathState = core.getState(cache_distributor_1.State.CACHE_PATHS); + if (!cachePathState) { + core.warning('Cache paths are empty. Please check the previous logs and make sure that the python version is specified'); + return; + } + const cachePaths = JSON.parse(cachePathState); + core.debug(`paths for caching are ${cachePaths.join(', ')}`); + if (!isCacheDirectoryExists(cachePaths)) { + 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); + if (!primaryKey) { + core.warning('Error retrieving key from state.'); + return; + } + else if (matchedKey === primaryKey) { + // no change in target directories + core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); + return; + } + let cacheId = 0; + try { + cacheId = yield cache.saveCache(cachePaths, primaryKey); + } + catch (err) { + const message = err.message; + core.info(`[warning]${message}`); + return; + } + if (cacheId == -1) { + return; + } + core.info(`Cache saved with the key: ${primaryKey}`); + }); } function isCacheDirectoryExists(cacheDirectory) { const result = cacheDirectory.reduce((previousValue, currentValue) => { diff --git a/dist/setup/index.js b/dist/setup/index.js index f8f14af5..ba888f22 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -96244,23 +96244,22 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.State = void 0; const cache = __importStar(__nccwpck_require__(5116)); @@ -96273,39 +96272,41 @@ var State; State["CACHE_PATHS"] = "cache-paths"; })(State || (exports.State = State = {})); class CacheDistributor { - packageManager; - cacheDependencyPath; - CACHE_KEY_PREFIX = 'setup-python'; constructor(packageManager, cacheDependencyPath) { this.packageManager = packageManager; this.cacheDependencyPath = cacheDependencyPath; + this.CACHE_KEY_PREFIX = 'setup-python'; } - async handleLoadedCache() { } - async restoreCache() { - const { primaryKey, restoreKey } = await this.computeKeys(); - if (primaryKey.endsWith('-')) { - const file = this.packageManager === 'pip' - ? `${this.cacheDependencyPath - .split('\n') - .join(',')} or ${constants_1.CACHE_DEPENDENCY_BACKUP_PATH}` - : this.cacheDependencyPath.split('\n').join(','); - throw new Error(`No file in ${process.cwd()} matched to [${file}], make sure you have checked out the target repository`); - } - const cachePath = await this.getCacheGlobalDirectories(); - core.saveState(State.CACHE_PATHS, cachePath); - let matchedKey; - try { - matchedKey = await cache.restoreCache(cachePath, primaryKey, restoreKey); - } - catch (err) { - const message = err.message; - core.info(`[warning]${message}`); - core.setOutput('cache-hit', false); - return; - } - core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); - await this.handleLoadedCache(); - this.handleMatchResult(matchedKey, primaryKey); + handleLoadedCache() { + return __awaiter(this, void 0, void 0, function* () { }); + } + restoreCache() { + return __awaiter(this, void 0, void 0, function* () { + const { primaryKey, restoreKey } = yield this.computeKeys(); + if (primaryKey.endsWith('-')) { + const file = this.packageManager === 'pip' + ? `${this.cacheDependencyPath + .split('\n') + .join(',')} or ${constants_1.CACHE_DEPENDENCY_BACKUP_PATH}` + : this.cacheDependencyPath.split('\n').join(','); + throw new Error(`No file in ${process.cwd()} matched to [${file}], make sure you have checked out the target repository`); + } + const cachePath = yield this.getCacheGlobalDirectories(); + core.saveState(State.CACHE_PATHS, cachePath); + let matchedKey; + try { + matchedKey = yield cache.restoreCache(cachePath, primaryKey, restoreKey); + } + catch (err) { + const message = err.message; + core.info(`[warning]${message}`); + core.setOutput('cache-hit', false); + return; + } + core.saveState(State.STATE_CACHE_PRIMARY_KEY, primaryKey); + yield this.handleLoadedCache(); + this.handleMatchResult(matchedKey, primaryKey); + }); } handleMatchResult(matchedKey, primaryKey) { if (matchedKey) { @@ -96332,8 +96333,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PackageManagers = void 0; -exports.getCacheDistributor = getCacheDistributor; +exports.getCacheDistributor = exports.PackageManagers = void 0; const pip_cache_1 = __importDefault(__nccwpck_require__(154)); const pipenv_cache_1 = __importDefault(__nccwpck_require__(3821)); const poetry_cache_1 = __importDefault(__nccwpck_require__(8296)); @@ -96355,6 +96355,7 @@ function getCacheDistributor(packageManager, pythonVersion, cacheDependencyPath) throw new Error(`Caching for '${packageManager}' is not supported`); } } +exports.getCacheDistributor = getCacheDistributor; /***/ }), @@ -96392,23 +96393,22 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -96424,60 +96424,63 @@ const cache_distributor_1 = __importDefault(__nccwpck_require__(2326)); const utils_1 = __nccwpck_require__(1798); const constants_1 = __nccwpck_require__(565); class PipCache extends cache_distributor_1.default { - pythonVersion; - cacheDependencyBackupPath = constants_1.CACHE_DEPENDENCY_BACKUP_PATH; constructor(pythonVersion, cacheDependencyPath = '**/requirements.txt') { super('pip', cacheDependencyPath); this.pythonVersion = pythonVersion; + this.cacheDependencyBackupPath = constants_1.CACHE_DEPENDENCY_BACKUP_PATH; } - async getCacheGlobalDirectories() { - let exitCode = 1; - let stdout = ''; - let stderr = ''; - // Add temporary fix for Windows - // On windows it is necessary to execute through an exec - // because the getExecOutput gives a non zero code or writes to stderr for pip 22.0.2, - // or spawn must be started with the shell option enabled for getExecOutput - // Related issue: https://github.com/actions/setup-python/issues/328 - if (utils_1.IS_WINDOWS) { - const execPromisify = util_1.default.promisify(child_process.exec); - ({ stdout: stdout, stderr: stderr } = await execPromisify('pip cache dir')); - } - else { - ({ - stdout: stdout, - stderr: stderr, - exitCode: exitCode - } = await exec.getExecOutput('pip cache dir')); - } - if (exitCode && stderr) { - throw new Error(`Could not get cache folder path for pip package manager`); - } - let resolvedPath = stdout.trim(); - if (resolvedPath.includes('~')) { - resolvedPath = path.join(os_1.default.homedir(), resolvedPath.slice(1)); - } - core.debug(`global cache directory path is ${resolvedPath}`); - return [resolvedPath]; + getCacheGlobalDirectories() { + return __awaiter(this, void 0, void 0, function* () { + let exitCode = 1; + let stdout = ''; + let stderr = ''; + // Add temporary fix for Windows + // On windows it is necessary to execute through an exec + // because the getExecOutput gives a non zero code or writes to stderr for pip 22.0.2, + // or spawn must be started with the shell option enabled for getExecOutput + // Related issue: https://github.com/actions/setup-python/issues/328 + if (utils_1.IS_WINDOWS) { + const execPromisify = util_1.default.promisify(child_process.exec); + ({ stdout: stdout, stderr: stderr } = yield execPromisify('pip cache dir')); + } + else { + ({ + stdout: stdout, + stderr: stderr, + exitCode: exitCode + } = yield exec.getExecOutput('pip cache dir')); + } + if (exitCode && stderr) { + throw new Error(`Could not get cache folder path for pip package manager`); + } + let resolvedPath = stdout.trim(); + if (resolvedPath.includes('~')) { + resolvedPath = path.join(os_1.default.homedir(), resolvedPath.slice(1)); + } + core.debug(`global cache directory path is ${resolvedPath}`); + return [resolvedPath]; + }); } - async computeKeys() { - const hash = (await glob.hashFiles(this.cacheDependencyPath)) || - (await glob.hashFiles(this.cacheDependencyBackupPath)); - let primaryKey = ''; - let restoreKey = ''; - if (utils_1.IS_LINUX) { - const osInfo = await (0, utils_1.getLinuxInfo)(); - primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; - restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}`; - } - else { - primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; - restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}`; - } - return { - primaryKey, - restoreKey: [restoreKey] - }; + computeKeys() { + return __awaiter(this, void 0, void 0, function* () { + const hash = (yield glob.hashFiles(this.cacheDependencyPath)) || + (yield glob.hashFiles(this.cacheDependencyBackupPath)); + let primaryKey = ''; + let restoreKey = ''; + if (utils_1.IS_LINUX) { + const osInfo = yield (0, utils_1.getLinuxInfo)(); + primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; + restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-${osInfo.osVersion}-${osInfo.osName}-python-${this.pythonVersion}-${this.packageManager}`; + } + else { + primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; + restoreKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}`; + } + return { + primaryKey, + restoreKey: [restoreKey] + }; + }); } } exports["default"] = PipCache; @@ -96506,23 +96509,22 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -96533,36 +96535,38 @@ const path = __importStar(__nccwpck_require__(6928)); const core = __importStar(__nccwpck_require__(7484)); const cache_distributor_1 = __importDefault(__nccwpck_require__(2326)); class PipenvCache extends cache_distributor_1.default { - pythonVersion; - patterns; constructor(pythonVersion, patterns = '**/Pipfile.lock') { super('pipenv', patterns); this.pythonVersion = pythonVersion; this.patterns = patterns; } - async getCacheGlobalDirectories() { - let virtualEnvRelativePath; - // Default virtualenv directories are hardcoded, - // because pipenv is not preinstalled on hosted images and virtualenv is not created: - // https://github.com/pypa/pipenv/blob/1daaa0de9a0b00d386c6baeb809d8d4ee6795cfd/pipenv/utils.py#L1990-L2002 - if (process.platform === 'win32') { - virtualEnvRelativePath = '.virtualenvs'; - } - else { - virtualEnvRelativePath = '.local/share/virtualenvs'; - } - const resolvedPath = path.join(os.homedir(), virtualEnvRelativePath); - core.debug(`global cache directory path is ${resolvedPath}`); - return [resolvedPath]; + getCacheGlobalDirectories() { + return __awaiter(this, void 0, void 0, function* () { + let virtualEnvRelativePath; + // Default virtualenv directories are hardcoded, + // because pipenv is not preinstalled on hosted images and virtualenv is not created: + // https://github.com/pypa/pipenv/blob/1daaa0de9a0b00d386c6baeb809d8d4ee6795cfd/pipenv/utils.py#L1990-L2002 + if (process.platform === 'win32') { + virtualEnvRelativePath = '.virtualenvs'; + } + else { + virtualEnvRelativePath = '.local/share/virtualenvs'; + } + const resolvedPath = path.join(os.homedir(), virtualEnvRelativePath); + core.debug(`global cache directory path is ${resolvedPath}`); + return [resolvedPath]; + }); } - async computeKeys() { - const hash = await glob.hashFiles(this.patterns); - const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; - const restoreKey = undefined; - return { - primaryKey, - restoreKey - }; + computeKeys() { + return __awaiter(this, void 0, void 0, function* () { + const hash = yield glob.hashFiles(this.patterns); + const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}-${hash}`; + const restoreKey = undefined; + return { + primaryKey, + restoreKey + }; + }); } } exports["default"] = PipenvCache; @@ -96591,23 +96595,29 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -96620,75 +96630,96 @@ const core = __importStar(__nccwpck_require__(7484)); const cache_distributor_1 = __importDefault(__nccwpck_require__(2326)); const utils_1 = __nccwpck_require__(1798); class PoetryCache extends cache_distributor_1.default { - pythonVersion; - patterns; - poetryProjects; constructor(pythonVersion, patterns = '**/poetry.lock', poetryProjects = new Set()) { super('poetry', patterns); this.pythonVersion = pythonVersion; this.patterns = patterns; this.poetryProjects = poetryProjects; } - async getCacheGlobalDirectories() { - // Same virtualenvs path may appear for different projects, hence we use a Set - const paths = new Set(); - const globber = await glob.create(this.patterns); - for await (const file of globber.globGenerator()) { - const basedir = path.dirname(file); - core.debug(`Processing Poetry project at ${basedir}`); - this.poetryProjects.add(basedir); - const poetryConfig = await this.getPoetryConfiguration(basedir); - const cacheDir = poetryConfig['cache-dir']; - const virtualenvsPath = poetryConfig['virtualenvs.path'].replace('{cache-dir}', cacheDir); - paths.add(virtualenvsPath); - if (poetryConfig['virtualenvs.in-project']) { - paths.add(path.join(basedir, '.venv')); + getCacheGlobalDirectories() { + return __awaiter(this, void 0, void 0, function* () { + var _a, e_1, _b, _c; + // Same virtualenvs path may appear for different projects, hence we use a Set + const paths = new Set(); + const globber = yield glob.create(this.patterns); + try { + for (var _d = true, _e = __asyncValues(globber.globGenerator()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) { + _c = _f.value; + _d = false; + const file = _c; + const basedir = path.dirname(file); + core.debug(`Processing Poetry project at ${basedir}`); + this.poetryProjects.add(basedir); + const poetryConfig = yield this.getPoetryConfiguration(basedir); + const cacheDir = poetryConfig['cache-dir']; + const virtualenvsPath = poetryConfig['virtualenvs.path'].replace('{cache-dir}', cacheDir); + paths.add(virtualenvsPath); + if (poetryConfig['virtualenvs.in-project']) { + paths.add(path.join(basedir, '.venv')); + } + } } - } - return [...paths]; - } - async computeKeys() { - const hash = await glob.hashFiles(this.patterns); - // "v2" is here to invalidate old caches of this cache distributor, which were created broken: - const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}-v2-${hash}`; - const restoreKey = undefined; - return { - primaryKey, - restoreKey - }; - } - async handleLoadedCache() { - await super.handleLoadedCache(); - // After the cache is loaded -- make sure virtualenvs use the correct Python version (the one that we have just installed). - // This will handle invalid caches, recreating virtualenvs if necessary. - const pythonLocation = await io.which('python'); - if (pythonLocation) { - core.debug(`pythonLocation is ${pythonLocation}`); - } - else { - (0, utils_1.logWarning)('python binaries were not found in PATH'); - return; - } - for (const poetryProject of this.poetryProjects) { - const { exitCode, stderr } = await exec.getExecOutput('poetry', ['env', 'use', pythonLocation], { ignoreReturnCode: true, cwd: poetryProject }); - if (exitCode) { - (0, utils_1.logWarning)(stderr); + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (!_d && !_a && (_b = _e.return)) yield _b.call(_e); + } + finally { if (e_1) throw e_1.error; } } - } + return [...paths]; + }); } - async getPoetryConfiguration(basedir) { - const { stdout, stderr, exitCode } = await exec.getExecOutput('poetry', ['config', '--list'], { cwd: basedir }); - if (exitCode && stderr) { - throw new Error('Could not get cache folder path for poetry package manager'); - } - const lines = stdout.trim().split('\n'); - const config = {}; - for (let line of lines) { - line = line.replace(/#.*$/gm, ''); - const [key, value] = line.split('=').map(part => part.trim()); - config[key] = JSON.parse(value); - } - return config; + computeKeys() { + return __awaiter(this, void 0, void 0, function* () { + const hash = yield glob.hashFiles(this.patterns); + // "v2" is here to invalidate old caches of this cache distributor, which were created broken: + const primaryKey = `${this.CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${process.arch}-python-${this.pythonVersion}-${this.packageManager}-v2-${hash}`; + const restoreKey = undefined; + return { + primaryKey, + restoreKey + }; + }); + } + handleLoadedCache() { + const _super = Object.create(null, { + handleLoadedCache: { get: () => super.handleLoadedCache } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.handleLoadedCache.call(this); + // After the cache is loaded -- make sure virtualenvs use the correct Python version (the one that we have just installed). + // This will handle invalid caches, recreating virtualenvs if necessary. + const pythonLocation = yield io.which('python'); + if (pythonLocation) { + core.debug(`pythonLocation is ${pythonLocation}`); + } + else { + (0, utils_1.logWarning)('python binaries were not found in PATH'); + return; + } + for (const poetryProject of this.poetryProjects) { + const { exitCode, stderr } = yield exec.getExecOutput('poetry', ['env', 'use', pythonLocation], { ignoreReturnCode: true, cwd: poetryProject }); + if (exitCode) { + (0, utils_1.logWarning)(stderr); + } + } + }); + } + getPoetryConfiguration(basedir) { + return __awaiter(this, void 0, void 0, function* () { + const { stdout, stderr, exitCode } = yield exec.getExecOutput('poetry', ['config', '--list'], { cwd: basedir }); + if (exitCode && stderr) { + throw new Error('Could not get cache folder path for poetry package manager'); + } + const lines = stdout.trim().split('\n'); + const config = {}; + for (let line of lines) { + line = line.replace(/#.*$/gm, ''); + const [key, value] = line.split('=').map(part => part.trim()); + config[key] = JSON.parse(value); + } + return config; + }); } } exports["default"] = PoetryCache; @@ -96717,76 +96748,76 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.findGraalPyVersion = findGraalPyVersion; -exports.findGraalPyToolCache = findGraalPyToolCache; -exports.parseGraalPyVersion = parseGraalPyVersion; +exports.parseGraalPyVersion = exports.findGraalPyToolCache = exports.findGraalPyVersion = void 0; const path = __importStar(__nccwpck_require__(6928)); const graalpyInstall = __importStar(__nccwpck_require__(3027)); const utils_1 = __nccwpck_require__(1798); const semver = __importStar(__nccwpck_require__(2088)); const core = __importStar(__nccwpck_require__(7484)); const tc = __importStar(__nccwpck_require__(3472)); -async function findGraalPyVersion(versionSpec, architecture, updateEnvironment, checkLatest, allowPreReleases) { - let resolvedGraalPyVersion = ''; - let installDir; - let releases; - let graalpyVersionSpec = parseGraalPyVersion(versionSpec); - if (checkLatest) { - releases = await graalpyInstall.getAvailableGraalPyVersions(); - if (releases && releases.length > 0) { - const releaseData = graalpyInstall.findRelease(releases, graalpyVersionSpec, architecture, false); - if (releaseData) { - core.info(`Resolved as GraalPy ${releaseData.resolvedGraalPyVersion}`); - graalpyVersionSpec = releaseData.resolvedGraalPyVersion; - } - else { - core.info(`Failed to resolve GraalPy ${graalpyVersionSpec} from manifest`); +function findGraalPyVersion(versionSpec, architecture, updateEnvironment, checkLatest, allowPreReleases) { + return __awaiter(this, void 0, void 0, function* () { + let resolvedGraalPyVersion = ''; + let installDir; + let releases; + let graalpyVersionSpec = parseGraalPyVersion(versionSpec); + if (checkLatest) { + releases = yield graalpyInstall.getAvailableGraalPyVersions(); + if (releases && releases.length > 0) { + const releaseData = graalpyInstall.findRelease(releases, graalpyVersionSpec, architecture, false); + if (releaseData) { + core.info(`Resolved as GraalPy ${releaseData.resolvedGraalPyVersion}`); + graalpyVersionSpec = releaseData.resolvedGraalPyVersion; + } + else { + core.info(`Failed to resolve GraalPy ${graalpyVersionSpec} from manifest`); + } } } - } - ({ installDir, resolvedGraalPyVersion } = findGraalPyToolCache(graalpyVersionSpec, architecture)); - if (!installDir) { - ({ installDir, resolvedGraalPyVersion } = await graalpyInstall.installGraalPy(graalpyVersionSpec, architecture, allowPreReleases, releases)); - } - const pipDir = utils_1.IS_WINDOWS ? 'Scripts' : 'bin'; - const _binDir = path.join(installDir, pipDir); - const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; - const pythonPath = path.join(_binDir, `python${binaryExtension}`); - const pythonLocation = path.join(installDir, 'bin'); - if (updateEnvironment) { - core.exportVariable('pythonLocation', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython - core.exportVariable('Python_ROOT_DIR', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 - core.exportVariable('Python2_ROOT_DIR', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 - core.exportVariable('Python3_ROOT_DIR', installDir); - core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); - core.addPath(pythonLocation); - core.addPath(_binDir); - } - core.setOutput('python-version', 'graalpy' + resolvedGraalPyVersion); - core.setOutput('python-path', pythonPath); - return resolvedGraalPyVersion; + ({ installDir, resolvedGraalPyVersion } = findGraalPyToolCache(graalpyVersionSpec, architecture)); + if (!installDir) { + ({ installDir, resolvedGraalPyVersion } = yield graalpyInstall.installGraalPy(graalpyVersionSpec, architecture, allowPreReleases, releases)); + } + const pipDir = utils_1.IS_WINDOWS ? 'Scripts' : 'bin'; + const _binDir = path.join(installDir, pipDir); + const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; + const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); + const pythonLocation = (0, utils_1.getBinaryDirectory)(installDir); + if (updateEnvironment) { + core.exportVariable('pythonLocation', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython + core.exportVariable('Python_ROOT_DIR', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 + core.exportVariable('Python2_ROOT_DIR', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 + core.exportVariable('Python3_ROOT_DIR', installDir); + core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); + core.addPath(pythonLocation); + core.addPath(_binDir); + } + core.setOutput('python-version', 'graalpy' + resolvedGraalPyVersion); + core.setOutput('python-path', pythonPath); + return resolvedGraalPyVersion; + }); } +exports.findGraalPyVersion = findGraalPyVersion; function findGraalPyToolCache(graalpyVersion, architecture) { let resolvedGraalPyVersion = ''; let installDir = tc.find('GraalPy', graalpyVersion, architecture); @@ -96805,6 +96836,7 @@ function findGraalPyToolCache(graalpyVersion, architecture) { } return { installDir, resolvedGraalPyVersion }; } +exports.findGraalPyToolCache = findGraalPyToolCache; function parseGraalPyVersion(versionSpec) { const versions = versionSpec.split('-').filter(item => !!item); if (/^(graalpy)(.+)/.test(versions[0])) { @@ -96820,6 +96852,7 @@ function parseGraalPyVersion(versionSpec) { } return pythonVersion; } +exports.parseGraalPyVersion = parseGraalPyVersion; /***/ }), @@ -96845,80 +96878,79 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.findPyPyVersion = findPyPyVersion; -exports.findPyPyToolCache = findPyPyToolCache; -exports.parsePyPyVersion = parsePyPyVersion; -exports.findPyPyInstallDirForWindows = findPyPyInstallDirForWindows; +exports.findPyPyInstallDirForWindows = exports.parsePyPyVersion = exports.findPyPyToolCache = exports.findPyPyVersion = void 0; const path = __importStar(__nccwpck_require__(6928)); const pypyInstall = __importStar(__nccwpck_require__(7149)); const utils_1 = __nccwpck_require__(1798); const semver = __importStar(__nccwpck_require__(2088)); const core = __importStar(__nccwpck_require__(7484)); const tc = __importStar(__nccwpck_require__(3472)); -async function findPyPyVersion(versionSpec, architecture, updateEnvironment, checkLatest, allowPreReleases) { - let resolvedPyPyVersion = ''; - let resolvedPythonVersion = ''; - let installDir; - let releases; - const pypyVersionSpec = parsePyPyVersion(versionSpec); - if (checkLatest) { - releases = await pypyInstall.getAvailablePyPyVersions(); - if (releases && releases.length > 0) { - const releaseData = pypyInstall.findRelease(releases, pypyVersionSpec.pythonVersion, pypyVersionSpec.pypyVersion, architecture, false); - if (releaseData) { - core.info(`Resolved as PyPy ${releaseData.resolvedPyPyVersion} with Python (${releaseData.resolvedPythonVersion})`); - pypyVersionSpec.pythonVersion = releaseData.resolvedPythonVersion; - pypyVersionSpec.pypyVersion = releaseData.resolvedPyPyVersion; - } - else { - core.info(`Failed to resolve PyPy ${pypyVersionSpec.pypyVersion} with Python (${pypyVersionSpec.pythonVersion}) from manifest`); +function findPyPyVersion(versionSpec, architecture, updateEnvironment, checkLatest, allowPreReleases) { + return __awaiter(this, void 0, void 0, function* () { + let resolvedPyPyVersion = ''; + let resolvedPythonVersion = ''; + let installDir; + let releases; + const pypyVersionSpec = parsePyPyVersion(versionSpec); + if (checkLatest) { + releases = yield pypyInstall.getAvailablePyPyVersions(); + if (releases && releases.length > 0) { + const releaseData = pypyInstall.findRelease(releases, pypyVersionSpec.pythonVersion, pypyVersionSpec.pypyVersion, architecture, false); + if (releaseData) { + core.info(`Resolved as PyPy ${releaseData.resolvedPyPyVersion} with Python (${releaseData.resolvedPythonVersion})`); + pypyVersionSpec.pythonVersion = releaseData.resolvedPythonVersion; + pypyVersionSpec.pypyVersion = releaseData.resolvedPyPyVersion; + } + else { + core.info(`Failed to resolve PyPy ${pypyVersionSpec.pypyVersion} with Python (${pypyVersionSpec.pythonVersion}) from manifest`); + } } } - } - ({ installDir, resolvedPythonVersion, resolvedPyPyVersion } = findPyPyToolCache(pypyVersionSpec.pythonVersion, pypyVersionSpec.pypyVersion, architecture)); - if (!installDir) { - ({ installDir, resolvedPythonVersion, resolvedPyPyVersion } = - await pypyInstall.installPyPy(pypyVersionSpec.pypyVersion, pypyVersionSpec.pythonVersion, architecture, allowPreReleases, releases)); - } - const pipDir = utils_1.IS_WINDOWS ? 'Scripts' : 'bin'; - const _binDir = path.join(installDir, pipDir); - const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; - const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); - const pythonLocation = (0, utils_1.getBinaryDirectory)(installDir); - if (updateEnvironment) { - core.exportVariable('pythonLocation', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython - core.exportVariable('Python_ROOT_DIR', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 - core.exportVariable('Python2_ROOT_DIR', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 - core.exportVariable('Python3_ROOT_DIR', installDir); - core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); - core.addPath(pythonLocation); - core.addPath(_binDir); - } - core.setOutput('python-version', `pypy${resolvedPythonVersion}-${resolvedPyPyVersion}`); - core.setOutput('python-path', pythonPath); - return { resolvedPyPyVersion, resolvedPythonVersion }; + ({ installDir, resolvedPythonVersion, resolvedPyPyVersion } = findPyPyToolCache(pypyVersionSpec.pythonVersion, pypyVersionSpec.pypyVersion, architecture)); + if (!installDir) { + ({ installDir, resolvedPythonVersion, resolvedPyPyVersion } = + yield pypyInstall.installPyPy(pypyVersionSpec.pypyVersion, pypyVersionSpec.pythonVersion, architecture, allowPreReleases, releases)); + } + const pipDir = utils_1.IS_WINDOWS ? 'Scripts' : 'bin'; + const _binDir = path.join(installDir, pipDir); + const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; + const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); + const pythonLocation = (0, utils_1.getBinaryDirectory)(installDir); + if (updateEnvironment) { + core.exportVariable('pythonLocation', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython + core.exportVariable('Python_ROOT_DIR', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 + core.exportVariable('Python2_ROOT_DIR', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 + core.exportVariable('Python3_ROOT_DIR', installDir); + core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); + core.addPath(pythonLocation); + core.addPath(_binDir); + } + core.setOutput('python-version', `pypy${resolvedPythonVersion}-${resolvedPyPyVersion}`); + core.setOutput('python-path', pythonPath); + return { resolvedPyPyVersion, resolvedPythonVersion }; + }); } +exports.findPyPyVersion = findPyPyVersion; function findPyPyToolCache(pythonVersion, pypyVersion, architecture) { let resolvedPyPyVersion = ''; let resolvedPythonVersion = ''; @@ -96942,6 +96974,7 @@ function findPyPyToolCache(pythonVersion, pypyVersion, architecture) { } return { installDir, resolvedPythonVersion, resolvedPyPyVersion }; } +exports.findPyPyToolCache = findPyPyToolCache; function parsePyPyVersion(versionSpec) { const versions = versionSpec.split('-').filter(item => !!item); if (/^(pypy)(.+)/.test(versions[0])) { @@ -96970,11 +97003,13 @@ function parsePyPyVersion(versionSpec) { pythonVersion: pythonVersion }; } +exports.parsePyPyVersion = parsePyPyVersion; function findPyPyInstallDirForWindows(pythonVersion) { let installDir = ''; utils_1.WINDOWS_ARCHS.forEach(architecture => (installDir = installDir || tc.find('PyPy', pythonVersion, architecture))); return installDir; } +exports.findPyPyInstallDirForWindows = findPyPyInstallDirForWindows; /***/ }), @@ -97000,27 +97035,24 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.useCpythonVersion = useCpythonVersion; -exports.desugarVersion = desugarVersion; -exports.pythonVersionToSemantic = pythonVersionToSemantic; +exports.pythonVersionToSemantic = exports.desugarVersion = exports.useCpythonVersion = void 0; const os = __importStar(__nccwpck_require__(857)); const path = __importStar(__nccwpck_require__(6928)); const utils_1 = __nccwpck_require__(1798); @@ -97049,141 +97081,148 @@ function binDir(installDir) { return path.join(installDir, 'bin'); } } -async function installPip(pythonLocation) { - const pipVersion = core.getInput('pip-version'); - // Validate pip-version format: major[.minor][.patch] - const versionRegex = /^\d+(\.\d+)?(\.\d+)?$/; - if (pipVersion && !versionRegex.test(pipVersion)) { - throw new Error(`Invalid pip-version "${pipVersion}". Please specify a version in the format major[.minor][.patch].`); - } - if (pipVersion) { - core.info(`pip-version input is specified. Installing pip version ${pipVersion}`); - await exec.exec(`${pythonLocation}/python -m pip install --upgrade pip==${pipVersion} --disable-pip-version-check --no-warn-script-location`); - } +function installPip(pythonLocation) { + return __awaiter(this, void 0, void 0, function* () { + const pipVersion = core.getInput('pip-version'); + // Validate pip-version format: major[.minor][.patch] + const versionRegex = /^\d+(\.\d+)?(\.\d+)?$/; + if (pipVersion && !versionRegex.test(pipVersion)) { + throw new Error(`Invalid pip-version "${pipVersion}". Please specify a version in the format major[.minor][.patch].`); + } + if (pipVersion) { + core.info(`pip-version input is specified. Installing pip version ${pipVersion}`); + yield exec.exec(`${pythonLocation}/python -m pip install --upgrade pip==${pipVersion} --disable-pip-version-check --no-warn-script-location`); + } + }); } -async function useCpythonVersion(version, architecture, updateEnvironment, checkLatest, allowPreReleases, freethreaded) { - let manifest = null; - const { version: desugaredVersionSpec, freethreaded: versionFreethreaded } = desugarVersion(version); - let semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec, allowPreReleases); - if (versionFreethreaded) { - // Use the freethreaded version if it was specified in the input, e.g., 3.13t - freethreaded = true; - } - core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); - if (freethreaded) { - // Free threaded versions use an architecture suffix like `x64-freethreaded` - core.debug(`Using freethreaded version of ${semanticVersionSpec}`); - architecture += '-freethreaded'; - } - if (checkLatest) { - manifest = await installer.getManifest(); - const resolvedVersion = (await installer.findReleaseFromManifest(semanticVersionSpec, architecture, manifest))?.version; - if (resolvedVersion) { - semanticVersionSpec = resolvedVersion; - core.info(`Resolved as '${semanticVersionSpec}'`); +function useCpythonVersion(version, architecture, updateEnvironment, checkLatest, allowPreReleases, freethreaded) { + return __awaiter(this, void 0, void 0, function* () { + var _a; + let manifest = null; + const { version: desugaredVersionSpec, freethreaded: versionFreethreaded } = desugarVersion(version); + let semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec, allowPreReleases); + if (versionFreethreaded) { + // Use the freethreaded version if it was specified in the input, e.g., 3.13t + freethreaded = true; } - else { - core.info(`Failed to resolve version ${semanticVersionSpec} from manifest`); - } - } - let installDir = tc.find('Python', semanticVersionSpec, architecture); - if (!installDir) { - core.info(`Version ${semanticVersionSpec} was not found in the local cache`); - const foundRelease = await installer.findReleaseFromManifest(semanticVersionSpec, architecture, manifest); - if (foundRelease && foundRelease.files && foundRelease.files.length > 0) { - core.info(`Version ${semanticVersionSpec} is available for downloading`); - await installer.installCpythonFromRelease(foundRelease); - installDir = tc.find('Python', semanticVersionSpec, architecture); - } - } - if (!installDir) { - const osInfo = await (0, utils_1.getOSInfo)(); - const msg = [ - `The version '${version}' with architecture '${architecture}' was not found for ${osInfo - ? `${osInfo.osName} ${osInfo.osVersion}` - : 'this operating system'}.` - ]; + core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); if (freethreaded) { - msg.push(`Free threaded versions are only available for Python 3.13.0 and later.`); + // Free threaded versions use an architecture suffix like `x64-freethreaded` + core.debug(`Using freethreaded version of ${semanticVersionSpec}`); + architecture += '-freethreaded'; } - msg.push(`The list of all available versions can be found here: ${installer.MANIFEST_URL}`); - throw new Error(msg.join(os.EOL)); - } - const _binDir = binDir(installDir); - const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; - const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); - if (updateEnvironment) { - core.exportVariable('pythonLocation', installDir); - core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); - core.exportVariable('pythonLocation', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython - core.exportVariable('Python_ROOT_DIR', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 - core.exportVariable('Python2_ROOT_DIR', installDir); - // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 - core.exportVariable('Python3_ROOT_DIR', installDir); - core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); - if (utils_1.IS_LINUX) { - const libPath = process.env.LD_LIBRARY_PATH - ? `:${process.env.LD_LIBRARY_PATH}` - : ''; - const pyLibPath = path.join(installDir, 'lib'); - if (!libPath.split(':').includes(pyLibPath)) { - core.exportVariable('LD_LIBRARY_PATH', pyLibPath + libPath); + if (checkLatest) { + manifest = yield installer.getManifest(); + const resolvedVersion = (_a = (yield installer.findReleaseFromManifest(semanticVersionSpec, architecture, manifest))) === null || _a === void 0 ? void 0 : _a.version; + if (resolvedVersion) { + semanticVersionSpec = resolvedVersion; + core.info(`Resolved as '${semanticVersionSpec}'`); + } + else { + core.info(`Failed to resolve version ${semanticVersionSpec} from manifest`); } } - core.addPath(installDir); - core.addPath(_binDir); - if (utils_1.IS_WINDOWS) { - // Add --user directory - // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python//x64/ - // Extract version details - const version = path.basename(path.dirname(installDir)); - const major = semver.major(version); - const minor = semver.minor(version); - const basePath = process.env['APPDATA'] || ''; - let versionSuffix = `${major}${minor}`; - // Append '-32' for x86 architecture if Python version is >= 3.10 - if (architecture === 'x86' && - (major > 3 || (major === 3 && minor >= 10))) { - versionSuffix += '-32'; + let installDir = tc.find('Python', semanticVersionSpec, architecture); + if (!installDir) { + core.info(`Version ${semanticVersionSpec} was not found in the local cache`); + const foundRelease = yield installer.findReleaseFromManifest(semanticVersionSpec, architecture, manifest); + if (foundRelease && foundRelease.files && foundRelease.files.length > 0) { + core.info(`Version ${semanticVersionSpec} is available for downloading`); + yield installer.installCpythonFromRelease(foundRelease); + installDir = tc.find('Python', semanticVersionSpec, architecture); } - else if (architecture === 'arm64') { - versionSuffix += '-arm64'; - } - // Append 't' for freethreaded builds + } + if (!installDir) { + const osInfo = yield (0, utils_1.getOSInfo)(); + const msg = [ + `The version '${version}' with architecture '${architecture}' was not found for ${osInfo + ? `${osInfo.osName} ${osInfo.osVersion}` + : 'this operating system'}.` + ]; if (freethreaded) { - versionSuffix += 't'; - if (architecture === 'x86-freethreaded') { + msg.push(`Free threaded versions are only available for Python 3.13.0 and later.`); + } + msg.push(`The list of all available versions can be found here: ${installer.MANIFEST_URL}`); + throw new Error(msg.join(os.EOL)); + } + const _binDir = binDir(installDir); + const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; + const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); + if (updateEnvironment) { + core.exportVariable('pythonLocation', installDir); + core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); + core.exportVariable('pythonLocation', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython + core.exportVariable('Python_ROOT_DIR', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2 + core.exportVariable('Python2_ROOT_DIR', installDir); + // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3 + core.exportVariable('Python3_ROOT_DIR', installDir); + core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); + if (utils_1.IS_LINUX) { + const libPath = process.env.LD_LIBRARY_PATH + ? `:${process.env.LD_LIBRARY_PATH}` + : ''; + const pyLibPath = path.join(installDir, 'lib'); + if (!libPath.split(':').includes(pyLibPath)) { + core.exportVariable('LD_LIBRARY_PATH', pyLibPath + libPath); + } + } + core.addPath(installDir); + core.addPath(_binDir); + if (utils_1.IS_WINDOWS) { + // Add --user directory + // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python//x64/ + // Extract version details + const version = path.basename(path.dirname(installDir)); + const major = semver.major(version); + const minor = semver.minor(version); + const basePath = process.env['APPDATA'] || ''; + let versionSuffix = `${major}${minor}`; + // Append '-32' for x86 architecture if Python version is >= 3.10 + if (architecture === 'x86' && + (major > 3 || (major === 3 && minor >= 10))) { versionSuffix += '-32'; } - else if (architecture === 'arm64-freethreaded') { + else if (architecture === 'arm64') { versionSuffix += '-arm64'; } + // Append 't' for freethreaded builds + if (freethreaded) { + versionSuffix += 't'; + if (architecture === 'x86-freethreaded') { + versionSuffix += '-32'; + } + else if (architecture === 'arm64-freethreaded') { + versionSuffix += '-arm64'; + } + } + // Add user Scripts path + const userScriptsDir = path.join(basePath, 'Python', `Python${versionSuffix}`, 'Scripts'); + core.addPath(userScriptsDir); } - // Add user Scripts path - const userScriptsDir = path.join(basePath, 'Python', `Python${versionSuffix}`, 'Scripts'); - core.addPath(userScriptsDir); + // On Linux and macOS, pip will create the --user directory and add it to PATH as needed. } - // On Linux and macOS, pip will create the --user directory and add it to PATH as needed. - } - const installed = versionFromPath(installDir); - let pythonVersion = installed; - if (freethreaded) { - // Add the freethreaded suffix to the version (e.g., 3.13.1t) - pythonVersion += 't'; - } - core.setOutput('python-version', pythonVersion); - core.setOutput('python-path', pythonPath); - const binaryPath = utils_1.IS_WINDOWS ? installDir : _binDir; - await installPip(binaryPath); - return { impl: 'CPython', version: pythonVersion }; + const installed = versionFromPath(installDir); + let pythonVersion = installed; + if (freethreaded) { + // Add the freethreaded suffix to the version (e.g., 3.13.1t) + pythonVersion += 't'; + } + core.setOutput('python-version', pythonVersion); + core.setOutput('python-path', pythonPath); + const binaryPath = utils_1.IS_WINDOWS ? installDir : _binDir; + yield installPip(binaryPath); + return { impl: 'CPython', version: pythonVersion }; + }); } +exports.useCpythonVersion = useCpythonVersion; /* Desugar free threaded and dev versions */ function desugarVersion(versionSpec) { const { version, freethreaded } = desugarFreeThreadedVersion(versionSpec); return { version: desugarDevVersion(version), freethreaded }; } +exports.desugarVersion = desugarVersion; /* Identify freethreaded versions like, 3.13t, 3.13.1t, 3.13t-dev. * Returns the version without the `t` and the architectures suffix, if freethreaded */ function desugarFreeThreadedVersion(versionSpec) { @@ -97227,6 +97266,7 @@ function pythonVersionToSemantic(versionSpec, allowPreReleases) { } return result; } +exports.pythonVersionToSemantic = pythonVersionToSemantic; /***/ }), @@ -97252,34 +97292,27 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.installGraalPy = installGraalPy; -exports.getAvailableGraalPyVersions = getAvailableGraalPyVersions; -exports.graalPyTagToVersion = graalPyTagToVersion; -exports.findRelease = findRelease; -exports.toGraalPyPlatform = toGraalPyPlatform; -exports.toGraalPyArchitecture = toGraalPyArchitecture; -exports.findAsset = findAsset; +exports.findAsset = exports.toGraalPyArchitecture = exports.toGraalPyPlatform = exports.findRelease = exports.graalPyTagToVersion = exports.getAvailableGraalPyVersions = exports.installGraalPy = void 0; const os = __importStar(__nccwpck_require__(857)); const path = __importStar(__nccwpck_require__(6928)); const core = __importStar(__nccwpck_require__(7484)); @@ -97291,118 +97324,107 @@ const fs_1 = __importDefault(__nccwpck_require__(9896)); const utils_1 = __nccwpck_require__(1798); const TOKEN = core.getInput('token'); const AUTH = !TOKEN ? undefined : `token ${TOKEN}`; -async function installGraalPy(graalpyVersion, architecture, allowPreReleases, releases) { - let downloadDir; - releases = releases ?? (await getAvailableGraalPyVersions()); - if (!releases || !releases.length) { - throw new Error('No release was found in GraalPy version.json'); - } - let releaseData = findRelease(releases, graalpyVersion, architecture, false); - if (allowPreReleases && (!releaseData || !releaseData.foundAsset)) { - // check for pre-release - core.info([ - `Stable GraalPy version ${graalpyVersion} with arch ${architecture} not found`, - `Trying pre-release versions` - ].join(os.EOL)); - releaseData = findRelease(releases, graalpyVersion, architecture, true); - } - if (!releaseData || !releaseData.foundAsset) { - throw new Error(`GraalPy version ${graalpyVersion} with arch ${architecture} not found`); - } - const { foundAsset, resolvedGraalPyVersion } = releaseData; - const downloadUrl = `${foundAsset.browser_download_url}`; - core.info(`Downloading GraalPy from "${downloadUrl}" ...`); - try { - const graalpyPath = await tc.downloadTool(downloadUrl, undefined, AUTH); - core.info('Extracting downloaded archive...'); - if (utils_1.IS_WINDOWS) { - downloadDir = await tc.extractZip(graalpyPath); +function installGraalPy(graalpyVersion, architecture, allowPreReleases, releases) { + return __awaiter(this, void 0, void 0, function* () { + let downloadDir; + releases = releases !== null && releases !== void 0 ? releases : (yield getAvailableGraalPyVersions()); + if (!releases || !releases.length) { + throw new Error('No release was found in GraalPy version.json'); } - else { - downloadDir = await tc.extractTar(graalpyPath); + let releaseData = findRelease(releases, graalpyVersion, architecture, false); + if (allowPreReleases && (!releaseData || !releaseData.foundAsset)) { + // check for pre-release + core.info([ + `Stable GraalPy version ${graalpyVersion} with arch ${architecture} not found`, + `Trying pre-release versions` + ].join(os.EOL)); + releaseData = findRelease(releases, graalpyVersion, architecture, true); } - // root folder in archive can have unpredictable name so just take the first folder - // downloadDir is unique folder under TEMP and can't contain any other folders - const archiveName = fs_1.default.readdirSync(downloadDir)[0]; - const toolDir = path.join(downloadDir, archiveName); - let installDir = toolDir; - if (!(0, utils_1.isNightlyKeyword)(resolvedGraalPyVersion)) { - installDir = await tc.cacheDir(toolDir, 'GraalPy', resolvedGraalPyVersion, architecture); + if (!releaseData || !releaseData.foundAsset) { + throw new Error(`GraalPy version ${graalpyVersion} with arch ${architecture} not found`); } - const binaryPath = path.join(installDir, 'bin'); - await createGraalPySymlink(binaryPath, resolvedGraalPyVersion); - await installPip(binaryPath); - return { installDir, resolvedGraalPyVersion }; - } - catch (err) { - if (err instanceof Error) { - // Rate limit? - if (err instanceof tc.HTTPError && - (err.httpStatusCode === 403 || err.httpStatusCode === 429)) { - core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`); + const { foundAsset, resolvedGraalPyVersion } = releaseData; + const downloadUrl = `${foundAsset.browser_download_url}`; + core.info(`Downloading GraalPy from "${downloadUrl}" ...`); + try { + const graalpyPath = yield tc.downloadTool(downloadUrl, undefined, AUTH); + core.info('Extracting downloaded archive...'); + downloadDir = yield tc.extractTar(graalpyPath); + // root folder in archive can have unpredictable name so just take the first folder + // downloadDir is unique folder under TEMP and can't contain any other folders + const archiveName = fs_1.default.readdirSync(downloadDir)[0]; + const toolDir = path.join(downloadDir, archiveName); + let installDir = toolDir; + if (!(0, utils_1.isNightlyKeyword)(resolvedGraalPyVersion)) { + installDir = yield tc.cacheDir(toolDir, 'GraalPy', resolvedGraalPyVersion, architecture); } - else { - core.info(err.message); + const binaryPath = (0, utils_1.getBinaryDirectory)(installDir); + yield createGraalPySymlink(binaryPath, resolvedGraalPyVersion); + yield installPip(binaryPath); + return { installDir, resolvedGraalPyVersion }; + } + catch (err) { + if (err instanceof Error) { + // Rate limit? + if (err instanceof tc.HTTPError && + (err.httpStatusCode === 403 || err.httpStatusCode === 429)) { + core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`); + } + else { + core.info(err.message); + } + if (err.stack !== undefined) { + core.debug(err.stack); + } } - if (err.stack !== undefined) { - core.debug(err.stack); + throw err; + } + }); +} +exports.installGraalPy = installGraalPy; +function getAvailableGraalPyVersions() { + return __awaiter(this, void 0, void 0, function* () { + const http = new httpm.HttpClient('tool-cache'); + const headers = {}; + if (AUTH) { + headers.authorization = AUTH; + } + let url = 'https://api.github.com/repos/oracle/graalpython/releases'; + const result = []; + do { + const response = yield http.getJson(url, headers); + if (!response.result) { + throw new Error(`Unable to retrieve the list of available GraalPy versions from '${url}'`); } - } - throw err; - } + result.push(...response.result); + url = (0, utils_1.getNextPageUrl)(response); + } while (url); + return result; + }); } -async function getAvailableGraalPyVersions() { - const http = new httpm.HttpClient('tool-cache'); - const headers = {}; - if (AUTH) { - headers.authorization = AUTH; - } - /* - Get releases first. - */ - let url = 'https://api.github.com/repos/oracle/graalpython/releases'; - const result = []; - do { - const response = await http.getJson(url, headers); - if (!response.result) { - throw new Error(`Unable to retrieve the list of available GraalPy versions from '${url}'`); - } - result.push(...response.result); - url = (0, utils_1.getNextPageUrl)(response); - } while (url); - /* - Add pre-release builds. - */ - url = - 'https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases'; - do { - const response = await http.getJson(url, headers); - if (!response.result) { - throw new Error(`Unable to retrieve the list of available GraalPy versions from '${url}'`); - } - result.push(...response.result); - url = (0, utils_1.getNextPageUrl)(response); - } while (url); - return result; +exports.getAvailableGraalPyVersions = getAvailableGraalPyVersions; +function createGraalPySymlink(graalpyBinaryPath, graalpyVersion) { + return __awaiter(this, void 0, void 0, function* () { + const version = semver.coerce(graalpyVersion); + const pythonBinaryPostfix = semver.major(version); + const pythonMinor = semver.minor(version); + const graalpyMajorMinorBinaryPostfix = `${pythonBinaryPostfix}.${pythonMinor}`; + const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; + core.info('Creating symlinks...'); + (0, utils_1.createSymlinkInFolder)(graalpyBinaryPath, `graalpy${binaryExtension}`, `python${pythonBinaryPostfix}${binaryExtension}`, true); + (0, utils_1.createSymlinkInFolder)(graalpyBinaryPath, `graalpy${binaryExtension}`, `python${binaryExtension}`, true); + (0, utils_1.createSymlinkInFolder)(graalpyBinaryPath, `graalpy${binaryExtension}`, `graalpy${graalpyMajorMinorBinaryPostfix}${binaryExtension}`, true); + }); } -async function createGraalPySymlink(graalpyBinaryPath, graalpyVersion) { - const version = semver.coerce(graalpyVersion); - const pythonBinaryPostfix = semver.major(version); - const pythonMinor = semver.minor(version); - const graalpyMajorMinorBinaryPostfix = `${pythonBinaryPostfix}.${pythonMinor}`; - const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; - core.info('Creating symlinks...'); - (0, utils_1.createSymlinkInFolder)(graalpyBinaryPath, `graalpy${binaryExtension}`, `python${pythonBinaryPostfix}${binaryExtension}`, true); - (0, utils_1.createSymlinkInFolder)(graalpyBinaryPath, `graalpy${binaryExtension}`, `python${binaryExtension}`, true); - (0, utils_1.createSymlinkInFolder)(graalpyBinaryPath, `graalpy${binaryExtension}`, `graalpy${graalpyMajorMinorBinaryPostfix}${binaryExtension}`, true); -} -async function installPip(pythonLocation) { - core.info("Installing pip (GraalPy doesn't update pip because it uses a patched version of pip)"); - const pythonBinary = path.join(pythonLocation, 'python'); - await exec.exec(`${pythonBinary} -m ensurepip --default-pip`); +function installPip(pythonLocation) { + return __awaiter(this, void 0, void 0, function* () { + core.info("Installing pip (GraalPy doesn't update pip because it uses a patched version of pip)"); + const pythonBinary = path.join(pythonLocation, 'python'); + yield exec.exec(`${pythonBinary} -m ensurepip --default-pip`); + }); } function graalPyTagToVersion(tag) { - const versionPattern = /.*-(\d+\.\d+\.\d+(?:\.\d+)?)(?:-((?:ea|a|b|rc))\.0*(\d+))?/; + const versionPattern = /.*-(\d+\.\d+\.\d+(?:\.\d+)?)((?:a|b|rc))?(\d*)?/; const match = tag.match(versionPattern); if (match && match[2]) { return `${match[1]}-${match[2]}.${match[3]}`; @@ -97414,6 +97436,7 @@ function graalPyTagToVersion(tag) { return tag.replace(/.*-/, ''); } } +exports.graalPyTagToVersion = graalPyTagToVersion; function findRelease(releases, graalpyVersion, architecture, includePrerelease) { const options = { includePrerelease: includePrerelease }; const filterReleases = releases.filter(item => { @@ -97431,6 +97454,7 @@ function findRelease(releases, graalpyVersion, architecture, includePrerelease) resolvedGraalPyVersion: graalPyTagToVersion(foundRelease.tag_name) }; } +exports.findRelease = findRelease; function toGraalPyPlatform(platform) { switch (platform) { case 'win32': @@ -97440,6 +97464,7 @@ function toGraalPyPlatform(platform) { } return platform; } +exports.toGraalPyPlatform = toGraalPyPlatform; function toGraalPyArchitecture(architecture) { switch (architecture) { case 'x64': @@ -97449,18 +97474,19 @@ function toGraalPyArchitecture(architecture) { } return architecture; } +exports.toGraalPyArchitecture = toGraalPyArchitecture; function findAsset(item, architecture, platform) { const graalpyArch = toGraalPyArchitecture(architecture); const graalpyPlatform = toGraalPyPlatform(platform); - const graalpyExt = platform == 'win32' ? 'zip' : 'tar.gz'; const found = item.assets.filter(file => file.name.startsWith('graalpy') && - file.name.endsWith(`-${graalpyPlatform}-${graalpyArch}.${graalpyExt}`)); + file.name.endsWith(`-${graalpyPlatform}-${graalpyArch}.tar.gz`)); /* In the future there could be more variants of GraalPy for a single release. Pick the shortest name, that one is the most likely to be the primary variant. */ found.sort((f1, f2) => f1.name.length - f2.name.length); return found[0]; } +exports.findAsset = findAsset; /***/ }), @@ -97486,35 +97512,27 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.installPyPy = installPyPy; -exports.getAvailablePyPyVersions = getAvailablePyPyVersions; -exports.findRelease = findRelease; -exports.pypyVersionToSemantic = pypyVersionToSemantic; -exports.isArchPresentForWindows = isArchPresentForWindows; -exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux; -exports.findAssetForWindows = findAssetForWindows; -exports.findAssetForMacOrLinux = findAssetForMacOrLinux; +exports.findAssetForMacOrLinux = exports.findAssetForWindows = exports.isArchPresentForMacOrLinux = exports.isArchPresentForWindows = exports.pypyVersionToSemantic = exports.findRelease = exports.getAvailablePyPyVersions = exports.installPyPy = void 0; const os = __importStar(__nccwpck_require__(857)); const path = __importStar(__nccwpck_require__(6928)); const core = __importStar(__nccwpck_require__(7484)); @@ -97524,94 +97542,104 @@ const httpm = __importStar(__nccwpck_require__(4844)); const exec = __importStar(__nccwpck_require__(5236)); const fs_1 = __importDefault(__nccwpck_require__(9896)); const utils_1 = __nccwpck_require__(1798); -async function installPyPy(pypyVersion, pythonVersion, architecture, allowPreReleases, releases) { - let downloadDir; - releases = releases ?? (await getAvailablePyPyVersions()); - if (!releases || releases.length === 0) { - throw new Error('No release was found in PyPy version.json'); - } - let releaseData = findRelease(releases, pythonVersion, pypyVersion, architecture, false); - if (allowPreReleases && (!releaseData || !releaseData.foundAsset)) { - // check for pre-release - core.info([ - `Stable PyPy version ${pythonVersion} (${pypyVersion}) with arch ${architecture} not found`, - `Trying pre-release versions` - ].join(os.EOL)); - releaseData = findRelease(releases, pythonVersion, pypyVersion, architecture, true); - } - if (!releaseData || !releaseData.foundAsset) { - throw new Error(`PyPy version ${pythonVersion} (${pypyVersion}) with arch ${architecture} not found`); - } - const { foundAsset, resolvedPythonVersion, resolvedPyPyVersion } = releaseData; - const downloadUrl = `${foundAsset.download_url}`; - core.info(`Downloading PyPy from "${downloadUrl}" ...`); - try { - const fileName = (0, utils_1.getDownloadFileName)(downloadUrl); - const pypyPath = await tc.downloadTool(downloadUrl, fileName); - core.info('Extracting downloaded archive...'); - if (utils_1.IS_WINDOWS) { - downloadDir = await tc.extractZip(pypyPath); +function installPyPy(pypyVersion, pythonVersion, architecture, allowPreReleases, releases) { + return __awaiter(this, void 0, void 0, function* () { + let downloadDir; + releases = releases !== null && releases !== void 0 ? releases : (yield getAvailablePyPyVersions()); + if (!releases || releases.length === 0) { + throw new Error('No release was found in PyPy version.json'); } - else { - downloadDir = await tc.extractTar(pypyPath, undefined, 'x'); + let releaseData = findRelease(releases, pythonVersion, pypyVersion, architecture, false); + if (allowPreReleases && (!releaseData || !releaseData.foundAsset)) { + // check for pre-release + core.info([ + `Stable PyPy version ${pythonVersion} (${pypyVersion}) with arch ${architecture} not found`, + `Trying pre-release versions` + ].join(os.EOL)); + releaseData = findRelease(releases, pythonVersion, pypyVersion, architecture, true); } - // root folder in archive can have unpredictable name so just take the first folder - // downloadDir is unique folder under TEMP and can't contain any other folders - const archiveName = fs_1.default.readdirSync(downloadDir)[0]; - const toolDir = path.join(downloadDir, archiveName); - let installDir = toolDir; - if (!(0, utils_1.isNightlyKeyword)(resolvedPyPyVersion)) { - installDir = await tc.cacheDir(toolDir, 'PyPy', resolvedPythonVersion, architecture); + if (!releaseData || !releaseData.foundAsset) { + throw new Error(`PyPy version ${pythonVersion} (${pypyVersion}) with arch ${architecture} not found`); } - (0, utils_1.writeExactPyPyVersionFile)(installDir, resolvedPyPyVersion); - const binaryPath = (0, utils_1.getBinaryDirectory)(installDir); - await createPyPySymlink(binaryPath, resolvedPythonVersion); - await installPip(binaryPath); - return { installDir, resolvedPythonVersion, resolvedPyPyVersion }; - } - catch (err) { - if (err instanceof Error) { - // Rate limit? - if (err instanceof tc.HTTPError && - (err.httpStatusCode === 403 || err.httpStatusCode === 429)) { - core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`); + const { foundAsset, resolvedPythonVersion, resolvedPyPyVersion } = releaseData; + const downloadUrl = `${foundAsset.download_url}`; + core.info(`Downloading PyPy from "${downloadUrl}" ...`); + try { + const fileName = (0, utils_1.getDownloadFileName)(downloadUrl); + const pypyPath = yield tc.downloadTool(downloadUrl, fileName); + core.info('Extracting downloaded archive...'); + if (utils_1.IS_WINDOWS) { + downloadDir = yield tc.extractZip(pypyPath); } else { - core.info(err.message); + downloadDir = yield tc.extractTar(pypyPath, undefined, 'x'); } - if (err.stack !== undefined) { - core.debug(err.stack); + // root folder in archive can have unpredictable name so just take the first folder + // downloadDir is unique folder under TEMP and can't contain any other folders + const archiveName = fs_1.default.readdirSync(downloadDir)[0]; + const toolDir = path.join(downloadDir, archiveName); + let installDir = toolDir; + if (!(0, utils_1.isNightlyKeyword)(resolvedPyPyVersion)) { + installDir = yield tc.cacheDir(toolDir, 'PyPy', resolvedPythonVersion, architecture); } + (0, utils_1.writeExactPyPyVersionFile)(installDir, resolvedPyPyVersion); + const binaryPath = (0, utils_1.getBinaryDirectory)(installDir); + yield createPyPySymlink(binaryPath, resolvedPythonVersion); + yield installPip(binaryPath); + return { installDir, resolvedPythonVersion, resolvedPyPyVersion }; } - throw err; - } + catch (err) { + if (err instanceof Error) { + // Rate limit? + if (err instanceof tc.HTTPError && + (err.httpStatusCode === 403 || err.httpStatusCode === 429)) { + core.info(`Received HTTP status code ${err.httpStatusCode}. This usually indicates the rate limit has been exceeded`); + } + else { + core.info(err.message); + } + if (err.stack !== undefined) { + core.debug(err.stack); + } + } + throw err; + } + }); } -async function getAvailablePyPyVersions() { - const url = 'https://downloads.python.org/pypy/versions.json'; - const http = new httpm.HttpClient('tool-cache'); - const response = await http.getJson(url); - if (!response.result) { - throw new Error(`Unable to retrieve the list of available PyPy versions from '${url}'`); - } - return response.result; +exports.installPyPy = installPyPy; +function getAvailablePyPyVersions() { + return __awaiter(this, void 0, void 0, function* () { + const url = 'https://downloads.python.org/pypy/versions.json'; + const http = new httpm.HttpClient('tool-cache'); + const response = yield http.getJson(url); + if (!response.result) { + throw new Error(`Unable to retrieve the list of available PyPy versions from '${url}'`); + } + return response.result; + }); } -async function createPyPySymlink(pypyBinaryPath, pythonVersion) { - const version = semver.coerce(pythonVersion); - const pythonBinaryPostfix = semver.major(version); - const pythonMinor = semver.minor(version); - const pypyBinaryPostfix = pythonBinaryPostfix === 2 ? '' : '3'; - const pypyMajorMinorBinaryPostfix = `${pythonBinaryPostfix}.${pythonMinor}`; - const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; - core.info('Creating symlinks...'); - (0, utils_1.createSymlinkInFolder)(pypyBinaryPath, `pypy${pypyBinaryPostfix}${binaryExtension}`, `python${pythonBinaryPostfix}${binaryExtension}`, true); - (0, utils_1.createSymlinkInFolder)(pypyBinaryPath, `pypy${pypyBinaryPostfix}${binaryExtension}`, `python${binaryExtension}`, true); - (0, utils_1.createSymlinkInFolder)(pypyBinaryPath, `pypy${pypyBinaryPostfix}${binaryExtension}`, `pypy${pypyMajorMinorBinaryPostfix}${binaryExtension}`, true); +exports.getAvailablePyPyVersions = getAvailablePyPyVersions; +function createPyPySymlink(pypyBinaryPath, pythonVersion) { + return __awaiter(this, void 0, void 0, function* () { + const version = semver.coerce(pythonVersion); + const pythonBinaryPostfix = semver.major(version); + const pythonMinor = semver.minor(version); + const pypyBinaryPostfix = pythonBinaryPostfix === 2 ? '' : '3'; + const pypyMajorMinorBinaryPostfix = `${pythonBinaryPostfix}.${pythonMinor}`; + const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; + core.info('Creating symlinks...'); + (0, utils_1.createSymlinkInFolder)(pypyBinaryPath, `pypy${pypyBinaryPostfix}${binaryExtension}`, `python${pythonBinaryPostfix}${binaryExtension}`, true); + (0, utils_1.createSymlinkInFolder)(pypyBinaryPath, `pypy${pypyBinaryPostfix}${binaryExtension}`, `python${binaryExtension}`, true); + (0, utils_1.createSymlinkInFolder)(pypyBinaryPath, `pypy${pypyBinaryPostfix}${binaryExtension}`, `pypy${pypyMajorMinorBinaryPostfix}${binaryExtension}`, true); + }); } -async function installPip(pythonLocation) { - core.info('Installing and updating pip'); - const pythonBinary = path.join(pythonLocation, 'python'); - await exec.exec(`${pythonBinary} -m ensurepip`); - await exec.exec(`${pythonLocation}/python -m pip install --ignore-installed pip`); +function installPip(pythonLocation) { + return __awaiter(this, void 0, void 0, function* () { + core.info('Installing and updating pip'); + const pythonBinary = path.join(pythonLocation, 'python'); + yield exec.exec(`${pythonBinary} -m ensurepip`); + yield exec.exec(`${pythonLocation}/python -m pip install --ignore-installed pip`); + }); } function findRelease(releases, pythonVersion, pypyVersion, architecture, includePrerelease) { const options = { includePrerelease: includePrerelease }; @@ -97643,26 +97671,32 @@ function findRelease(releases, pythonVersion, pypyVersion, architecture, include resolvedPyPyVersion: foundRelease.pypy_version.trim() }; } +exports.findRelease = findRelease; function pypyVersionToSemantic(versionSpec) { const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc))(\d*)/g; return versionSpec.replace(prereleaseVersion, '$1-$2.$3'); } +exports.pypyVersionToSemantic = pypyVersionToSemantic; function isArchPresentForWindows(item, architecture) { architecture = pypyArchitecture(architecture); return item.files.some((file) => utils_1.WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture); } +exports.isArchPresentForWindows = isArchPresentForWindows; function isArchPresentForMacOrLinux(item, architecture, platform) { architecture = pypyArchitecture(architecture); return item.files.some((file) => file.arch === architecture && file.platform === platform); } +exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux; function findAssetForWindows(releases, architecture) { architecture = pypyArchitecture(architecture); return releases.files.find((item) => utils_1.WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture); } +exports.findAssetForWindows = findAssetForWindows; function findAssetForMacOrLinux(releases, architecture, platform) { architecture = pypyArchitecture(architecture); return releases.files.find((item) => item.arch === architecture && item.platform === platform); } +exports.findAssetForMacOrLinux = findAssetForMacOrLinux; function pypyArchitecture(architecture) { if (utils_1.IS_WINDOWS && architecture === 'x32') { // convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value. @@ -97698,30 +97732,24 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.MANIFEST_URL = void 0; -exports.findReleaseFromManifest = findReleaseFromManifest; -exports.getManifest = getManifest; -exports.getManifestFromRepo = getManifestFromRepo; -exports.getManifestFromURL = getManifestFromURL; -exports.installCpythonFromRelease = installCpythonFromRelease; +exports.installCpythonFromRelease = exports.getManifestFromURL = exports.getManifestFromRepo = exports.getManifest = exports.findReleaseFromManifest = exports.MANIFEST_URL = void 0; const path = __importStar(__nccwpck_require__(6928)); const core = __importStar(__nccwpck_require__(7484)); const tc = __importStar(__nccwpck_require__(3472)); @@ -97734,13 +97762,16 @@ const MANIFEST_REPO_OWNER = 'actions'; const MANIFEST_REPO_NAME = 'python-versions'; const MANIFEST_REPO_BRANCH = 'main'; exports.MANIFEST_URL = `https://raw.githubusercontent.com/${MANIFEST_REPO_OWNER}/${MANIFEST_REPO_NAME}/${MANIFEST_REPO_BRANCH}/versions-manifest.json`; -async function findReleaseFromManifest(semanticVersionSpec, architecture, manifest) { - if (!manifest) { - manifest = await getManifest(); - } - const foundRelease = await tc.findFromManifest(semanticVersionSpec, false, manifest, architecture); - return foundRelease; +function findReleaseFromManifest(semanticVersionSpec, architecture, manifest) { + return __awaiter(this, void 0, void 0, function* () { + if (!manifest) { + manifest = yield getManifest(); + } + const foundRelease = yield tc.findFromManifest(semanticVersionSpec, false, manifest, architecture); + return foundRelease; + }); } +exports.findReleaseFromManifest = findReleaseFromManifest; function isIToolRelease(obj) { return (typeof obj === 'object' && obj !== null && @@ -97752,104 +97783,113 @@ function isIToolRelease(obj) { typeof file.arch === 'string' && typeof file.download_url === 'string')); } -async function getManifest() { - try { - const repoManifest = await getManifestFromRepo(); - if (Array.isArray(repoManifest) && - repoManifest.length && - repoManifest.every(isIToolRelease)) { - return repoManifest; +function getManifest() { + return __awaiter(this, void 0, void 0, function* () { + try { + const repoManifest = yield getManifestFromRepo(); + if (Array.isArray(repoManifest) && + repoManifest.length && + repoManifest.every(isIToolRelease)) { + return repoManifest; + } + throw new Error('The repository manifest is invalid or does not include any valid tool release (IToolRelease) entries.'); } - throw new Error('The repository manifest is invalid or does not include any valid tool release (IToolRelease) entries.'); - } - catch (err) { - core.debug('Fetching the manifest via the API failed.'); - if (err instanceof Error) { - core.debug(err.message); + catch (err) { + core.debug('Fetching the manifest via the API failed.'); + if (err instanceof Error) { + core.debug(err.message); + } + else { + core.error('An unexpected error occurred while fetching the manifest.'); + } } - else { - core.error('An unexpected error occurred while fetching the manifest.'); - } - } - return await getManifestFromURL(); + return yield getManifestFromURL(); + }); } +exports.getManifest = getManifest; function getManifestFromRepo() { core.debug(`Getting manifest from ${MANIFEST_REPO_OWNER}/${MANIFEST_REPO_NAME}@${MANIFEST_REPO_BRANCH}`); return tc.getManifestFromRepo(MANIFEST_REPO_OWNER, MANIFEST_REPO_NAME, AUTH, MANIFEST_REPO_BRANCH); } -async function getManifestFromURL() { - core.debug('Falling back to fetching the manifest using raw URL.'); - const http = new httpm.HttpClient('tool-cache'); - const response = await http.getJson(exports.MANIFEST_URL); - if (!response.result) { - throw new Error(`Unable to get manifest from ${exports.MANIFEST_URL}`); - } - return response.result; -} -async function installPython(workingDirectory) { - const options = { - cwd: workingDirectory, - env: { - ...process.env, - ...(utils_1.IS_LINUX && { LD_LIBRARY_PATH: path.join(workingDirectory, 'lib') }) - }, - silent: true, - listeners: { - stdout: (data) => { - core.info(data.toString().trim()); - }, - stderr: (data) => { - core.error(data.toString().trim()); - } +exports.getManifestFromRepo = getManifestFromRepo; +function getManifestFromURL() { + return __awaiter(this, void 0, void 0, function* () { + core.debug('Falling back to fetching the manifest using raw URL.'); + const http = new httpm.HttpClient('tool-cache'); + const response = yield http.getJson(exports.MANIFEST_URL); + if (!response.result) { + throw new Error(`Unable to get manifest from ${exports.MANIFEST_URL}`); } - }; - if (utils_1.IS_WINDOWS) { - await exec.exec('powershell', ['./setup.ps1'], options); - } - else { - await exec.exec('bash', ['./setup.sh'], options); - } + return response.result; + }); } -async function installCpythonFromRelease(release) { - if (!release.files || release.files.length === 0) { - throw new Error('No files found in the release to download.'); - } - const downloadUrl = release.files[0].download_url; - core.info(`Download from "${downloadUrl}"`); - let pythonPath = ''; - try { - const fileName = (0, utils_1.getDownloadFileName)(downloadUrl); - pythonPath = await tc.downloadTool(downloadUrl, fileName, AUTH); - core.info('Extract downloaded archive'); - let pythonExtractedFolder; +exports.getManifestFromURL = getManifestFromURL; +function installPython(workingDirectory) { + return __awaiter(this, void 0, void 0, function* () { + const options = { + cwd: workingDirectory, + env: Object.assign(Object.assign({}, process.env), (utils_1.IS_LINUX && { LD_LIBRARY_PATH: path.join(workingDirectory, 'lib') })), + silent: true, + listeners: { + stdout: (data) => { + core.info(data.toString().trim()); + }, + stderr: (data) => { + core.error(data.toString().trim()); + } + } + }; if (utils_1.IS_WINDOWS) { - pythonExtractedFolder = await tc.extractZip(pythonPath); + yield exec.exec('powershell', ['./setup.ps1'], options); } else { - pythonExtractedFolder = await tc.extractTar(pythonPath); + yield exec.exec('bash', ['./setup.sh'], options); } - core.info('Execute installation script'); - await installPython(pythonExtractedFolder); - } - catch (err) { - if (err instanceof tc.HTTPError) { - // Rate limit? - if (err.httpStatusCode === 403) { - core.error(`Received HTTP status code 403. This indicates a permission issue or restricted access.`); - } - else if (err.httpStatusCode === 429) { - core.info(`Received HTTP status code 429. This usually indicates the rate limit has been exceeded`); + }); +} +function installCpythonFromRelease(release) { + return __awaiter(this, void 0, void 0, function* () { + if (!release.files || release.files.length === 0) { + throw new Error('No files found in the release to download.'); + } + const downloadUrl = release.files[0].download_url; + core.info(`Download from "${downloadUrl}"`); + let pythonPath = ''; + try { + const fileName = (0, utils_1.getDownloadFileName)(downloadUrl); + pythonPath = yield tc.downloadTool(downloadUrl, fileName, AUTH); + core.info('Extract downloaded archive'); + let pythonExtractedFolder; + if (utils_1.IS_WINDOWS) { + pythonExtractedFolder = yield tc.extractZip(pythonPath); } else { - core.info(err.message); - } - if (err.stack) { - core.debug(err.stack); + pythonExtractedFolder = yield tc.extractTar(pythonPath); } + core.info('Execute installation script'); + yield installPython(pythonExtractedFolder); } - throw err; - } + catch (err) { + if (err instanceof tc.HTTPError) { + // Rate limit? + if (err.httpStatusCode === 403) { + core.error(`Received HTTP status code 403. This indicates a permission issue or restricted access.`); + } + else if (err.httpStatusCode === 429) { + core.info(`Received HTTP status code 429. This usually indicates the rate limit has been exceeded`); + } + else { + core.info(err.message); + } + if (err.stack) { + core.debug(err.stack); + } + } + throw err; + } + }); } +exports.installCpythonFromRelease = installCpythonFromRelease; /***/ }), @@ -97875,23 +97915,22 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -97905,28 +97944,18 @@ const os = __importStar(__nccwpck_require__(857)); const fs_1 = __importDefault(__nccwpck_require__(9896)); const cache_factory_1 = __nccwpck_require__(665); const utils_1 = __nccwpck_require__(1798); -const exec_1 = __nccwpck_require__(5236); function isPyPyVersion(versionSpec) { return versionSpec.startsWith('pypy'); } function isGraalPyVersion(versionSpec) { return versionSpec.startsWith('graalpy'); } -async function installPipPackages(pipInstall) { - core.info(`Installing pip packages: ${pipInstall}`); - try { - const installArgs = pipInstall.trim().split(/\s+/); - await (0, exec_1.exec)('python', ['-m', 'pip', 'install', ...installArgs]); - core.info('Successfully installed pip packages'); - } - catch (error) { - core.setFailed(`Failed to install pip packages from "${pipInstall}". Please verify that the package names, versions, or requirements files provided are correct and installable, that the specified packages and versions can be resolved from PyPI or the configured package index, and that your network connection is stable and allows access to the package index.`); - } -} -async function cacheDependencies(cache, pythonVersion) { - const cacheDependencyPath = core.getInput('cache-dependency-path') || undefined; - const cacheDistributor = (0, cache_factory_1.getCacheDistributor)(cache, pythonVersion, cacheDependencyPath); - await cacheDistributor.restoreCache(); +function cacheDependencies(cache, pythonVersion) { + return __awaiter(this, void 0, void 0, function* () { + const cacheDependencyPath = core.getInput('cache-dependency-path') || undefined; + const cacheDistributor = (0, cache_factory_1.getCacheDistributor)(cache, pythonVersion, cacheDependencyPath); + yield cacheDistributor.restoreCache(); + }); } function resolveVersionInputFromDefaultFile() { const couples = [ @@ -97964,63 +97993,62 @@ function resolveVersionInput() { } return versions; } -async function run() { - if (utils_1.IS_MAC) { - process.env['AGENT_TOOLSDIRECTORY'] = '/Users/runner/hostedtoolcache'; - } - if (process.env.AGENT_TOOLSDIRECTORY?.trim()) { - process.env['RUNNER_TOOL_CACHE'] = process.env['AGENT_TOOLSDIRECTORY']; - } - core.debug(`Python is expected to be installed into ${process.env['RUNNER_TOOL_CACHE']}`); - try { - const versions = resolveVersionInput(); - const checkLatest = core.getBooleanInput('check-latest'); - const allowPreReleases = core.getBooleanInput('allow-prereleases'); - const freethreaded = core.getBooleanInput('freethreaded'); - if (versions.length) { - let pythonVersion = ''; - const arch = core.getInput('architecture') || os.arch(); - const updateEnvironment = core.getBooleanInput('update-environment'); - core.startGroup('Installed versions'); - for (const version of versions) { - if (isPyPyVersion(version)) { - const installed = await finderPyPy.findPyPyVersion(version, arch, updateEnvironment, checkLatest, allowPreReleases); - pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; - core.info(`Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})`); - } - else if (isGraalPyVersion(version)) { - const installed = await finderGraalPy.findGraalPyVersion(version, arch, updateEnvironment, checkLatest, allowPreReleases); - pythonVersion = `${installed}`; - core.info(`Successfully set up GraalPy ${installed}`); - } - else { - if (version.startsWith('2')) { - core.warning('The support for python 2.7 was removed on June 19, 2023. Related issue: https://github.com/actions/setup-python/issues/672'); +function run() { + return __awaiter(this, void 0, void 0, function* () { + var _a; + if (utils_1.IS_MAC) { + process.env['AGENT_TOOLSDIRECTORY'] = '/Users/runner/hostedtoolcache'; + } + if ((_a = process.env.AGENT_TOOLSDIRECTORY) === null || _a === void 0 ? void 0 : _a.trim()) { + process.env['RUNNER_TOOL_CACHE'] = process.env['AGENT_TOOLSDIRECTORY']; + } + core.debug(`Python is expected to be installed into ${process.env['RUNNER_TOOL_CACHE']}`); + try { + const versions = resolveVersionInput(); + const checkLatest = core.getBooleanInput('check-latest'); + const allowPreReleases = core.getBooleanInput('allow-prereleases'); + const freethreaded = core.getBooleanInput('freethreaded'); + if (versions.length) { + let pythonVersion = ''; + const arch = core.getInput('architecture') || os.arch(); + const updateEnvironment = core.getBooleanInput('update-environment'); + core.startGroup('Installed versions'); + for (const version of versions) { + if (isPyPyVersion(version)) { + const installed = yield finderPyPy.findPyPyVersion(version, arch, updateEnvironment, checkLatest, allowPreReleases); + pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; + core.info(`Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})`); } - const installed = await finder.useCpythonVersion(version, arch, updateEnvironment, checkLatest, allowPreReleases, freethreaded); - pythonVersion = installed.version; - core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); + else if (isGraalPyVersion(version)) { + const installed = yield finderGraalPy.findGraalPyVersion(version, arch, updateEnvironment, checkLatest, allowPreReleases); + pythonVersion = `${installed}`; + core.info(`Successfully set up GraalPy ${installed}`); + } + else { + if (version.startsWith('2')) { + core.warning('The support for python 2.7 was removed on June 19, 2023. Related issue: https://github.com/actions/setup-python/issues/672'); + } + const installed = yield finder.useCpythonVersion(version, arch, updateEnvironment, checkLatest, allowPreReleases, freethreaded); + pythonVersion = installed.version; + core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); + } + } + core.endGroup(); + const cache = core.getInput('cache'); + if (cache && (0, utils_1.isCacheFeatureAvailable)()) { + yield cacheDependencies(cache, pythonVersion); } } - core.endGroup(); - const cache = core.getInput('cache'); - if (cache && (0, utils_1.isCacheFeatureAvailable)()) { - await cacheDependencies(cache, pythonVersion); - } - const pipInstall = core.getInput('pip-install'); - if (pipInstall) { - await installPipPackages(pipInstall); + else { + core.warning('The `python-version` input is not set. The version of Python currently in `PATH` will be used.'); } + const matchersPath = path.join(__dirname, '../..', '.github'); + core.info(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); } - else { - core.warning('The `python-version` input is not set. The version of Python currently in `PATH` will be used.'); + catch (err) { + core.setFailed(err.message); } - const matchersPath = path.join(__dirname, '../..', '.github'); - core.info(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); - } - catch (err) { - core.setFailed(err.message); - } + }); } run(); @@ -98048,48 +98076,27 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.WINDOWS_PLATFORMS = exports.WINDOWS_ARCHS = exports.IS_MAC = exports.IS_LINUX = exports.IS_WINDOWS = void 0; -exports.createSymlinkInFolder = createSymlinkInFolder; -exports.validateVersion = validateVersion; -exports.isNightlyKeyword = isNightlyKeyword; -exports.getPyPyVersionFromPath = getPyPyVersionFromPath; -exports.readExactPyPyVersionFile = readExactPyPyVersionFile; -exports.writeExactPyPyVersionFile = writeExactPyPyVersionFile; -exports.validatePythonVersionFormatForPyPy = validatePythonVersionFormatForPyPy; -exports.isGhes = isGhes; -exports.isCacheFeatureAvailable = isCacheFeatureAvailable; -exports.logWarning = logWarning; -exports.getLinuxInfo = getLinuxInfo; -exports.getOSInfo = getOSInfo; -exports.getVersionInputFromTomlFile = getVersionInputFromTomlFile; -exports.getVersionsInputFromPlainFile = getVersionsInputFromPlainFile; -exports.getVersionInputFromToolVersions = getVersionInputFromToolVersions; -exports.getVersionInputFromPipfileFile = getVersionInputFromPipfileFile; -exports.getVersionInputFromFile = getVersionInputFromFile; -exports.getBinaryDirectory = getBinaryDirectory; -exports.getNextPageUrl = getNextPageUrl; -exports.getDownloadFileName = getDownloadFileName; +exports.getDownloadFileName = exports.getNextPageUrl = exports.getBinaryDirectory = exports.getVersionInputFromFile = exports.getVersionInputFromPipfileFile = exports.getVersionInputFromToolVersions = exports.getVersionsInputFromPlainFile = exports.getVersionInputFromTomlFile = exports.getOSInfo = exports.getLinuxInfo = exports.logWarning = exports.isCacheFeatureAvailable = exports.isGhes = exports.validatePythonVersionFormatForPyPy = exports.writeExactPyPyVersionFile = exports.readExactPyPyVersionFile = exports.getPyPyVersionFromPath = exports.isNightlyKeyword = exports.validateVersion = exports.createSymlinkInFolder = exports.WINDOWS_PLATFORMS = exports.WINDOWS_ARCHS = exports.IS_MAC = exports.IS_LINUX = exports.IS_WINDOWS = void 0; /* eslint no-unsafe-finally: "off" */ const cache = __importStar(__nccwpck_require__(5116)); const core = __importStar(__nccwpck_require__(7484)); @@ -98119,15 +98126,19 @@ function createSymlinkInFolder(folderPath, sourceName, targetName, setExecutable fs_1.default.chmodSync(targetPath, '755'); } } +exports.createSymlinkInFolder = createSymlinkInFolder; function validateVersion(version) { return isNightlyKeyword(version) || Boolean(semver.validRange(version)); } +exports.validateVersion = validateVersion; function isNightlyKeyword(pypyVersion) { return pypyVersion === 'nightly'; } +exports.isNightlyKeyword = isNightlyKeyword; function getPyPyVersionFromPath(installDir) { return path.basename(path.dirname(installDir)); } +exports.getPyPyVersionFromPath = getPyPyVersionFromPath; /** * In tool-cache, we put PyPy to '/PyPy//x64' * There is no easy way to determine what PyPy version is located in specific folder @@ -98144,10 +98155,12 @@ function readExactPyPyVersionFile(installDir) { } return pypyVersion; } +exports.readExactPyPyVersionFile = readExactPyPyVersionFile; function writeExactPyPyVersionFile(installDir, resolvedPyPyVersion) { const pypyFilePath = path.join(installDir, PYPY_VERSION_FILE); fs_1.default.writeFileSync(pypyFilePath, resolvedPyPyVersion); } +exports.writeExactPyPyVersionFile = writeExactPyPyVersionFile; /** * Python version should be specified explicitly like "x.y" (3.10, 3.11, etc) * "3.x" or "3" are not supported @@ -98157,6 +98170,7 @@ function validatePythonVersionFormatForPyPy(version) { const re = /^\d+\.\d+$/; return re.test(version); } +exports.validatePythonVersionFormatForPyPy = validatePythonVersionFormatForPyPy; function isGhes() { const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); const hostname = ghUrl.hostname.trimEnd().toUpperCase(); @@ -98165,6 +98179,7 @@ function isGhes() { const isLocalHost = hostname.endsWith('.LOCALHOST'); return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost; } +exports.isGhes = isGhes; function isCacheFeatureAvailable() { if (cache.isFeatureAvailable()) { return true; @@ -98176,53 +98191,65 @@ function isCacheFeatureAvailable() { core.warning('The runner was not able to contact the cache service. Caching will be skipped'); return false; } +exports.isCacheFeatureAvailable = isCacheFeatureAvailable; function logWarning(message) { const warningPrefix = '[warning]'; core.info(`${warningPrefix}${message}`); } -async function getWindowsInfo() { - const { stdout } = await exec.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', undefined, { - silent: true +exports.logWarning = logWarning; +function getWindowsInfo() { + return __awaiter(this, void 0, void 0, function* () { + const { stdout } = yield exec.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', undefined, { + silent: true + }); + const windowsVersion = stdout.trim().split(' ')[3]; + return { osName: 'Windows', osVersion: windowsVersion }; }); - const windowsVersion = stdout.trim().split(' ')[3]; - return { osName: 'Windows', osVersion: windowsVersion }; } -async function getMacOSInfo() { - const { stdout } = await exec.getExecOutput('sw_vers', ['-productVersion'], { - silent: true +function getMacOSInfo() { + return __awaiter(this, void 0, void 0, function* () { + const { stdout } = yield exec.getExecOutput('sw_vers', ['-productVersion'], { + silent: true + }); + const macOSVersion = stdout.trim(); + return { osName: 'macOS', osVersion: macOSVersion }; }); - const macOSVersion = stdout.trim(); - return { osName: 'macOS', osVersion: macOSVersion }; } -async function getLinuxInfo() { - const { stdout } = await exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { - silent: true +function getLinuxInfo() { + return __awaiter(this, void 0, void 0, function* () { + const { stdout } = yield exec.getExecOutput('lsb_release', ['-i', '-r', '-s'], { + silent: true + }); + const [osName, osVersion] = stdout.trim().split('\n'); + core.debug(`OS Name: ${osName}, Version: ${osVersion}`); + return { osName: osName, osVersion: osVersion }; }); - const [osName, osVersion] = stdout.trim().split('\n'); - core.debug(`OS Name: ${osName}, Version: ${osVersion}`); - return { osName: osName, osVersion: osVersion }; } -async function getOSInfo() { - let osInfo; - try { - if (exports.IS_WINDOWS) { - osInfo = await getWindowsInfo(); +exports.getLinuxInfo = getLinuxInfo; +function getOSInfo() { + return __awaiter(this, void 0, void 0, function* () { + let osInfo; + try { + if (exports.IS_WINDOWS) { + osInfo = yield getWindowsInfo(); + } + else if (exports.IS_LINUX) { + osInfo = yield getLinuxInfo(); + } + else if (exports.IS_MAC) { + osInfo = yield getMacOSInfo(); + } } - else if (exports.IS_LINUX) { - osInfo = await getLinuxInfo(); + catch (err) { + const error = err; + core.debug(error.message); } - else if (exports.IS_MAC) { - osInfo = await getMacOSInfo(); + finally { + return osInfo; } - } - catch (err) { - const error = err; - core.debug(error.message); - } - finally { - return osInfo; - } + }); } +exports.getOSInfo = getOSInfo; /** * Extract a value from an object by following the keys path provided. * If the value is present, it is returned. Otherwise undefined is returned. @@ -98281,6 +98308,7 @@ function getVersionInputFromTomlFile(versionFile) { }); return validatedVersions; } +exports.getVersionInputFromTomlFile = getVersionInputFromTomlFile; /** * Python versions extracted from a plain text file. * - Resolves multiple versions from multiple lines. @@ -98305,10 +98333,12 @@ function getVersionsInputFromPlainFile(versionFile) { core.info(`Resolved ${versionFile} as ${versions.join(', ')}`); return versions; } +exports.getVersionsInputFromPlainFile = getVersionsInputFromPlainFile; /** * Python version extracted from a .tool-versions file. */ function getVersionInputFromToolVersions(versionFile) { + var _a; if (!fs_1.default.existsSync(versionFile)) { core.warning(`File ${versionFile} does not exist.`); return []; @@ -98323,7 +98353,7 @@ function getVersionInputFromToolVersions(versionFile) { } const match = line.match(/^\s*python\s*v?\s*(?[^\s]+)\s*$/); if (match) { - return [match.groups?.version.trim() || '']; + return [((_a = match.groups) === null || _a === void 0 ? void 0 : _a.version.trim()) || '']; } } core.warning(`No Python version found in ${versionFile}`); @@ -98334,6 +98364,7 @@ function getVersionInputFromToolVersions(versionFile) { return []; } } +exports.getVersionInputFromToolVersions = getVersionInputFromToolVersions; /** * Python version extracted from the Pipfile file. */ @@ -98367,6 +98398,7 @@ function getVersionInputFromPipfileFile(versionFile) { core.info(`Extracted ${versions} from ${versionFile}`); return versions; } +exports.getVersionInputFromPipfileFile = getVersionInputFromPipfileFile; /** * Python version extracted from a plain, .tool-versions, Pipfile or TOML file. */ @@ -98384,14 +98416,16 @@ function getVersionInputFromFile(versionFile) { return getVersionsInputFromPlainFile(versionFile); } } +exports.getVersionInputFromFile = getVersionInputFromFile; /** - * Get the directory containing interpreter binary from installation directory of PyPy + * Get the directory containing interpreter binary from installation directory of PyPy or GraalPy * - On Linux and macOS, the Python interpreter is in 'bin'. * - On Windows, it is in the installation root. */ function getBinaryDirectory(installDir) { return exports.IS_WINDOWS ? installDir : path.join(installDir, 'bin'); } +exports.getBinaryDirectory = getBinaryDirectory; /** * Extract next page URL from a HTTP response "link" header. Such headers are used in GitHub APIs. */ @@ -98413,6 +98447,7 @@ function getNextPageUrl(response) { } return null; } +exports.getNextPageUrl = getNextPageUrl; /** * Add temporary fix for Windows * On Windows, it is necessary to retain the .zip extension for proper extraction. @@ -98426,6 +98461,7 @@ function getDownloadFileName(downloadUrl) { ? path.join(tempDir, path.basename(downloadUrl)) : undefined; } +exports.getDownloadFileName = getDownloadFileName; /***/ }), diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 718c6bd0..55b41d54 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -18,12 +18,11 @@ - [Hosted tool cache](advanced-usage.md#hosted-tool-cache) - [Using `setup-python` with a self-hosted runner](advanced-usage.md#using-setup-python-with-a-self-hosted-runner) - [Windows](advanced-usage.md#windows) - - [Ubuntu](advanced-usage.md#Ubuntu) + - [Linux](advanced-usage.md#linux) - [macOS](advanced-usage.md#macos) - [Using `setup-python` on GHES](advanced-usage.md#using-setup-python-on-ghes) - [Allow pre-releases](advanced-usage.md#allow-pre-releases) - [Using the pip-version input](advanced-usage.md#using-the-pip-version-input) -- [Using the pip-install input](advanced-usage.md#using-the-pip-install-input) ## Using the `python-version` input @@ -578,9 +577,9 @@ If you have a supported self-hosted runner and you would like to use `setup-pyth >If you are experiencing problems while configuring Python on your self-hosted runner, turn on [step debugging](https://github.com/actions/toolkit/blob/main/docs/action-debugging.md#step-debug-logs) to see additional logs. -### Ubuntu +### Linux -By default, the runner downloads and installs tools into the folder set up by `RUNNER_TOOL_CACHE` environment variable. The environment variable called `AGENT_TOOLSDIRECTORY` can be set to change this location for Ubuntu self-hosted runners: +By default, the runner downloads and installs tools into the folder set up by `RUNNER_TOOL_CACHE` environment variable. The environment variable called `AGENT_TOOLSDIRECTORY` can be set to change this location for Linux self-hosted runners: - In the same shell that your runner is using, type `export AGENT_TOOLSDIRECTORY=/path/to/folder`. - More permanent way of setting the environment variable is to create an `.env` file in the same directory as your runner and to add `AGENT_TOOLSDIRECTORY=/path/to/folder`. This ensures the variable is always set if your runner is configured as a service. @@ -632,8 +631,8 @@ If the runner is not able to access github.com, any Python versions requested du The `allow-prereleases` flag defaults to `false`. If `allow-prereleases` is set to `true`, the action will allow falling back to pre-release versions of Python when a matching GA version of Python is not available. This allows for example to simplify reuse of `python-version` as an input of nox for pre-releases of Python by not requiring manipulation of the `3.y-dev` specifier. -For CPython, `allow-prereleases` will only have effect for `x.y` version range (e.g. `3.14`). -Let's say that in the past, when python 3.14 was not yet generally available, the following workflow would have fallback to the most recent pre-release of python 3.14: +For CPython, `allow-prereleases` will only have effect for `x.y` version range (e.g. `3.12`). +Let's say that python 3.12 is not generally available, the following workflow will fallback to the most recent pre-release of python 3.12: ```yaml jobs: test: @@ -643,7 +642,7 @@ jobs: fail-fast: false matrix: os: [Ubuntu, Windows, macOS] - python_version: ["3.14"] + python_version: ["3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v5 @@ -673,22 +672,3 @@ 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 the pip-install input - -The `pip-install` input allows you to install dependencies as part of the Python setup step. - - -```yaml - steps: - - uses: actions/checkout@v5 - - name: Set up Python - uses: actions/setup-python@v6 - with: - python-version: '3.13' - pip-install: -r requirements.txt -``` -> Note: This feature is intended for standard pip-based dependency installations. -For complex workflows, or alternative package managers (e.g., poetry, pipenv), we recommend using separate steps to maintain clarity and flexibility. - -> The `pip-install` input mirrors the flexibility of a standard pip install command and supports most of its arguments. diff --git a/package-lock.json b/package-lock.json index 429f47ca..f44ab616 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ }, "devDependencies": { "@types/jest": "^29.5.12", - "@types/node": "^24.10.1", + "@types/node": "^24.1.0", "@types/semver": "^7.7.0", "@typescript-eslint/eslint-plugin": "^5.54.0", "@typescript-eslint/parser": "^5.54.0", @@ -32,9 +32,9 @@ "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", - "prettier": "^3.6.2", + "prettier": "^3.5.3", "ts-jest": "^29.3.2", - "typescript": "^5.9.3" + "typescript": "^5.4.2" }, "engines": { "node": ">=24.0.0" @@ -1596,12 +1596,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.8.0" } }, "node_modules/@types/node-fetch": { @@ -4816,9 +4816,9 @@ } }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", "bin": { @@ -5446,11 +5446,10 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5472,9 +5471,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" }, "node_modules/update-browserslist-db": { diff --git a/package.json b/package.json index 9aa426c7..f97190da 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ }, "devDependencies": { "@types/jest": "^29.5.12", - "@types/node": "^24.10.1", + "@types/node": "^24.1.0", "@types/semver": "^7.7.0", "@typescript-eslint/eslint-plugin": "^5.54.0", "@typescript-eslint/parser": "^5.54.0", @@ -51,8 +51,8 @@ "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", - "prettier": "^3.6.2", + "prettier": "^3.5.3", "ts-jest": "^29.3.2", - "typescript": "^5.9.3" + "typescript": "^5.4.2" } } diff --git a/src/find-graalpy.ts b/src/find-graalpy.ts index 12c41fb5..1f86dbd9 100644 --- a/src/find-graalpy.ts +++ b/src/find-graalpy.ts @@ -1,6 +1,11 @@ import * as path from 'path'; import * as graalpyInstall from './install-graalpy'; -import {IS_WINDOWS, validateVersion, IGraalPyManifestRelease} from './utils'; +import { + IS_WINDOWS, + validateVersion, + IGraalPyManifestRelease, + getBinaryDirectory +} from './utils'; import * as semver from 'semver'; import * as core from '@actions/core'; @@ -57,8 +62,11 @@ export async function findGraalPyVersion( const pipDir = IS_WINDOWS ? 'Scripts' : 'bin'; const _binDir = path.join(installDir, pipDir); const binaryExtension = IS_WINDOWS ? '.exe' : ''; - const pythonPath = path.join(_binDir, `python${binaryExtension}`); - const pythonLocation = path.join(installDir, 'bin'); + const pythonPath = path.join( + IS_WINDOWS ? installDir : _binDir, + `python${binaryExtension}` + ); + const pythonLocation = getBinaryDirectory(installDir); if (updateEnvironment) { core.exportVariable('pythonLocation', installDir); // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython diff --git a/src/install-graalpy.ts b/src/install-graalpy.ts index b1029539..ad3288a3 100644 --- a/src/install-graalpy.ts +++ b/src/install-graalpy.ts @@ -15,6 +15,7 @@ import { IGraalPyManifestRelease, createSymlinkInFolder, isNightlyKeyword, + getBinaryDirectory, getNextPageUrl } from './utils'; @@ -63,11 +64,7 @@ export async function installGraalPy( const graalpyPath = await tc.downloadTool(downloadUrl, undefined, AUTH); core.info('Extracting downloaded archive...'); - if (IS_WINDOWS) { - downloadDir = await tc.extractZip(graalpyPath); - } else { - downloadDir = await tc.extractTar(graalpyPath); - } + downloadDir = await tc.extractTar(graalpyPath); // root folder in archive can have unpredictable name so just take the first folder // downloadDir is unique folder under TEMP and can't contain any other folders @@ -84,7 +81,7 @@ export async function installGraalPy( ); } - const binaryPath = path.join(installDir, 'bin'); + const binaryPath = getBinaryDirectory(installDir); await createGraalPySymlink(binaryPath, resolvedGraalPyVersion); await installPip(binaryPath); @@ -118,9 +115,6 @@ export async function getAvailableGraalPyVersions() { headers.authorization = AUTH; } - /* - Get releases first. - */ let url: string | null = 'https://api.github.com/repos/oracle/graalpython/releases'; const result: IGraalPyManifestRelease[] = []; @@ -136,23 +130,6 @@ export async function getAvailableGraalPyVersions() { url = getNextPageUrl(response); } while (url); - /* - Add pre-release builds. - */ - url = - 'https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases'; - do { - const response: ifm.TypedResponse = - await http.getJson(url, headers); - if (!response.result) { - throw new Error( - `Unable to retrieve the list of available GraalPy versions from '${url}'` - ); - } - result.push(...response.result); - url = getNextPageUrl(response); - } while (url); - return result; } @@ -198,8 +175,7 @@ async function installPip(pythonLocation: string) { } export function graalPyTagToVersion(tag: string) { - const versionPattern = - /.*-(\d+\.\d+\.\d+(?:\.\d+)?)(?:-((?:ea|a|b|rc))\.0*(\d+))?/; + const versionPattern = /.*-(\d+\.\d+\.\d+(?:\.\d+)?)((?:a|b|rc))?(\d*)?/; const match = tag.match(versionPattern); if (match && match[2]) { return `${match[1]}-${match[2]}.${match[3]}`; @@ -275,11 +251,10 @@ export function findAsset( ) { const graalpyArch = toGraalPyArchitecture(architecture); const graalpyPlatform = toGraalPyPlatform(platform); - const graalpyExt = platform == 'win32' ? 'zip' : 'tar.gz'; const found = item.assets.filter( file => file.name.startsWith('graalpy') && - file.name.endsWith(`-${graalpyPlatform}-${graalpyArch}.${graalpyExt}`) + file.name.endsWith(`-${graalpyPlatform}-${graalpyArch}.tar.gz`) ); /* In the future there could be more variants of GraalPy for a single release. Pick the shortest name, that one is the most likely to be the primary variant. diff --git a/src/setup-python.ts b/src/setup-python.ts index 91a0c176..5d585d73 100644 --- a/src/setup-python.ts +++ b/src/setup-python.ts @@ -13,7 +13,6 @@ import { getVersionInputFromFile, getVersionsInputFromPlainFile } from './utils'; -import {exec} from '@actions/exec'; function isPyPyVersion(versionSpec: string) { return versionSpec.startsWith('pypy'); @@ -23,19 +22,6 @@ function isGraalPyVersion(versionSpec: string) { return versionSpec.startsWith('graalpy'); } -async function installPipPackages(pipInstall: string) { - core.info(`Installing pip packages: ${pipInstall}`); - try { - const installArgs = pipInstall.trim().split(/\s+/); - await exec('python', ['-m', 'pip', 'install', ...installArgs]); - core.info('Successfully installed pip packages'); - } catch (error) { - core.setFailed( - `Failed to install pip packages from "${pipInstall}". Please verify that the package names, versions, or requirements files provided are correct and installable, that the specified packages and versions can be resolved from PyPI or the configured package index, and that your network connection is stable and allows access to the package index.` - ); - } -} - async function cacheDependencies(cache: string, pythonVersion: string) { const cacheDependencyPath = core.getInput('cache-dependency-path') || undefined; @@ -159,10 +145,6 @@ async function run() { if (cache && isCacheFeatureAvailable()) { await cacheDependencies(cache, pythonVersion); } - const pipInstall = core.getInput('pip-install'); - if (pipInstall) { - await installPipPackages(pipInstall); - } } else { core.warning( 'The `python-version` input is not set. The version of Python currently in `PATH` will be used.' diff --git a/src/utils.ts b/src/utils.ts index 2ee9666f..d7be4746 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -379,7 +379,7 @@ export function getVersionInputFromFile(versionFile: string): string[] { } /** - * Get the directory containing interpreter binary from installation directory of PyPy + * Get the directory containing interpreter binary from installation directory of PyPy or GraalPy * - On Linux and macOS, the Python interpreter is in 'bin'. * - On Windows, it is in the installation root. */ diff --git a/tsconfig.json b/tsconfig.json index 44478618..d780193f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ - "target": "ES2022", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */