Merge branch 'main' into CacheLibVersionUpdate
This commit is contained in:
		
						commit
						161c3a68f0
					
				
							
								
								
									
										14
									
								
								.github/workflows/e2e-cache.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/e2e-cache.yml
									
									
									
									
										vendored
									
									
								
							| @ -48,11 +48,12 @@ jobs: | |||||||
|           python-version: ${{ matrix.python-version }} |           python-version: ${{ matrix.python-version }} | ||||||
|           cache: 'pipenv' |           cache: 'pipenv' | ||||||
|       - name: Install pipenv |       - name: Install pipenv | ||||||
|         run: pipx install pipenv |         run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: | |         run: | | ||||||
|           cd __tests__/data |           mv ./__tests__/data/Pipfile.lock . | ||||||
|           pipenv install --verbose |           mv ./__tests__/data/Pipfile . | ||||||
|  |           pipenv install --keep-outdated | ||||||
| 
 | 
 | ||||||
|   python-poetry-dependencies-caching: |   python-poetry-dependencies-caching: | ||||||
|     name: Test poetry (Python ${{ matrix.python-version}}, ${{ matrix.os }}) |     name: Test poetry (Python ${{ matrix.python-version}}, ${{ matrix.os }}) | ||||||
| @ -112,8 +113,9 @@ jobs: | |||||||
|           cache: 'pipenv' |           cache: 'pipenv' | ||||||
|           cache-dependency-path: '**/pipenv-requirements.txt' |           cache-dependency-path: '**/pipenv-requirements.txt' | ||||||
|       - name: Install pipenv |       - name: Install pipenv | ||||||
|         run: pipx install pipenv |         run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: | |         run: | | ||||||
|           cd __tests__/data |           mv ./__tests__/data/Pipfile.lock . | ||||||
|           pipenv install --verbose |           mv ./__tests__/data/Pipfile . | ||||||
|  |           pipenv install --keep-outdated | ||||||
							
								
								
									
										26
									
								
								.github/workflows/test-pypy.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/test-pypy.yml
									
									
									
									
										vendored
									
									
								
							| @ -65,3 +65,29 @@ jobs: | |||||||
|           EXECUTABLE=${EXECUTABLE%%-*}  # remove any -* suffixe |           EXECUTABLE=${EXECUTABLE%%-*}  # remove any -* suffixe | ||||||
|           ${EXECUTABLE} --version |           ${EXECUTABLE} --version | ||||||
|         shell: bash |         shell: bash | ||||||
|  | 
 | ||||||
|  |   setup-pypy-noenv: | ||||||
|  |     name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }} (noenv) | ||||||
|  |     runs-on: ${{ matrix.os }} | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-latest] | ||||||
|  |         pypy: ['pypy2.7', 'pypy3.7', 'pypy3.8', 'pypy3.9-nightly'] | ||||||
|  | 
 | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v3 | ||||||
|  | 
 | ||||||
|  |       - name: setup-python ${{ matrix.pypy }} | ||||||
|  |         id: setup-python | ||||||
|  |         uses: ./ | ||||||
|  |         with: | ||||||
|  |           python-version: ${{ matrix.pypy }} | ||||||
|  |           update-environment: false | ||||||
|  | 
 | ||||||
|  |       - name: PyPy and Python version | ||||||
|  |         run: ${{ steps.setup-python.outputs.python-path }} --version | ||||||
|  | 
 | ||||||
|  |       - name: Run simple code | ||||||
|  |         run: ${{ steps.setup-python.outputs.python-path }} -c 'import math; print(math.factorial(5))' | ||||||
|  | |||||||
							
								
								
									
										25
									
								
								.github/workflows/test-python.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								.github/workflows/test-python.yml
									
									
									
									
										vendored
									
									
								
							| @ -147,3 +147,28 @@ jobs: | |||||||
| 
 | 
 | ||||||
|     - name: Run simple code |     - name: Run simple code | ||||||
|       run: python -c 'import math; print(math.factorial(5))' |       run: python -c 'import math; print(math.factorial(5))' | ||||||
|  | 
 | ||||||
|  |   setup-versions-noenv: | ||||||
|  |     name: Setup ${{ matrix.python }} ${{ matrix.os }} (noenv) | ||||||
|  |     runs-on: ${{ matrix.os }} | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04] | ||||||
|  |         python: ["3.7", "3.8", "3.9", "3.10"] | ||||||
|  |     steps: | ||||||
|  |     - name: Checkout | ||||||
|  |       uses: actions/checkout@v3 | ||||||
|  | 
 | ||||||
|  |     - name: setup-python ${{ matrix.python }} | ||||||
|  |       id: setup-python | ||||||
|  |       uses: ./ | ||||||
|  |       with: | ||||||
|  |         python-version: ${{ matrix.python }} | ||||||
|  |         update-environment: false | ||||||
|  | 
 | ||||||
|  |     - name: Python version | ||||||
|  |       run: ${{ steps.setup-python.outputs.python-path }} --version | ||||||
|  | 
 | ||||||
|  |     - name: Run simple code | ||||||
|  |       run: ${{ steps.setup-python.outputs.python-path }} -c 'import math; print(math.factorial(5))' | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/@actions/core.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/@actions/core.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/@actions/http-client-1.0.8.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/@actions/http-client-1.0.8.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							| @ -269,12 +269,12 @@ steps: | |||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v3 | ||||||
| - name: Install pipenv |  | ||||||
|   run: pipx install pipenv |  | ||||||
| - uses: actions/setup-python@v4 | - uses: actions/setup-python@v4 | ||||||
|   with: |   with: | ||||||
|     python-version: '3.9' |     python-version: '3.9' | ||||||
|     cache: 'pipenv' |     cache: 'pipenv' | ||||||
|  | - name: Install pipenv | ||||||
|  |   run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python | ||||||
| - run: pipenv install | - run: pipenv install | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| @ -308,8 +308,6 @@ steps: | |||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v3 | - uses: actions/checkout@v3 | ||||||
| - name: Install pipenv |  | ||||||
|   run: pipx install pipenv |  | ||||||
| - uses: actions/setup-python@v4 | - uses: actions/setup-python@v4 | ||||||
|   with: |   with: | ||||||
|     python-version: '3.9' |     python-version: '3.9' | ||||||
| @ -317,9 +315,31 @@ steps: | |||||||
|     cache-dependency-path: | |     cache-dependency-path: | | ||||||
|       server/app/Pipfile.lock |       server/app/Pipfile.lock | ||||||
|       __test__/app/Pipfile.lock |       __test__/app/Pipfile.lock | ||||||
|  | - name: Install pipenv | ||||||
|  |   run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python | ||||||
| - run: pipenv install | - run: pipenv install | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | # Environment variables | ||||||
|  | 
 | ||||||
|  |  The `update-environment` flag defaults to `true`. | ||||||
|  |  With this setting, the action will add/update environment variables (e.g. `PATH`, `PKG_CONFIG_PATH`, `pythonLocation`) for `python` to just work out of the box. | ||||||
|  | 
 | ||||||
|  |  If `update-environment` is set to `false`, the action will not add/update environment variables. | ||||||
|  |  This can prove useful if you want the only side-effect to be to ensure python is installed and rely on the `python-path` output to run python. | ||||||
|  |  Such a requirement on side-effect could be because you don't want your composite action messing with your user's workflows. | ||||||
|  | 
 | ||||||
|  |  ```yaml | ||||||
|  |  steps: | ||||||
|  |    - uses: actions/checkout@v3 | ||||||
|  |    - uses: actions/setup-python@v4 | ||||||
|  |      id: cp310 | ||||||
|  |      with: | ||||||
|  |        python-version: '3.10' | ||||||
|  |        update-environment: false | ||||||
|  |    - run: ${{ steps.cp310.outputs.python-path }} my_script.py | ||||||
|  |  ``` | ||||||
|  | 
 | ||||||
| # Using `setup-python` with a self hosted runner | # Using `setup-python` with a self hosted runner | ||||||
| 
 | 
 | ||||||
| Python distributions are only available for the same [environments](https://github.com/actions/virtual-environments#available-environments) that GitHub Actions hosted environments are available for. If you are using an unsupported version of Ubuntu such as `19.04` or another Linux distribution such as Fedora, `setup-python` will not work. If you have a supported self-hosted runner and you would like to use `setup-python`, there are a few extra things you need to make sure are set up so that new versions of Python can be downloaded and configured on your runner. | Python distributions are only available for the same [environments](https://github.com/actions/virtual-environments#available-environments) that GitHub Actions hosted environments are available for. If you are using an unsupported version of Ubuntu such as `19.04` or another Linux distribution such as Fedora, `setup-python` will not work. If you have a supported self-hosted runner and you would like to use `setup-python`, there are a few extra things you need to make sure are set up so that new versions of Python can be downloaded and configured on your runner. | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import {getCacheDistributor} from '../src/cache-distributions/cache-factory'; | |||||||
| 
 | 
 | ||||||
| describe('restore-cache', () => { | describe('restore-cache', () => { | ||||||
|   const pipFileLockHash = |   const pipFileLockHash = | ||||||
|     'd1dd6218299d8a6db5fc2001d988b34a8b31f1e9d0bb4534d377dde7c19f64b3'; |     'a3bdcc71289e4979ca9e051810d81999cc99823109faf6912e17ff14c8e621a6'; | ||||||
|   const requirementsHash = |   const requirementsHash = | ||||||
|     'd8110e0006d7fb5ee76365d565eef9d37df1d11598b912d3eb66d398d57a1121'; |     'd8110e0006d7fb5ee76365d565eef9d37df1d11598b912d3eb66d398d57a1121'; | ||||||
|   const requirementsLinuxHash = |   const requirementsLinuxHash = | ||||||
|  | |||||||
| @ -4,8 +4,8 @@ verify_ssl = true | |||||||
| name = "pypi" | name = "pypi" | ||||||
| 
 | 
 | ||||||
| [packages] | [packages] | ||||||
| numpy = "1.22.3" | flake8 = "==4.0.1" | ||||||
| pandas = "1.4.2" | numpy = "==1.23.0" | ||||||
| 
 | 
 | ||||||
| [dev-packages] | [dev-packages] | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										115
									
								
								__tests__/data/Pipfile.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										115
									
								
								__tests__/data/Pipfile.lock
									
									
									
										generated
									
									
									
								
							| @ -1,7 +1,7 @@ | |||||||
| { | { | ||||||
|     "_meta": { |     "_meta": { | ||||||
|         "hash": { |         "hash": { | ||||||
|             "sha256": "33e3640eff8b2b6c7149b85568151f39a66c544033b4b3f3f2ec9ad5ce6dfe7e" |             "sha256": "e9c37110984955621040e2dc8548c026eb8466c23db1b8e69430289b10be8938" | ||||||
|         }, |         }, | ||||||
|         "pipfile-spec": 6, |         "pipfile-spec": 6, | ||||||
|         "requires": { |         "requires": { | ||||||
| @ -16,81 +16,64 @@ | |||||||
|         ] |         ] | ||||||
|     }, |     }, | ||||||
|     "default": { |     "default": { | ||||||
|  |         "flake8": { | ||||||
|  |             "hashes": [ | ||||||
|  |                 "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d", | ||||||
|  |                 "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d" | ||||||
|  |             ], | ||||||
|  |             "index": "pypi", | ||||||
|  |             "version": "==4.0.1" | ||||||
|  |         }, | ||||||
|  |         "mccabe": { | ||||||
|  |             "hashes": [ | ||||||
|  |                 "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", | ||||||
|  |                 "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" | ||||||
|  |             ], | ||||||
|  |             "version": "==0.6.1" | ||||||
|  |         }, | ||||||
|         "numpy": { |         "numpy": { | ||||||
|             "hashes": [ |             "hashes": [ | ||||||
|                 "sha256:07a8c89a04997625236c5ecb7afe35a02af3896c8aa01890a849913a2309c676", |                 "sha256:092f5e6025813e64ad6d1b52b519165d08c730d099c114a9247c9bb635a2a450", | ||||||
|                 "sha256:08d9b008d0156c70dc392bb3ab3abb6e7a711383c3247b410b39962263576cd4", |                 "sha256:196cd074c3f97c4121601790955f915187736f9cf458d3ee1f1b46aff2b1ade0", | ||||||
|                 "sha256:201b4d0552831f7250a08d3b38de0d989d6f6e4658b709a02a73c524ccc6ffce", |                 "sha256:1c29b44905af288b3919803aceb6ec7fec77406d8b08aaa2e8b9e63d0fe2f160", | ||||||
|                 "sha256:2c10a93606e0b4b95c9b04b77dc349b398fdfbda382d2a39ba5a822f669a0123", |                 "sha256:2b2da66582f3a69c8ce25ed7921dcd8010d05e59ac8d89d126a299be60421171", | ||||||
|                 "sha256:3ca688e1b9b95d80250bca34b11a05e389b1420d00e87a0d12dc45f131f704a1", |                 "sha256:5043bcd71fcc458dfb8a0fc5509bbc979da0131b9d08e3d5f50fb0bbb36f169a", | ||||||
|                 "sha256:48a3aecd3b997bf452a2dedb11f4e79bc5bfd21a1d4cc760e703c31d57c84b3e", |                 "sha256:58bfd40eb478f54ff7a5710dd61c8097e169bc36cc68333d00a9bcd8def53b38", | ||||||
|                 "sha256:568dfd16224abddafb1cbcce2ff14f522abe037268514dd7e42c6776a1c3f8e5", |                 "sha256:79a506cacf2be3a74ead5467aee97b81fca00c9c4c8b3ba16dbab488cd99ba10", | ||||||
|                 "sha256:5bfb1bb598e8229c2d5d48db1860bcf4311337864ea3efdbe1171fb0c5da515d", |                 "sha256:94b170b4fa0168cd6be4becf37cb5b127bd12a795123984385b8cd4aca9857e5", | ||||||
|                 "sha256:639b54cdf6aa4f82fe37ebf70401bbb74b8508fddcf4797f9fe59615b8c5813a", |                 "sha256:97a76604d9b0e79f59baeca16593c711fddb44936e40310f78bfef79ee9a835f", | ||||||
|                 "sha256:8251ed96f38b47b4295b1ae51631de7ffa8260b5b087808ef09a39a9d66c97ab", |                 "sha256:98e8e0d8d69ff4d3fa63e6c61e8cfe2d03c29b16b58dbef1f9baa175bbed7860", | ||||||
|                 "sha256:92bfa69cfbdf7dfc3040978ad09a48091143cffb778ec3b03fa170c494118d75", |                 "sha256:ac86f407873b952679f5f9e6c0612687e51547af0e14ddea1eedfcb22466babd", | ||||||
|                 "sha256:97098b95aa4e418529099c26558eeb8486e66bd1e53a6b606d684d0c3616b168", |                 "sha256:ae8adff4172692ce56233db04b7ce5792186f179c415c37d539c25de7298d25d", | ||||||
|                 "sha256:a3bae1a2ed00e90b3ba5f7bd0a7c7999b55d609e0c54ceb2b076a25e345fa9f4", |                 "sha256:bd3fa4fe2e38533d5336e1272fc4e765cabbbde144309ccee8675509d5cd7b05", | ||||||
|                 "sha256:c34ea7e9d13a70bf2ab64a2532fe149a9aced424cd05a2c4ba662fd989e3e45f", |                 "sha256:d0d2094e8f4d760500394d77b383a1b06d3663e8892cdf5df3c592f55f3bff66", | ||||||
|                 "sha256:dbc7601a3b7472d559dc7b933b18b4b66f9aa7452c120e87dfb33d02008c8a18", |                 "sha256:d54b3b828d618a19779a84c3ad952e96e2c2311b16384e973e671aa5be1f6187", | ||||||
|                 "sha256:e7927a589df200c5e23c57970bafbd0cd322459aa7b1ff73b7c2e84d6e3eae62", |                 "sha256:d6ca8dabe696c2785d0c8c9b0d8a9b6e5fdbe4f922bde70d57fa1a2848134f95", | ||||||
|                 "sha256:f8c1f39caad2c896bc0018f699882b345b2a63708008be29b1f355ebf6f933fe", |                 "sha256:d8cc87bed09de55477dba9da370c1679bd534df9baa171dd01accbb09687dac3", | ||||||
|                 "sha256:f950f8845b480cffe522913d35567e29dd381b0dc7e4ce6a4a9f9156417d2430", |                 "sha256:f0f18804df7370571fb65db9b98bf1378172bd4e962482b857e612d1fec0f53e", | ||||||
|                 "sha256:fade0d4f4d292b6f39951b6836d7a3c7ef5b2347f3c420cd9820a1d90d794802", |                 "sha256:f1d88ef79e0a7fa631bb2c3dda1ea46b32b1fe614e10fedd611d3d5398447f2f", | ||||||
|                 "sha256:fdf3c08bce27132395d3c3ba1503cac12e17282358cb4bddc25cc46b0aca07aa" |                 "sha256:f9c3fc2adf67762c9fe1849c859942d23f8d3e0bee7b5ed3d4a9c3eeb50a2f07", | ||||||
|  |                 "sha256:fc431493df245f3c627c0c05c2bd134535e7929dbe2e602b80e42bf52ff760bc", | ||||||
|  |                 "sha256:fe8b9683eb26d2c4d5db32cd29b38fdcf8381324ab48313b5b69088e0e355379" | ||||||
|             ], |             ], | ||||||
|             "index": "pypi", |             "index": "pypi", | ||||||
|             "version": "==1.22.3" |             "version": "==1.23.0" | ||||||
|         }, |         }, | ||||||
|         "pandas": { |         "pycodestyle": { | ||||||
|             "hashes": [ |             "hashes": [ | ||||||
|                 "sha256:0010771bd9223f7afe5f051eb47c4a49534345dfa144f2f5470b27189a4dd3b5", |                 "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20", | ||||||
|                 "sha256:061609334a8182ab500a90fe66d46f6f387de62d3a9cb9aa7e62e3146c712167", |                 "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f" | ||||||
|                 "sha256:09d8be7dd9e1c4c98224c4dfe8abd60d145d934e9fc1f5f411266308ae683e6a", |  | ||||||
|                 "sha256:295872bf1a09758aba199992c3ecde455f01caf32266d50abc1a073e828a7b9d", |  | ||||||
|                 "sha256:3228198333dd13c90b6434ddf61aa6d57deaca98cf7b654f4ad68a2db84f8cfe", |  | ||||||
|                 "sha256:385c52e85aaa8ea6a4c600a9b2821181a51f8be0aee3af6f2dcb41dafc4fc1d0", |  | ||||||
|                 "sha256:51649ef604a945f781105a6d2ecf88db7da0f4868ac5d45c51cb66081c4d9c73", |  | ||||||
|                 "sha256:5586cc95692564b441f4747c47c8a9746792e87b40a4680a2feb7794defb1ce3", |  | ||||||
|                 "sha256:5a206afa84ed20e07603f50d22b5f0db3fb556486d8c2462d8bc364831a4b417", |  | ||||||
|                 "sha256:5b79af3a69e5175c6fa7b4e046b21a646c8b74e92c6581a9d825687d92071b51", |  | ||||||
|                 "sha256:5c54ea4ef3823108cd4ec7fb27ccba4c3a775e0f83e39c5e17f5094cb17748bc", |  | ||||||
|                 "sha256:8c5bf555b6b0075294b73965adaafb39cf71c312e38c5935c93d78f41c19828a", |  | ||||||
|                 "sha256:92bc1fc585f1463ca827b45535957815b7deb218c549b7c18402c322c7549a12", |  | ||||||
|                 "sha256:95c1e422ced0199cf4a34385ff124b69412c4bc912011ce895582bee620dfcaa", |  | ||||||
|                 "sha256:b8134651258bce418cb79c71adeff0a44090c98d955f6953168ba16cc285d9f7", |  | ||||||
|                 "sha256:be67c782c4f1b1f24c2f16a157e12c2693fd510f8df18e3287c77f33d124ed07", |  | ||||||
|                 "sha256:c072c7f06b9242c855ed8021ff970c0e8f8b10b35e2640c657d2a541c5950f59", |  | ||||||
|                 "sha256:d0d4f13e4be7ce89d7057a786023c461dd9370040bdb5efa0a7fe76b556867a0", |  | ||||||
|                 "sha256:df82739e00bb6daf4bba4479a40f38c718b598a84654cbd8bb498fd6b0aa8c16", |  | ||||||
|                 "sha256:f549097993744ff8c41b5e8f2f0d3cbfaabe89b4ae32c8c08ead6cc535b80139", |  | ||||||
|                 "sha256:ff08a14ef21d94cdf18eef7c569d66f2e24e0bc89350bcd7d243dd804e3b5eb2" |  | ||||||
|             ], |             ], | ||||||
|             "index": "pypi", |             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", | ||||||
|             "version": "==1.4.2" |             "version": "==2.8.0" | ||||||
|         }, |         }, | ||||||
|         "python-dateutil": { |         "pyflakes": { | ||||||
|             "hashes": [ |             "hashes": [ | ||||||
|                 "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", |                 "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c", | ||||||
|                 "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" |                 "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e" | ||||||
|             ], |             ], | ||||||
|             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", |             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", | ||||||
|             "version": "==2.8.2" |             "version": "==2.4.0" | ||||||
|         }, |  | ||||||
|         "pytz": { |  | ||||||
|             "hashes": [ |  | ||||||
|                 "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7", |  | ||||||
|                 "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c" |  | ||||||
|             ], |  | ||||||
|             "version": "==2022.1" |  | ||||||
|         }, |  | ||||||
|         "six": { |  | ||||||
|             "hashes": [ |  | ||||||
|                 "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", |  | ||||||
|                 "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" |  | ||||||
|             ], |  | ||||||
|             "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", |  | ||||||
|             "version": "==1.16.0" |  | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|     "develop": {} |     "develop": {} | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ import {HttpClient} from '@actions/http-client'; | |||||||
| import * as ifm from '@actions/http-client/interfaces'; | import * as ifm from '@actions/http-client/interfaces'; | ||||||
| import * as tc from '@actions/tool-cache'; | import * as tc from '@actions/tool-cache'; | ||||||
| import * as exec from '@actions/exec'; | import * as exec from '@actions/exec'; | ||||||
|  | import * as core from '@actions/core'; | ||||||
| 
 | 
 | ||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as semver from 'semver'; | import * as semver from 'semver'; | ||||||
| @ -148,6 +149,8 @@ describe('findPyPyVersion', () => { | |||||||
|   let spyWriteExactPyPyVersionFile: jest.SpyInstance; |   let spyWriteExactPyPyVersionFile: jest.SpyInstance; | ||||||
|   let spyCacheDir: jest.SpyInstance; |   let spyCacheDir: jest.SpyInstance; | ||||||
|   let spyChmodSync: jest.SpyInstance; |   let spyChmodSync: jest.SpyInstance; | ||||||
|  |   let spyCoreAddPath: jest.SpyInstance; | ||||||
|  |   let spyCoreExportVariable: jest.SpyInstance; | ||||||
| 
 | 
 | ||||||
|   beforeEach(() => { |   beforeEach(() => { | ||||||
|     tcFind = jest.spyOn(tc, 'find'); |     tcFind = jest.spyOn(tc, 'find'); | ||||||
| @ -201,6 +204,10 @@ describe('findPyPyVersion', () => { | |||||||
| 
 | 
 | ||||||
|     spyExistsSync = jest.spyOn(fs, 'existsSync'); |     spyExistsSync = jest.spyOn(fs, 'existsSync'); | ||||||
|     spyExistsSync.mockReturnValue(true); |     spyExistsSync.mockReturnValue(true); | ||||||
|  | 
 | ||||||
|  |     spyCoreAddPath = jest.spyOn(core, 'addPath'); | ||||||
|  | 
 | ||||||
|  |     spyCoreExportVariable = jest.spyOn(core, 'exportVariable'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   afterEach(() => { |   afterEach(() => { | ||||||
| @ -211,22 +218,31 @@ describe('findPyPyVersion', () => { | |||||||
| 
 | 
 | ||||||
|   it('found PyPy in toolcache', async () => { |   it('found PyPy in toolcache', async () => { | ||||||
|     await expect( |     await expect( | ||||||
|       finder.findPyPyVersion('pypy-3.6-v7.3.x', architecture) |       finder.findPyPyVersion('pypy-3.6-v7.3.x', architecture, true) | ||||||
|     ).resolves.toEqual({ |     ).resolves.toEqual({ | ||||||
|       resolvedPythonVersion: '3.6.12', |       resolvedPythonVersion: '3.6.12', | ||||||
|       resolvedPyPyVersion: '7.3.3' |       resolvedPyPyVersion: '7.3.3' | ||||||
|     }); |     }); | ||||||
|  |     expect(spyCoreAddPath).toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'pythonLocation', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'PKG_CONFIG_PATH', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('throw on invalid input format', async () => { |   it('throw on invalid input format', async () => { | ||||||
|     await expect( |     await expect( | ||||||
|       finder.findPyPyVersion('pypy3.7-v7.3.x', architecture) |       finder.findPyPyVersion('pypy3.7-v7.3.x', architecture, true) | ||||||
|     ).rejects.toThrow(); |     ).rejects.toThrow(); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('throw on invalid input format pypy3.7-7.3.x', async () => { |   it('throw on invalid input format pypy3.7-7.3.x', async () => { | ||||||
|     await expect( |     await expect( | ||||||
|       finder.findPyPyVersion('pypy3.7-v7.3.x', architecture) |       finder.findPyPyVersion('pypy3.7-v7.3.x', architecture, true) | ||||||
|     ).rejects.toThrow(); |     ).rejects.toThrow(); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
| @ -238,16 +254,42 @@ describe('findPyPyVersion', () => { | |||||||
|     spyChmodSync = jest.spyOn(fs, 'chmodSync'); |     spyChmodSync = jest.spyOn(fs, 'chmodSync'); | ||||||
|     spyChmodSync.mockImplementation(() => undefined); |     spyChmodSync.mockImplementation(() => undefined); | ||||||
|     await expect( |     await expect( | ||||||
|       finder.findPyPyVersion('pypy-3.7-v7.3.x', architecture) |       finder.findPyPyVersion('pypy-3.7-v7.3.x', architecture, true) | ||||||
|     ).resolves.toEqual({ |     ).resolves.toEqual({ | ||||||
|       resolvedPythonVersion: '3.7.9', |       resolvedPythonVersion: '3.7.9', | ||||||
|       resolvedPyPyVersion: '7.3.3' |       resolvedPyPyVersion: '7.3.3' | ||||||
|     }); |     }); | ||||||
|  |     expect(spyCoreAddPath).toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'pythonLocation', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'PKG_CONFIG_PATH', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('found and install successfully without environment update', async () => { | ||||||
|  |     spyCacheDir = jest.spyOn(tc, 'cacheDir'); | ||||||
|  |     spyCacheDir.mockImplementation(() => | ||||||
|  |       path.join(toolDir, 'PyPy', '3.7.7', architecture) | ||||||
|  |     ); | ||||||
|  |     spyChmodSync = jest.spyOn(fs, 'chmodSync'); | ||||||
|  |     spyChmodSync.mockImplementation(() => undefined); | ||||||
|  |     await expect( | ||||||
|  |       finder.findPyPyVersion('pypy-3.7-v7.3.x', architecture, false) | ||||||
|  |     ).resolves.toEqual({ | ||||||
|  |       resolvedPythonVersion: '3.7.9', | ||||||
|  |       resolvedPyPyVersion: '7.3.3' | ||||||
|  |     }); | ||||||
|  |     expect(spyCoreAddPath).not.toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).not.toHaveBeenCalled(); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('throw if release is not found', async () => { |   it('throw if release is not found', async () => { | ||||||
|     await expect( |     await expect( | ||||||
|       finder.findPyPyVersion('pypy-3.7-v7.5.x', architecture) |       finder.findPyPyVersion('pypy-3.7-v7.5.x', architecture, true) | ||||||
|     ).rejects.toThrowError( |     ).rejects.toThrowError( | ||||||
|       `PyPy version 3.7 (v7.5.x) with arch ${architecture} not found` |       `PyPy version 3.7 (v7.5.x) with arch ${architecture} not found` | ||||||
|     ); |     ); | ||||||
|  | |||||||
| @ -19,15 +19,26 @@ process.env['RUNNER_TOOL_CACHE'] = toolDir; | |||||||
| process.env['RUNNER_TEMP'] = tempDir; | process.env['RUNNER_TEMP'] = tempDir; | ||||||
| 
 | 
 | ||||||
| import * as tc from '@actions/tool-cache'; | import * as tc from '@actions/tool-cache'; | ||||||
|  | import * as core from '@actions/core'; | ||||||
| import * as finder from '../src/find-python'; | import * as finder from '../src/find-python'; | ||||||
| import * as installer from '../src/install-python'; | import * as installer from '../src/install-python'; | ||||||
| 
 | 
 | ||||||
| const manifestData = require('./data/versions-manifest.json'); | const manifestData = require('./data/versions-manifest.json'); | ||||||
| 
 | 
 | ||||||
| describe('Finder tests', () => { | describe('Finder tests', () => { | ||||||
|  |   let spyCoreAddPath: jest.SpyInstance; | ||||||
|  |   let spyCoreExportVariable: jest.SpyInstance; | ||||||
|  | 
 | ||||||
|  |   beforeEach(() => { | ||||||
|  |     spyCoreAddPath = jest.spyOn(core, 'addPath'); | ||||||
|  | 
 | ||||||
|  |     spyCoreExportVariable = jest.spyOn(core, 'exportVariable'); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|   afterEach(() => { |   afterEach(() => { | ||||||
|     jest.resetAllMocks(); |     jest.resetAllMocks(); | ||||||
|     jest.clearAllMocks(); |     jest.clearAllMocks(); | ||||||
|  |     jest.restoreAllMocks(); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Finds Python if it is installed', async () => { |   it('Finds Python if it is installed', async () => { | ||||||
| @ -35,7 +46,27 @@ describe('Finder tests', () => { | |||||||
|     await io.mkdirP(pythonDir); |     await io.mkdirP(pythonDir); | ||||||
|     fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |     fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|     await finder.useCpythonVersion('3.x', 'x64'); |     await finder.useCpythonVersion('3.x', 'x64', true); | ||||||
|  |     expect(spyCoreAddPath).toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'pythonLocation', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'PKG_CONFIG_PATH', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('Finds Python if it is installed without environment update', async () => { | ||||||
|  |     const pythonDir: string = path.join(toolDir, 'Python', '3.0.0', 'x64'); | ||||||
|  |     await io.mkdirP(pythonDir); | ||||||
|  |     fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|  |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|  |     await finder.useCpythonVersion('3.x', 'x64', false); | ||||||
|  |     expect(spyCoreAddPath).not.toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).not.toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).not.toHaveBeenCalled(); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Finds stable Python version if it is not installed, but exists in the manifest', async () => { |   it('Finds stable Python version if it is not installed, but exists in the manifest', async () => { | ||||||
| @ -52,7 +83,16 @@ describe('Finder tests', () => { | |||||||
|       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|     }); |     }); | ||||||
|     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|     await finder.useCpythonVersion('1.2.3', 'x64'); |     await finder.useCpythonVersion('1.2.3', 'x64', true); | ||||||
|  |     expect(spyCoreAddPath).toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'pythonLocation', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'PKG_CONFIG_PATH', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Finds pre-release Python version in the manifest', async () => { |   it('Finds pre-release Python version in the manifest', async () => { | ||||||
| @ -74,17 +114,28 @@ describe('Finder tests', () => { | |||||||
|       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|     }); |     }); | ||||||
|     // This will throw if it doesn't find it in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the manifest (because no such version exists)
 | ||||||
|     await finder.useCpythonVersion('1.2.3-beta.2', 'x64'); |     await finder.useCpythonVersion('1.2.3-beta.2', 'x64', true); | ||||||
|  |     expect(spyCoreAddPath).toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'pythonLocation', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|  |     expect(spyCoreExportVariable).toHaveBeenCalledWith( | ||||||
|  |       'PKG_CONFIG_PATH', | ||||||
|  |       expect.anything() | ||||||
|  |     ); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Errors if Python is not installed', async () => { |   it('Errors if Python is not installed', async () => { | ||||||
|     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|     let thrown = false; |     let thrown = false; | ||||||
|     try { |     try { | ||||||
|       await finder.useCpythonVersion('3.300000', 'x64'); |       await finder.useCpythonVersion('3.300000', 'x64', true); | ||||||
|     } catch { |     } catch { | ||||||
|       thrown = true; |       thrown = true; | ||||||
|     } |     } | ||||||
|     expect(thrown).toBeTruthy(); |     expect(thrown).toBeTruthy(); | ||||||
|  |     expect(spyCoreAddPath).not.toHaveBeenCalled(); | ||||||
|  |     expect(spyCoreExportVariable).not.toHaveBeenCalled(); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -17,6 +17,9 @@ inputs: | |||||||
|     default: ${{ github.token }} |     default: ${{ github.token }} | ||||||
|   cache-dependency-path: |   cache-dependency-path: | ||||||
|     description: 'Used to specify the path to dependency files. Supports wildcards or a list of file names for caching multiple dependencies.' |     description: 'Used to specify the path to dependency files. Supports wildcards or a list of file names for caching multiple dependencies.' | ||||||
|  |   update-environment: | ||||||
|  |     description: 'Set this option if you want the action to update environment variables.' | ||||||
|  |     default: true | ||||||
| outputs: | outputs: | ||||||
|   python-version: |   python-version: | ||||||
|     description: "The installed python version. Useful when given a version range as input." |     description: "The installed python version. Useful when given a version range as input." | ||||||
|  | |||||||
							
								
								
									
										1210
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1210
									
								
								dist/cache-save/index.js
									
									
									
									
										vendored
									
									
								
							| @ -241,8 +241,8 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const http_client_1 = __nccwpck_require__(1825); | const http_client_1 = __nccwpck_require__(9925); | ||||||
| const auth_1 = __nccwpck_require__(2001); | const auth_1 = __nccwpck_require__(3702); | ||||||
| const crypto = __importStar(__nccwpck_require__(6113)); | const crypto = __importStar(__nccwpck_require__(6113)); | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| const url_1 = __nccwpck_require__(7310); | const url_1 = __nccwpck_require__(7310); | ||||||
| @ -4697,14 +4697,27 @@ function coerce (version, options) { | |||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     result["default"] = mod; |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.issue = exports.issueCommand = void 0; | ||||||
| const os = __importStar(__nccwpck_require__(2037)); | const os = __importStar(__nccwpck_require__(2037)); | ||||||
| const utils_1 = __nccwpck_require__(5278); | const utils_1 = __nccwpck_require__(5278); | ||||||
| /** | /** | ||||||
| @ -4783,6 +4796,25 @@ function escapeProperty(s) { | |||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
|  | 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.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|  |     __setModuleDefault(result, mod); | ||||||
|  |     return result; | ||||||
|  | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
| @ -4792,19 +4824,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { |  | ||||||
|     if (mod && mod.__esModule) return mod; |  | ||||||
|     var result = {}; |  | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |  | ||||||
|     result["default"] = mod; |  | ||||||
|     return result; |  | ||||||
| }; |  | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; | ||||||
| const command_1 = __nccwpck_require__(7351); | const command_1 = __nccwpck_require__(7351); | ||||||
| const file_command_1 = __nccwpck_require__(717); | const file_command_1 = __nccwpck_require__(717); | ||||||
| const utils_1 = __nccwpck_require__(5278); | const utils_1 = __nccwpck_require__(5278); | ||||||
| const os = __importStar(__nccwpck_require__(2037)); | const os = __importStar(__nccwpck_require__(2037)); | ||||||
| const path = __importStar(__nccwpck_require__(1017)); | const path = __importStar(__nccwpck_require__(1017)); | ||||||
|  | const oidc_utils_1 = __nccwpck_require__(8041); | ||||||
| /** | /** | ||||||
|  * The code to exit an action |  * The code to exit an action | ||||||
|  */ |  */ | ||||||
| @ -4866,7 +4893,9 @@ function addPath(inputPath) { | |||||||
| } | } | ||||||
| exports.addPath = addPath; | exports.addPath = addPath; | ||||||
| /** | /** | ||||||
|  * Gets the value of an input.  The value is also trimmed. |  * Gets the value of an input. | ||||||
|  |  * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. | ||||||
|  |  * Returns an empty string if the value is not defined. | ||||||
|  * |  * | ||||||
|  * @param     name     name of the input to get |  * @param     name     name of the input to get | ||||||
|  * @param     options  optional. See InputOptions. |  * @param     options  optional. See InputOptions. | ||||||
| @ -4877,9 +4906,49 @@ function getInput(name, options) { | |||||||
|     if (options && options.required && !val) { |     if (options && options.required && !val) { | ||||||
|         throw new Error(`Input required and not supplied: ${name}`); |         throw new Error(`Input required and not supplied: ${name}`); | ||||||
|     } |     } | ||||||
|  |     if (options && options.trimWhitespace === false) { | ||||||
|  |         return val; | ||||||
|  |     } | ||||||
|     return val.trim(); |     return val.trim(); | ||||||
| } | } | ||||||
| exports.getInput = getInput; | exports.getInput = getInput; | ||||||
|  | /** | ||||||
|  |  * Gets the values of an multiline input.  Each value is also trimmed. | ||||||
|  |  * | ||||||
|  |  * @param     name     name of the input to get | ||||||
|  |  * @param     options  optional. See InputOptions. | ||||||
|  |  * @returns   string[] | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | function getMultilineInput(name, options) { | ||||||
|  |     const inputs = getInput(name, options) | ||||||
|  |         .split('\n') | ||||||
|  |         .filter(x => x !== ''); | ||||||
|  |     return inputs; | ||||||
|  | } | ||||||
|  | exports.getMultilineInput = getMultilineInput; | ||||||
|  | /** | ||||||
|  |  * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. | ||||||
|  |  * Support boolean input list: `true | True | TRUE | false | False | FALSE` . | ||||||
|  |  * The return value is also in boolean type. | ||||||
|  |  * ref: https://yaml.org/spec/1.2/spec.html#id2804923
 | ||||||
|  |  * | ||||||
|  |  * @param     name     name of the input to get | ||||||
|  |  * @param     options  optional. See InputOptions. | ||||||
|  |  * @returns   boolean | ||||||
|  |  */ | ||||||
|  | function getBooleanInput(name, options) { | ||||||
|  |     const trueValue = ['true', 'True', 'TRUE']; | ||||||
|  |     const falseValue = ['false', 'False', 'FALSE']; | ||||||
|  |     const val = getInput(name, options); | ||||||
|  |     if (trueValue.includes(val)) | ||||||
|  |         return true; | ||||||
|  |     if (falseValue.includes(val)) | ||||||
|  |         return false; | ||||||
|  |     throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + | ||||||
|  |         `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); | ||||||
|  | } | ||||||
|  | exports.getBooleanInput = getBooleanInput; | ||||||
| /** | /** | ||||||
|  * Sets the value of an output. |  * Sets the value of an output. | ||||||
|  * |  * | ||||||
| @ -4888,6 +4957,7 @@ exports.getInput = getInput; | |||||||
|  */ |  */ | ||||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | ||||||
| function setOutput(name, value) { | function setOutput(name, value) { | ||||||
|  |     process.stdout.write(os.EOL); | ||||||
|     command_1.issueCommand('set-output', { name }, value); |     command_1.issueCommand('set-output', { name }, value); | ||||||
| } | } | ||||||
| exports.setOutput = setOutput; | exports.setOutput = setOutput; | ||||||
| @ -4934,19 +5004,30 @@ exports.debug = debug; | |||||||
| /** | /** | ||||||
|  * Adds an error issue |  * Adds an error issue | ||||||
|  * @param message error issue message. Errors will be converted to string via toString() |  * @param message error issue message. Errors will be converted to string via toString() | ||||||
|  |  * @param properties optional properties to add to the annotation. | ||||||
|  */ |  */ | ||||||
| function error(message) { | function error(message, properties = {}) { | ||||||
|     command_1.issue('error', message instanceof Error ? message.toString() : message); |     command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||||||
| } | } | ||||||
| exports.error = error; | exports.error = error; | ||||||
| /** | /** | ||||||
|  * Adds an warning issue |  * Adds a warning issue | ||||||
|  * @param message warning issue message. Errors will be converted to string via toString() |  * @param message warning issue message. Errors will be converted to string via toString() | ||||||
|  |  * @param properties optional properties to add to the annotation. | ||||||
|  */ |  */ | ||||||
| function warning(message) { | function warning(message, properties = {}) { | ||||||
|     command_1.issue('warning', message instanceof Error ? message.toString() : message); |     command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||||||
| } | } | ||||||
| exports.warning = warning; | exports.warning = warning; | ||||||
|  | /** | ||||||
|  |  * Adds a notice issue | ||||||
|  |  * @param message notice issue message. Errors will be converted to string via toString() | ||||||
|  |  * @param properties optional properties to add to the annotation. | ||||||
|  |  */ | ||||||
|  | function notice(message, properties = {}) { | ||||||
|  |     command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||||||
|  | } | ||||||
|  | exports.notice = notice; | ||||||
| /** | /** | ||||||
|  * Writes info to log with console.log. |  * Writes info to log with console.log. | ||||||
|  * @param message info message |  * @param message info message | ||||||
| @ -5019,6 +5100,17 @@ function getState(name) { | |||||||
|     return process.env[`STATE_${name}`] || ''; |     return process.env[`STATE_${name}`] || ''; | ||||||
| } | } | ||||||
| exports.getState = getState; | exports.getState = getState; | ||||||
|  | function getIDToken(aud) { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         return yield oidc_utils_1.OidcClient.getIDToken(aud); | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | exports.getIDToken = getIDToken; | ||||||
|  | /** | ||||||
|  |  * Markdown summary exports | ||||||
|  |  */ | ||||||
|  | var markdown_summary_1 = __nccwpck_require__(8042); | ||||||
|  | Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return markdown_summary_1.markdownSummary; } })); | ||||||
| //# sourceMappingURL=core.js.map
 | //# sourceMappingURL=core.js.map
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -5029,14 +5121,27 @@ exports.getState = getState; | |||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| // For internal use, subject to change.
 | // For internal use, subject to change.
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     result["default"] = mod; |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.issueCommand = void 0; | ||||||
| // We use any as a valid input type
 | // We use any as a valid input type
 | ||||||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| @ -5059,6 +5164,376 @@ exports.issueCommand = issueCommand; | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
|  | /***/ 8042: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 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.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; | ||||||
|  | const os_1 = __nccwpck_require__(2037); | ||||||
|  | const fs_1 = __nccwpck_require__(7147); | ||||||
|  | const { access, appendFile, writeFile } = fs_1.promises; | ||||||
|  | exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; | ||||||
|  | exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-markdown-summary'; | ||||||
|  | class MarkdownSummary { | ||||||
|  |     constructor() { | ||||||
|  |         this._buffer = ''; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Finds the summary file path from the environment, rejects if env var is not found or file does not exist | ||||||
|  |      * Also checks r/w permissions. | ||||||
|  |      * | ||||||
|  |      * @returns step summary file path | ||||||
|  |      */ | ||||||
|  |     filePath() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (this._filePath) { | ||||||
|  |                 return this._filePath; | ||||||
|  |             } | ||||||
|  |             const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; | ||||||
|  |             if (!pathFromEnv) { | ||||||
|  |                 throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports markdown summaries.`); | ||||||
|  |             } | ||||||
|  |             try { | ||||||
|  |                 yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); | ||||||
|  |             } | ||||||
|  |             catch (_a) { | ||||||
|  |                 throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); | ||||||
|  |             } | ||||||
|  |             this._filePath = pathFromEnv; | ||||||
|  |             return this._filePath; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Wraps content in an HTML tag, adding any HTML attributes | ||||||
|  |      * | ||||||
|  |      * @param {string} tag HTML tag to wrap | ||||||
|  |      * @param {string | null} content content within the tag | ||||||
|  |      * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add | ||||||
|  |      * | ||||||
|  |      * @returns {string} content wrapped in HTML element | ||||||
|  |      */ | ||||||
|  |     wrap(tag, content, attrs = {}) { | ||||||
|  |         const htmlAttrs = Object.entries(attrs) | ||||||
|  |             .map(([key, value]) => ` ${key}="${value}"`) | ||||||
|  |             .join(''); | ||||||
|  |         if (!content) { | ||||||
|  |             return `<${tag}${htmlAttrs}>`; | ||||||
|  |         } | ||||||
|  |         return `<${tag}${htmlAttrs}>${content}</${tag}>`; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. | ||||||
|  |      * | ||||||
|  |      * @param {SummaryWriteOptions} [options] (optional) options for write operation | ||||||
|  |      * | ||||||
|  |      * @returns {Promise<MarkdownSummary>} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     write(options) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); | ||||||
|  |             const filePath = yield this.filePath(); | ||||||
|  |             const writeFunc = overwrite ? writeFile : appendFile; | ||||||
|  |             yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); | ||||||
|  |             return this.emptyBuffer(); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Clears the summary buffer and wipes the summary file | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     clear() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.emptyBuffer().write({ overwrite: true }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Returns the current summary buffer as a string | ||||||
|  |      * | ||||||
|  |      * @returns {string} string of summary buffer | ||||||
|  |      */ | ||||||
|  |     stringify() { | ||||||
|  |         return this._buffer; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * If the summary buffer is empty | ||||||
|  |      * | ||||||
|  |      * @returns {boolen} true if the buffer is empty | ||||||
|  |      */ | ||||||
|  |     isEmptyBuffer() { | ||||||
|  |         return this._buffer.length === 0; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Resets the summary buffer without writing to summary file | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     emptyBuffer() { | ||||||
|  |         this._buffer = ''; | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds raw text to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} text content to add | ||||||
|  |      * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addRaw(text, addEOL = false) { | ||||||
|  |         this._buffer += text; | ||||||
|  |         return addEOL ? this.addEOL() : this; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds the operating system-specific end-of-line marker to the buffer | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addEOL() { | ||||||
|  |         return this.addRaw(os_1.EOL); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML codeblock to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} code content to render within fenced code block | ||||||
|  |      * @param {string} lang (optional) language to syntax highlight code | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addCodeBlock(code, lang) { | ||||||
|  |         const attrs = Object.assign({}, (lang && { lang })); | ||||||
|  |         const element = this.wrap('pre', this.wrap('code', code), attrs); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML list to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string[]} items list of items to render | ||||||
|  |      * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addList(items, ordered = false) { | ||||||
|  |         const tag = ordered ? 'ol' : 'ul'; | ||||||
|  |         const listItems = items.map(item => this.wrap('li', item)).join(''); | ||||||
|  |         const element = this.wrap(tag, listItems); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML table to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {SummaryTableCell[]} rows table rows | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addTable(rows) { | ||||||
|  |         const tableBody = rows | ||||||
|  |             .map(row => { | ||||||
|  |             const cells = row | ||||||
|  |                 .map(cell => { | ||||||
|  |                 if (typeof cell === 'string') { | ||||||
|  |                     return this.wrap('td', cell); | ||||||
|  |                 } | ||||||
|  |                 const { header, data, colspan, rowspan } = cell; | ||||||
|  |                 const tag = header ? 'th' : 'td'; | ||||||
|  |                 const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); | ||||||
|  |                 return this.wrap(tag, data, attrs); | ||||||
|  |             }) | ||||||
|  |                 .join(''); | ||||||
|  |             return this.wrap('tr', cells); | ||||||
|  |         }) | ||||||
|  |             .join(''); | ||||||
|  |         const element = this.wrap('table', tableBody); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds a collapsable HTML details element to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} label text for the closed state | ||||||
|  |      * @param {string} content collapsable content | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addDetails(label, content) { | ||||||
|  |         const element = this.wrap('details', this.wrap('summary', label) + content); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML image tag to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} src path to the image you to embed | ||||||
|  |      * @param {string} alt text description of the image | ||||||
|  |      * @param {SummaryImageOptions} options (optional) addition image attributes | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addImage(src, alt, options) { | ||||||
|  |         const { width, height } = options || {}; | ||||||
|  |         const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); | ||||||
|  |         const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML section heading element | ||||||
|  |      * | ||||||
|  |      * @param {string} text heading text | ||||||
|  |      * @param {number | string} [level=1] (optional) the heading level, default: 1 | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addHeading(text, level) { | ||||||
|  |         const tag = `h${level}`; | ||||||
|  |         const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) | ||||||
|  |             ? tag | ||||||
|  |             : 'h1'; | ||||||
|  |         const element = this.wrap(allowedTag, text); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML thematic break (<hr>) to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addSeparator() { | ||||||
|  |         const element = this.wrap('hr', null); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML line break (<br>) to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addBreak() { | ||||||
|  |         const element = this.wrap('br', null); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML blockquote to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} text quote text | ||||||
|  |      * @param {string} cite (optional) citation url | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addQuote(text, cite) { | ||||||
|  |         const attrs = Object.assign({}, (cite && { cite })); | ||||||
|  |         const element = this.wrap('blockquote', text, attrs); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML anchor tag to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} text link text/content | ||||||
|  |      * @param {string} href hyperlink | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addLink(text, href) { | ||||||
|  |         const element = this.wrap('a', text, { href }); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | // singleton export
 | ||||||
|  | exports.markdownSummary = new MarkdownSummary(); | ||||||
|  | //# sourceMappingURL=markdown-summary.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 8041: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 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.OidcClient = void 0; | ||||||
|  | const http_client_1 = __nccwpck_require__(9925); | ||||||
|  | const auth_1 = __nccwpck_require__(3702); | ||||||
|  | const core_1 = __nccwpck_require__(2186); | ||||||
|  | class OidcClient { | ||||||
|  |     static createHttpClient(allowRetry = true, maxRetry = 10) { | ||||||
|  |         const requestOptions = { | ||||||
|  |             allowRetries: allowRetry, | ||||||
|  |             maxRetries: maxRetry | ||||||
|  |         }; | ||||||
|  |         return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); | ||||||
|  |     } | ||||||
|  |     static getRequestToken() { | ||||||
|  |         const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; | ||||||
|  |         if (!token) { | ||||||
|  |             throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); | ||||||
|  |         } | ||||||
|  |         return token; | ||||||
|  |     } | ||||||
|  |     static getIDTokenUrl() { | ||||||
|  |         const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; | ||||||
|  |         if (!runtimeUrl) { | ||||||
|  |             throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); | ||||||
|  |         } | ||||||
|  |         return runtimeUrl; | ||||||
|  |     } | ||||||
|  |     static getCall(id_token_url) { | ||||||
|  |         var _a; | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const httpclient = OidcClient.createHttpClient(); | ||||||
|  |             const res = yield httpclient | ||||||
|  |                 .getJson(id_token_url) | ||||||
|  |                 .catch(error => { | ||||||
|  |                 throw new Error(`Failed to get ID Token. \n 
 | ||||||
|  |         Error Code : ${error.statusCode}\n  | ||||||
|  |         Error Message: ${error.result.message}`);
 | ||||||
|  |             }); | ||||||
|  |             const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; | ||||||
|  |             if (!id_token) { | ||||||
|  |                 throw new Error('Response json body do not have ID Token field'); | ||||||
|  |             } | ||||||
|  |             return id_token; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     static getIDToken(audience) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             try { | ||||||
|  |                 // New ID Token is requested from action service
 | ||||||
|  |                 let id_token_url = OidcClient.getIDTokenUrl(); | ||||||
|  |                 if (audience) { | ||||||
|  |                     const encodedAudience = encodeURIComponent(audience); | ||||||
|  |                     id_token_url = `${id_token_url}&audience=${encodedAudience}`; | ||||||
|  |                 } | ||||||
|  |                 core_1.debug(`ID token url is ${id_token_url}`); | ||||||
|  |                 const id_token = yield OidcClient.getCall(id_token_url); | ||||||
|  |                 core_1.setSecret(id_token); | ||||||
|  |                 return id_token; | ||||||
|  |             } | ||||||
|  |             catch (error) { | ||||||
|  |                 throw new Error(`Error message: ${error.message}`); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.OidcClient = OidcClient; | ||||||
|  | //# sourceMappingURL=oidc-utils.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
| /***/ 5278: | /***/ 5278: | ||||||
| /***/ ((__unused_webpack_module, exports) => { | /***/ ((__unused_webpack_module, exports) => { | ||||||
| 
 | 
 | ||||||
| @ -5067,6 +5542,7 @@ exports.issueCommand = issueCommand; | |||||||
| // We use any as a valid input type
 | // We use any as a valid input type
 | ||||||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.toCommandProperties = exports.toCommandValue = void 0; | ||||||
| /** | /** | ||||||
|  * Sanitizes an input into a string so it can be passed into issueCommand safely |  * Sanitizes an input into a string so it can be passed into issueCommand safely | ||||||
|  * @param input input to sanitize into a string |  * @param input input to sanitize into a string | ||||||
| @ -5081,6 +5557,26 @@ function toCommandValue(input) { | |||||||
|     return JSON.stringify(input); |     return JSON.stringify(input); | ||||||
| } | } | ||||||
| exports.toCommandValue = toCommandValue; | exports.toCommandValue = toCommandValue; | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * @param annotationProperties | ||||||
|  |  * @returns The command properties to send with the actual annotation command | ||||||
|  |  * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
 | ||||||
|  |  */ | ||||||
|  | function toCommandProperties(annotationProperties) { | ||||||
|  |     if (!Object.keys(annotationProperties).length) { | ||||||
|  |         return {}; | ||||||
|  |     } | ||||||
|  |     return { | ||||||
|  |         title: annotationProperties.title, | ||||||
|  |         file: annotationProperties.file, | ||||||
|  |         line: annotationProperties.startLine, | ||||||
|  |         endLine: annotationProperties.endLine, | ||||||
|  |         col: annotationProperties.startColumn, | ||||||
|  |         endColumn: annotationProperties.endColumn | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | exports.toCommandProperties = toCommandProperties; | ||||||
| //# sourceMappingURL=utils.js.map
 | //# sourceMappingURL=utils.js.map
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -5818,6 +6314,682 @@ class ExecState extends events.EventEmitter { | |||||||
| } | } | ||||||
| //# sourceMappingURL=toolrunner.js.map
 | //# sourceMappingURL=toolrunner.js.map
 | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 3702: | ||||||
|  | /***/ ((__unused_webpack_module, exports) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | class BasicCredentialHandler { | ||||||
|  |     constructor(username, password) { | ||||||
|  |         this.username = username; | ||||||
|  |         this.password = password; | ||||||
|  |     } | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         options.headers['Authorization'] = | ||||||
|  |             'Basic ' + | ||||||
|  |                 Buffer.from(this.username + ':' + this.password).toString('base64'); | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication(response) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.BasicCredentialHandler = BasicCredentialHandler; | ||||||
|  | class BearerCredentialHandler { | ||||||
|  |     constructor(token) { | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |     // currently implements pre-authorization
 | ||||||
|  |     // TODO: support preAuth = false where it hooks on 401
 | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         options.headers['Authorization'] = 'Bearer ' + this.token; | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication(response) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.BearerCredentialHandler = BearerCredentialHandler; | ||||||
|  | class PersonalAccessTokenCredentialHandler { | ||||||
|  |     constructor(token) { | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |     // currently implements pre-authorization
 | ||||||
|  |     // TODO: support preAuth = false where it hooks on 401
 | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         options.headers['Authorization'] = | ||||||
|  |             'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication(response) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 9925: | ||||||
|  | /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | const http = __nccwpck_require__(3685); | ||||||
|  | const https = __nccwpck_require__(5687); | ||||||
|  | const pm = __nccwpck_require__(6443); | ||||||
|  | let tunnel; | ||||||
|  | var HttpCodes; | ||||||
|  | (function (HttpCodes) { | ||||||
|  |     HttpCodes[HttpCodes["OK"] = 200] = "OK"; | ||||||
|  |     HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; | ||||||
|  |     HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; | ||||||
|  |     HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; | ||||||
|  |     HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; | ||||||
|  |     HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; | ||||||
|  |     HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; | ||||||
|  |     HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; | ||||||
|  |     HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; | ||||||
|  |     HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; | ||||||
|  |     HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; | ||||||
|  |     HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; | ||||||
|  |     HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; | ||||||
|  |     HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; | ||||||
|  |     HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; | ||||||
|  |     HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; | ||||||
|  |     HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; | ||||||
|  |     HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; | ||||||
|  |     HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; | ||||||
|  |     HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; | ||||||
|  |     HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; | ||||||
|  |     HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; | ||||||
|  |     HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; | ||||||
|  |     HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; | ||||||
|  |     HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; | ||||||
|  |     HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; | ||||||
|  |     HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; | ||||||
|  | })(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); | ||||||
|  | var Headers; | ||||||
|  | (function (Headers) { | ||||||
|  |     Headers["Accept"] = "accept"; | ||||||
|  |     Headers["ContentType"] = "content-type"; | ||||||
|  | })(Headers = exports.Headers || (exports.Headers = {})); | ||||||
|  | var MediaTypes; | ||||||
|  | (function (MediaTypes) { | ||||||
|  |     MediaTypes["ApplicationJson"] = "application/json"; | ||||||
|  | })(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); | ||||||
|  | /** | ||||||
|  |  * Returns the proxy URL, depending upon the supplied url and proxy environment variables. | ||||||
|  |  * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | ||||||
|  |  */ | ||||||
|  | function getProxyUrl(serverUrl) { | ||||||
|  |     let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); | ||||||
|  |     return proxyUrl ? proxyUrl.href : ''; | ||||||
|  | } | ||||||
|  | exports.getProxyUrl = getProxyUrl; | ||||||
|  | const HttpRedirectCodes = [ | ||||||
|  |     HttpCodes.MovedPermanently, | ||||||
|  |     HttpCodes.ResourceMoved, | ||||||
|  |     HttpCodes.SeeOther, | ||||||
|  |     HttpCodes.TemporaryRedirect, | ||||||
|  |     HttpCodes.PermanentRedirect | ||||||
|  | ]; | ||||||
|  | const HttpResponseRetryCodes = [ | ||||||
|  |     HttpCodes.BadGateway, | ||||||
|  |     HttpCodes.ServiceUnavailable, | ||||||
|  |     HttpCodes.GatewayTimeout | ||||||
|  | ]; | ||||||
|  | const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; | ||||||
|  | const ExponentialBackoffCeiling = 10; | ||||||
|  | const ExponentialBackoffTimeSlice = 5; | ||||||
|  | class HttpClientError extends Error { | ||||||
|  |     constructor(message, statusCode) { | ||||||
|  |         super(message); | ||||||
|  |         this.name = 'HttpClientError'; | ||||||
|  |         this.statusCode = statusCode; | ||||||
|  |         Object.setPrototypeOf(this, HttpClientError.prototype); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClientError = HttpClientError; | ||||||
|  | class HttpClientResponse { | ||||||
|  |     constructor(message) { | ||||||
|  |         this.message = message; | ||||||
|  |     } | ||||||
|  |     readBody() { | ||||||
|  |         return new Promise(async (resolve, reject) => { | ||||||
|  |             let output = Buffer.alloc(0); | ||||||
|  |             this.message.on('data', (chunk) => { | ||||||
|  |                 output = Buffer.concat([output, chunk]); | ||||||
|  |             }); | ||||||
|  |             this.message.on('end', () => { | ||||||
|  |                 resolve(output.toString()); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClientResponse = HttpClientResponse; | ||||||
|  | function isHttps(requestUrl) { | ||||||
|  |     let parsedUrl = new URL(requestUrl); | ||||||
|  |     return parsedUrl.protocol === 'https:'; | ||||||
|  | } | ||||||
|  | exports.isHttps = isHttps; | ||||||
|  | class HttpClient { | ||||||
|  |     constructor(userAgent, handlers, requestOptions) { | ||||||
|  |         this._ignoreSslError = false; | ||||||
|  |         this._allowRedirects = true; | ||||||
|  |         this._allowRedirectDowngrade = false; | ||||||
|  |         this._maxRedirects = 50; | ||||||
|  |         this._allowRetries = false; | ||||||
|  |         this._maxRetries = 1; | ||||||
|  |         this._keepAlive = false; | ||||||
|  |         this._disposed = false; | ||||||
|  |         this.userAgent = userAgent; | ||||||
|  |         this.handlers = handlers || []; | ||||||
|  |         this.requestOptions = requestOptions; | ||||||
|  |         if (requestOptions) { | ||||||
|  |             if (requestOptions.ignoreSslError != null) { | ||||||
|  |                 this._ignoreSslError = requestOptions.ignoreSslError; | ||||||
|  |             } | ||||||
|  |             this._socketTimeout = requestOptions.socketTimeout; | ||||||
|  |             if (requestOptions.allowRedirects != null) { | ||||||
|  |                 this._allowRedirects = requestOptions.allowRedirects; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.allowRedirectDowngrade != null) { | ||||||
|  |                 this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.maxRedirects != null) { | ||||||
|  |                 this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); | ||||||
|  |             } | ||||||
|  |             if (requestOptions.keepAlive != null) { | ||||||
|  |                 this._keepAlive = requestOptions.keepAlive; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.allowRetries != null) { | ||||||
|  |                 this._allowRetries = requestOptions.allowRetries; | ||||||
|  |             } | ||||||
|  |             if (requestOptions.maxRetries != null) { | ||||||
|  |                 this._maxRetries = requestOptions.maxRetries; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     options(requestUrl, additionalHeaders) { | ||||||
|  |         return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     get(requestUrl, additionalHeaders) { | ||||||
|  |         return this.request('GET', requestUrl, null, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     del(requestUrl, additionalHeaders) { | ||||||
|  |         return this.request('DELETE', requestUrl, null, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     post(requestUrl, data, additionalHeaders) { | ||||||
|  |         return this.request('POST', requestUrl, data, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     patch(requestUrl, data, additionalHeaders) { | ||||||
|  |         return this.request('PATCH', requestUrl, data, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     put(requestUrl, data, additionalHeaders) { | ||||||
|  |         return this.request('PUT', requestUrl, data, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     head(requestUrl, additionalHeaders) { | ||||||
|  |         return this.request('HEAD', requestUrl, null, additionalHeaders || {}); | ||||||
|  |     } | ||||||
|  |     sendStream(verb, requestUrl, stream, additionalHeaders) { | ||||||
|  |         return this.request(verb, requestUrl, stream, additionalHeaders); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Gets a typed object from an endpoint | ||||||
|  |      * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise | ||||||
|  |      */ | ||||||
|  |     async getJson(requestUrl, additionalHeaders = {}) { | ||||||
|  |         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |         let res = await this.get(requestUrl, additionalHeaders); | ||||||
|  |         return this._processResponse(res, this.requestOptions); | ||||||
|  |     } | ||||||
|  |     async postJson(requestUrl, obj, additionalHeaders = {}) { | ||||||
|  |         let data = JSON.stringify(obj, null, 2); | ||||||
|  |         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||||
|  |         let res = await this.post(requestUrl, data, additionalHeaders); | ||||||
|  |         return this._processResponse(res, this.requestOptions); | ||||||
|  |     } | ||||||
|  |     async putJson(requestUrl, obj, additionalHeaders = {}) { | ||||||
|  |         let data = JSON.stringify(obj, null, 2); | ||||||
|  |         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||||
|  |         let res = await this.put(requestUrl, data, additionalHeaders); | ||||||
|  |         return this._processResponse(res, this.requestOptions); | ||||||
|  |     } | ||||||
|  |     async patchJson(requestUrl, obj, additionalHeaders = {}) { | ||||||
|  |         let data = JSON.stringify(obj, null, 2); | ||||||
|  |         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); | ||||||
|  |         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); | ||||||
|  |         let res = await this.patch(requestUrl, data, additionalHeaders); | ||||||
|  |         return this._processResponse(res, this.requestOptions); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Makes a raw http request. | ||||||
|  |      * All other methods such as get, post, patch, and request ultimately call this. | ||||||
|  |      * Prefer get, del, post and patch | ||||||
|  |      */ | ||||||
|  |     async request(verb, requestUrl, data, headers) { | ||||||
|  |         if (this._disposed) { | ||||||
|  |             throw new Error('Client has already been disposed.'); | ||||||
|  |         } | ||||||
|  |         let parsedUrl = new URL(requestUrl); | ||||||
|  |         let info = this._prepareRequest(verb, parsedUrl, headers); | ||||||
|  |         // Only perform retries on reads since writes may not be idempotent.
 | ||||||
|  |         let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 | ||||||
|  |             ? this._maxRetries + 1 | ||||||
|  |             : 1; | ||||||
|  |         let numTries = 0; | ||||||
|  |         let response; | ||||||
|  |         while (numTries < maxTries) { | ||||||
|  |             response = await this.requestRaw(info, data); | ||||||
|  |             // Check if it's an authentication challenge
 | ||||||
|  |             if (response && | ||||||
|  |                 response.message && | ||||||
|  |                 response.message.statusCode === HttpCodes.Unauthorized) { | ||||||
|  |                 let authenticationHandler; | ||||||
|  |                 for (let i = 0; i < this.handlers.length; i++) { | ||||||
|  |                     if (this.handlers[i].canHandleAuthentication(response)) { | ||||||
|  |                         authenticationHandler = this.handlers[i]; | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 if (authenticationHandler) { | ||||||
|  |                     return authenticationHandler.handleAuthentication(this, info, data); | ||||||
|  |                 } | ||||||
|  |                 else { | ||||||
|  |                     // We have received an unauthorized response but have no handlers to handle it.
 | ||||||
|  |                     // Let the response return to the caller.
 | ||||||
|  |                     return response; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             let redirectsRemaining = this._maxRedirects; | ||||||
|  |             while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && | ||||||
|  |                 this._allowRedirects && | ||||||
|  |                 redirectsRemaining > 0) { | ||||||
|  |                 const redirectUrl = response.message.headers['location']; | ||||||
|  |                 if (!redirectUrl) { | ||||||
|  |                     // if there's no location to redirect to, we won't
 | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |                 let parsedRedirectUrl = new URL(redirectUrl); | ||||||
|  |                 if (parsedUrl.protocol == 'https:' && | ||||||
|  |                     parsedUrl.protocol != parsedRedirectUrl.protocol && | ||||||
|  |                     !this._allowRedirectDowngrade) { | ||||||
|  |                     throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); | ||||||
|  |                 } | ||||||
|  |                 // we need to finish reading the response before reassigning response
 | ||||||
|  |                 // which will leak the open socket.
 | ||||||
|  |                 await response.readBody(); | ||||||
|  |                 // strip authorization header if redirected to a different hostname
 | ||||||
|  |                 if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { | ||||||
|  |                     for (let header in headers) { | ||||||
|  |                         // header names are case insensitive
 | ||||||
|  |                         if (header.toLowerCase() === 'authorization') { | ||||||
|  |                             delete headers[header]; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 // let's make the request with the new redirectUrl
 | ||||||
|  |                 info = this._prepareRequest(verb, parsedRedirectUrl, headers); | ||||||
|  |                 response = await this.requestRaw(info, data); | ||||||
|  |                 redirectsRemaining--; | ||||||
|  |             } | ||||||
|  |             if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { | ||||||
|  |                 // If not a retry code, return immediately instead of retrying
 | ||||||
|  |                 return response; | ||||||
|  |             } | ||||||
|  |             numTries += 1; | ||||||
|  |             if (numTries < maxTries) { | ||||||
|  |                 await response.readBody(); | ||||||
|  |                 await this._performExponentialBackoff(numTries); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return response; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Needs to be called if keepAlive is set to true in request options. | ||||||
|  |      */ | ||||||
|  |     dispose() { | ||||||
|  |         if (this._agent) { | ||||||
|  |             this._agent.destroy(); | ||||||
|  |         } | ||||||
|  |         this._disposed = true; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Raw request. | ||||||
|  |      * @param info | ||||||
|  |      * @param data | ||||||
|  |      */ | ||||||
|  |     requestRaw(info, data) { | ||||||
|  |         return new Promise((resolve, reject) => { | ||||||
|  |             let callbackForResult = function (err, res) { | ||||||
|  |                 if (err) { | ||||||
|  |                     reject(err); | ||||||
|  |                 } | ||||||
|  |                 resolve(res); | ||||||
|  |             }; | ||||||
|  |             this.requestRawWithCallback(info, data, callbackForResult); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Raw request with callback. | ||||||
|  |      * @param info | ||||||
|  |      * @param data | ||||||
|  |      * @param onResult | ||||||
|  |      */ | ||||||
|  |     requestRawWithCallback(info, data, onResult) { | ||||||
|  |         let socket; | ||||||
|  |         if (typeof data === 'string') { | ||||||
|  |             info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); | ||||||
|  |         } | ||||||
|  |         let callbackCalled = false; | ||||||
|  |         let handleResult = (err, res) => { | ||||||
|  |             if (!callbackCalled) { | ||||||
|  |                 callbackCalled = true; | ||||||
|  |                 onResult(err, res); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |         let req = info.httpModule.request(info.options, (msg) => { | ||||||
|  |             let res = new HttpClientResponse(msg); | ||||||
|  |             handleResult(null, res); | ||||||
|  |         }); | ||||||
|  |         req.on('socket', sock => { | ||||||
|  |             socket = sock; | ||||||
|  |         }); | ||||||
|  |         // If we ever get disconnected, we want the socket to timeout eventually
 | ||||||
|  |         req.setTimeout(this._socketTimeout || 3 * 60000, () => { | ||||||
|  |             if (socket) { | ||||||
|  |                 socket.end(); | ||||||
|  |             } | ||||||
|  |             handleResult(new Error('Request timeout: ' + info.options.path), null); | ||||||
|  |         }); | ||||||
|  |         req.on('error', function (err) { | ||||||
|  |             // err has statusCode property
 | ||||||
|  |             // res should have headers
 | ||||||
|  |             handleResult(err, null); | ||||||
|  |         }); | ||||||
|  |         if (data && typeof data === 'string') { | ||||||
|  |             req.write(data, 'utf8'); | ||||||
|  |         } | ||||||
|  |         if (data && typeof data !== 'string') { | ||||||
|  |             data.on('close', function () { | ||||||
|  |                 req.end(); | ||||||
|  |             }); | ||||||
|  |             data.pipe(req); | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             req.end(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Gets an http agent. This function is useful when you need an http agent that handles | ||||||
|  |      * routing through a proxy server - depending upon the url and proxy environment variables. | ||||||
|  |      * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | ||||||
|  |      */ | ||||||
|  |     getAgent(serverUrl) { | ||||||
|  |         let parsedUrl = new URL(serverUrl); | ||||||
|  |         return this._getAgent(parsedUrl); | ||||||
|  |     } | ||||||
|  |     _prepareRequest(method, requestUrl, headers) { | ||||||
|  |         const info = {}; | ||||||
|  |         info.parsedUrl = requestUrl; | ||||||
|  |         const usingSsl = info.parsedUrl.protocol === 'https:'; | ||||||
|  |         info.httpModule = usingSsl ? https : http; | ||||||
|  |         const defaultPort = usingSsl ? 443 : 80; | ||||||
|  |         info.options = {}; | ||||||
|  |         info.options.host = info.parsedUrl.hostname; | ||||||
|  |         info.options.port = info.parsedUrl.port | ||||||
|  |             ? parseInt(info.parsedUrl.port) | ||||||
|  |             : defaultPort; | ||||||
|  |         info.options.path = | ||||||
|  |             (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); | ||||||
|  |         info.options.method = method; | ||||||
|  |         info.options.headers = this._mergeHeaders(headers); | ||||||
|  |         if (this.userAgent != null) { | ||||||
|  |             info.options.headers['user-agent'] = this.userAgent; | ||||||
|  |         } | ||||||
|  |         info.options.agent = this._getAgent(info.parsedUrl); | ||||||
|  |         // gives handlers an opportunity to participate
 | ||||||
|  |         if (this.handlers) { | ||||||
|  |             this.handlers.forEach(handler => { | ||||||
|  |                 handler.prepareRequest(info.options); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         return info; | ||||||
|  |     } | ||||||
|  |     _mergeHeaders(headers) { | ||||||
|  |         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); | ||||||
|  |         if (this.requestOptions && this.requestOptions.headers) { | ||||||
|  |             return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); | ||||||
|  |         } | ||||||
|  |         return lowercaseKeys(headers || {}); | ||||||
|  |     } | ||||||
|  |     _getExistingOrDefaultHeader(additionalHeaders, header, _default) { | ||||||
|  |         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); | ||||||
|  |         let clientHeader; | ||||||
|  |         if (this.requestOptions && this.requestOptions.headers) { | ||||||
|  |             clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; | ||||||
|  |         } | ||||||
|  |         return additionalHeaders[header] || clientHeader || _default; | ||||||
|  |     } | ||||||
|  |     _getAgent(parsedUrl) { | ||||||
|  |         let agent; | ||||||
|  |         let proxyUrl = pm.getProxyUrl(parsedUrl); | ||||||
|  |         let useProxy = proxyUrl && proxyUrl.hostname; | ||||||
|  |         if (this._keepAlive && useProxy) { | ||||||
|  |             agent = this._proxyAgent; | ||||||
|  |         } | ||||||
|  |         if (this._keepAlive && !useProxy) { | ||||||
|  |             agent = this._agent; | ||||||
|  |         } | ||||||
|  |         // if agent is already assigned use that agent.
 | ||||||
|  |         if (!!agent) { | ||||||
|  |             return agent; | ||||||
|  |         } | ||||||
|  |         const usingSsl = parsedUrl.protocol === 'https:'; | ||||||
|  |         let maxSockets = 100; | ||||||
|  |         if (!!this.requestOptions) { | ||||||
|  |             maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; | ||||||
|  |         } | ||||||
|  |         if (useProxy) { | ||||||
|  |             // If using proxy, need tunnel
 | ||||||
|  |             if (!tunnel) { | ||||||
|  |                 tunnel = __nccwpck_require__(4294); | ||||||
|  |             } | ||||||
|  |             const agentOptions = { | ||||||
|  |                 maxSockets: maxSockets, | ||||||
|  |                 keepAlive: this._keepAlive, | ||||||
|  |                 proxy: { | ||||||
|  |                     ...((proxyUrl.username || proxyUrl.password) && { | ||||||
|  |                         proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` | ||||||
|  |                     }), | ||||||
|  |                     host: proxyUrl.hostname, | ||||||
|  |                     port: proxyUrl.port | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  |             let tunnelAgent; | ||||||
|  |             const overHttps = proxyUrl.protocol === 'https:'; | ||||||
|  |             if (usingSsl) { | ||||||
|  |                 tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; | ||||||
|  |             } | ||||||
|  |             agent = tunnelAgent(agentOptions); | ||||||
|  |             this._proxyAgent = agent; | ||||||
|  |         } | ||||||
|  |         // if reusing agent across request and tunneling agent isn't assigned create a new agent
 | ||||||
|  |         if (this._keepAlive && !agent) { | ||||||
|  |             const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; | ||||||
|  |             agent = usingSsl ? new https.Agent(options) : new http.Agent(options); | ||||||
|  |             this._agent = agent; | ||||||
|  |         } | ||||||
|  |         // if not using private agent and tunnel agent isn't setup then use global agent
 | ||||||
|  |         if (!agent) { | ||||||
|  |             agent = usingSsl ? https.globalAgent : http.globalAgent; | ||||||
|  |         } | ||||||
|  |         if (usingSsl && this._ignoreSslError) { | ||||||
|  |             // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
 | ||||||
|  |             // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
 | ||||||
|  |             // we have to cast it to any and change it directly
 | ||||||
|  |             agent.options = Object.assign(agent.options || {}, { | ||||||
|  |                 rejectUnauthorized: false | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         return agent; | ||||||
|  |     } | ||||||
|  |     _performExponentialBackoff(retryNumber) { | ||||||
|  |         retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); | ||||||
|  |         const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); | ||||||
|  |         return new Promise(resolve => setTimeout(() => resolve(), ms)); | ||||||
|  |     } | ||||||
|  |     static dateTimeDeserializer(key, value) { | ||||||
|  |         if (typeof value === 'string') { | ||||||
|  |             let a = new Date(value); | ||||||
|  |             if (!isNaN(a.valueOf())) { | ||||||
|  |                 return a; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return value; | ||||||
|  |     } | ||||||
|  |     async _processResponse(res, options) { | ||||||
|  |         return new Promise(async (resolve, reject) => { | ||||||
|  |             const statusCode = res.message.statusCode; | ||||||
|  |             const response = { | ||||||
|  |                 statusCode: statusCode, | ||||||
|  |                 result: null, | ||||||
|  |                 headers: {} | ||||||
|  |             }; | ||||||
|  |             // not found leads to null obj returned
 | ||||||
|  |             if (statusCode == HttpCodes.NotFound) { | ||||||
|  |                 resolve(response); | ||||||
|  |             } | ||||||
|  |             let obj; | ||||||
|  |             let contents; | ||||||
|  |             // get the result from the body
 | ||||||
|  |             try { | ||||||
|  |                 contents = await res.readBody(); | ||||||
|  |                 if (contents && contents.length > 0) { | ||||||
|  |                     if (options && options.deserializeDates) { | ||||||
|  |                         obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); | ||||||
|  |                     } | ||||||
|  |                     else { | ||||||
|  |                         obj = JSON.parse(contents); | ||||||
|  |                     } | ||||||
|  |                     response.result = obj; | ||||||
|  |                 } | ||||||
|  |                 response.headers = res.message.headers; | ||||||
|  |             } | ||||||
|  |             catch (err) { | ||||||
|  |                 // Invalid resource (contents not json);  leaving result obj null
 | ||||||
|  |             } | ||||||
|  |             // note that 3xx redirects are handled by the http layer.
 | ||||||
|  |             if (statusCode > 299) { | ||||||
|  |                 let msg; | ||||||
|  |                 // if exception/error in body, attempt to get better error
 | ||||||
|  |                 if (obj && obj.message) { | ||||||
|  |                     msg = obj.message; | ||||||
|  |                 } | ||||||
|  |                 else if (contents && contents.length > 0) { | ||||||
|  |                     // it may be the case that the exception is in the body message as string
 | ||||||
|  |                     msg = contents; | ||||||
|  |                 } | ||||||
|  |                 else { | ||||||
|  |                     msg = 'Failed request: (' + statusCode + ')'; | ||||||
|  |                 } | ||||||
|  |                 let err = new HttpClientError(msg, statusCode); | ||||||
|  |                 err.result = response.result; | ||||||
|  |                 reject(err); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 resolve(response); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClient = HttpClient; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 6443: | ||||||
|  | /***/ ((__unused_webpack_module, exports) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | function getProxyUrl(reqUrl) { | ||||||
|  |     let usingSsl = reqUrl.protocol === 'https:'; | ||||||
|  |     let proxyUrl; | ||||||
|  |     if (checkBypass(reqUrl)) { | ||||||
|  |         return proxyUrl; | ||||||
|  |     } | ||||||
|  |     let proxyVar; | ||||||
|  |     if (usingSsl) { | ||||||
|  |         proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; | ||||||
|  |     } | ||||||
|  |     if (proxyVar) { | ||||||
|  |         proxyUrl = new URL(proxyVar); | ||||||
|  |     } | ||||||
|  |     return proxyUrl; | ||||||
|  | } | ||||||
|  | exports.getProxyUrl = getProxyUrl; | ||||||
|  | function checkBypass(reqUrl) { | ||||||
|  |     if (!reqUrl.hostname) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; | ||||||
|  |     if (!noProxy) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     // Determine the request port
 | ||||||
|  |     let reqPort; | ||||||
|  |     if (reqUrl.port) { | ||||||
|  |         reqPort = Number(reqUrl.port); | ||||||
|  |     } | ||||||
|  |     else if (reqUrl.protocol === 'http:') { | ||||||
|  |         reqPort = 80; | ||||||
|  |     } | ||||||
|  |     else if (reqUrl.protocol === 'https:') { | ||||||
|  |         reqPort = 443; | ||||||
|  |     } | ||||||
|  |     // Format the request hostname and hostname with port
 | ||||||
|  |     let upperReqHosts = [reqUrl.hostname.toUpperCase()]; | ||||||
|  |     if (typeof reqPort === 'number') { | ||||||
|  |         upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); | ||||||
|  |     } | ||||||
|  |     // Compare request host against noproxy
 | ||||||
|  |     for (let upperNoProxyItem of noProxy | ||||||
|  |         .split(',') | ||||||
|  |         .map(x => x.trim().toUpperCase()) | ||||||
|  |         .filter(x => x)) { | ||||||
|  |         if (upperReqHosts.some(x => x === upperNoProxyItem)) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return false; | ||||||
|  | } | ||||||
|  | exports.checkBypass = checkBypass; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 1962: | /***/ 1962: | ||||||
|  | |||||||
							
								
								
									
										1475
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1475
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -912,7 +912,7 @@ var __importStar = (this && this.__importStar) || function (mod) { | |||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const http_client_1 = __nccwpck_require__(1825); | const http_client_1 = __nccwpck_require__(9925); | ||||||
| const constants_1 = __nccwpck_require__(8840); | const constants_1 = __nccwpck_require__(8840); | ||||||
| function isSuccessStatusCode(statusCode) { | function isSuccessStatusCode(statusCode) { | ||||||
|     if (!statusCode) { |     if (!statusCode) { | ||||||
| @ -2321,774 +2321,6 @@ exports.SearchState = SearchState; | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 2001: |  | ||||||
| /***/ (function(__unused_webpack_module, exports) { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| 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.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; |  | ||||||
| class BasicCredentialHandler { |  | ||||||
|     constructor(username, password) { |  | ||||||
|         this.username = username; |  | ||||||
|         this.password = password; |  | ||||||
|     } |  | ||||||
|     prepareRequest(options) { |  | ||||||
|         if (!options.headers) { |  | ||||||
|             throw Error('The request has no headers'); |  | ||||||
|         } |  | ||||||
|         options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; |  | ||||||
|     } |  | ||||||
|     // This handler cannot handle 401
 |  | ||||||
|     canHandleAuthentication() { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     handleAuthentication() { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             throw new Error('not implemented'); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.BasicCredentialHandler = BasicCredentialHandler; |  | ||||||
| class BearerCredentialHandler { |  | ||||||
|     constructor(token) { |  | ||||||
|         this.token = token; |  | ||||||
|     } |  | ||||||
|     // currently implements pre-authorization
 |  | ||||||
|     // TODO: support preAuth = false where it hooks on 401
 |  | ||||||
|     prepareRequest(options) { |  | ||||||
|         if (!options.headers) { |  | ||||||
|             throw Error('The request has no headers'); |  | ||||||
|         } |  | ||||||
|         options.headers['Authorization'] = `Bearer ${this.token}`; |  | ||||||
|     } |  | ||||||
|     // This handler cannot handle 401
 |  | ||||||
|     canHandleAuthentication() { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     handleAuthentication() { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             throw new Error('not implemented'); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.BearerCredentialHandler = BearerCredentialHandler; |  | ||||||
| class PersonalAccessTokenCredentialHandler { |  | ||||||
|     constructor(token) { |  | ||||||
|         this.token = token; |  | ||||||
|     } |  | ||||||
|     // currently implements pre-authorization
 |  | ||||||
|     // TODO: support preAuth = false where it hooks on 401
 |  | ||||||
|     prepareRequest(options) { |  | ||||||
|         if (!options.headers) { |  | ||||||
|             throw Error('The request has no headers'); |  | ||||||
|         } |  | ||||||
|         options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; |  | ||||||
|     } |  | ||||||
|     // This handler cannot handle 401
 |  | ||||||
|     canHandleAuthentication() { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     handleAuthentication() { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             throw new Error('not implemented'); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; |  | ||||||
| //# sourceMappingURL=auth.js.map
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 1825: |  | ||||||
| /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| /* eslint-disable @typescript-eslint/no-explicit-any */ |  | ||||||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { |  | ||||||
|     if (k2 === undefined) k2 = k; |  | ||||||
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); |  | ||||||
| }) : (function(o, m, k, k2) { |  | ||||||
|     if (k2 === undefined) k2 = k; |  | ||||||
|     o[k2] = m[k]; |  | ||||||
| })); |  | ||||||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { |  | ||||||
|     Object.defineProperty(o, "default", { enumerable: true, value: v }); |  | ||||||
| }) : function(o, v) { |  | ||||||
|     o["default"] = v; |  | ||||||
| }); |  | ||||||
| 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.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.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; |  | ||||||
| const http = __importStar(__nccwpck_require__(3685)); |  | ||||||
| const https = __importStar(__nccwpck_require__(5687)); |  | ||||||
| const pm = __importStar(__nccwpck_require__(4977)); |  | ||||||
| const tunnel = __importStar(__nccwpck_require__(4294)); |  | ||||||
| var HttpCodes; |  | ||||||
| (function (HttpCodes) { |  | ||||||
|     HttpCodes[HttpCodes["OK"] = 200] = "OK"; |  | ||||||
|     HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; |  | ||||||
|     HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; |  | ||||||
|     HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; |  | ||||||
|     HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; |  | ||||||
|     HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; |  | ||||||
|     HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; |  | ||||||
|     HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; |  | ||||||
|     HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; |  | ||||||
|     HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; |  | ||||||
|     HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; |  | ||||||
|     HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; |  | ||||||
|     HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; |  | ||||||
|     HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; |  | ||||||
|     HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; |  | ||||||
|     HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; |  | ||||||
|     HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; |  | ||||||
|     HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; |  | ||||||
|     HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; |  | ||||||
|     HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; |  | ||||||
|     HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; |  | ||||||
|     HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; |  | ||||||
|     HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; |  | ||||||
|     HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; |  | ||||||
|     HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; |  | ||||||
|     HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; |  | ||||||
|     HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; |  | ||||||
| })(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); |  | ||||||
| var Headers; |  | ||||||
| (function (Headers) { |  | ||||||
|     Headers["Accept"] = "accept"; |  | ||||||
|     Headers["ContentType"] = "content-type"; |  | ||||||
| })(Headers = exports.Headers || (exports.Headers = {})); |  | ||||||
| var MediaTypes; |  | ||||||
| (function (MediaTypes) { |  | ||||||
|     MediaTypes["ApplicationJson"] = "application/json"; |  | ||||||
| })(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); |  | ||||||
| /** |  | ||||||
|  * Returns the proxy URL, depending upon the supplied url and proxy environment variables. |  | ||||||
|  * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 |  | ||||||
|  */ |  | ||||||
| function getProxyUrl(serverUrl) { |  | ||||||
|     const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); |  | ||||||
|     return proxyUrl ? proxyUrl.href : ''; |  | ||||||
| } |  | ||||||
| exports.getProxyUrl = getProxyUrl; |  | ||||||
| const HttpRedirectCodes = [ |  | ||||||
|     HttpCodes.MovedPermanently, |  | ||||||
|     HttpCodes.ResourceMoved, |  | ||||||
|     HttpCodes.SeeOther, |  | ||||||
|     HttpCodes.TemporaryRedirect, |  | ||||||
|     HttpCodes.PermanentRedirect |  | ||||||
| ]; |  | ||||||
| const HttpResponseRetryCodes = [ |  | ||||||
|     HttpCodes.BadGateway, |  | ||||||
|     HttpCodes.ServiceUnavailable, |  | ||||||
|     HttpCodes.GatewayTimeout |  | ||||||
| ]; |  | ||||||
| const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; |  | ||||||
| const ExponentialBackoffCeiling = 10; |  | ||||||
| const ExponentialBackoffTimeSlice = 5; |  | ||||||
| class HttpClientError extends Error { |  | ||||||
|     constructor(message, statusCode) { |  | ||||||
|         super(message); |  | ||||||
|         this.name = 'HttpClientError'; |  | ||||||
|         this.statusCode = statusCode; |  | ||||||
|         Object.setPrototypeOf(this, HttpClientError.prototype); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.HttpClientError = HttpClientError; |  | ||||||
| class HttpClientResponse { |  | ||||||
|     constructor(message) { |  | ||||||
|         this.message = message; |  | ||||||
|     } |  | ||||||
|     readBody() { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { |  | ||||||
|                 let output = Buffer.alloc(0); |  | ||||||
|                 this.message.on('data', (chunk) => { |  | ||||||
|                     output = Buffer.concat([output, chunk]); |  | ||||||
|                 }); |  | ||||||
|                 this.message.on('end', () => { |  | ||||||
|                     resolve(output.toString()); |  | ||||||
|                 }); |  | ||||||
|             })); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.HttpClientResponse = HttpClientResponse; |  | ||||||
| function isHttps(requestUrl) { |  | ||||||
|     const parsedUrl = new URL(requestUrl); |  | ||||||
|     return parsedUrl.protocol === 'https:'; |  | ||||||
| } |  | ||||||
| exports.isHttps = isHttps; |  | ||||||
| class HttpClient { |  | ||||||
|     constructor(userAgent, handlers, requestOptions) { |  | ||||||
|         this._ignoreSslError = false; |  | ||||||
|         this._allowRedirects = true; |  | ||||||
|         this._allowRedirectDowngrade = false; |  | ||||||
|         this._maxRedirects = 50; |  | ||||||
|         this._allowRetries = false; |  | ||||||
|         this._maxRetries = 1; |  | ||||||
|         this._keepAlive = false; |  | ||||||
|         this._disposed = false; |  | ||||||
|         this.userAgent = userAgent; |  | ||||||
|         this.handlers = handlers || []; |  | ||||||
|         this.requestOptions = requestOptions; |  | ||||||
|         if (requestOptions) { |  | ||||||
|             if (requestOptions.ignoreSslError != null) { |  | ||||||
|                 this._ignoreSslError = requestOptions.ignoreSslError; |  | ||||||
|             } |  | ||||||
|             this._socketTimeout = requestOptions.socketTimeout; |  | ||||||
|             if (requestOptions.allowRedirects != null) { |  | ||||||
|                 this._allowRedirects = requestOptions.allowRedirects; |  | ||||||
|             } |  | ||||||
|             if (requestOptions.allowRedirectDowngrade != null) { |  | ||||||
|                 this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; |  | ||||||
|             } |  | ||||||
|             if (requestOptions.maxRedirects != null) { |  | ||||||
|                 this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); |  | ||||||
|             } |  | ||||||
|             if (requestOptions.keepAlive != null) { |  | ||||||
|                 this._keepAlive = requestOptions.keepAlive; |  | ||||||
|             } |  | ||||||
|             if (requestOptions.allowRetries != null) { |  | ||||||
|                 this._allowRetries = requestOptions.allowRetries; |  | ||||||
|             } |  | ||||||
|             if (requestOptions.maxRetries != null) { |  | ||||||
|                 this._maxRetries = requestOptions.maxRetries; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     options(requestUrl, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     get(requestUrl, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('GET', requestUrl, null, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     del(requestUrl, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('DELETE', requestUrl, null, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     post(requestUrl, data, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('POST', requestUrl, data, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     patch(requestUrl, data, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('PATCH', requestUrl, data, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     put(requestUrl, data, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('PUT', requestUrl, data, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     head(requestUrl, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request('HEAD', requestUrl, null, additionalHeaders || {}); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     sendStream(verb, requestUrl, stream, additionalHeaders) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return this.request(verb, requestUrl, stream, additionalHeaders); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Gets a typed object from an endpoint |  | ||||||
|      * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise |  | ||||||
|      */ |  | ||||||
|     getJson(requestUrl, additionalHeaders = {}) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); |  | ||||||
|             const res = yield this.get(requestUrl, additionalHeaders); |  | ||||||
|             return this._processResponse(res, this.requestOptions); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     postJson(requestUrl, obj, additionalHeaders = {}) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             const data = JSON.stringify(obj, null, 2); |  | ||||||
|             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); |  | ||||||
|             additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); |  | ||||||
|             const res = yield this.post(requestUrl, data, additionalHeaders); |  | ||||||
|             return this._processResponse(res, this.requestOptions); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     putJson(requestUrl, obj, additionalHeaders = {}) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             const data = JSON.stringify(obj, null, 2); |  | ||||||
|             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); |  | ||||||
|             additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); |  | ||||||
|             const res = yield this.put(requestUrl, data, additionalHeaders); |  | ||||||
|             return this._processResponse(res, this.requestOptions); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     patchJson(requestUrl, obj, additionalHeaders = {}) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             const data = JSON.stringify(obj, null, 2); |  | ||||||
|             additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); |  | ||||||
|             additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); |  | ||||||
|             const res = yield this.patch(requestUrl, data, additionalHeaders); |  | ||||||
|             return this._processResponse(res, this.requestOptions); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Makes a raw http request. |  | ||||||
|      * All other methods such as get, post, patch, and request ultimately call this. |  | ||||||
|      * Prefer get, del, post and patch |  | ||||||
|      */ |  | ||||||
|     request(verb, requestUrl, data, headers) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             if (this._disposed) { |  | ||||||
|                 throw new Error('Client has already been disposed.'); |  | ||||||
|             } |  | ||||||
|             const parsedUrl = new URL(requestUrl); |  | ||||||
|             let info = this._prepareRequest(verb, parsedUrl, headers); |  | ||||||
|             // Only perform retries on reads since writes may not be idempotent.
 |  | ||||||
|             const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) |  | ||||||
|                 ? this._maxRetries + 1 |  | ||||||
|                 : 1; |  | ||||||
|             let numTries = 0; |  | ||||||
|             let response; |  | ||||||
|             do { |  | ||||||
|                 response = yield this.requestRaw(info, data); |  | ||||||
|                 // Check if it's an authentication challenge
 |  | ||||||
|                 if (response && |  | ||||||
|                     response.message && |  | ||||||
|                     response.message.statusCode === HttpCodes.Unauthorized) { |  | ||||||
|                     let authenticationHandler; |  | ||||||
|                     for (const handler of this.handlers) { |  | ||||||
|                         if (handler.canHandleAuthentication(response)) { |  | ||||||
|                             authenticationHandler = handler; |  | ||||||
|                             break; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                     if (authenticationHandler) { |  | ||||||
|                         return authenticationHandler.handleAuthentication(this, info, data); |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         // We have received an unauthorized response but have no handlers to handle it.
 |  | ||||||
|                         // Let the response return to the caller.
 |  | ||||||
|                         return response; |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 let redirectsRemaining = this._maxRedirects; |  | ||||||
|                 while (response.message.statusCode && |  | ||||||
|                     HttpRedirectCodes.includes(response.message.statusCode) && |  | ||||||
|                     this._allowRedirects && |  | ||||||
|                     redirectsRemaining > 0) { |  | ||||||
|                     const redirectUrl = response.message.headers['location']; |  | ||||||
|                     if (!redirectUrl) { |  | ||||||
|                         // if there's no location to redirect to, we won't
 |  | ||||||
|                         break; |  | ||||||
|                     } |  | ||||||
|                     const parsedRedirectUrl = new URL(redirectUrl); |  | ||||||
|                     if (parsedUrl.protocol === 'https:' && |  | ||||||
|                         parsedUrl.protocol !== parsedRedirectUrl.protocol && |  | ||||||
|                         !this._allowRedirectDowngrade) { |  | ||||||
|                         throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); |  | ||||||
|                     } |  | ||||||
|                     // we need to finish reading the response before reassigning response
 |  | ||||||
|                     // which will leak the open socket.
 |  | ||||||
|                     yield response.readBody(); |  | ||||||
|                     // strip authorization header if redirected to a different hostname
 |  | ||||||
|                     if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { |  | ||||||
|                         for (const header in headers) { |  | ||||||
|                             // header names are case insensitive
 |  | ||||||
|                             if (header.toLowerCase() === 'authorization') { |  | ||||||
|                                 delete headers[header]; |  | ||||||
|                             } |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                     // let's make the request with the new redirectUrl
 |  | ||||||
|                     info = this._prepareRequest(verb, parsedRedirectUrl, headers); |  | ||||||
|                     response = yield this.requestRaw(info, data); |  | ||||||
|                     redirectsRemaining--; |  | ||||||
|                 } |  | ||||||
|                 if (!response.message.statusCode || |  | ||||||
|                     !HttpResponseRetryCodes.includes(response.message.statusCode)) { |  | ||||||
|                     // If not a retry code, return immediately instead of retrying
 |  | ||||||
|                     return response; |  | ||||||
|                 } |  | ||||||
|                 numTries += 1; |  | ||||||
|                 if (numTries < maxTries) { |  | ||||||
|                     yield response.readBody(); |  | ||||||
|                     yield this._performExponentialBackoff(numTries); |  | ||||||
|                 } |  | ||||||
|             } while (numTries < maxTries); |  | ||||||
|             return response; |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Needs to be called if keepAlive is set to true in request options. |  | ||||||
|      */ |  | ||||||
|     dispose() { |  | ||||||
|         if (this._agent) { |  | ||||||
|             this._agent.destroy(); |  | ||||||
|         } |  | ||||||
|         this._disposed = true; |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Raw request. |  | ||||||
|      * @param info |  | ||||||
|      * @param data |  | ||||||
|      */ |  | ||||||
|     requestRaw(info, data) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return new Promise((resolve, reject) => { |  | ||||||
|                 function callbackForResult(err, res) { |  | ||||||
|                     if (err) { |  | ||||||
|                         reject(err); |  | ||||||
|                     } |  | ||||||
|                     else if (!res) { |  | ||||||
|                         // If `err` is not passed, then `res` must be passed.
 |  | ||||||
|                         reject(new Error('Unknown error')); |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         resolve(res); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|                 this.requestRawWithCallback(info, data, callbackForResult); |  | ||||||
|             }); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Raw request with callback. |  | ||||||
|      * @param info |  | ||||||
|      * @param data |  | ||||||
|      * @param onResult |  | ||||||
|      */ |  | ||||||
|     requestRawWithCallback(info, data, onResult) { |  | ||||||
|         if (typeof data === 'string') { |  | ||||||
|             if (!info.options.headers) { |  | ||||||
|                 info.options.headers = {}; |  | ||||||
|             } |  | ||||||
|             info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); |  | ||||||
|         } |  | ||||||
|         let callbackCalled = false; |  | ||||||
|         function handleResult(err, res) { |  | ||||||
|             if (!callbackCalled) { |  | ||||||
|                 callbackCalled = true; |  | ||||||
|                 onResult(err, res); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         const req = info.httpModule.request(info.options, (msg) => { |  | ||||||
|             const res = new HttpClientResponse(msg); |  | ||||||
|             handleResult(undefined, res); |  | ||||||
|         }); |  | ||||||
|         let socket; |  | ||||||
|         req.on('socket', sock => { |  | ||||||
|             socket = sock; |  | ||||||
|         }); |  | ||||||
|         // If we ever get disconnected, we want the socket to timeout eventually
 |  | ||||||
|         req.setTimeout(this._socketTimeout || 3 * 60000, () => { |  | ||||||
|             if (socket) { |  | ||||||
|                 socket.end(); |  | ||||||
|             } |  | ||||||
|             handleResult(new Error(`Request timeout: ${info.options.path}`)); |  | ||||||
|         }); |  | ||||||
|         req.on('error', function (err) { |  | ||||||
|             // err has statusCode property
 |  | ||||||
|             // res should have headers
 |  | ||||||
|             handleResult(err); |  | ||||||
|         }); |  | ||||||
|         if (data && typeof data === 'string') { |  | ||||||
|             req.write(data, 'utf8'); |  | ||||||
|         } |  | ||||||
|         if (data && typeof data !== 'string') { |  | ||||||
|             data.on('close', function () { |  | ||||||
|                 req.end(); |  | ||||||
|             }); |  | ||||||
|             data.pipe(req); |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             req.end(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     /** |  | ||||||
|      * Gets an http agent. This function is useful when you need an http agent that handles |  | ||||||
|      * routing through a proxy server - depending upon the url and proxy environment variables. |  | ||||||
|      * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 |  | ||||||
|      */ |  | ||||||
|     getAgent(serverUrl) { |  | ||||||
|         const parsedUrl = new URL(serverUrl); |  | ||||||
|         return this._getAgent(parsedUrl); |  | ||||||
|     } |  | ||||||
|     _prepareRequest(method, requestUrl, headers) { |  | ||||||
|         const info = {}; |  | ||||||
|         info.parsedUrl = requestUrl; |  | ||||||
|         const usingSsl = info.parsedUrl.protocol === 'https:'; |  | ||||||
|         info.httpModule = usingSsl ? https : http; |  | ||||||
|         const defaultPort = usingSsl ? 443 : 80; |  | ||||||
|         info.options = {}; |  | ||||||
|         info.options.host = info.parsedUrl.hostname; |  | ||||||
|         info.options.port = info.parsedUrl.port |  | ||||||
|             ? parseInt(info.parsedUrl.port) |  | ||||||
|             : defaultPort; |  | ||||||
|         info.options.path = |  | ||||||
|             (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); |  | ||||||
|         info.options.method = method; |  | ||||||
|         info.options.headers = this._mergeHeaders(headers); |  | ||||||
|         if (this.userAgent != null) { |  | ||||||
|             info.options.headers['user-agent'] = this.userAgent; |  | ||||||
|         } |  | ||||||
|         info.options.agent = this._getAgent(info.parsedUrl); |  | ||||||
|         // gives handlers an opportunity to participate
 |  | ||||||
|         if (this.handlers) { |  | ||||||
|             for (const handler of this.handlers) { |  | ||||||
|                 handler.prepareRequest(info.options); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return info; |  | ||||||
|     } |  | ||||||
|     _mergeHeaders(headers) { |  | ||||||
|         if (this.requestOptions && this.requestOptions.headers) { |  | ||||||
|             return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); |  | ||||||
|         } |  | ||||||
|         return lowercaseKeys(headers || {}); |  | ||||||
|     } |  | ||||||
|     _getExistingOrDefaultHeader(additionalHeaders, header, _default) { |  | ||||||
|         let clientHeader; |  | ||||||
|         if (this.requestOptions && this.requestOptions.headers) { |  | ||||||
|             clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; |  | ||||||
|         } |  | ||||||
|         return additionalHeaders[header] || clientHeader || _default; |  | ||||||
|     } |  | ||||||
|     _getAgent(parsedUrl) { |  | ||||||
|         let agent; |  | ||||||
|         const proxyUrl = pm.getProxyUrl(parsedUrl); |  | ||||||
|         const useProxy = proxyUrl && proxyUrl.hostname; |  | ||||||
|         if (this._keepAlive && useProxy) { |  | ||||||
|             agent = this._proxyAgent; |  | ||||||
|         } |  | ||||||
|         if (this._keepAlive && !useProxy) { |  | ||||||
|             agent = this._agent; |  | ||||||
|         } |  | ||||||
|         // if agent is already assigned use that agent.
 |  | ||||||
|         if (agent) { |  | ||||||
|             return agent; |  | ||||||
|         } |  | ||||||
|         const usingSsl = parsedUrl.protocol === 'https:'; |  | ||||||
|         let maxSockets = 100; |  | ||||||
|         if (this.requestOptions) { |  | ||||||
|             maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; |  | ||||||
|         } |  | ||||||
|         // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
 |  | ||||||
|         if (proxyUrl && proxyUrl.hostname) { |  | ||||||
|             const agentOptions = { |  | ||||||
|                 maxSockets, |  | ||||||
|                 keepAlive: this._keepAlive, |  | ||||||
|                 proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { |  | ||||||
|                     proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` |  | ||||||
|                 })), { host: proxyUrl.hostname, port: proxyUrl.port }) |  | ||||||
|             }; |  | ||||||
|             let tunnelAgent; |  | ||||||
|             const overHttps = proxyUrl.protocol === 'https:'; |  | ||||||
|             if (usingSsl) { |  | ||||||
|                 tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; |  | ||||||
|             } |  | ||||||
|             agent = tunnelAgent(agentOptions); |  | ||||||
|             this._proxyAgent = agent; |  | ||||||
|         } |  | ||||||
|         // if reusing agent across request and tunneling agent isn't assigned create a new agent
 |  | ||||||
|         if (this._keepAlive && !agent) { |  | ||||||
|             const options = { keepAlive: this._keepAlive, maxSockets }; |  | ||||||
|             agent = usingSsl ? new https.Agent(options) : new http.Agent(options); |  | ||||||
|             this._agent = agent; |  | ||||||
|         } |  | ||||||
|         // if not using private agent and tunnel agent isn't setup then use global agent
 |  | ||||||
|         if (!agent) { |  | ||||||
|             agent = usingSsl ? https.globalAgent : http.globalAgent; |  | ||||||
|         } |  | ||||||
|         if (usingSsl && this._ignoreSslError) { |  | ||||||
|             // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
 |  | ||||||
|             // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
 |  | ||||||
|             // we have to cast it to any and change it directly
 |  | ||||||
|             agent.options = Object.assign(agent.options || {}, { |  | ||||||
|                 rejectUnauthorized: false |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|         return agent; |  | ||||||
|     } |  | ||||||
|     _performExponentialBackoff(retryNumber) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); |  | ||||||
|             const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); |  | ||||||
|             return new Promise(resolve => setTimeout(() => resolve(), ms)); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     _processResponse(res, options) { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { |  | ||||||
|                 const statusCode = res.message.statusCode || 0; |  | ||||||
|                 const response = { |  | ||||||
|                     statusCode, |  | ||||||
|                     result: null, |  | ||||||
|                     headers: {} |  | ||||||
|                 }; |  | ||||||
|                 // not found leads to null obj returned
 |  | ||||||
|                 if (statusCode === HttpCodes.NotFound) { |  | ||||||
|                     resolve(response); |  | ||||||
|                 } |  | ||||||
|                 // get the result from the body
 |  | ||||||
|                 function dateTimeDeserializer(key, value) { |  | ||||||
|                     if (typeof value === 'string') { |  | ||||||
|                         const a = new Date(value); |  | ||||||
|                         if (!isNaN(a.valueOf())) { |  | ||||||
|                             return a; |  | ||||||
|                         } |  | ||||||
|                     } |  | ||||||
|                     return value; |  | ||||||
|                 } |  | ||||||
|                 let obj; |  | ||||||
|                 let contents; |  | ||||||
|                 try { |  | ||||||
|                     contents = yield res.readBody(); |  | ||||||
|                     if (contents && contents.length > 0) { |  | ||||||
|                         if (options && options.deserializeDates) { |  | ||||||
|                             obj = JSON.parse(contents, dateTimeDeserializer); |  | ||||||
|                         } |  | ||||||
|                         else { |  | ||||||
|                             obj = JSON.parse(contents); |  | ||||||
|                         } |  | ||||||
|                         response.result = obj; |  | ||||||
|                     } |  | ||||||
|                     response.headers = res.message.headers; |  | ||||||
|                 } |  | ||||||
|                 catch (err) { |  | ||||||
|                     // Invalid resource (contents not json);  leaving result obj null
 |  | ||||||
|                 } |  | ||||||
|                 // note that 3xx redirects are handled by the http layer.
 |  | ||||||
|                 if (statusCode > 299) { |  | ||||||
|                     let msg; |  | ||||||
|                     // if exception/error in body, attempt to get better error
 |  | ||||||
|                     if (obj && obj.message) { |  | ||||||
|                         msg = obj.message; |  | ||||||
|                     } |  | ||||||
|                     else if (contents && contents.length > 0) { |  | ||||||
|                         // it may be the case that the exception is in the body message as string
 |  | ||||||
|                         msg = contents; |  | ||||||
|                     } |  | ||||||
|                     else { |  | ||||||
|                         msg = `Failed request: (${statusCode})`; |  | ||||||
|                     } |  | ||||||
|                     const err = new HttpClientError(msg, statusCode); |  | ||||||
|                     err.result = response.result; |  | ||||||
|                     reject(err); |  | ||||||
|                 } |  | ||||||
|                 else { |  | ||||||
|                     resolve(response); |  | ||||||
|                 } |  | ||||||
|             })); |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.HttpClient = HttpClient; |  | ||||||
| const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); |  | ||||||
| //# sourceMappingURL=index.js.map
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 4977: |  | ||||||
| /***/ ((__unused_webpack_module, exports) => { |  | ||||||
| 
 |  | ||||||
| "use strict"; |  | ||||||
| 
 |  | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); |  | ||||||
| exports.checkBypass = exports.getProxyUrl = void 0; |  | ||||||
| function getProxyUrl(reqUrl) { |  | ||||||
|     const usingSsl = reqUrl.protocol === 'https:'; |  | ||||||
|     if (checkBypass(reqUrl)) { |  | ||||||
|         return undefined; |  | ||||||
|     } |  | ||||||
|     const proxyVar = (() => { |  | ||||||
|         if (usingSsl) { |  | ||||||
|             return process.env['https_proxy'] || process.env['HTTPS_PROXY']; |  | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             return process.env['http_proxy'] || process.env['HTTP_PROXY']; |  | ||||||
|         } |  | ||||||
|     })(); |  | ||||||
|     if (proxyVar) { |  | ||||||
|         return new URL(proxyVar); |  | ||||||
|     } |  | ||||||
|     else { |  | ||||||
|         return undefined; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| exports.getProxyUrl = getProxyUrl; |  | ||||||
| function checkBypass(reqUrl) { |  | ||||||
|     if (!reqUrl.hostname) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; |  | ||||||
|     if (!noProxy) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     // Determine the request port
 |  | ||||||
|     let reqPort; |  | ||||||
|     if (reqUrl.port) { |  | ||||||
|         reqPort = Number(reqUrl.port); |  | ||||||
|     } |  | ||||||
|     else if (reqUrl.protocol === 'http:') { |  | ||||||
|         reqPort = 80; |  | ||||||
|     } |  | ||||||
|     else if (reqUrl.protocol === 'https:') { |  | ||||||
|         reqPort = 443; |  | ||||||
|     } |  | ||||||
|     // Format the request hostname and hostname with port
 |  | ||||||
|     const upperReqHosts = [reqUrl.hostname.toUpperCase()]; |  | ||||||
|     if (typeof reqPort === 'number') { |  | ||||||
|         upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); |  | ||||||
|     } |  | ||||||
|     // Compare request host against noproxy
 |  | ||||||
|     for (const upperNoProxyItem of noProxy |  | ||||||
|         .split(',') |  | ||||||
|         .map(x => x.trim().toUpperCase()) |  | ||||||
|         .filter(x => x)) { |  | ||||||
|         if (upperReqHosts.some(x => x === upperNoProxyItem)) { |  | ||||||
|             return true; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     return false; |  | ||||||
| } |  | ||||||
| exports.checkBypass = checkBypass; |  | ||||||
| //# sourceMappingURL=proxy.js.map
 |  | ||||||
| 
 |  | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 3771: | /***/ 3771: | ||||||
| /***/ ((module, exports) => { | /***/ ((module, exports) => { | ||||||
| 
 | 
 | ||||||
| @ -4697,14 +3929,27 @@ function coerce (version, options) { | |||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     result["default"] = mod; |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.issue = exports.issueCommand = void 0; | ||||||
| const os = __importStar(__nccwpck_require__(2037)); | const os = __importStar(__nccwpck_require__(2037)); | ||||||
| const utils_1 = __nccwpck_require__(5278); | const utils_1 = __nccwpck_require__(5278); | ||||||
| /** | /** | ||||||
| @ -4783,6 +4028,25 @@ function escapeProperty(s) { | |||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
|  | 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.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|  |     __setModuleDefault(result, mod); | ||||||
|  |     return result; | ||||||
|  | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
| @ -4792,19 +4056,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { |  | ||||||
|     if (mod && mod.__esModule) return mod; |  | ||||||
|     var result = {}; |  | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |  | ||||||
|     result["default"] = mod; |  | ||||||
|     return result; |  | ||||||
| }; |  | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; | ||||||
| const command_1 = __nccwpck_require__(7351); | const command_1 = __nccwpck_require__(7351); | ||||||
| const file_command_1 = __nccwpck_require__(717); | const file_command_1 = __nccwpck_require__(717); | ||||||
| const utils_1 = __nccwpck_require__(5278); | const utils_1 = __nccwpck_require__(5278); | ||||||
| const os = __importStar(__nccwpck_require__(2037)); | const os = __importStar(__nccwpck_require__(2037)); | ||||||
| const path = __importStar(__nccwpck_require__(1017)); | const path = __importStar(__nccwpck_require__(1017)); | ||||||
|  | const oidc_utils_1 = __nccwpck_require__(8041); | ||||||
| /** | /** | ||||||
|  * The code to exit an action |  * The code to exit an action | ||||||
|  */ |  */ | ||||||
| @ -4866,7 +4125,9 @@ function addPath(inputPath) { | |||||||
| } | } | ||||||
| exports.addPath = addPath; | exports.addPath = addPath; | ||||||
| /** | /** | ||||||
|  * Gets the value of an input.  The value is also trimmed. |  * Gets the value of an input. | ||||||
|  |  * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. | ||||||
|  |  * Returns an empty string if the value is not defined. | ||||||
|  * |  * | ||||||
|  * @param     name     name of the input to get |  * @param     name     name of the input to get | ||||||
|  * @param     options  optional. See InputOptions. |  * @param     options  optional. See InputOptions. | ||||||
| @ -4877,9 +4138,49 @@ function getInput(name, options) { | |||||||
|     if (options && options.required && !val) { |     if (options && options.required && !val) { | ||||||
|         throw new Error(`Input required and not supplied: ${name}`); |         throw new Error(`Input required and not supplied: ${name}`); | ||||||
|     } |     } | ||||||
|  |     if (options && options.trimWhitespace === false) { | ||||||
|  |         return val; | ||||||
|  |     } | ||||||
|     return val.trim(); |     return val.trim(); | ||||||
| } | } | ||||||
| exports.getInput = getInput; | exports.getInput = getInput; | ||||||
|  | /** | ||||||
|  |  * Gets the values of an multiline input.  Each value is also trimmed. | ||||||
|  |  * | ||||||
|  |  * @param     name     name of the input to get | ||||||
|  |  * @param     options  optional. See InputOptions. | ||||||
|  |  * @returns   string[] | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | function getMultilineInput(name, options) { | ||||||
|  |     const inputs = getInput(name, options) | ||||||
|  |         .split('\n') | ||||||
|  |         .filter(x => x !== ''); | ||||||
|  |     return inputs; | ||||||
|  | } | ||||||
|  | exports.getMultilineInput = getMultilineInput; | ||||||
|  | /** | ||||||
|  |  * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. | ||||||
|  |  * Support boolean input list: `true | True | TRUE | false | False | FALSE` . | ||||||
|  |  * The return value is also in boolean type. | ||||||
|  |  * ref: https://yaml.org/spec/1.2/spec.html#id2804923
 | ||||||
|  |  * | ||||||
|  |  * @param     name     name of the input to get | ||||||
|  |  * @param     options  optional. See InputOptions. | ||||||
|  |  * @returns   boolean | ||||||
|  |  */ | ||||||
|  | function getBooleanInput(name, options) { | ||||||
|  |     const trueValue = ['true', 'True', 'TRUE']; | ||||||
|  |     const falseValue = ['false', 'False', 'FALSE']; | ||||||
|  |     const val = getInput(name, options); | ||||||
|  |     if (trueValue.includes(val)) | ||||||
|  |         return true; | ||||||
|  |     if (falseValue.includes(val)) | ||||||
|  |         return false; | ||||||
|  |     throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + | ||||||
|  |         `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); | ||||||
|  | } | ||||||
|  | exports.getBooleanInput = getBooleanInput; | ||||||
| /** | /** | ||||||
|  * Sets the value of an output. |  * Sets the value of an output. | ||||||
|  * |  * | ||||||
| @ -4888,6 +4189,7 @@ exports.getInput = getInput; | |||||||
|  */ |  */ | ||||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | ||||||
| function setOutput(name, value) { | function setOutput(name, value) { | ||||||
|  |     process.stdout.write(os.EOL); | ||||||
|     command_1.issueCommand('set-output', { name }, value); |     command_1.issueCommand('set-output', { name }, value); | ||||||
| } | } | ||||||
| exports.setOutput = setOutput; | exports.setOutput = setOutput; | ||||||
| @ -4934,19 +4236,30 @@ exports.debug = debug; | |||||||
| /** | /** | ||||||
|  * Adds an error issue |  * Adds an error issue | ||||||
|  * @param message error issue message. Errors will be converted to string via toString() |  * @param message error issue message. Errors will be converted to string via toString() | ||||||
|  |  * @param properties optional properties to add to the annotation. | ||||||
|  */ |  */ | ||||||
| function error(message) { | function error(message, properties = {}) { | ||||||
|     command_1.issue('error', message instanceof Error ? message.toString() : message); |     command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||||||
| } | } | ||||||
| exports.error = error; | exports.error = error; | ||||||
| /** | /** | ||||||
|  * Adds an warning issue |  * Adds a warning issue | ||||||
|  * @param message warning issue message. Errors will be converted to string via toString() |  * @param message warning issue message. Errors will be converted to string via toString() | ||||||
|  |  * @param properties optional properties to add to the annotation. | ||||||
|  */ |  */ | ||||||
| function warning(message) { | function warning(message, properties = {}) { | ||||||
|     command_1.issue('warning', message instanceof Error ? message.toString() : message); |     command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||||||
| } | } | ||||||
| exports.warning = warning; | exports.warning = warning; | ||||||
|  | /** | ||||||
|  |  * Adds a notice issue | ||||||
|  |  * @param message notice issue message. Errors will be converted to string via toString() | ||||||
|  |  * @param properties optional properties to add to the annotation. | ||||||
|  |  */ | ||||||
|  | function notice(message, properties = {}) { | ||||||
|  |     command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||||||
|  | } | ||||||
|  | exports.notice = notice; | ||||||
| /** | /** | ||||||
|  * Writes info to log with console.log. |  * Writes info to log with console.log. | ||||||
|  * @param message info message |  * @param message info message | ||||||
| @ -5019,6 +4332,17 @@ function getState(name) { | |||||||
|     return process.env[`STATE_${name}`] || ''; |     return process.env[`STATE_${name}`] || ''; | ||||||
| } | } | ||||||
| exports.getState = getState; | exports.getState = getState; | ||||||
|  | function getIDToken(aud) { | ||||||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |         return yield oidc_utils_1.OidcClient.getIDToken(aud); | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | exports.getIDToken = getIDToken; | ||||||
|  | /** | ||||||
|  |  * Markdown summary exports | ||||||
|  |  */ | ||||||
|  | var markdown_summary_1 = __nccwpck_require__(8042); | ||||||
|  | Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return markdown_summary_1.markdownSummary; } })); | ||||||
| //# sourceMappingURL=core.js.map
 | //# sourceMappingURL=core.js.map
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -5029,14 +4353,27 @@ exports.getState = getState; | |||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| // For internal use, subject to change.
 | // For internal use, subject to change.
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|     result["default"] = mod; |     __setModuleDefault(result, mod); | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.issueCommand = void 0; | ||||||
| // We use any as a valid input type
 | // We use any as a valid input type
 | ||||||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||||
| const fs = __importStar(__nccwpck_require__(7147)); | const fs = __importStar(__nccwpck_require__(7147)); | ||||||
| @ -5059,6 +4396,376 @@ exports.issueCommand = issueCommand; | |||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
|  | /***/ 8042: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 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.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; | ||||||
|  | const os_1 = __nccwpck_require__(2037); | ||||||
|  | const fs_1 = __nccwpck_require__(7147); | ||||||
|  | const { access, appendFile, writeFile } = fs_1.promises; | ||||||
|  | exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; | ||||||
|  | exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-markdown-summary'; | ||||||
|  | class MarkdownSummary { | ||||||
|  |     constructor() { | ||||||
|  |         this._buffer = ''; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Finds the summary file path from the environment, rejects if env var is not found or file does not exist | ||||||
|  |      * Also checks r/w permissions. | ||||||
|  |      * | ||||||
|  |      * @returns step summary file path | ||||||
|  |      */ | ||||||
|  |     filePath() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (this._filePath) { | ||||||
|  |                 return this._filePath; | ||||||
|  |             } | ||||||
|  |             const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; | ||||||
|  |             if (!pathFromEnv) { | ||||||
|  |                 throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports markdown summaries.`); | ||||||
|  |             } | ||||||
|  |             try { | ||||||
|  |                 yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); | ||||||
|  |             } | ||||||
|  |             catch (_a) { | ||||||
|  |                 throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); | ||||||
|  |             } | ||||||
|  |             this._filePath = pathFromEnv; | ||||||
|  |             return this._filePath; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Wraps content in an HTML tag, adding any HTML attributes | ||||||
|  |      * | ||||||
|  |      * @param {string} tag HTML tag to wrap | ||||||
|  |      * @param {string | null} content content within the tag | ||||||
|  |      * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add | ||||||
|  |      * | ||||||
|  |      * @returns {string} content wrapped in HTML element | ||||||
|  |      */ | ||||||
|  |     wrap(tag, content, attrs = {}) { | ||||||
|  |         const htmlAttrs = Object.entries(attrs) | ||||||
|  |             .map(([key, value]) => ` ${key}="${value}"`) | ||||||
|  |             .join(''); | ||||||
|  |         if (!content) { | ||||||
|  |             return `<${tag}${htmlAttrs}>`; | ||||||
|  |         } | ||||||
|  |         return `<${tag}${htmlAttrs}>${content}</${tag}>`; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. | ||||||
|  |      * | ||||||
|  |      * @param {SummaryWriteOptions} [options] (optional) options for write operation | ||||||
|  |      * | ||||||
|  |      * @returns {Promise<MarkdownSummary>} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     write(options) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); | ||||||
|  |             const filePath = yield this.filePath(); | ||||||
|  |             const writeFunc = overwrite ? writeFile : appendFile; | ||||||
|  |             yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); | ||||||
|  |             return this.emptyBuffer(); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Clears the summary buffer and wipes the summary file | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     clear() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return this.emptyBuffer().write({ overwrite: true }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Returns the current summary buffer as a string | ||||||
|  |      * | ||||||
|  |      * @returns {string} string of summary buffer | ||||||
|  |      */ | ||||||
|  |     stringify() { | ||||||
|  |         return this._buffer; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * If the summary buffer is empty | ||||||
|  |      * | ||||||
|  |      * @returns {boolen} true if the buffer is empty | ||||||
|  |      */ | ||||||
|  |     isEmptyBuffer() { | ||||||
|  |         return this._buffer.length === 0; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Resets the summary buffer without writing to summary file | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     emptyBuffer() { | ||||||
|  |         this._buffer = ''; | ||||||
|  |         return this; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds raw text to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} text content to add | ||||||
|  |      * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addRaw(text, addEOL = false) { | ||||||
|  |         this._buffer += text; | ||||||
|  |         return addEOL ? this.addEOL() : this; | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds the operating system-specific end-of-line marker to the buffer | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addEOL() { | ||||||
|  |         return this.addRaw(os_1.EOL); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML codeblock to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} code content to render within fenced code block | ||||||
|  |      * @param {string} lang (optional) language to syntax highlight code | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addCodeBlock(code, lang) { | ||||||
|  |         const attrs = Object.assign({}, (lang && { lang })); | ||||||
|  |         const element = this.wrap('pre', this.wrap('code', code), attrs); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML list to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string[]} items list of items to render | ||||||
|  |      * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addList(items, ordered = false) { | ||||||
|  |         const tag = ordered ? 'ol' : 'ul'; | ||||||
|  |         const listItems = items.map(item => this.wrap('li', item)).join(''); | ||||||
|  |         const element = this.wrap(tag, listItems); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML table to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {SummaryTableCell[]} rows table rows | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addTable(rows) { | ||||||
|  |         const tableBody = rows | ||||||
|  |             .map(row => { | ||||||
|  |             const cells = row | ||||||
|  |                 .map(cell => { | ||||||
|  |                 if (typeof cell === 'string') { | ||||||
|  |                     return this.wrap('td', cell); | ||||||
|  |                 } | ||||||
|  |                 const { header, data, colspan, rowspan } = cell; | ||||||
|  |                 const tag = header ? 'th' : 'td'; | ||||||
|  |                 const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); | ||||||
|  |                 return this.wrap(tag, data, attrs); | ||||||
|  |             }) | ||||||
|  |                 .join(''); | ||||||
|  |             return this.wrap('tr', cells); | ||||||
|  |         }) | ||||||
|  |             .join(''); | ||||||
|  |         const element = this.wrap('table', tableBody); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds a collapsable HTML details element to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} label text for the closed state | ||||||
|  |      * @param {string} content collapsable content | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addDetails(label, content) { | ||||||
|  |         const element = this.wrap('details', this.wrap('summary', label) + content); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML image tag to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} src path to the image you to embed | ||||||
|  |      * @param {string} alt text description of the image | ||||||
|  |      * @param {SummaryImageOptions} options (optional) addition image attributes | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addImage(src, alt, options) { | ||||||
|  |         const { width, height } = options || {}; | ||||||
|  |         const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); | ||||||
|  |         const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML section heading element | ||||||
|  |      * | ||||||
|  |      * @param {string} text heading text | ||||||
|  |      * @param {number | string} [level=1] (optional) the heading level, default: 1 | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addHeading(text, level) { | ||||||
|  |         const tag = `h${level}`; | ||||||
|  |         const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) | ||||||
|  |             ? tag | ||||||
|  |             : 'h1'; | ||||||
|  |         const element = this.wrap(allowedTag, text); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML thematic break (<hr>) to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addSeparator() { | ||||||
|  |         const element = this.wrap('hr', null); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML line break (<br>) to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addBreak() { | ||||||
|  |         const element = this.wrap('br', null); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML blockquote to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} text quote text | ||||||
|  |      * @param {string} cite (optional) citation url | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addQuote(text, cite) { | ||||||
|  |         const attrs = Object.assign({}, (cite && { cite })); | ||||||
|  |         const element = this.wrap('blockquote', text, attrs); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  |     /** | ||||||
|  |      * Adds an HTML anchor tag to the summary buffer | ||||||
|  |      * | ||||||
|  |      * @param {string} text link text/content | ||||||
|  |      * @param {string} href hyperlink | ||||||
|  |      * | ||||||
|  |      * @returns {MarkdownSummary} markdown summary instance | ||||||
|  |      */ | ||||||
|  |     addLink(text, href) { | ||||||
|  |         const element = this.wrap('a', text, { href }); | ||||||
|  |         return this.addRaw(element).addEOL(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | // singleton export
 | ||||||
|  | exports.markdownSummary = new MarkdownSummary(); | ||||||
|  | //# sourceMappingURL=markdown-summary.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 8041: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | 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.OidcClient = void 0; | ||||||
|  | const http_client_1 = __nccwpck_require__(9925); | ||||||
|  | const auth_1 = __nccwpck_require__(3702); | ||||||
|  | const core_1 = __nccwpck_require__(2186); | ||||||
|  | class OidcClient { | ||||||
|  |     static createHttpClient(allowRetry = true, maxRetry = 10) { | ||||||
|  |         const requestOptions = { | ||||||
|  |             allowRetries: allowRetry, | ||||||
|  |             maxRetries: maxRetry | ||||||
|  |         }; | ||||||
|  |         return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); | ||||||
|  |     } | ||||||
|  |     static getRequestToken() { | ||||||
|  |         const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; | ||||||
|  |         if (!token) { | ||||||
|  |             throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); | ||||||
|  |         } | ||||||
|  |         return token; | ||||||
|  |     } | ||||||
|  |     static getIDTokenUrl() { | ||||||
|  |         const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; | ||||||
|  |         if (!runtimeUrl) { | ||||||
|  |             throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); | ||||||
|  |         } | ||||||
|  |         return runtimeUrl; | ||||||
|  |     } | ||||||
|  |     static getCall(id_token_url) { | ||||||
|  |         var _a; | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const httpclient = OidcClient.createHttpClient(); | ||||||
|  |             const res = yield httpclient | ||||||
|  |                 .getJson(id_token_url) | ||||||
|  |                 .catch(error => { | ||||||
|  |                 throw new Error(`Failed to get ID Token. \n 
 | ||||||
|  |         Error Code : ${error.statusCode}\n  | ||||||
|  |         Error Message: ${error.result.message}`);
 | ||||||
|  |             }); | ||||||
|  |             const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; | ||||||
|  |             if (!id_token) { | ||||||
|  |                 throw new Error('Response json body do not have ID Token field'); | ||||||
|  |             } | ||||||
|  |             return id_token; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     static getIDToken(audience) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             try { | ||||||
|  |                 // New ID Token is requested from action service
 | ||||||
|  |                 let id_token_url = OidcClient.getIDTokenUrl(); | ||||||
|  |                 if (audience) { | ||||||
|  |                     const encodedAudience = encodeURIComponent(audience); | ||||||
|  |                     id_token_url = `${id_token_url}&audience=${encodedAudience}`; | ||||||
|  |                 } | ||||||
|  |                 core_1.debug(`ID token url is ${id_token_url}`); | ||||||
|  |                 const id_token = yield OidcClient.getCall(id_token_url); | ||||||
|  |                 core_1.setSecret(id_token); | ||||||
|  |                 return id_token; | ||||||
|  |             } | ||||||
|  |             catch (error) { | ||||||
|  |                 throw new Error(`Error message: ${error.message}`); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.OidcClient = OidcClient; | ||||||
|  | //# sourceMappingURL=oidc-utils.js.map
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
| /***/ 5278: | /***/ 5278: | ||||||
| /***/ ((__unused_webpack_module, exports) => { | /***/ ((__unused_webpack_module, exports) => { | ||||||
| 
 | 
 | ||||||
| @ -5067,6 +4774,7 @@ exports.issueCommand = issueCommand; | |||||||
| // We use any as a valid input type
 | // We use any as a valid input type
 | ||||||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.toCommandProperties = exports.toCommandValue = void 0; | ||||||
| /** | /** | ||||||
|  * Sanitizes an input into a string so it can be passed into issueCommand safely |  * Sanitizes an input into a string so it can be passed into issueCommand safely | ||||||
|  * @param input input to sanitize into a string |  * @param input input to sanitize into a string | ||||||
| @ -5081,6 +4789,26 @@ function toCommandValue(input) { | |||||||
|     return JSON.stringify(input); |     return JSON.stringify(input); | ||||||
| } | } | ||||||
| exports.toCommandValue = toCommandValue; | exports.toCommandValue = toCommandValue; | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * @param annotationProperties | ||||||
|  |  * @returns The command properties to send with the actual annotation command | ||||||
|  |  * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
 | ||||||
|  |  */ | ||||||
|  | function toCommandProperties(annotationProperties) { | ||||||
|  |     if (!Object.keys(annotationProperties).length) { | ||||||
|  |         return {}; | ||||||
|  |     } | ||||||
|  |     return { | ||||||
|  |         title: annotationProperties.title, | ||||||
|  |         file: annotationProperties.file, | ||||||
|  |         line: annotationProperties.startLine, | ||||||
|  |         endLine: annotationProperties.endLine, | ||||||
|  |         col: annotationProperties.startColumn, | ||||||
|  |         endColumn: annotationProperties.endColumn | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | exports.toCommandProperties = toCommandProperties; | ||||||
| //# sourceMappingURL=utils.js.map
 | //# sourceMappingURL=utils.js.map
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -7005,6 +6733,72 @@ class SearchState { | |||||||
| exports.SearchState = SearchState; | exports.SearchState = SearchState; | ||||||
| //# sourceMappingURL=internal-search-state.js.map
 | //# sourceMappingURL=internal-search-state.js.map
 | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 3702: | ||||||
|  | /***/ ((__unused_webpack_module, exports) => { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | class BasicCredentialHandler { | ||||||
|  |     constructor(username, password) { | ||||||
|  |         this.username = username; | ||||||
|  |         this.password = password; | ||||||
|  |     } | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         options.headers['Authorization'] = | ||||||
|  |             'Basic ' + | ||||||
|  |                 Buffer.from(this.username + ':' + this.password).toString('base64'); | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication(response) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.BasicCredentialHandler = BasicCredentialHandler; | ||||||
|  | class BearerCredentialHandler { | ||||||
|  |     constructor(token) { | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |     // currently implements pre-authorization
 | ||||||
|  |     // TODO: support preAuth = false where it hooks on 401
 | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         options.headers['Authorization'] = 'Bearer ' + this.token; | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication(response) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.BearerCredentialHandler = BearerCredentialHandler; | ||||||
|  | class PersonalAccessTokenCredentialHandler { | ||||||
|  |     constructor(token) { | ||||||
|  |         this.token = token; | ||||||
|  |     } | ||||||
|  |     // currently implements pre-authorization
 | ||||||
|  |     // TODO: support preAuth = false where it hooks on 401
 | ||||||
|  |     prepareRequest(options) { | ||||||
|  |         options.headers['Authorization'] = | ||||||
|  |             'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); | ||||||
|  |     } | ||||||
|  |     // This handler cannot handle 401
 | ||||||
|  |     canHandleAuthentication(response) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     handleAuthentication(httpClient, requestInfo, objs) { | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 9925: | /***/ 9925: | ||||||
| @ -7013,7 +6807,6 @@ exports.SearchState = SearchState; | |||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const url = __nccwpck_require__(7310); |  | ||||||
| const http = __nccwpck_require__(3685); | const http = __nccwpck_require__(3685); | ||||||
| const https = __nccwpck_require__(5687); | const https = __nccwpck_require__(5687); | ||||||
| const pm = __nccwpck_require__(6443); | const pm = __nccwpck_require__(6443); | ||||||
| @ -7062,7 +6855,7 @@ var MediaTypes; | |||||||
|  * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 |  * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | ||||||
|  */ |  */ | ||||||
| function getProxyUrl(serverUrl) { | function getProxyUrl(serverUrl) { | ||||||
|     let proxyUrl = pm.getProxyUrl(url.parse(serverUrl)); |     let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); | ||||||
|     return proxyUrl ? proxyUrl.href : ''; |     return proxyUrl ? proxyUrl.href : ''; | ||||||
| } | } | ||||||
| exports.getProxyUrl = getProxyUrl; | exports.getProxyUrl = getProxyUrl; | ||||||
| @ -7081,6 +6874,15 @@ const HttpResponseRetryCodes = [ | |||||||
| const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; | const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; | ||||||
| const ExponentialBackoffCeiling = 10; | const ExponentialBackoffCeiling = 10; | ||||||
| const ExponentialBackoffTimeSlice = 5; | const ExponentialBackoffTimeSlice = 5; | ||||||
|  | class HttpClientError extends Error { | ||||||
|  |     constructor(message, statusCode) { | ||||||
|  |         super(message); | ||||||
|  |         this.name = 'HttpClientError'; | ||||||
|  |         this.statusCode = statusCode; | ||||||
|  |         Object.setPrototypeOf(this, HttpClientError.prototype); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.HttpClientError = HttpClientError; | ||||||
| class HttpClientResponse { | class HttpClientResponse { | ||||||
|     constructor(message) { |     constructor(message) { | ||||||
|         this.message = message; |         this.message = message; | ||||||
| @ -7099,7 +6901,7 @@ class HttpClientResponse { | |||||||
| } | } | ||||||
| exports.HttpClientResponse = HttpClientResponse; | exports.HttpClientResponse = HttpClientResponse; | ||||||
| function isHttps(requestUrl) { | function isHttps(requestUrl) { | ||||||
|     let parsedUrl = url.parse(requestUrl); |     let parsedUrl = new URL(requestUrl); | ||||||
|     return parsedUrl.protocol === 'https:'; |     return parsedUrl.protocol === 'https:'; | ||||||
| } | } | ||||||
| exports.isHttps = isHttps; | exports.isHttps = isHttps; | ||||||
| @ -7204,7 +7006,7 @@ class HttpClient { | |||||||
|         if (this._disposed) { |         if (this._disposed) { | ||||||
|             throw new Error('Client has already been disposed.'); |             throw new Error('Client has already been disposed.'); | ||||||
|         } |         } | ||||||
|         let parsedUrl = url.parse(requestUrl); |         let parsedUrl = new URL(requestUrl); | ||||||
|         let info = this._prepareRequest(verb, parsedUrl, headers); |         let info = this._prepareRequest(verb, parsedUrl, headers); | ||||||
|         // Only perform retries on reads since writes may not be idempotent.
 |         // Only perform retries on reads since writes may not be idempotent.
 | ||||||
|         let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 |         let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 | ||||||
| @ -7243,7 +7045,7 @@ class HttpClient { | |||||||
|                     // if there's no location to redirect to, we won't
 |                     // if there's no location to redirect to, we won't
 | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|                 let parsedRedirectUrl = url.parse(redirectUrl); |                 let parsedRedirectUrl = new URL(redirectUrl); | ||||||
|                 if (parsedUrl.protocol == 'https:' && |                 if (parsedUrl.protocol == 'https:' && | ||||||
|                     parsedUrl.protocol != parsedRedirectUrl.protocol && |                     parsedUrl.protocol != parsedRedirectUrl.protocol && | ||||||
|                     !this._allowRedirectDowngrade) { |                     !this._allowRedirectDowngrade) { | ||||||
| @ -7359,7 +7161,7 @@ class HttpClient { | |||||||
|      * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 |      * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | ||||||
|      */ |      */ | ||||||
|     getAgent(serverUrl) { |     getAgent(serverUrl) { | ||||||
|         let parsedUrl = url.parse(serverUrl); |         let parsedUrl = new URL(serverUrl); | ||||||
|         return this._getAgent(parsedUrl); |         return this._getAgent(parsedUrl); | ||||||
|     } |     } | ||||||
|     _prepareRequest(method, requestUrl, headers) { |     _prepareRequest(method, requestUrl, headers) { | ||||||
| @ -7432,7 +7234,9 @@ class HttpClient { | |||||||
|                 maxSockets: maxSockets, |                 maxSockets: maxSockets, | ||||||
|                 keepAlive: this._keepAlive, |                 keepAlive: this._keepAlive, | ||||||
|                 proxy: { |                 proxy: { | ||||||
|                     proxyAuth: proxyUrl.auth, |                     ...((proxyUrl.username || proxyUrl.password) && { | ||||||
|  |                         proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` | ||||||
|  |                     }), | ||||||
|                     host: proxyUrl.hostname, |                     host: proxyUrl.hostname, | ||||||
|                     port: proxyUrl.port |                     port: proxyUrl.port | ||||||
|                 } |                 } | ||||||
| @ -7527,12 +7331,8 @@ class HttpClient { | |||||||
|                 else { |                 else { | ||||||
|                     msg = 'Failed request: (' + statusCode + ')'; |                     msg = 'Failed request: (' + statusCode + ')'; | ||||||
|                 } |                 } | ||||||
|                 let err = new Error(msg); |                 let err = new HttpClientError(msg, statusCode); | ||||||
|                 // attach statusCode and body obj (if available) to the error object
 |                 err.result = response.result; | ||||||
|                 err['statusCode'] = statusCode; |  | ||||||
|                 if (response.result) { |  | ||||||
|                     err['result'] = response.result; |  | ||||||
|                 } |  | ||||||
|                 reject(err); |                 reject(err); | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
| @ -7547,12 +7347,11 @@ exports.HttpClient = HttpClient; | |||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 6443: | /***/ 6443: | ||||||
| /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { | /***/ ((__unused_webpack_module, exports) => { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const url = __nccwpck_require__(7310); |  | ||||||
| function getProxyUrl(reqUrl) { | function getProxyUrl(reqUrl) { | ||||||
|     let usingSsl = reqUrl.protocol === 'https:'; |     let usingSsl = reqUrl.protocol === 'https:'; | ||||||
|     let proxyUrl; |     let proxyUrl; | ||||||
| @ -7567,7 +7366,7 @@ function getProxyUrl(reqUrl) { | |||||||
|         proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; |         proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; | ||||||
|     } |     } | ||||||
|     if (proxyVar) { |     if (proxyVar) { | ||||||
|         proxyUrl = url.parse(proxyVar); |         proxyUrl = new URL(proxyVar); | ||||||
|     } |     } | ||||||
|     return proxyUrl; |     return proxyUrl; | ||||||
| } | } | ||||||
| @ -64095,7 +63894,7 @@ const utils_1 = __nccwpck_require__(1314); | |||||||
| const semver = __importStar(__nccwpck_require__(1383)); | const semver = __importStar(__nccwpck_require__(1383)); | ||||||
| const core = __importStar(__nccwpck_require__(2186)); | const core = __importStar(__nccwpck_require__(2186)); | ||||||
| const tc = __importStar(__nccwpck_require__(7784)); | const tc = __importStar(__nccwpck_require__(7784)); | ||||||
| function findPyPyVersion(versionSpec, architecture) { | function findPyPyVersion(versionSpec, architecture, updateEnvironment) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         let resolvedPyPyVersion = ''; |         let resolvedPyPyVersion = ''; | ||||||
|         let resolvedPythonVersion = ''; |         let resolvedPythonVersion = ''; | ||||||
| @ -64114,10 +63913,18 @@ function findPyPyVersion(versionSpec, architecture) { | |||||||
|         const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; |         const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; | ||||||
|         const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); |         const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); | ||||||
|         const pythonLocation = pypyInstall.getPyPyBinaryPath(installDir); |         const pythonLocation = pypyInstall.getPyPyBinaryPath(installDir); | ||||||
|         core.exportVariable('pythonLocation', installDir); |         if (updateEnvironment) { | ||||||
|         core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); |             core.exportVariable('pythonLocation', installDir); | ||||||
|         core.addPath(pythonLocation); |             // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython
 | ||||||
|         core.addPath(_binDir); |             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' + resolvedPyPyVersion.trim()); |         core.setOutput('python-version', 'pypy' + resolvedPyPyVersion.trim()); | ||||||
|         core.setOutput('python-path', pythonPath); |         core.setOutput('python-path', pythonPath); | ||||||
|         return { resolvedPyPyVersion, resolvedPythonVersion }; |         return { resolvedPyPyVersion, resolvedPythonVersion }; | ||||||
| @ -64249,7 +64056,7 @@ function binDir(installDir) { | |||||||
|         return path.join(installDir, 'bin'); |         return path.join(installDir, 'bin'); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| function useCpythonVersion(version, architecture) { | function useCpythonVersion(version, architecture, updateEnvironment) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const desugaredVersionSpec = desugarDevVersion(version); |         const desugaredVersionSpec = desugarDevVersion(version); | ||||||
|         const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); |         const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); | ||||||
| @ -64270,8 +64077,6 @@ function useCpythonVersion(version, architecture) { | |||||||
|                 `The list of all available versions can be found here: ${installer.MANIFEST_URL}` |                 `The list of all available versions can be found here: ${installer.MANIFEST_URL}` | ||||||
|             ].join(os.EOL)); |             ].join(os.EOL)); | ||||||
|         } |         } | ||||||
|         core.exportVariable('pythonLocation', installDir); |  | ||||||
|         core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); |  | ||||||
|         if (utils_1.IS_LINUX) { |         if (utils_1.IS_LINUX) { | ||||||
|             const libPath = process.env.LD_LIBRARY_PATH |             const libPath = process.env.LD_LIBRARY_PATH | ||||||
|                 ? `:${process.env.LD_LIBRARY_PATH}` |                 ? `:${process.env.LD_LIBRARY_PATH}` | ||||||
| @ -64284,19 +64089,40 @@ function useCpythonVersion(version, architecture) { | |||||||
|         const _binDir = binDir(installDir); |         const _binDir = binDir(installDir); | ||||||
|         const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; |         const binaryExtension = utils_1.IS_WINDOWS ? '.exe' : ''; | ||||||
|         const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); |         const pythonPath = path.join(utils_1.IS_WINDOWS ? installDir : _binDir, `python${binaryExtension}`); | ||||||
|         core.addPath(installDir); |         if (updateEnvironment) { | ||||||
|         core.addPath(_binDir); |             core.exportVariable('pythonLocation', installDir); | ||||||
|         if (utils_1.IS_WINDOWS) { |             core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); | ||||||
|             // Add --user directory
 |             core.exportVariable('pythonLocation', installDir); | ||||||
|             // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
 |             // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython
 | ||||||
|             // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 |             core.exportVariable('Python_ROOT_DIR', installDir); | ||||||
|             const version = path.basename(path.dirname(installDir)); |             // https://cmake.org/cmake/help/latest/module/FindPython2.html#module:FindPython2
 | ||||||
|             const major = semver.major(version); |             core.exportVariable('Python2_ROOT_DIR', installDir); | ||||||
|             const minor = semver.minor(version); |             // https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3
 | ||||||
|             const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, 'Scripts'); |             core.exportVariable('Python3_ROOT_DIR', installDir); | ||||||
|             core.addPath(userScriptsDir); |             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/<semantic version>/x64/
 | ||||||
|  |                 // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 | ||||||
|  |                 const version = path.basename(path.dirname(installDir)); | ||||||
|  |                 const major = semver.major(version); | ||||||
|  |                 const minor = semver.minor(version); | ||||||
|  |                 const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, '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); |         const installed = versionFromPath(installDir); | ||||||
|         core.setOutput('python-version', installed); |         core.setOutput('python-version', installed); | ||||||
|         core.setOutput('python-path', pythonPath); |         core.setOutput('python-path', pythonPath); | ||||||
| @ -64697,13 +64523,14 @@ function run() { | |||||||
|             if (version) { |             if (version) { | ||||||
|                 let pythonVersion; |                 let pythonVersion; | ||||||
|                 const arch = core.getInput('architecture') || os.arch(); |                 const arch = core.getInput('architecture') || os.arch(); | ||||||
|  |                 const updateEnvironment = core.getBooleanInput('update-environment'); | ||||||
|                 if (isPyPyVersion(version)) { |                 if (isPyPyVersion(version)) { | ||||||
|                     const installed = yield finderPyPy.findPyPyVersion(version, arch); |                     const installed = yield finderPyPy.findPyPyVersion(version, arch, updateEnvironment); | ||||||
|                     pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; |                     pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; | ||||||
|                     core.info(`Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})`); |                     core.info(`Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})`); | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                     const installed = yield finder.useCpythonVersion(version, arch); |                     const installed = yield finder.useCpythonVersion(version, arch, updateEnvironment); | ||||||
|                     pythonVersion = installed.version; |                     pythonVersion = installed.version; | ||||||
|                     core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); |                     core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); | ||||||
|                 } |                 } | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										32
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -10,7 +10,7 @@ | |||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/cache": "^3.0.0", |         "@actions/cache": "^3.0.0", | ||||||
|         "@actions/core": "^1.2.3", |         "@actions/core": "^1.7.0", | ||||||
|         "@actions/exec": "^1.1.0", |         "@actions/exec": "^1.1.0", | ||||||
|         "@actions/glob": "^0.2.0", |         "@actions/glob": "^0.2.0", | ||||||
|         "@actions/io": "^1.0.2", |         "@actions/io": "^1.0.2", | ||||||
| @ -72,9 +72,12 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/core": { |     "node_modules/@actions/core": { | ||||||
|       "version": "1.2.6", |       "version": "1.7.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.6.tgz", |       "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.7.0.tgz", | ||||||
|       "integrity": "sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==" |       "integrity": "sha512-7fPSS7yKOhTpgLMbw7lBLc1QJWvJBBAgyTX2PEhagWcKK8t0H8AKCoPMfnrHqIm5cRYH4QFPqD1/ruhuUE7YcQ==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "@actions/http-client": "^1.0.11" | ||||||
|  |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/exec": { |     "node_modules/@actions/exec": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
| @ -94,9 +97,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/http-client": { |     "node_modules/@actions/http-client": { | ||||||
|       "version": "1.0.8", |       "version": "1.0.11", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.8.tgz", |       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", | ||||||
|       "integrity": "sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==", |       "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "tunnel": "0.0.6" |         "tunnel": "0.0.6" | ||||||
|       } |       } | ||||||
| @ -11377,9 +11380,12 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@actions/core": { |     "@actions/core": { | ||||||
|       "version": "1.2.6", |       "version": "1.7.0", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.6.tgz", |       "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.7.0.tgz", | ||||||
|       "integrity": "sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==" |       "integrity": "sha512-7fPSS7yKOhTpgLMbw7lBLc1QJWvJBBAgyTX2PEhagWcKK8t0H8AKCoPMfnrHqIm5cRYH4QFPqD1/ruhuUE7YcQ==", | ||||||
|  |       "requires": { | ||||||
|  |         "@actions/http-client": "^1.0.11" | ||||||
|  |       } | ||||||
|     }, |     }, | ||||||
|     "@actions/exec": { |     "@actions/exec": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
| @ -11399,9 +11405,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@actions/http-client": { |     "@actions/http-client": { | ||||||
|       "version": "1.0.8", |       "version": "1.0.11", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.8.tgz", |       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", | ||||||
|       "integrity": "sha512-G4JjJ6f9Hb3Zvejj+ewLLKLf99ZC+9v+yCxoYf9vSyH+WkzPLB2LuUtRMGNkooMqdugGBFStIKXOuvH1W+EctA==", |       "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "tunnel": "0.0.6" |         "tunnel": "0.0.6" | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -24,7 +24,7 @@ | |||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/cache": "^3.0.0", |     "@actions/cache": "^3.0.0", | ||||||
|     "@actions/core": "^1.2.3", |     "@actions/core": "^1.7.0", | ||||||
|     "@actions/exec": "^1.1.0", |     "@actions/exec": "^1.1.0", | ||||||
|     "@actions/glob": "^0.2.0", |     "@actions/glob": "^0.2.0", | ||||||
|     "@actions/io": "^1.0.2", |     "@actions/io": "^1.0.2", | ||||||
|  | |||||||
| @ -20,7 +20,8 @@ interface IPyPyVersionSpec { | |||||||
| 
 | 
 | ||||||
| export async function findPyPyVersion( | export async function findPyPyVersion( | ||||||
|   versionSpec: string, |   versionSpec: string, | ||||||
|   architecture: string |   architecture: string, | ||||||
|  |   updateEnvironment: boolean | ||||||
| ): Promise<{resolvedPyPyVersion: string; resolvedPythonVersion: string}> { | ): Promise<{resolvedPyPyVersion: string; resolvedPythonVersion: string}> { | ||||||
|   let resolvedPyPyVersion = ''; |   let resolvedPyPyVersion = ''; | ||||||
|   let resolvedPythonVersion = ''; |   let resolvedPythonVersion = ''; | ||||||
| @ -54,10 +55,18 @@ export async function findPyPyVersion( | |||||||
|     `python${binaryExtension}` |     `python${binaryExtension}` | ||||||
|   ); |   ); | ||||||
|   const pythonLocation = pypyInstall.getPyPyBinaryPath(installDir); |   const pythonLocation = pypyInstall.getPyPyBinaryPath(installDir); | ||||||
|   core.exportVariable('pythonLocation', installDir); |   if (updateEnvironment) { | ||||||
|   core.exportVariable('PKG_CONFIG_PATH', pythonLocation + '/lib/pkgconfig'); |     core.exportVariable('pythonLocation', installDir); | ||||||
|   core.addPath(pythonLocation); |     // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython
 | ||||||
|   core.addPath(_binDir); |     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' + resolvedPyPyVersion.trim()); |   core.setOutput('python-version', 'pypy' + resolvedPyPyVersion.trim()); | ||||||
|   core.setOutput('python-path', pythonPath); |   core.setOutput('python-path', pythonPath); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -32,7 +32,8 @@ function binDir(installDir: string): string { | |||||||
| 
 | 
 | ||||||
| export async function useCpythonVersion( | export async function useCpythonVersion( | ||||||
|   version: string, |   version: string, | ||||||
|   architecture: string |   architecture: string, | ||||||
|  |   updateEnvironment: boolean | ||||||
| ): Promise<InstalledVersion> { | ): Promise<InstalledVersion> { | ||||||
|   const desugaredVersionSpec = desugarDevVersion(version); |   const desugaredVersionSpec = desugarDevVersion(version); | ||||||
|   const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); |   const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); | ||||||
| @ -69,9 +70,6 @@ export async function useCpythonVersion( | |||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   core.exportVariable('pythonLocation', installDir); |  | ||||||
|   core.exportVariable('PKG_CONFIG_PATH', installDir + '/lib/pkgconfig'); |  | ||||||
| 
 |  | ||||||
|   if (IS_LINUX) { |   if (IS_LINUX) { | ||||||
|     const libPath = process.env.LD_LIBRARY_PATH |     const libPath = process.env.LD_LIBRARY_PATH | ||||||
|       ? `:${process.env.LD_LIBRARY_PATH}` |       ? `:${process.env.LD_LIBRARY_PATH}` | ||||||
| @ -89,26 +87,49 @@ export async function useCpythonVersion( | |||||||
|     IS_WINDOWS ? installDir : _binDir, |     IS_WINDOWS ? installDir : _binDir, | ||||||
|     `python${binaryExtension}` |     `python${binaryExtension}` | ||||||
|   ); |   ); | ||||||
|   core.addPath(installDir); |   if (updateEnvironment) { | ||||||
|   core.addPath(_binDir); |     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 (IS_WINDOWS) { |     if (IS_LINUX) { | ||||||
|     // Add --user directory
 |       const libPath = process.env.LD_LIBRARY_PATH | ||||||
|     // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
 |         ? `:${process.env.LD_LIBRARY_PATH}` | ||||||
|     // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 |         : ''; | ||||||
|     const version = path.basename(path.dirname(installDir)); |       const pyLibPath = path.join(installDir, 'lib'); | ||||||
|     const major = semver.major(version); |  | ||||||
|     const minor = semver.minor(version); |  | ||||||
| 
 | 
 | ||||||
|     const userScriptsDir = path.join( |       if (!libPath.split(':').includes(pyLibPath)) { | ||||||
|       process.env['APPDATA'] || '', |         core.exportVariable('LD_LIBRARY_PATH', pyLibPath + libPath); | ||||||
|       'Python', |       } | ||||||
|       `Python${major}${minor}`, |     } | ||||||
|       'Scripts' |     core.addPath(installDir); | ||||||
|     ); |     core.addPath(_binDir); | ||||||
|     core.addPath(userScriptsDir); | 
 | ||||||
|  |     if (IS_WINDOWS) { | ||||||
|  |       // Add --user directory
 | ||||||
|  |       // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
 | ||||||
|  |       // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 | ||||||
|  |       const version = path.basename(path.dirname(installDir)); | ||||||
|  |       const major = semver.major(version); | ||||||
|  |       const minor = semver.minor(version); | ||||||
|  | 
 | ||||||
|  |       const userScriptsDir = path.join( | ||||||
|  |         process.env['APPDATA'] || '', | ||||||
|  |         'Python', | ||||||
|  |         `Python${major}${minor}`, | ||||||
|  |         '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); |   const installed = versionFromPath(installDir); | ||||||
|   core.setOutput('python-version', installed); |   core.setOutput('python-version', installed); | ||||||
|  | |||||||
| @ -64,14 +64,23 @@ async function run() { | |||||||
|     if (version) { |     if (version) { | ||||||
|       let pythonVersion: string; |       let pythonVersion: string; | ||||||
|       const arch: string = core.getInput('architecture') || os.arch(); |       const arch: string = core.getInput('architecture') || os.arch(); | ||||||
|  |       const updateEnvironment = core.getBooleanInput('update-environment'); | ||||||
|       if (isPyPyVersion(version)) { |       if (isPyPyVersion(version)) { | ||||||
|         const installed = await finderPyPy.findPyPyVersion(version, arch); |         const installed = await finderPyPy.findPyPyVersion( | ||||||
|  |           version, | ||||||
|  |           arch, | ||||||
|  |           updateEnvironment | ||||||
|  |         ); | ||||||
|         pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; |         pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; | ||||||
|         core.info( |         core.info( | ||||||
|           `Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})` |           `Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})` | ||||||
|         ); |         ); | ||||||
|       } else { |       } else { | ||||||
|         const installed = await finder.useCpythonVersion(version, arch); |         const installed = await finder.useCpythonVersion( | ||||||
|  |           version, | ||||||
|  |           arch, | ||||||
|  |           updateEnvironment | ||||||
|  |         ); | ||||||
|         pythonVersion = installed.version; |         pythonVersion = installed.version; | ||||||
|         core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); |         core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user