mirror of
https://github.com/docker/login-action.git
synced 2026-10-15 21:59:39 +00:00
Compare commits
281
Commits
v2.0.0
...
releases/v3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c94ce9fb46 | ||
|
|
8339c958ce | ||
|
|
c83e9320c8 | ||
|
|
b268aa57e3 | ||
|
|
a603229278 | ||
|
|
7567f92a74 | ||
|
|
0567fa5ae8 | ||
|
|
f6ef577545 | ||
|
|
916386b000 | ||
|
|
5b3f94a294 | ||
|
|
f9cc43b63d | ||
|
|
6862ffc5ab | ||
|
|
4349d75975 | ||
|
|
28fdb31ff3 | ||
|
|
2064b45545 | ||
|
|
5e57cd1181 | ||
|
|
97e31439e8 | ||
|
|
3a0796b57f | ||
|
|
5b7b28b1cc | ||
|
|
abc9fb3154 | ||
|
|
d468688814 | ||
|
|
a99b2f88fc | ||
|
|
0d7fae8057 | ||
|
|
9832253cb7 | ||
|
|
09e05bbdf6 | ||
|
|
4384bb23be | ||
|
|
722c6681a5 | ||
|
|
0bd2ba43c1 | ||
|
|
18836d8e24 | ||
|
|
997e14a133 | ||
|
|
67d87fe2c8 | ||
|
|
1287044d73 | ||
|
|
9fa22322ec | ||
|
|
738e2ed2fd | ||
|
|
5497b8b59c | ||
|
|
2d98472de9 | ||
|
|
3c28a369b4 | ||
|
|
072e0d514c | ||
|
|
65c0768122 | ||
|
|
3d793fe111 | ||
|
|
9fc23e88e3 | ||
|
|
bdf14dc173 | ||
|
|
21ddfdf39a | ||
|
|
d5f9e03fca | ||
|
|
9b3389107c | ||
|
|
184bdaa072 | ||
|
|
5c6bc94683 | ||
|
|
caf4058643 | ||
|
|
ef38ec311a | ||
|
|
d52e8ef81c | ||
|
|
9644ab7025 | ||
|
|
7abd1d5126 | ||
|
|
1a81202c4f | ||
|
|
d1ab30dc54 | ||
|
|
f25ff28d1c | ||
|
|
e0c62a93a1 | ||
|
|
34f6d346b5 | ||
|
|
a547b56e5b | ||
|
|
b7f56fce8a | ||
|
|
3d100841f6 | ||
|
|
5713f8474e | ||
|
|
0a8c41d6e2 | ||
|
|
6d4b68b490 | ||
|
|
b7f1bbcce7 | ||
|
|
abd3abc99c | ||
|
|
ac38c32963 | ||
|
|
74a5d14239 | ||
|
|
2f4f00e4c6 | ||
|
|
67c184546c | ||
|
|
3d4cc89e85 | ||
|
|
6cc823a6c4 | ||
|
|
d94e792124 | ||
|
|
033db0da30 | ||
|
|
09c2ae9716 | ||
|
|
ba56f006fc | ||
|
|
75bf9a79af | ||
|
|
ed2698b25f | ||
|
|
52ad1d2e01 | ||
|
|
f18ea97ee4 | ||
|
|
07d7ee0dc6 | ||
|
|
327cd5a69d | ||
|
|
e217ef3a2d | ||
|
|
407f438d11 | ||
|
|
28e19ee314 | ||
|
|
7ca345011a | ||
|
|
02b671aa02 | ||
|
|
06895751d1 | ||
|
|
02c9ff3be2 | ||
|
|
5d8785b43a | ||
|
|
7a65d3de5d | ||
|
|
bd2f40996a | ||
|
|
9fd0581bf0 | ||
|
|
eefb7e8744 | ||
|
|
cb13d66af0 | ||
|
|
1f36f5b7a2 | ||
|
|
bcb47c2c49 | ||
|
|
8165a5b270 | ||
|
|
29df2a9f8c | ||
|
|
2b0e0e02ba | ||
|
|
fe7fd06c5d | ||
|
|
3b8fed7e4b | ||
|
|
90de1764cc | ||
|
|
9780b0c442 | ||
|
|
2fa130caf4 | ||
|
|
5e87b2aca7 | ||
|
|
e0394952ce | ||
|
|
9af18aa7d8 | ||
|
|
668190adc5 | ||
|
|
be5150d9fe | ||
|
|
e80ebcad71 | ||
|
|
75ee3eaf53 | ||
|
|
793c19c8fc | ||
|
|
30f019fb76 | ||
|
|
0d4c9c5ea7 | ||
|
|
b29e14f6a9 | ||
|
|
218a70c516 | ||
|
|
b8200806cf | ||
|
|
27530a9fbb | ||
|
|
d072a60421 | ||
|
|
7c627b5124 | ||
|
|
787cfc6623 | ||
|
|
8e66e916f8 | ||
|
|
5ba5e97350 | ||
|
|
db77945884 | ||
|
|
bfd28af29d | ||
|
|
70fccc794a | ||
|
|
d5eb4a7b25 | ||
|
|
d9ec9539b3 | ||
|
|
406e1d7119 | ||
|
|
834ded21d8 | ||
|
|
c7cb6a492e | ||
|
|
7840e6ddd4 | ||
|
|
d910b14072 | ||
|
|
7c17210d47 | ||
|
|
117949aa8e | ||
|
|
225e47902b | ||
|
|
5f4866a30a | ||
|
|
28283a6966 | ||
|
|
e92390c5fb | ||
|
|
1e752e2293 | ||
|
|
51c60978b0 | ||
|
|
8f079fbb6c | ||
|
|
16fa7681c3 | ||
|
|
46d1619226 | ||
|
|
8c291c5677 | ||
|
|
ec726f409d | ||
|
|
5139682d94 | ||
|
|
6d4e2ba5df | ||
|
|
583cbb6dfd | ||
|
|
566711b9b9 | ||
|
|
f1ee1338e0 | ||
|
|
83a00bc1ab | ||
|
|
f405860ca0 | ||
|
|
3d58c274f1 | ||
|
|
a3484d8199 | ||
|
|
1f401f745b | ||
|
|
adb236cb13 | ||
|
|
1220aa36aa | ||
|
|
21a24919f5 | ||
|
|
df0d2135ce | ||
|
|
9ed9eb7c45 | ||
|
|
e4302a2b09 | ||
|
|
a174191dfd | ||
|
|
b5b3868f21 | ||
|
|
7137ecbd58 | ||
|
|
6452b9a4db | ||
|
|
495b903b08 | ||
|
|
b96c2c0282 | ||
|
|
3055c413af | ||
|
|
b4bedf8053 | ||
|
|
be2bd2e073 | ||
|
|
b1ee45f5c7 | ||
|
|
601e14e667 | ||
|
|
194e6ce729 | ||
|
|
ba38666a08 | ||
|
|
eb1ca82ebd | ||
|
|
343f7c4344 | ||
|
|
aad0f974f2 | ||
|
|
2e0cd39144 | ||
|
|
203bc9c4ef | ||
|
|
2199648fc8 | ||
|
|
b489376173 | ||
|
|
7c309e74e6 | ||
|
|
0ccf222961 | ||
|
|
56d703e106 | ||
|
|
24d3b3519e | ||
|
|
e7ebaec3b4 | ||
|
|
357a886c44 | ||
|
|
d76f68242b | ||
|
|
98faccfdb6 | ||
|
|
5a4d18a7d0 | ||
|
|
0e7803459f | ||
|
|
a64852414f | ||
|
|
9b251271cc | ||
|
|
94f6005b3f | ||
|
|
3c2fe176ab | ||
|
|
a5609cb39f | ||
|
|
e67ee94f2c | ||
|
|
98341b6c68 | ||
|
|
69b57c9b4d | ||
|
|
cf8514a651 | ||
|
|
721f0dbb33 | ||
|
|
4690724d0f | ||
|
|
6938c21f0b | ||
|
|
3fcfd2761a | ||
|
|
553b6f090f | ||
|
|
7d6435bfdc | ||
|
|
6d5b470689 | ||
|
|
ab756cbbaa | ||
|
|
3e7d5660ba | ||
|
|
f244684852 | ||
|
|
413775f4e3 | ||
|
|
6f98ce7512 | ||
|
|
a979406458 | ||
|
|
60b7f106cc | ||
|
|
ba3ca1d0ac | ||
|
|
039d2a5a8d | ||
|
|
cccd53a808 | ||
|
|
9338656050 | ||
|
|
cc693296f2 | ||
|
|
939ed8cac4 | ||
|
|
0b2ed364aa | ||
|
|
315bd6c458 | ||
|
|
243b4ca640 | ||
|
|
1c5e4f407b | ||
|
|
7124cda302 | ||
|
|
0a5a6d545f | ||
|
|
e6f576c226 | ||
|
|
465a07811f | ||
|
|
360b4b5fef | ||
|
|
c156700b23 | ||
|
|
f605cf145e | ||
|
|
2a93a3eddb | ||
|
|
422e90f610 | ||
|
|
bc8c4d08b4 | ||
|
|
052c2c4268 | ||
|
|
beabccd65a | ||
|
|
b56ed1c88d | ||
|
|
a13e198944 | ||
|
|
1b469c82ee | ||
|
|
83e260592e | ||
|
|
6ba7f31490 | ||
|
|
5447726540 | ||
|
|
40891eba8c | ||
|
|
dcd1f1fe0a | ||
|
|
713d7298f6 | ||
|
|
a7ae18608a | ||
|
|
65b78e6e13 | ||
|
|
219c305e1c | ||
|
|
eb81c74b31 | ||
|
|
eb7654ec33 | ||
|
|
ec9cdf07d5 | ||
|
|
d01f5a4fd6 | ||
|
|
af023e8f62 | ||
|
|
3da7dc6e2b | ||
|
|
07119058a1 | ||
|
|
bc135a1993 | ||
|
|
f8374000f2 | ||
|
|
9d3e51f876 | ||
|
|
9ec69b27e2 | ||
|
|
7f58925139 | ||
|
|
980c90b31a | ||
|
|
add9f8d32e | ||
|
|
f75d088332 | ||
|
|
b161681273 | ||
|
|
f4ef78c080 | ||
|
|
9ad4ce3929 | ||
|
|
884eadd4f8 | ||
|
|
a266232f5c | ||
|
|
f97efcfbf9 | ||
|
|
5ae789beac | ||
|
|
71c23b5b34 | ||
|
|
6401d70aab | ||
|
|
67e8909cc6 | ||
|
|
21f251affc | ||
|
|
07cad18854 | ||
|
|
be010b4293 | ||
|
|
f719196635 | ||
|
|
9607a71381 | ||
|
|
d398f07826 | ||
|
|
31aab9fb7e |
No files matched your search
+11
-1
@@ -1,2 +1,12 @@
|
||||
/coverage
|
||||
/node_modules
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
@@ -0,0 +1,3 @@
|
||||
/dist/**
|
||||
/coverage/**
|
||||
/node_modules/**
|
||||
+3
-2
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"env": {
|
||||
"node": true,
|
||||
"es2021": true,
|
||||
"jest/globals": true
|
||||
"es6": true,
|
||||
"jest": true
|
||||
},
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:jest/recommended",
|
||||
"plugin:prettier/recommended"
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
/.yarn/releases/** binary
|
||||
/.yarn/plugins/** binary
|
||||
/dist/** linguist-generated=true
|
||||
/lib/** linguist-generated=true
|
||||
@@ -1 +0,0 @@
|
||||
* @crazy-max
|
||||
@@ -0,0 +1,3 @@
|
||||
# Code of conduct
|
||||
|
||||
- [Moby community guidelines](https://github.com/moby/moby/blob/master/CONTRIBUTING.md#moby-community-guidelines)
|
||||
@@ -0,0 +1,101 @@
|
||||
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
|
||||
name: Bug Report
|
||||
description: Report a bug
|
||||
labels:
|
||||
- status/triage
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to report a bug!
|
||||
If this is a security issue please report it to the [Docker Security team](mailto:security@docker.com).
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Contributing guidelines
|
||||
description: >
|
||||
Make sure you've read the contributing guidelines before proceeding.
|
||||
options:
|
||||
- label: I've read the [contributing guidelines](https://github.com/docker/login-action/blob/master/.github/CONTRIBUTING.md) and wholeheartedly agree
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: "I've found a bug, and:"
|
||||
description: |
|
||||
Make sure that your request fulfills all of the following requirements.
|
||||
If one requirement cannot be satisfied, explain in detail why.
|
||||
options:
|
||||
- label: The documentation does not mention anything about my problem
|
||||
- label: There are no open or closed issues that are related to my problem
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: >
|
||||
Provide a brief description of the bug in 1-2 sentences.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behaviour
|
||||
description: >
|
||||
Describe precisely what you'd expect to happen.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Actual behaviour
|
||||
description: >
|
||||
Describe precisely what is actually happening.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Repository URL
|
||||
description: >
|
||||
Enter the URL of the repository where you are experiencing the
|
||||
issue. If your repository is private, provide a link to a minimal
|
||||
repository that reproduces the issue.
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Workflow run URL
|
||||
description: >
|
||||
Enter the URL of the GitHub Action workflow run if public (e.g.
|
||||
`https://github.com/<user>/<repo>/actions/runs/<id>`)
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: YAML workflow
|
||||
description: |
|
||||
Provide the YAML of the workflow that's causing the issue.
|
||||
Make sure to remove any sensitive information.
|
||||
render: yaml
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Workflow logs
|
||||
description: >
|
||||
[Attach](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/attaching-files)
|
||||
the [log file of your workflow run](https://docs.github.com/en/actions/managing-workflow-runs/using-workflow-run-logs#downloading-logs)
|
||||
and make sure to remove any sensitive information.
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: BuildKit logs
|
||||
description: >
|
||||
If applicable, provide the [BuildKit container logs](https://docs.docker.com/build/ci/github-actions/configure-builder/#buildkit-container-logs)
|
||||
render: text
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional info
|
||||
description: |
|
||||
Provide any additional information that could be useful.
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
---
|
||||
|
||||
### Behaviour
|
||||
|
||||
#### Steps to reproduce this issue
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
#### Expected behaviour
|
||||
|
||||
> Tell us what should happen
|
||||
|
||||
#### Actual behaviour
|
||||
|
||||
> Tell us what happens instead
|
||||
|
||||
### Configuration
|
||||
|
||||
* Repository URL (if public):
|
||||
* Build URL (if public):
|
||||
|
||||
```yml
|
||||
# paste your YAML workflow file here and remove sensitive data
|
||||
```
|
||||
|
||||
### Logs
|
||||
|
||||
> Download the [log file of your build](https://docs.github.com/en/actions/managing-workflow-runs/using-workflow-run-logs#downloading-logs)
|
||||
> and [attach it](https://docs.github.com/en/github/managing-your-work-on-github/file-attachments-on-issues-and-pull-requests) to this issue.
|
||||
@@ -0,0 +1,9 @@
|
||||
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Questions and Discussions
|
||||
url: https://github.com/docker/login-action/discussions/new
|
||||
about: Use Github Discussions to ask questions and/or open discussion topics.
|
||||
- name: Documentation
|
||||
url: https://docs.docker.com/build/ci/github-actions/
|
||||
about: Read the documentation.
|
||||
@@ -0,0 +1,15 @@
|
||||
# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
|
||||
name: Feature request
|
||||
description: Missing functionality? Come tell us about it!
|
||||
labels:
|
||||
- kind/enhancement
|
||||
- status/triage
|
||||
|
||||
body:
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: What is the feature you want to see?
|
||||
validations:
|
||||
required: true
|
||||
@@ -0,0 +1,12 @@
|
||||
# Reporting security issues
|
||||
|
||||
The project maintainers take security seriously. If you discover a security
|
||||
issue, please bring it to their attention right away!
|
||||
|
||||
**Please _DO NOT_ file a public issue**, instead send your report privately to
|
||||
[security@docker.com](mailto:security@docker.com).
|
||||
|
||||
Security reports are greatly appreciated, and we will publicly thank you for it.
|
||||
We also like to send gifts—if you'd like Docker swag, make sure to let
|
||||
us know. We currently do not offer a paid security bounty program, but are not
|
||||
ruling it out in the future.
|
||||
@@ -1,29 +0,0 @@
|
||||
# Support [](https://isitmaintained.com/project/docker/login-action)
|
||||
|
||||
## Reporting an issue
|
||||
|
||||
Please do a search in [open issues](https://github.com/docker/login-action/issues?utf8=%E2%9C%93&q=) to see if the issue or feature request has already been filed.
|
||||
|
||||
If you find your issue already exists, make relevant comments and add your [reaction](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments). Use a reaction in place of a "+1" comment.
|
||||
|
||||
:+1: - upvote
|
||||
|
||||
:-1: - downvote
|
||||
|
||||
If you cannot find an existing issue that describes your bug or feature, submit an issue using the guidelines below.
|
||||
|
||||
## Writing good bug reports and feature requests
|
||||
|
||||
File a single issue per problem and feature request.
|
||||
|
||||
* Do not enumerate multiple bugs or feature requests in the same issue.
|
||||
* Do not add your issue as a comment to an existing issue unless it's for the identical input. Many issues look similar, but have different causes.
|
||||
|
||||
The more information you can provide, the more likely someone will be successful reproducing the issue and finding a fix.
|
||||
|
||||
You are now ready to [create a new issue](https://github.com/docker/login-action/issues/new/choose)!
|
||||
|
||||
## Closure policy
|
||||
|
||||
* Issues that don't have the information requested above (when applicable) will be closed immediately and the poster directed to the support guidelines.
|
||||
* Issues that go a week without a response from original poster are subject to closure at our discretion.
|
||||
@@ -11,6 +11,14 @@ updates:
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
versioning-strategy: "increase"
|
||||
groups:
|
||||
aws-sdk-dependencies:
|
||||
patterns:
|
||||
- "*aws-sdk*"
|
||||
proxy-agent-dependencies:
|
||||
patterns:
|
||||
- "*-proxy-agent"
|
||||
allow:
|
||||
- dependency-type: "production"
|
||||
labels:
|
||||
|
||||
+215
-17
@@ -1,5 +1,9 @@
|
||||
name: ci
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
@@ -15,7 +19,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Stop docker
|
||||
run: |
|
||||
@@ -39,7 +43,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: ./
|
||||
@@ -56,7 +60,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: ./
|
||||
@@ -81,7 +85,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to ACR
|
||||
uses: ./
|
||||
@@ -101,7 +105,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: ./
|
||||
@@ -120,7 +124,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to ECR
|
||||
uses: ./
|
||||
@@ -140,10 +144,10 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
uses: aws-actions/configure-aws-credentials@v5
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
@@ -165,9 +169,10 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to Public ECR
|
||||
continue-on-error: ${{ matrix.os == 'windows-latest' }}
|
||||
uses: ./
|
||||
with:
|
||||
registry: public.ecr.aws
|
||||
@@ -187,21 +192,22 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
uses: aws-actions/configure-aws-credentials@v5
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
-
|
||||
name: Login to ECR
|
||||
name: Login to Public ECR
|
||||
continue-on-error: ${{ matrix.os == 'windows-latest' }}
|
||||
uses: ./
|
||||
with:
|
||||
registry: public.ecr.aws
|
||||
|
||||
github-container:
|
||||
ghcr:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -212,7 +218,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: ./
|
||||
@@ -232,7 +238,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to GitLab
|
||||
uses: ./
|
||||
@@ -252,7 +258,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to Google Artifact Registry
|
||||
uses: ./
|
||||
@@ -272,7 +278,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to Google Container Registry
|
||||
uses: ./
|
||||
@@ -280,3 +286,195 @@ jobs:
|
||||
registry: gcr.io
|
||||
username: _json_key
|
||||
password: ${{ secrets.GCR_JSON_KEY }}
|
||||
|
||||
registry-auth:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to registries
|
||||
uses: ./
|
||||
with:
|
||||
registry-auth: |
|
||||
- username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- registry: public.ecr.aws
|
||||
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
- registry: registry.gitlab.com
|
||||
username: ${{ secrets.GITLAB_USERNAME }}
|
||||
password: ${{ secrets.GITLAB_TOKEN }}
|
||||
|
||||
registry-auth-dup:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to registries
|
||||
uses: ./
|
||||
with:
|
||||
registry-auth: |
|
||||
- registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- registry: public.ecr.aws
|
||||
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
- registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
registry-auth-exclusive:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to registries
|
||||
id: login
|
||||
continue-on-error: true
|
||||
uses: ./
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
registry-auth: |
|
||||
- username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Check
|
||||
run: |
|
||||
if [ "${{ steps.login.outcome }}" != "failure" ] || [ "${{ steps.login.conclusion }}" != "success" ]; then
|
||||
echo "::error::Should have failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
scope-dockerhub:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: ./
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
scope: '@push'
|
||||
-
|
||||
name: Print config.json files
|
||||
shell: bash
|
||||
run: |
|
||||
shopt -s globstar nullglob
|
||||
for file in ~/.docker/**/config.json; do
|
||||
echo "## ${file}"
|
||||
jq '(.auths[]?.auth) |= "REDACTED"' "$file"
|
||||
echo ""
|
||||
done
|
||||
|
||||
scope-dockerhub-repo:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: ./
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
scope: 'docker/buildx-bin@push'
|
||||
-
|
||||
name: Print config.json files
|
||||
shell: bash
|
||||
run: |
|
||||
shopt -s globstar nullglob
|
||||
for file in ~/.docker/**/config.json; do
|
||||
echo "## ${file}"
|
||||
jq '(.auths[]?.auth) |= "REDACTED"' "$file"
|
||||
echo ""
|
||||
done
|
||||
|
||||
scope-ghcr:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: ./
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
scope: '@push'
|
||||
-
|
||||
name: Print config.json files
|
||||
shell: bash
|
||||
run: |
|
||||
shopt -s globstar nullglob
|
||||
for file in ~/.docker/**/config.json; do
|
||||
echo "## ${file}"
|
||||
jq '(.auths[]?.auth) |= "REDACTED"' "$file"
|
||||
echo ""
|
||||
done
|
||||
|
||||
scope-ghcr-repo:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: ./
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
scope: 'docker/login-action@push'
|
||||
-
|
||||
name: Print config.json files
|
||||
shell: bash
|
||||
run: |
|
||||
shopt -s globstar nullglob
|
||||
for file in ~/.docker/**/config.json; do
|
||||
echo "## ${file}"
|
||||
jq '(.auths[]?.auth) |= "REDACTED"' "$file"
|
||||
echo ""
|
||||
done
|
||||
@@ -0,0 +1,50 @@
|
||||
name: codeql
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'releases/v*'
|
||||
paths:
|
||||
- '.github/workflows/codeql.yml'
|
||||
- 'dist/**'
|
||||
- 'src/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/codeql.yml'
|
||||
- 'dist/**'
|
||||
- 'src/**'
|
||||
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language:
|
||||
- javascript-typescript
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
config: |
|
||||
paths:
|
||||
- src
|
||||
-
|
||||
name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v4
|
||||
-
|
||||
name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
@@ -0,0 +1,17 @@
|
||||
name: pr-assign-author
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
run:
|
||||
uses: crazy-max/.github/.github/workflows/pr-assign-author.yml@1b673f36fad86812f538c1df9794904038a23cbf
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
@@ -0,0 +1,21 @@
|
||||
name: publish
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
packages: write
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Publish
|
||||
uses: actions/publish-immutable-action@v0.0.4
|
||||
+10
-12
@@ -1,14 +1,15 @@
|
||||
name: test
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'releases/v*'
|
||||
pull_request:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'releases/v*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -16,19 +17,16 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
-
|
||||
name: Validate
|
||||
uses: docker/bake-action@v1
|
||||
with:
|
||||
targets: validate
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: Test
|
||||
uses: docker/bake-action@v1
|
||||
uses: docker/bake-action@v6
|
||||
with:
|
||||
source: .
|
||||
targets: test
|
||||
-
|
||||
name: Upload coverage
|
||||
uses: codecov/codecov-action@v3
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
file: ./coverage/clover.xml
|
||||
files: ./coverage/clover.xml
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
@@ -0,0 +1,43 @@
|
||||
name: validate
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'releases/v*'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
targets: ${{ steps.generate.outputs.targets }}
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
-
|
||||
name: List targets
|
||||
id: generate
|
||||
uses: docker/bake-action/subaction/list-targets@v6
|
||||
with:
|
||||
target: validate
|
||||
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- prepare
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: ${{ fromJson(needs.prepare.outputs.targets) }}
|
||||
steps:
|
||||
-
|
||||
name: Validate
|
||||
uses: docker/bake-action@v6
|
||||
with:
|
||||
targets: ${{ matrix.target }}
|
||||
+14
-57
@@ -1,12 +1,5 @@
|
||||
/.dev
|
||||
node_modules/
|
||||
lib
|
||||
# https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
|
||||
|
||||
# Jetbrains
|
||||
/.idea
|
||||
/*.iml
|
||||
|
||||
# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
@@ -14,6 +7,7 @@ npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
@@ -24,34 +18,14 @@ pids
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
@@ -61,36 +35,19 @@ typings/
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.test
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
# nuxt.js build output
|
||||
.nuxt
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
@@ -0,0 +1,6 @@
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# yarn v2
|
||||
.yarn/
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
# https://yarnpkg.com/configuration/yarnrc
|
||||
|
||||
compressionLevel: mixed
|
||||
enableGlobalCache: false
|
||||
enableHardenedMode: true
|
||||
|
||||
logFilters:
|
||||
- code: YN0013
|
||||
level: discard
|
||||
- code: YN0019
|
||||
level: discard
|
||||
- code: YN0076
|
||||
level: discard
|
||||
- code: YN0086
|
||||
level: discard
|
||||
|
||||
nodeLinker: node-modules
|
||||
@@ -1,7 +1,7 @@
|
||||
[](https://github.com/docker/login-action/releases/latest)
|
||||
[](https://github.com/marketplace/actions/docker-login)
|
||||
[](https://github.com/docker/login-action/actions?workflow=ci)
|
||||
[](https://github.com/docker/login-action/actions?workflow=test)
|
||||
[](https://github.com/docker/login-action/actions?workflow=ci)
|
||||
[](https://github.com/docker/login-action/actions?workflow=test)
|
||||
[](https://codecov.io/gh/docker/login-action)
|
||||
|
||||
## About
|
||||
@@ -23,16 +23,20 @@ ___
|
||||
* [AWS Public Elastic Container Registry (ECR)](#aws-public-elastic-container-registry-ecr)
|
||||
* [OCI Oracle Cloud Infrastructure Registry (OCIR)](#oci-oracle-cloud-infrastructure-registry-ocir)
|
||||
* [Quay.io](#quayio)
|
||||
* [DigitalOcean](#digitalocean-container-registry)
|
||||
* [Authenticate to multiple registries](#authenticate-to-multiple-registries)
|
||||
* [Set scopes for the authentication token](#set-scopes-for-the-authentication-token)
|
||||
* [Customizing](#customizing)
|
||||
* [inputs](#inputs)
|
||||
* [Keep up-to-date with GitHub Dependabot](#keep-up-to-date-with-github-dependabot)
|
||||
* [Contributing](#contributing)
|
||||
|
||||
## Usage
|
||||
|
||||
### Docker Hub
|
||||
|
||||
To authenticate against [Docker Hub](https://hub.docker.com) it's strongly recommended to create a
|
||||
[personal access token](https://docs.docker.com/docker-hub/access-tokens/) as an alternative to your password.
|
||||
When authenticating to [Docker Hub](https://hub.docker.com) with GitHub Actions,
|
||||
use a [personal access token](https://docs.docker.com/docker-hub/access-tokens/).
|
||||
Don't use your account password.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -47,17 +51,17 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
```
|
||||
|
||||
### GitHub Container Registry
|
||||
|
||||
To authenticate against the [GitHub Container Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry),
|
||||
use the [`GITHUB_TOKEN`](https://docs.github.com/en/actions/reference/authentication-in-a-workflow) for the best
|
||||
security and experience.
|
||||
To authenticate to the [GitHub Container Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry),
|
||||
use the [`GITHUB_TOKEN`](https://docs.github.com/en/actions/reference/authentication-in-a-workflow)
|
||||
secret.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -72,7 +76,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
@@ -100,18 +104,23 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to GitLab
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: registry.gitlab.com
|
||||
username: ${{ secrets.GITLAB_USERNAME }}
|
||||
username: ${{ vars.GITLAB_USERNAME }}
|
||||
password: ${{ secrets.GITLAB_PASSWORD }}
|
||||
```
|
||||
|
||||
If you have [Two-Factor Authentication](https://gitlab.com/help/user/profile/account/two_factor_authentication)
|
||||
enabled, use a [Personal Access Token](https://gitlab.com/help/user/profile/personal_access_tokens)
|
||||
instead of a password.
|
||||
|
||||
### Azure Container Registry (ACR)
|
||||
|
||||
[Create a service principal](https://docs.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal#create-a-service-principal)
|
||||
with access to your container registry through the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli)
|
||||
and take note of the generated service principal's ID (also called _client ID_) and password (also called _client secret_).
|
||||
and take note of the generated service principal's ID (also called _client ID_)
|
||||
and password (also called _client secret_).
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -126,10 +135,10 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to ACR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <registry-name>.azurecr.io
|
||||
username: ${{ secrets.AZURE_CLIENT_ID }}
|
||||
username: ${{ vars.AZURE_CLIENT_ID }}
|
||||
password: ${{ secrets.AZURE_CLIENT_SECRET }}
|
||||
```
|
||||
|
||||
@@ -137,16 +146,21 @@ jobs:
|
||||
|
||||
### Google Container Registry (GCR)
|
||||
|
||||
> [Google Artifact Registry](#google-artifact-registry-gar) is the evolution of Google Container Registry. As a
|
||||
> fully-managed service with support for both container images and non-container artifacts. If you currently use
|
||||
> Google Container Registry, use the information [on this page](https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr)
|
||||
> [Google Artifact Registry](#google-artifact-registry-gar) is the evolution of
|
||||
> Google Container Registry. As a fully-managed service with support for both
|
||||
> container images and non-container artifacts. If you currently use Google
|
||||
> Container Registry, use the information [on this page](https://cloud.google.com/artifact-registry/docs/transition/transition-from-gcr)
|
||||
> to learn about transitioning to Google Artifact Registry.
|
||||
|
||||
You can use either workload identity federation based keyless authentication or service account based authentication.
|
||||
You can authenticate with workload identity federation or a service account.
|
||||
|
||||
#### Workload identity federation based authentication
|
||||
#### Workload identity federation
|
||||
|
||||
Configure the workload identity federation for github actions in gcloud (for steps, [refer here](https://github.com/google-github-actions/auth#setting-up-workload-identity-federation)). In the steps, your service account should the ability to push to GCR. Then use google-github-actions/auth action for authentication using workload identity like below:
|
||||
Configure the workload identity federation for GitHub Actions in Google Cloud,
|
||||
[see here](https://github.com/google-github-actions/auth#setting-up-workload-identity-federation).
|
||||
Your service account must have permission to push to GCR. Use the
|
||||
`google-github-actions/auth` action to authenticate using workload identity as
|
||||
shown in the following example:
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -159,33 +173,35 @@ jobs:
|
||||
login:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- id: 'auth'
|
||||
name: 'Authenticate to Google Cloud'
|
||||
uses: 'google-github-actions/auth@v0'
|
||||
-
|
||||
name: Authenticate to Google Cloud
|
||||
id: auth
|
||||
uses: google-github-actions/auth@v1
|
||||
with:
|
||||
token_format: 'access_token'
|
||||
workload_identity_provider: '<workload_identity_provider>'
|
||||
service_account: '<service_account>'
|
||||
|
||||
- name: Login to GCR
|
||||
uses: docker/login-action@v1
|
||||
token_format: access_token
|
||||
workload_identity_provider: <workload_identity_provider>
|
||||
service_account: <service_account>
|
||||
-
|
||||
name: Login to GCR
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: gcr.io
|
||||
username: oauth2accesstoken
|
||||
password: ${{ steps.auth.outputs.access_token }}
|
||||
```
|
||||
|
||||
> Replace `<workload_identity_provider>` with configured workload identity provider. For steps to configure, [refer here](https://github.com/google-github-actions/auth#setting-up-workload-identity-federation).
|
||||
> Replace `<workload_identity_provider>` with configured workload identity
|
||||
> provider. For steps to configure, [see here](https://github.com/google-github-actions/auth#setting-up-workload-identity-federation).
|
||||
|
||||
> Replace `<service_account>` with configured service account in workload identity provider which has access to push to GCR
|
||||
> Replace `<service_account>` with configured service account in workload
|
||||
> identity provider which has access to push to GCR
|
||||
|
||||
#### Service account based authentication
|
||||
|
||||
Use a service account with the ability to push to GCR and [configure access control](https://cloud.google.com/container-registry/docs/access-control).
|
||||
Then create and download the JSON key for this service account and save content of `.json` file
|
||||
[as a secret](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
called `GCR_JSON_KEY` in your GitHub repo. Ensure you set the username to `_json_key`,
|
||||
or `_json_key_base64` if you use a base64-encoded key.
|
||||
Use a service account with permission to push to GCR and [configure access control](https://cloud.google.com/container-registry/docs/access-control).
|
||||
Download the key for the service account as a JSON file. Save the contents of
|
||||
the file [as a secret](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
named `GCR_JSON_KEY` in your GitHub repository. Set the username to `_json_key`.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -200,7 +216,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to GCR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: gcr.io
|
||||
username: _json_key
|
||||
@@ -209,11 +225,13 @@ jobs:
|
||||
|
||||
### Google Artifact Registry (GAR)
|
||||
|
||||
You can use either workload identity federation based keyless authentication or service account based authentication.
|
||||
You can authenticate with workload identity federation or a service account.
|
||||
|
||||
#### Workload identity federation based authentication
|
||||
#### Workload identity federation
|
||||
|
||||
Configure the workload identity federation for github actions in gcloud (for steps, [refer here](https://github.com/google-github-actions/auth#setting-up-workload-identity-federation)). In the steps, your service account should the ability to push to GAR. Then use google-github-actions/auth action for authentication using workload identity like below:
|
||||
Your service account must have permission to push to GAR. Use the
|
||||
`google-github-actions/auth` action to authenticate using workload identity as
|
||||
shown in the following example:
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -226,34 +244,38 @@ jobs:
|
||||
login:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- id: 'auth'
|
||||
name: 'Authenticate to Google Cloud'
|
||||
uses: 'google-github-actions/auth@v0'
|
||||
-
|
||||
name: Authenticate to Google Cloud
|
||||
id: auth
|
||||
uses: google-github-actions/auth@v1
|
||||
with:
|
||||
token_format: 'access_token'
|
||||
workload_identity_provider: '<workload_identity_provider>'
|
||||
service_account: '<service_account>'
|
||||
|
||||
- name: Login to GAR
|
||||
uses: docker/login-action@v1
|
||||
token_format: access_token
|
||||
workload_identity_provider: <workload_identity_provider>
|
||||
service_account: <service_account>
|
||||
-
|
||||
name: Login to GAR
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <location>-docker.pkg.dev
|
||||
username: oauth2accesstoken
|
||||
password: ${{ steps.auth.outputs.access_token }}
|
||||
```
|
||||
> Replace `<workload_identity_provider>` with configured workload identity provider
|
||||
|
||||
> Replace `<service_account>` with configured service account in workload identity provider which has access to push to GCR
|
||||
> Replace `<workload_identity_provider>` with configured workload identity
|
||||
> provider
|
||||
|
||||
> Replace `<service_account>` with configured service account in workload
|
||||
> identity provider which has access to push to GCR
|
||||
|
||||
> Replace `<location>` with the regional or multi-regional [location](https://cloud.google.com/artifact-registry/docs/repo-organize#locations)
|
||||
> of the repository where the image is stored.
|
||||
|
||||
#### Service account based authentication
|
||||
|
||||
Use a service account with the ability to push to GAR and [configure access control](https://cloud.google.com/artifact-registry/docs/access-control).
|
||||
Then create and download the JSON key for this service account and save content of `.json` file
|
||||
[as a secret](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
called `GAR_JSON_KEY` in your GitHub repo. Ensure you set the username to `_json_key`,
|
||||
Use a service account with permission to push to GAR and [configure access control](https://cloud.google.com/artifact-registry/docs/access-control).
|
||||
Download the key for the service account as a JSON file. Save the contents of
|
||||
the file [as a secret](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
named `GAR_JSON_KEY` in your GitHub repository. Set the username to `_json_key`,
|
||||
or `_json_key_base64` if you use a base64-encoded key.
|
||||
|
||||
```yaml
|
||||
@@ -269,7 +291,7 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to GAR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <location>-docker.pkg.dev
|
||||
username: _json_key
|
||||
@@ -281,8 +303,8 @@ jobs:
|
||||
|
||||
### AWS Elastic Container Registry (ECR)
|
||||
|
||||
Use an IAM user with the ability to [push to ECR with `AmazonEC2ContainerRegistryPowerUser` managed policy for example](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ecr_managed_policies.html#AmazonEC2ContainerRegistryPowerUser).
|
||||
Then create and download access keys and save `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [as secrets](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
Use an IAM user with the ability to [push to ECR with `AmazonEC2ContainerRegistryPowerUser` managed policy for example](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser).
|
||||
Download the access keys and save them as `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [as secrets](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
in your GitHub repo.
|
||||
|
||||
```yaml
|
||||
@@ -298,15 +320,15 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to ECR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <aws-account-number>.dkr.ecr.<region>.amazonaws.com
|
||||
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
username: ${{ vars.AWS_ACCESS_KEY_ID }}
|
||||
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
```
|
||||
|
||||
If you need to log in to Amazon ECR registries associated with other accounts, you can use the `AWS_ACCOUNT_IDS`
|
||||
environment variable:
|
||||
If you need to log in to Amazon ECR registries associated with other accounts,
|
||||
you can use the `AWS_ACCOUNT_IDS` environment variable:
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -321,10 +343,10 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to ECR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <aws-account-number>.dkr.ecr.<region>.amazonaws.com
|
||||
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
username: ${{ vars.AWS_ACCESS_KEY_ID }}
|
||||
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
env:
|
||||
AWS_ACCOUNT_IDS: 012345678910,023456789012
|
||||
@@ -332,8 +354,8 @@ jobs:
|
||||
|
||||
> Only available with [AWS CLI version 1](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login.html)
|
||||
|
||||
You can also use the [Configure AWS Credentials](https://github.com/aws-actions/configure-aws-credentials) action in
|
||||
combination with this action:
|
||||
You can also use the [Configure AWS Credentials](https://github.com/aws-actions/configure-aws-credentials)
|
||||
action in combination with this action:
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -348,14 +370,14 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-access-key-id: ${{ vars.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: <region>
|
||||
-
|
||||
name: Login to ECR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <aws-account-number>.dkr.ecr.<region>.amazonaws.com
|
||||
```
|
||||
@@ -364,9 +386,10 @@ jobs:
|
||||
|
||||
### AWS Public Elastic Container Registry (ECR)
|
||||
|
||||
Use an IAM user with the ability to [push to ECR Public with `AmazonElasticContainerRegistryPublicPowerUser` managed policy for example](https://docs.aws.amazon.com/AmazonECR/latest/public/public-ecr-managed-policies.html#AmazonElasticContainerRegistryPublicPowerUser).
|
||||
Then create and download access keys and save `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [as secrets](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
in your GitHub repo.
|
||||
Use an IAM user with permission to push to ECR Public, for example using [managed policies](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerRegistryPowerUser).
|
||||
Download the access keys and save them as `AWS_ACCESS_KEY_ID` and
|
||||
`AWS_SECRET_ACCESS_KEY` [secrets](https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository)
|
||||
in your GitHub repository.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -381,10 +404,10 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to Public ECR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: public.ecr.aws
|
||||
username: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
username: ${{ vars.AWS_ACCESS_KEY_ID }}
|
||||
password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
env:
|
||||
AWS_REGION: <region>
|
||||
@@ -415,10 +438,10 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to OCIR
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: <region>.ocir.io
|
||||
username: ${{ secrets.OCI_USERNAME }}
|
||||
username: ${{ vars.OCI_USERNAME }}
|
||||
password: ${{ secrets.OCI_TOKEN }}
|
||||
```
|
||||
|
||||
@@ -426,7 +449,8 @@ jobs:
|
||||
|
||||
### Quay.io
|
||||
|
||||
Use a [Robot account](https://docs.quay.io/glossary/robot-accounts.html) with the ability to push to a public/private Quay.io repository.
|
||||
Use a [Robot account](https://docs.quay.io/glossary/robot-accounts.html) with
|
||||
permission to push to a Quay.io repository.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
@@ -441,39 +465,173 @@ jobs:
|
||||
steps:
|
||||
-
|
||||
name: Login to Quay.io
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: quay.io
|
||||
username: ${{ secrets.QUAY_USERNAME }}
|
||||
username: ${{ vars.QUAY_USERNAME }}
|
||||
password: ${{ secrets.QUAY_ROBOT_TOKEN }}
|
||||
```
|
||||
|
||||
### DigitalOcean Container Registry
|
||||
|
||||
Use your DigitalOcean registered email address and an API access token to authenticate.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: main
|
||||
|
||||
jobs:
|
||||
login:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Login to DigitalOcean Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: registry.digitalocean.com
|
||||
username: ${{ vars.DIGITALOCEAN_USERNAME }}
|
||||
password: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
|
||||
```
|
||||
|
||||
### Authenticate to multiple registries
|
||||
|
||||
To authenticate against multiple registries, you can specify the login-action
|
||||
step multiple times in your workflow:
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: main
|
||||
|
||||
jobs:
|
||||
login:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
You can also use the `registry-auth` input for raw authentication to
|
||||
registries, defined as YAML objects. Each object have the same attributes as
|
||||
current inputs (except `logout`):
|
||||
|
||||
> [!WARNING]
|
||||
> We don't recommend using this method, it's better to use the action multiple
|
||||
> times as shown above.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: main
|
||||
|
||||
jobs:
|
||||
login:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Login to registries
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry-auth: |
|
||||
- username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
### Set scopes for the authentication token
|
||||
|
||||
The `scope` input allows limiting registry credentials to a specific repository
|
||||
or namespace scope when building images with Buildx.
|
||||
|
||||
This is useful in GitHub Actions to avoid overriding the Docker Hub
|
||||
authentication token embedded in GitHub-hosted runners, which is used for
|
||||
pulling images without rate limits. By scoping credentials, you can
|
||||
authenticate only where needed (typically for pushing), while keeping
|
||||
unauthenticated pulls for base images.
|
||||
|
||||
When `scope` is set, credentials are written to the Buildx configuration
|
||||
instead of the global Docker configuration. This means:
|
||||
* Authentication applies only to the specified scope
|
||||
* The default Docker Hub credentials remain available for pulls
|
||||
* Credentials are used only by Buildx during the build
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Credentials written to the Buildx configuration are only accessible by Buildx.
|
||||
> They are not available to `docker pull`, `docker push`, or any other Docker
|
||||
> CLI commands outside Buildx.
|
||||
|
||||
> [!NOTE]
|
||||
> This feature requires Buildx version 0.31.0 or later.
|
||||
|
||||
```yaml
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: main
|
||||
|
||||
jobs:
|
||||
login:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Login to Docker Hub (scoped)
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
scope: 'myorg/myimage@push'
|
||||
-
|
||||
name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
tags: myorg/myimage:latest
|
||||
```
|
||||
|
||||
In this example, base images are pulled using the embedded GitHub-hosted runner
|
||||
credentials, while authenticated access is used only to push `myorg/myimage`.
|
||||
|
||||
## Customizing
|
||||
|
||||
### inputs
|
||||
|
||||
Following inputs can be used as `step.with` keys
|
||||
The following inputs can be used as `step.with` keys:
|
||||
|
||||
| Name | Type | Default | Description |
|
||||
|------------------|---------|-----------------------------|------------------------------------|
|
||||
| `registry` | String | | Server address of Docker registry. If not set then will default to Docker Hub |
|
||||
| `username` | String | | Username used to log against the Docker registry |
|
||||
| `password` | String | | Password or personal access token used to log against the Docker registry |
|
||||
| `ecr` | String | `auto` | Specifies whether the given registry is ECR (`auto`, `true` or `false`) |
|
||||
| `logout` | Bool | `true` | Log out from the Docker registry at the end of a job |
|
||||
| Name | Type | Default | Description |
|
||||
|-----------------|--------|-------------|-------------------------------------------------------------------------------|
|
||||
| `registry` | String | `docker.io` | Server address of Docker registry. If not set then will default to Docker Hub |
|
||||
| `username` | String | | Username for authenticating to the Docker registry |
|
||||
| `password` | String | | Password or personal access token for authenticating the Docker registry |
|
||||
| `scope` | String | | Scope for the authentication token |
|
||||
| `ecr` | String | `auto` | Specifies whether the given registry is ECR (`auto`, `true` or `false`) |
|
||||
| `logout` | Bool | `true` | Log out from the Docker registry at the end of a job |
|
||||
| `registry-auth` | YAML | | Raw authentication to registries, defined as YAML objects |
|
||||
|
||||
## Keep up-to-date with GitHub Dependabot
|
||||
> [!NOTE]
|
||||
> The `registry-auth` input cannot be used with other inputs except `logout`.
|
||||
|
||||
Since [Dependabot](https://docs.github.com/en/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot)
|
||||
has [native GitHub Actions support](https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates#package-ecosystem),
|
||||
to enable it on your GitHub repo all you need to do is add the `.github/dependabot.yml` file:
|
||||
## Contributing
|
||||
|
||||
```yaml
|
||||
version: 2
|
||||
updates:
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
```
|
||||
Want to contribute? Awesome! You can find information about contributing to
|
||||
this project in the [CONTRIBUTING.md](/.github/CONTRIBUTING.md)
|
||||
+13
-2
@@ -1,5 +1,6 @@
|
||||
import {beforeEach, describe, expect, jest, test} from '@jest/globals';
|
||||
import {AuthorizationData} from '@aws-sdk/client-ecr';
|
||||
|
||||
import * as aws from '../src/aws';
|
||||
|
||||
describe('isECR', () => {
|
||||
@@ -9,7 +10,10 @@ describe('isECR', () => {
|
||||
['012345678901.dkr.ecr.eu-west-3.amazonaws.com', true],
|
||||
['876820548815.dkr.ecr.cn-north-1.amazonaws.com.cn', true],
|
||||
['390948362332.dkr.ecr.cn-northwest-1.amazonaws.com.cn', true],
|
||||
['public.ecr.aws', true]
|
||||
['012345678901.dkr-ecr.eu-north-1.on.aws', true],
|
||||
['012345678901.dkr.ecr.eusc-de-east-1.amazonaws.eu', true],
|
||||
['public.ecr.aws', true],
|
||||
['ecr-public.aws.com', true]
|
||||
])('given registry %p', async (registry, expected) => {
|
||||
expect(aws.isECR(registry)).toEqual(expected);
|
||||
});
|
||||
@@ -22,7 +26,10 @@ describe('isPubECR', () => {
|
||||
['012345678901.dkr.ecr.eu-west-3.amazonaws.com', false],
|
||||
['876820548815.dkr.ecr.cn-north-1.amazonaws.com.cn', false],
|
||||
['390948362332.dkr.ecr.cn-northwest-1.amazonaws.com.cn', false],
|
||||
['public.ecr.aws', true]
|
||||
['012345678901.dkr-ecr.eu-north-1.on.aws', false],
|
||||
['012345678901.dkr.ecr.eusc-de-east-1.amazonaws.eu', false],
|
||||
['public.ecr.aws', true],
|
||||
['ecr-public.aws.com', true]
|
||||
])('given registry %p', async (registry, expected) => {
|
||||
expect(aws.isPubECR(registry)).toEqual(expected);
|
||||
});
|
||||
@@ -33,6 +40,8 @@ describe('getRegion', () => {
|
||||
['012345678901.dkr.ecr.eu-west-3.amazonaws.com', 'eu-west-3'],
|
||||
['876820548815.dkr.ecr.cn-north-1.amazonaws.com.cn', 'cn-north-1'],
|
||||
['390948362332.dkr.ecr.cn-northwest-1.amazonaws.com.cn', 'cn-northwest-1'],
|
||||
['012345678901.dkr-ecr.eu-north-1.on.aws', 'eu-north-1'],
|
||||
['012345678901.dkr.ecr.eusc-de-east-1.amazonaws.eu', 'eusc-de-east-1'],
|
||||
['public.ecr.aws', 'us-east-1']
|
||||
])('given registry %p', async (registry, expected) => {
|
||||
expect(aws.getRegion(registry)).toEqual(expected);
|
||||
@@ -45,6 +54,8 @@ describe('getAccountIDs', () => {
|
||||
['012345678901.dkr.ecr.eu-west-3.amazonaws.com', '012345678910,023456789012', ['012345678901', '012345678910', '023456789012']],
|
||||
['012345678901.dkr.ecr.eu-west-3.amazonaws.com', '012345678901,012345678910,023456789012', ['012345678901', '012345678910', '023456789012']],
|
||||
['390948362332.dkr.ecr.cn-northwest-1.amazonaws.com.cn', '012345678910,023456789012', ['390948362332', '012345678910', '023456789012']],
|
||||
['876820548815.dkr-ecr.eu-north-1.on.aws', '012345678910,023456789012', ['876820548815', '012345678910', '023456789012']],
|
||||
['012345678901.dkr.ecr.eusc-de-east-1.amazonaws.eu', '012345678910,023456789012', ['012345678901', '012345678910', '023456789012']],
|
||||
['public.ecr.aws', undefined, []]
|
||||
])('given registry %p', async (registry, accountIDsEnv, expected) => {
|
||||
if (accountIDsEnv) {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {expect, test} from '@jest/globals';
|
||||
|
||||
import {getInputs} from '../src/context';
|
||||
|
||||
test('with password and username getInputs does not throw error', async () => {
|
||||
@@ -7,5 +8,5 @@ test('with password and username getInputs does not throw error', async () => {
|
||||
process.env['INPUT_LOGOUT'] = 'true';
|
||||
expect(() => {
|
||||
getInputs();
|
||||
}).not.toThrowError();
|
||||
}).not.toThrow();
|
||||
});
|
||||
@@ -1,14 +1,16 @@
|
||||
import {expect, jest, test} from '@jest/globals';
|
||||
import {loginStandard, logout} from '../src/docker';
|
||||
import * as path from 'path';
|
||||
import * as exec from '@actions/exec';
|
||||
|
||||
import {loginStandard, logout} from '../src/docker';
|
||||
|
||||
import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
|
||||
|
||||
process.env['RUNNER_TEMP'] = path.join(__dirname, 'runner');
|
||||
|
||||
test('loginStandard calls exec', async () => {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => {
|
||||
const execSpy = jest.spyOn(Docker, 'getExecOutput').mockImplementation(async () => {
|
||||
return {
|
||||
exitCode: expect.any(Number),
|
||||
stdout: expect.any(Function),
|
||||
@@ -22,7 +24,13 @@ test('loginStandard calls exec', async () => {
|
||||
|
||||
await loginStandard(registry, username, password);
|
||||
|
||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['login', '--password-stdin', '--username', username, registry], {
|
||||
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||
const callfunc = execSpy.mock.calls[0];
|
||||
if (callfunc && callfunc[1]) {
|
||||
// we don't want to check env opt
|
||||
callfunc[1].env = undefined;
|
||||
}
|
||||
expect(execSpy).toHaveBeenCalledWith(['login', '--password-stdin', '--username', username, registry], {
|
||||
input: Buffer.from(password),
|
||||
silent: true,
|
||||
ignoreReturnCode: true
|
||||
@@ -32,7 +40,7 @@ test('loginStandard calls exec', async () => {
|
||||
test('logout calls exec', async () => {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const execSpy = jest.spyOn(exec, 'getExecOutput').mockImplementation(async () => {
|
||||
const execSpy = jest.spyOn(Docker, 'getExecOutput').mockImplementation(async () => {
|
||||
return {
|
||||
exitCode: expect.any(Number),
|
||||
stdout: expect.any(Function),
|
||||
@@ -42,9 +50,15 @@ test('logout calls exec', async () => {
|
||||
|
||||
const registry = 'https://ghcr.io';
|
||||
|
||||
await logout(registry);
|
||||
await logout(registry, '');
|
||||
|
||||
expect(execSpy).toHaveBeenCalledWith(`docker`, ['logout', registry], {
|
||||
expect(execSpy).toHaveBeenCalledTimes(1);
|
||||
const callfunc = execSpy.mock.calls[0];
|
||||
if (callfunc && callfunc[1]) {
|
||||
// we don't want to check env opt
|
||||
callfunc[1].env = undefined;
|
||||
}
|
||||
expect(execSpy).toHaveBeenCalledWith(['logout', registry], {
|
||||
ignoreReturnCode: true
|
||||
});
|
||||
});
|
||||
@@ -1,71 +0,0 @@
|
||||
import {expect, jest, test} from '@jest/globals';
|
||||
import osm = require('os');
|
||||
|
||||
import {run} from '../src/main';
|
||||
import * as docker from '../src/docker';
|
||||
import * as stateHelper from '../src/state-helper';
|
||||
|
||||
import * as core from '@actions/core';
|
||||
|
||||
test('errors without username and password', async () => {
|
||||
jest.spyOn(osm, 'platform').mockImplementation(() => 'linux');
|
||||
process.env['INPUT_LOGOUT'] = 'true'; // default value
|
||||
const coreSpy = jest.spyOn(core, 'setFailed');
|
||||
|
||||
await run();
|
||||
expect(coreSpy).toHaveBeenCalledWith('Username and password required');
|
||||
});
|
||||
|
||||
test('successful with username and password', async () => {
|
||||
jest.spyOn(osm, 'platform').mockImplementation(() => 'linux');
|
||||
const setRegistrySpy = jest.spyOn(stateHelper, 'setRegistry');
|
||||
const setLogoutSpy = jest.spyOn(stateHelper, 'setLogout');
|
||||
const dockerSpy = jest.spyOn(docker, 'login').mockImplementation(jest.fn());
|
||||
|
||||
const username = 'dbowie';
|
||||
process.env[`INPUT_USERNAME`] = username;
|
||||
|
||||
const password = 'groundcontrol';
|
||||
process.env[`INPUT_PASSWORD`] = password;
|
||||
|
||||
const ecr = 'auto';
|
||||
process.env['INPUT_ECR'] = ecr;
|
||||
|
||||
const logout = false;
|
||||
process.env['INPUT_LOGOUT'] = String(logout);
|
||||
|
||||
await run();
|
||||
|
||||
expect(setRegistrySpy).toHaveBeenCalledWith('');
|
||||
expect(setLogoutSpy).toHaveBeenCalledWith(logout);
|
||||
expect(dockerSpy).toHaveBeenCalledWith('', username, password, ecr);
|
||||
});
|
||||
|
||||
test('calls docker login', async () => {
|
||||
jest.spyOn(osm, 'platform').mockImplementation(() => 'linux');
|
||||
const setRegistrySpy = jest.spyOn(stateHelper, 'setRegistry');
|
||||
const setLogoutSpy = jest.spyOn(stateHelper, 'setLogout');
|
||||
const dockerSpy = jest.spyOn(docker, 'login');
|
||||
dockerSpy.mockImplementation(jest.fn());
|
||||
|
||||
const username = 'dbowie';
|
||||
process.env[`INPUT_USERNAME`] = username;
|
||||
|
||||
const password = 'groundcontrol';
|
||||
process.env[`INPUT_PASSWORD`] = password;
|
||||
|
||||
const registry = 'ghcr.io';
|
||||
process.env[`INPUT_REGISTRY`] = registry;
|
||||
|
||||
const ecr = 'auto';
|
||||
process.env['INPUT_ECR'] = ecr;
|
||||
|
||||
const logout = true;
|
||||
process.env['INPUT_LOGOUT'] = String(logout);
|
||||
|
||||
await run();
|
||||
|
||||
expect(setRegistrySpy).toHaveBeenCalledWith(registry);
|
||||
expect(setLogoutSpy).toHaveBeenCalledWith(logout);
|
||||
expect(dockerSpy).toHaveBeenCalledWith(registry, username, password, ecr);
|
||||
});
|
||||
+7
-2
@@ -18,14 +18,19 @@ inputs:
|
||||
required: false
|
||||
ecr:
|
||||
description: 'Specifies whether the given registry is ECR (auto, true or false)'
|
||||
default: 'auto'
|
||||
required: false
|
||||
scope:
|
||||
description: 'Scope for the authentication token'
|
||||
required: false
|
||||
logout:
|
||||
description: 'Log out from the Docker registry at the end of a job'
|
||||
default: 'true'
|
||||
required: false
|
||||
registry-auth:
|
||||
description: 'Raw authentication to registries, defined as YAML objects'
|
||||
required: false
|
||||
|
||||
runs:
|
||||
using: 'node16'
|
||||
using: 'node20'
|
||||
main: 'dist/index.js'
|
||||
post: 'dist/index.js'
|
||||
+30
-26
@@ -1,15 +1,20 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG NODE_VERSION=16
|
||||
ARG DOCKER_VERSION=20.10.13
|
||||
ARG BUILDX_VERSION=0.8.1
|
||||
ARG NODE_VERSION=20
|
||||
|
||||
FROM node:${NODE_VERSION}-alpine AS base
|
||||
RUN apk add --no-cache cpio findutils git
|
||||
WORKDIR /src
|
||||
RUN --mount=type=bind,target=.,rw \
|
||||
--mount=type=cache,target=/src/.yarn/cache <<EOT
|
||||
corepack enable
|
||||
yarn --version
|
||||
yarn config set --home enableTelemetry 0
|
||||
EOT
|
||||
|
||||
FROM base AS deps
|
||||
RUN --mount=type=bind,target=.,rw \
|
||||
--mount=type=cache,target=/src/.yarn/cache \
|
||||
--mount=type=cache,target=/src/node_modules \
|
||||
yarn install && mkdir /vendor && cp yarn.lock /vendor
|
||||
|
||||
@@ -18,18 +23,19 @@ COPY --from=deps /vendor /
|
||||
|
||||
FROM deps AS vendor-validate
|
||||
RUN --mount=type=bind,target=.,rw <<EOT
|
||||
set -e
|
||||
git add -A
|
||||
cp -rf /vendor/* .
|
||||
if [ -n "$(git status --porcelain -- yarn.lock)" ]; then
|
||||
echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"'
|
||||
git status --porcelain -- yarn.lock
|
||||
exit 1
|
||||
fi
|
||||
set -e
|
||||
git add -A
|
||||
cp -rf /vendor/* .
|
||||
if [ -n "$(git status --porcelain -- yarn.lock)" ]; then
|
||||
echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor"'
|
||||
git status --porcelain -- yarn.lock
|
||||
exit 1
|
||||
fi
|
||||
EOT
|
||||
|
||||
FROM deps AS build
|
||||
RUN --mount=type=bind,target=.,rw \
|
||||
--mount=type=cache,target=/src/.yarn/cache \
|
||||
--mount=type=cache,target=/src/node_modules \
|
||||
yarn run build && mkdir /out && cp -Rf dist /out/
|
||||
|
||||
@@ -38,41 +44,39 @@ COPY --from=build /out /
|
||||
|
||||
FROM build AS build-validate
|
||||
RUN --mount=type=bind,target=.,rw <<EOT
|
||||
set -e
|
||||
git add -A
|
||||
cp -rf /out/* .
|
||||
if [ -n "$(git status --porcelain -- dist)" ]; then
|
||||
echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"'
|
||||
git status --porcelain -- dist
|
||||
exit 1
|
||||
fi
|
||||
set -e
|
||||
git add -A
|
||||
cp -rf /out/* .
|
||||
if [ -n "$(git status --porcelain -- dist)" ]; then
|
||||
echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"'
|
||||
git status --porcelain -- dist
|
||||
exit 1
|
||||
fi
|
||||
EOT
|
||||
|
||||
FROM deps AS format
|
||||
RUN --mount=type=bind,target=.,rw \
|
||||
--mount=type=cache,target=/src/.yarn/cache \
|
||||
--mount=type=cache,target=/src/node_modules \
|
||||
yarn run format \
|
||||
&& mkdir /out && find . -name '*.ts' -not -path './node_modules/*' | cpio -pdm /out
|
||||
&& mkdir /out && find . -name '*.ts' -not -path './node_modules/*' -not -path './.yarn/*' | cpio -pdm /out
|
||||
|
||||
FROM scratch AS format-update
|
||||
COPY --from=format /out /
|
||||
|
||||
FROM deps AS lint
|
||||
RUN --mount=type=bind,target=.,rw \
|
||||
--mount=type=cache,target=/src/.yarn/cache \
|
||||
--mount=type=cache,target=/src/node_modules \
|
||||
yarn run lint
|
||||
|
||||
FROM docker:${DOCKER_VERSION} as docker
|
||||
FROM docker/buildx-bin:${BUILDX_VERSION} as buildx
|
||||
|
||||
FROM deps AS test
|
||||
ENV RUNNER_TEMP=/tmp/github_runner
|
||||
ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache
|
||||
RUN --mount=type=bind,target=.,rw \
|
||||
--mount=type=cache,target=/src/.yarn/cache \
|
||||
--mount=type=cache,target=/src/node_modules \
|
||||
--mount=type=bind,from=docker,source=/usr/local/bin/docker,target=/usr/bin/docker \
|
||||
--mount=type=bind,from=buildx,source=/buildx,target=/usr/libexec/docker/cli-plugins/docker-buildx \
|
||||
yarn run test --coverageDirectory=/tmp/coverage
|
||||
yarn run test --coverage --coverageDirectory=/tmp/coverage
|
||||
|
||||
FROM scratch AS test-coverage
|
||||
COPY --from=test /tmp/coverage /
|
||||
+102
-16
@@ -1,17 +1,103 @@
|
||||
require('./sourcemap-register.js');(()=>{var __webpack_modules__={7351:function(e,t,o){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,o,n){if(n===undefined)n=o;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[o]}})}:function(e,t,o,n){if(n===undefined)n=o;e[n]=t[o]});var r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var o in e)if(o!=="default"&&Object.hasOwnProperty.call(e,o))n(t,e,o);r(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.issue=t.issueCommand=void 0;const s=i(o(2037));const a=o(5278);function issueCommand(e,t,o){const n=new Command(e,t,o);process.stdout.write(n.toString()+s.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const c="::";class Command{constructor(e,t,o){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=o}toString(){let e=c+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const o in this.properties){if(this.properties.hasOwnProperty(o)){const n=this.properties[o];if(n){if(t){t=false}else{e+=","}e+=`${o}=${escapeProperty(n)}`}}}}e+=`${c}${escapeData(this.message)}`;return e}}function escapeData(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2186:function(e,t,o){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,o,n){if(n===undefined)n=o;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[o]}})}:function(e,t,o,n){if(n===undefined)n=o;e[n]=t[o]});var r=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var o in e)if(o!=="default"&&Object.hasOwnProperty.call(e,o))n(t,e,o);r(t,e);return t};var s=this&&this.__awaiter||function(e,t,o,n){function adopt(e){return e instanceof o?e:new o((function(t){t(e)}))}return new(o||(o=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?o(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.getIDToken=t.getState=t.saveState=t.group=t.endGroup=t.startGroup=t.info=t.notice=t.warning=t.error=t.debug=t.isDebug=t.setFailed=t.setCommandEcho=t.setOutput=t.getBooleanInput=t.getMultilineInput=t.getInput=t.addPath=t.setSecret=t.exportVariable=t.ExitCode=void 0;const a=o(7351);const c=o(717);const l=o(5278);const u=i(o(2037));const d=i(o(1017));const p=o(8041);var m;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(m=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const o=l.toCommandValue(t);process.env[e]=o;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${u.EOL}${o}${u.EOL}${t}`;c.issueCommand("ENV",n)}else{a.issueCommand("set-env",{name:e},o)}}t.exportVariable=exportVariable;function setSecret(e){a.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){c.issueCommand("PATH",e)}else{a.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${d.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const o=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!o){throw new Error(`Input required and not supplied: ${e}`)}if(t&&t.trimWhitespace===false){return o}return o.trim()}t.getInput=getInput;function getMultilineInput(e,t){const o=getInput(e,t).split("\n").filter((e=>e!==""));return o}t.getMultilineInput=getMultilineInput;function getBooleanInput(e,t){const o=["true","True","TRUE"];const n=["false","False","FALSE"];const r=getInput(e,t);if(o.includes(r))return true;if(n.includes(r))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}t.getBooleanInput=getBooleanInput;function setOutput(e,t){process.stdout.write(u.EOL);a.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){a.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=m.Failure;error(e)}t.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}t.isDebug=isDebug;function debug(e){a.issueCommand("debug",{},e)}t.debug=debug;function error(e,t={}){a.issueCommand("error",l.toCommandPropertLine truncated
|
||||
/*! *****************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
***************************************************************************** */
|
||||
var t;var o;var n;var r;var i;var s;var a;var c;var l;var u;var d;var p;var m;var f;var g;var y;var h;var v;var w;var E;var S;var C;var x;var R;(function(t){var o=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd){define("tslib",["exports"],(function(e){t(createExporter(o,createExporter(e)))}))}else if(true&&typeof e.exports==="object"){t(createExporter(o,createExporter(e.exports)))}else{t(createExporter(o))}function createExporter(e,t){if(e!==o){if(typeof Object.create==="function"){Object.defineProperty(e,"__esModule",{value:true})}else{e.__esModule=true}}return function(o,n){return e[o]=t?t(o,n):n}}})((function(e){var _=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o))e[o]=t[o]};t=function(e,t){if(typeof t!=="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");_(e,t);function __(){this.constructor=e}e.prototype=t===null?Object.create(t):(__.prototype=t.prototype,new __)};o=Object.assign||function(e){for(var t,o=1,n=arguments.length;o<n;o++){t=arguments[o];for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r))e[r]=t[r]}return e};n=function(e,t){var o={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0)o[n]=e[n];if(e!=null&&typeof Object.getOwnPropertySymbols==="function")for(var r=0,n=Object.getOwnPropertySymbols(e);r<n.length;r++){if(t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r]))o[n[r]]=e[n[r]]}return o};r=function(e,t,o,n){var r=arguments.length,i=r<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,o):n,s;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")i=Reflect.decorate(e,t,o,n);else for(var a=e.length-1;a>=0;a--)if(s=e[a])i=(r<3?s(i):r>3?s(t,o,i):s(t,o))||i;return r>3&&i&&Object.defineProperty(t,o,i),i};i=function(e,t){return function(o,n){t(o,n,e)}};s=function(e,t){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(e,t)};a=function(e,t,o,n){function adopt(e){return e instanceof o?e:new o((function(t){t(e)}))}return new(o||(o=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?o(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};c=function(e,t){var o={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,r,i,s;return s={next:verb(0),throw:verb(1),return:verb(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function verb(e){return function(t){return step([e,t])}}function step(s){if(n)throw new TypeError("Generator is already executing.");while(o)try{if(n=1,r&&(i=s[0]&2?r["return"]:s[0]?r["throw"]||((i=r["return"])&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;if(r=0,i)s=[s[0]&2,i.value];switch(s[0]){case 0:case 1:i=s;break;case 4:o.label++;return{value:s[1],done:false};case 5:o.label++;r=s[1];s=[0];continue;case 7:s=o.ops.pop();o.trys.pop();continue;default:if(!(i=o.trys,i=i.length>0&&i[i.length-1])&&(s[0]===6||s[0]===2)){o=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(s[0]===6&&o.label<i[1]){o.label=i[1];i=s;break}if(i&&o.label<i[2]){o.label=i[2];o.ops.push(s);break}if(i[2])o.ops.pop();o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e];r=0}finally{n=i=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};l=function(e,t){for(var o in e)if(o!=="default"&&!Object.prototype.hasOwnProperty.call(t,o))R(t,e,o)};R=Object.create?function(e,t,o,n){if(n===undefined)n=o;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[o]}})}:function(e,t,o,n){if(n===undefined)n=o;e[n]=t[o]};u=function(e){var t=typeof Symbol==="function"&&Symbol.iterator,o=t&&e[t],n=0;if(o)return o.call(e);if(e&&typeof e.length==="number")return{next:function(){if(e&&n>=e.length)e=void 0;return{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};d=function(e,t){var o=typeof Symbol==="function"&&e[Symbol.iterator];if(!o)return e;var n=o.call(e),r,i=[],s;try{while((t===void 0||t-- >0)&&!(r=n.next()).done)i.push(r.value)}catch(e){s={error:e}}finally{try{if(r&&!r.done&&(o=n["return"]))o.call(n)}finally{if(s)throw s.error}}return i};p=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(d(arguments[t]));return e};m=function(){for(var e=0,t=0,o=arguments.length;t<o;t++)e+=arguments[t].length;for(var n=Array(e),r=0,t=0;t<o;t++)for(var i=arguments[t],s=0,a=i.length;s<a;s++,r++)n[r]=i[s];return n};f=function(e,t,o){if(o||arguments.length===2)for(var n=0,r=t.length,i;n<r;n++){if(i||!(n in t)){if(!i)i=Array.prototype.slice.call(t,0,n);i[n]=t[n]}}return e.concat(i||Array.prototype.slice.call(t))};g=function(e){return this instanceof g?(this.v=e,this):new g(e)};y=functiLine truncated
|
||||
require('./sourcemap-register.js');(()=>{var i={76846:function(i,d,p){"use strict";var y=this&&this.__createBinding||(Object.create?function(i,d,p,y){if(y===undefined)y=p;var v=Object.getOwnPropertyDescriptor(d,p);if(!v||("get"in v?!d.__esModule:v.writable||v.configurable)){v={enumerable:true,get:function(){return d[p]}}}Object.defineProperty(i,y,v)}:function(i,d,p,y){if(y===undefined)y=p;i[y]=d[p]});var v=this&&this.__exportStar||function(i,d){for(var p in i)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(d,p))y(d,i,p)};Object.defineProperty(d,"__esModule",{value:true});const D=p(64487);v(p(13776),d);v(p(45655),d);v(p(64487),d);const M=new D.DefaultArtifactClient;d["default"]=M},35592:(i,d,p)=>{"use strict";Object.defineProperty(d,"__esModule",{value:true});d.Timestamp=void 0;const y=p(68886);const v=p(68886);const D=p(68886);const M=p(68886);const U=p(68886);const j=p(68886);const V=p(68886);class Timestamp$Type extends V.MessageType{constructor(){super("google.protobuf.Timestamp",[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}])}now(){const i=this.create();const d=Date.now();i.seconds=j.PbLong.from(Math.floor(d/1e3)).toString();i.nanos=d%1e3*1e6;return i}toDate(i){return new Date(j.PbLong.from(i.seconds).toNumber()*1e3+Math.ceil(i.nanos/1e6))}fromDate(i){const d=this.create();const p=i.getTime();d.seconds=j.PbLong.from(Math.floor(p/1e3)).toString();d.nanos=p%1e3*1e6;return d}internalJsonWrite(i,d){let p=j.PbLong.from(i.seconds).toNumber()*1e3;if(p<Date.parse("0001-01-01T00:00:00Z")||p>Date.parse("9999-12-31T23:59:59Z"))throw new Error("Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.");if(i.nanos<0)throw new Error("Unable to encode invalid Timestamp to JSON. Nanos must not be negative.");let y="Z";if(i.nanos>0){let d=(i.nanos+1e9).toString().substring(1);if(d.substring(3)==="000000")y="."+d.substring(0,3)+"Z";else if(d.substring(6)==="000")y="."+d.substring(0,6)+"Z";else y="."+d+"Z"}return new Date(p).toISOString().replace(".000Z",y)}internalJsonRead(i,d,p){if(typeof i!=="string")throw new Error("Unable to parse Timestamp from JSON "+(0,U.typeofJsonValue)(i)+".");let y=i.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!y)throw new Error("Unable to parse Timestamp from JSON. Invalid format.");let v=Date.parse(y[1]+"-"+y[2]+"-"+y[3]+"T"+y[4]+":"+y[5]+":"+y[6]+(y[8]?y[8]:"Z"));if(Number.isNaN(v))throw new Error("Unable to parse Timestamp from JSON. Invalid value.");if(v<Date.parse("0001-01-01T00:00:00Z")||v>Date.parse("9999-12-31T23:59:59Z"))throw new globalThis.Error("Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.");if(!p)p=this.create();p.seconds=j.PbLong.from(v/1e3).toString();p.nanos=0;if(y[7])p.nanos=parseInt("1"+y[7]+"0".repeat(9-y[7].length))-1e9;return p}create(i){const d={seconds:"0",nanos:0};globalThis.Object.defineProperty(d,M.MESSAGE_TYPE,{enumerable:false,value:this});if(i!==undefined)(0,D.reflectionMergePartial)(this,d,i);return d}internalBinaryRead(i,d,p,y){let D=y!==null&&y!==void 0?y:this.create(),M=i.pos+d;while(i.pos<M){let[d,y]=i.tag();switch(d){case 1:D.seconds=i.int64().toString();break;case 2:D.nanos=i.int32();break;default:let M=p.readUnknownField;if(M==="throw")throw new globalThis.Error(`Unknown field ${d} (wire type ${y}) for ${this.typeName}`);let U=i.skip(y);if(M!==false)(M===true?v.UnknownFieldHandler.onRead:M)(this.typeName,D,d,y,U)}}return D}internalBinaryWrite(i,d,p){if(i.seconds!=="0")d.tag(1,y.WireType.Varint).int64(i.seconds);if(i.nanos!==0)d.tag(2,y.WireType.Varint).int32(i.nanos);let D=p.writeUnknownFields;if(D!==false)(D==true?v.UnknownFieldHandler.onWrite:D)(this.typeName,i,d);return d}}d.Timestamp=new Timestamp$Type},78806:(i,d,p)=>{"use strict";Object.defineProperty(d,"__esModule",{value:true});d.BytesValue=d.StringValue=d.BoolValue=d.UInt32Value=d.Int32Value=d.UInt64Value=d.Int64Value=d.FloatValue=d.DoubleValue=void 0;const y=p(68886);const v=p(68886);const D=p(68886);const M=p(68886);const U=p(68886);const j=p(68886);const V=p(68886);class DoubleValue$Type extends V.MessageType{constructor(){super("google.protobuf.DoubleValue",[{no:1,name:"value",kind:"scalar",T:1}])}internalJsonWrite(i,d){return this.refJsonWriter.scalar(2,i.value,"value",false,true)}internalJsonRead(i,d,p){if(!p)p=this.create();p.value=this.refJsonReader.scalar(i,1,undefined,"value");return p}create(i){const d={value:0};globalThis.Object.defineProperty(d,j.MESSAGE_TYPE,{enumerable:false,value:this});if(i!==undefined)(0,U.reflectionMergePartial)(this,d,i);return d}internalBinaryRead(i,d,p,y){let v=y!==null&&y!==void 0?y:this.create(),D=i.pos+d;while(i.pos<D){let[d,y]=i.tag();switch(d){case 1:v.value=i.double();break;default:let D=p.readUnknownField;if(D==="throw")throw new globalThis.Error(`Unknown field ${d} (wire type ${y}) for ${this.typeName}`);let U=i.skip(y);Line truncated
|
||||
/**
|
||||
* Archiver Vending
|
||||
*
|
||||
* @ignore
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}
|
||||
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(50549);var v={};var vending=function(i,d){return vending.create(i,d)};vending.create=function(i,d){if(v[i]){var p=new y(i,d);p.setFormat(i);p.setModule(new v[i](d));return p}else{throw new Error("create("+i+"): format not registered")}};vending.registerFormat=function(i,d){if(v[i]){throw new Error("register("+i+"): format already registered")}if(typeof d!=="function"){throw new Error("register("+i+"): format module invalid")}if(typeof d.prototype.append!=="function"||typeof d.prototype.finalize!=="function"){throw new Error("register("+i+"): format module missing methods")}v[i]=d};vending.isRegisteredFormat=function(i){if(v[i]){return true}return false};vending.registerFormat("zip",p(22836));vending.registerFormat("tar",p(10396));vending.registerFormat("json",p(54693));i.exports=vending},50549:(i,d,p)=>{
|
||||
/**
|
||||
* Archiver Core
|
||||
*
|
||||
* @ignore
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}
|
||||
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(79896);var v=p(51364);var D=p(97329);var M=p(16928);var U=p(53296);var j=p(39023).inherits;var V=p(13110);var K=p(29963).Transform;var ee=process.platform==="win32";var Archiver=function(i,d){if(!(this instanceof Archiver)){return new Archiver(i,d)}if(typeof i!=="string"){d=i;i="zip"}d=this.options=U.defaults(d,{highWaterMark:1024*1024,statConcurrency:4});K.call(this,d);this._format=false;this._module=false;this._pending=0;this._pointer=0;this._entriesCount=0;this._entriesProcessedCount=0;this._fsEntriesTotalBytes=0;this._fsEntriesProcessedBytes=0;this._queue=D.queue(this._onQueueTask.bind(this),1);this._queue.drain(this._onQueueDrain.bind(this));this._statQueue=D.queue(this._onStatQueueTask.bind(this),d.statConcurrency);this._statQueue.drain(this._onQueueDrain.bind(this));this._state={aborted:false,finalize:false,finalizing:false,finalized:false,modulePiped:false};this._streams=[]};j(Archiver,K);Archiver.prototype._abort=function(){this._state.aborted=true;this._queue.kill();this._statQueue.kill();if(this._queue.idle()){this._shutdown()}};Archiver.prototype._append=function(i,d){d=d||{};var p={source:null,filepath:i};if(!d.name){d.name=i}d.sourcePath=i;p.data=d;this._entriesCount++;if(d.stats&&d.stats instanceof y.Stats){p=this._updateQueueTaskWithStats(p,d.stats);if(p){if(d.stats.size){this._fsEntriesTotalBytes+=d.stats.size}this._queue.push(p)}}else{this._statQueue.push(p)}};Archiver.prototype._finalize=function(){if(this._state.finalizing||this._state.finalized||this._state.aborted){return}this._state.finalizing=true;this._moduleFinalize();this._state.finalizing=false;this._state.finalized=true};Archiver.prototype._maybeFinalize=function(){if(this._state.finalizing||this._state.finalized||this._state.aborted){return false}if(this._state.finalize&&this._pending===0&&this._queue.idle()&&this._statQueue.idle()){this._finalize();return true}return false};Archiver.prototype._moduleAppend=function(i,d,p){if(this._state.aborted){p();return}this._module.append(i,d,function(i){this._task=null;if(this._state.aborted){this._shutdown();return}if(i){this.emit("error",i);setImmediate(p);return}this.emit("entry",d);this._entriesProcessedCount++;if(d.stats&&d.stats.size){this._fsEntriesProcessedBytes+=d.stats.size}this.emit("progress",{entries:{total:this._entriesCount,processed:this._entriesProcessedCount},fs:{totalBytes:this._fsEntriesTotalBytes,processedBytes:this._fsEntriesProcessedBytes}});setImmediate(p)}.bind(this))};Archiver.prototype._moduleFinalize=function(){if(typeof this._module.finalize==="function"){this._module.finalize()}else if(typeof this._module.end==="function"){this._module.end()}else{this.emit("error",new V("NOENDMETHOD"))}};Archiver.prototype._modulePipe=function(){this._module.on("error",this._onModuleError.bind(this));this._module.pipe(this);this._state.modulePiped=true};Archiver.prototype._moduleSupports=function(i){if(!this._module.supports||!this._module.supports[i]){return false}return this._module.supports[i]};Archiver.prototype._moduleUnpipe=function(){this._module.unpipe(this);this._state.modulePiped=false};Archiver.prototype._normalizeEntryData=function(i,d){i=U.defaults(i,{type:"file",name:null,date:null,mode:null,prefix:null,sourcePath:null,stats:false});if(d&&i.stats===false){i.stats=d}var p=i.type==="directory";if(i.name){if(typeof i.prefix==="string"&&""!==i.prefix){i.name=i.prefix+"/"+i.name;i.prefix=null}i.name=U.sanitizePath(i.name);if(i.type!=="symlink"&&i.name.slice(-1)==="/"){p=true;i.type="directory"}else if(p){i.name+="/"}}if(typeof i.mode==="number"){if(ee){i.mode&=511}else{i.mode&=4095}}else if(i.stats&&i.mode===null){if(ee){i.mode=i.stats.mode&511}else{i.mode=i.stats.mode&4095}if(ee&&p){i.mode=493}}else if(i.mode===null){i.mode=p?493:420}if(i.stats&&i.date===null){i.date=i.stats.mtime}else{i.date=U.dateify(i.date)}return i};Archiver.prototype._onModuleError=function(i){this.emit("error",i)};Archiver.prototype._onQueueDrain=function(){if(this._state.finalizing||this._state.finalized||this._state.aborted){return}if(this._state.finalize&&this._pending===0&&this._queue.idle()&&this._statQueue.idle()){this._finalize()}};Archiver.prototype._onQueueTask=function(i,d){var fullCallback=()=>{if(i.data.callback){i.data.callback()}d()};if(this._state.finalizing||this._state.finalized||this._state.aborted){fullCallback();return}this._task=i;this._moduleAppend(i.source,i.data,fullCallback)};Archiver.prototype._onStatQueueTask=function(i,d){if(this._state.finalizing||this._state.finalized||this._state.aborted){d();return}y.lstat(i.filepath,function(p,y){if(this._state.aborted){setImmediate(d);return}if(p){this._entriesCount--;this.emit("warning",p);setImmediate(d);return}i=this._updateQueueTaskWithStats(i,y);if(i){if(y.size){this._fsEntriesTotalBytes+=y.size}this._queue.push(i)}setImmediate(d)}.bind(this))};Archiver.prototype._shutdown=function(){this._moduleUnpipe();this.end()};Archiver.prototype._transform=function(i,d,p){if(i){this._pointer+=i.length}p(null,i)};Archiver.prLine truncated
|
||||
/**
|
||||
* Archiver Core
|
||||
*
|
||||
* @ignore
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}
|
||||
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(39023);const v={ABORTED:"archive was aborted",DIRECTORYDIRPATHREQUIRED:"diretory dirpath argument must be a non-empty string value",DIRECTORYFUNCTIONINVALIDDATA:"invalid data returned by directory custom data function",ENTRYNAMEREQUIRED:"entry name must be a non-empty string value",FILEFILEPATHREQUIRED:"file filepath argument must be a non-empty string value",FINALIZING:"archive already finalizing",QUEUECLOSED:"queue closed",NOENDMETHOD:"no suitable finalize/end method defined by module",DIRECTORYNOTSUPPORTED:"support for directory entries not defined by module",FORMATSET:"archive format already set",INPUTSTEAMBUFFERREQUIRED:"input source must be valid Stream or Buffer instance",MODULESET:"module already set",SYMLINKNOTSUPPORTED:"support for symlink entries not defined by module",SYMLINKFILEPATHREQUIRED:"symlink filepath argument must be a non-empty string value",SYMLINKTARGETREQUIRED:"symlink target argument must be a non-empty string value",ENTRYNOTSUPPORTED:"entry not supported"};function ArchiverError(i,d){Error.captureStackTrace(this,this.constructor);this.message=v[i]||i;this.code=i;this.data=d}y.inherits(ArchiverError,Error);d=i.exports=ArchiverError},54693:(i,d,p)=>{
|
||||
/**
|
||||
* JSON Format Plugin
|
||||
*
|
||||
* @module plugins/json
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}
|
||||
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(39023).inherits;var v=p(29963).Transform;var D=p(84928);var M=p(53296);var Json=function(i){if(!(this instanceof Json)){return new Json(i)}i=this.options=M.defaults(i,{});v.call(this,i);this.supports={directory:true,symlink:true};this.files=[]};y(Json,v);Json.prototype._transform=function(i,d,p){p(null,i)};Json.prototype._writeStringified=function(){var i=JSON.stringify(this.files);this.write(i)};Json.prototype.append=function(i,d,p){var y=this;d.crc32=0;function onend(i,v){if(i){p(i);return}d.size=v.length||0;d.crc32=D.unsigned(v);y.files.push(d);p(null,d)}if(d.sourceType==="buffer"){onend(null,i)}else if(d.sourceType==="stream"){M.collectStream(i,onend)}};Json.prototype.finalize=function(){this._writeStringified();this.end()};i.exports=Json},10396:(i,d,p)=>{
|
||||
/**
|
||||
* TAR Format Plugin
|
||||
*
|
||||
* @module plugins/tar
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}
|
||||
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(43106);var v=p(56118);var D=p(53296);var Tar=function(i){if(!(this instanceof Tar)){return new Tar(i)}i=this.options=D.defaults(i,{gzip:false});if(typeof i.gzipOptions!=="object"){i.gzipOptions={}}this.supports={directory:true,symlink:true};this.engine=v.pack(i);this.compressor=false;if(i.gzip){this.compressor=y.createGzip(i.gzipOptions);this.compressor.on("error",this._onCompressorError.bind(this))}};Tar.prototype._onCompressorError=function(i){this.engine.emit("error",i)};Tar.prototype.append=function(i,d,p){var y=this;d.mtime=d.date;function append(i,v){if(i){p(i);return}y.engine.entry(d,v,(function(i){p(i,d)}))}if(d.sourceType==="buffer"){append(null,i)}else if(d.sourceType==="stream"&&d.stats){d.size=d.stats.size;var v=y.engine.entry(d,(function(i){p(i,d)}));i.pipe(v)}else if(d.sourceType==="stream"){D.collectStream(i,append)}};Tar.prototype.finalize=function(){this.engine.finalize()};Tar.prototype.on=function(){return this.engine.on.apply(this.engine,arguments)};Tar.prototype.pipe=function(i,d){if(this.compressor){return this.engine.pipe.apply(this.engine,[this.compressor]).pipe(i,d)}else{return this.engine.pipe.apply(this.engine,arguments)}};Tar.prototype.unpipe=function(){if(this.compressor){return this.compressor.unpipe.apply(this.compressor,arguments)}else{return this.engine.unpipe.apply(this.engine,arguments)}};i.exports=Tar},22836:(i,d,p)=>{
|
||||
/**
|
||||
* ZIP Format Plugin
|
||||
*
|
||||
* @module plugins/zip
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE}
|
||||
* @copyright (c) 2012-2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(41622);var v=p(53296);var Zip=function(i){if(!(this instanceof Zip)){return new Zip(i)}i=this.options=v.defaults(i,{comment:"",forceUTC:false,namePrependSlash:false,store:false});this.supports={directory:true,symlink:true};this.engine=new y(i)};Zip.prototype.append=function(i,d,p){this.engine.entry(i,d,p)};Zip.prototype.finalize=function(){this.engine.finalize()};Zip.prototype.on=function(){return this.engine.on.apply(this.engine,arguments)};Zip.prototype.pipe=function(){return this.engine.pipe.apply(this.engine,arguments)};Zip.prototype.unpipe=function(){return this.engine.unpipe.apply(this.engine,arguments)};i.exports=Zip},97329:function(i,d){(function(i,p){true?p(d):0})(this,(function(i){"use strict";function apply(i,...d){return(...p)=>i(...d,...p)}function initialParams(i){return function(...d){var p=d.pop();return i.call(this,d,p)}}var d=typeof queueMicrotask==="function"&&queueMicrotask;var p=typeof setImmediate==="function"&&setImmediate;var y=typeof process==="object"&&typeof process.nextTick==="function";function fallback(i){setTimeout(i,0)}function wrap(i){return(d,...p)=>i((()=>d(...p)))}var v;if(d){v=queueMicrotask}else if(p){v=setImmediate}else if(y){v=process.nextTick}else{v=fallback}var D=wrap(v);function asyncify(i){if(isAsync(i)){return function(...d){const p=d.pop();const y=i.apply(this,d);return handlePromise(y,p)}}return initialParams((function(d,p){var y;try{y=i.apply(this,d)}catch(i){return p(i)}if(y&&typeof y.then==="function"){return handlePromise(y,p)}else{p(null,y)}}))}function handlePromise(i,d){return i.then((i=>{invokeCallback(d,null,i)}),(i=>{invokeCallback(d,i&&(i instanceof Error||i.message)?i:new Error(i))}))}function invokeCallback(i,d,p){try{i(d,p)}catch(i){D((i=>{throw i}),i)}}function isAsync(i){return i[Symbol.toStringTag]==="AsyncFunction"}function isAsyncGenerator(i){return i[Symbol.toStringTag]==="AsyncGenerator"}function isAsyncIterable(i){return typeof i[Symbol.asyncIterator]==="function"}function wrapAsync(i){if(typeof i!=="function")throw new Error("expected a function");return isAsync(i)?asyncify(i):i}function awaitify(i,d){if(!d)d=i.length;if(!d)throw new Error("arity is undefined");function awaitable(...p){if(typeof p[d-1]==="function"){return i.apply(this,p)}return new Promise(((y,v)=>{p[d-1]=(i,...d)=>{if(i)return v(i);y(d.length>1?d:d[0])};i.apply(this,p)}))}return awaitable}function applyEach$1(i){return function applyEach(d,...p){const y=awaitify((function(y){var v=this;return i(d,((i,d)=>{wrapAsync(i).apply(v,p.concat(d))}),y)}));return y}}function _asyncMap(i,d,p,y){d=d||[];var v=[];var D=0;var M=wrapAsync(p);return i(d,((i,d,p)=>{var y=D++;M(i,((i,d)=>{v[y]=d;p(i)}))}),(i=>{y(i,v)}))}function isArrayLike(i){return i&&typeof i.length==="number"&&i.length>=0&&i.length%1===0}const M={};var U=M;function once(i){function wrapper(...d){if(i===null)return;var p=i;i=null;p.apply(this,d)}Object.assign(wrapper,i);return wrapper}function getIterator(i){return i[Symbol.iterator]&&i[Symbol.iterator]()}function createArrayIterator(i){var d=-1;var p=i.length;return function next(){return++d<p?{value:i[d],key:d}:null}}function createES2015Iterator(i){var d=-1;return function next(){var p=i.next();if(p.done)return null;d++;return{value:p.value,key:d}}}function createObjectIterator(i){var d=i?Object.keys(i):[];var p=-1;var y=d.length;return function next(){var v=d[++p];if(v==="__proto__"){return next()}return p<y?{value:i[v],key:v}:null}}function createIterator(i){if(isArrayLike(i)){return createArrayIterator(i)}var d=getIterator(i);return d?createES2015Iterator(d):createObjectIterator(i)}function onlyOnce(i){return function(...d){if(i===null)throw new Error("Callback was already called.");var p=i;i=null;p.apply(this,d)}}function asyncEachOfLimit(i,d,p,y){let v=false;let D=false;let M=false;let j=0;let V=0;function replenish(){if(j>=d||M||v)return;M=true;i.next().then((({value:i,done:d})=>{if(D||v)return;M=false;if(d){v=true;if(j<=0){y(null)}return}j++;p(i,V,iterateeCallback);V++;replenish()})).catch(handleError)}function iterateeCallback(i,d){j-=1;if(D)return;if(i)return handleError(i);if(i===false){v=true;D=true;return}if(d===U||v&&j<=0){v=true;return y(null)}replenish()}function handleError(i){if(D)return;M=false;v=true;y(i)}replenish()}var eachOfLimit$2=i=>(d,p,y)=>{y=once(y);if(i<=0){throw new RangeError("concurrency limit cannot be less than 1")}if(!d){return y(null)}if(isAsyncGenerator(d)){return asyncEachOfLimit(d,i,p,y)}if(isAsyncIterable(d)){return asyncEachOfLimit(d[Symbol.asyncIterator](),i,p,y)}var v=createIterator(d);var D=false;var M=false;var j=0;var V=false;function iterateeCallback(i,d){if(M)return;j-=1;if(i){D=true;y(i)}else if(i===false){D=true;M=true}else if(d===U||D&&j<=0){D=true;return y(null)}else if(!V){replenish()}}function replenish(){V=true;while(j<i&&!D){var d=v();if(d===null){D=true;if(j<=0){y(null)}return}j+=1;p(d.value,d.key,onlyOnce(iterateeCallback))}V=false}replenish()};function eachOfLimit(i,d,p,y){return eachOfLimit$2(d)(i,Line truncated
|
||||
/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
|
||||
var p;(function(i){if(typeof DO_NOT_EXPORT_CRC==="undefined"){if(true){i(d)}else{}}else{i(p={})}})((function(i){i.version="1.2.2";function signed_crc_table(){var i=0,d=new Array(256);for(var p=0;p!=256;++p){i=p;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;i=i&1?-306674912^i>>>1:i>>>1;d[p]=i}return typeof Int32Array!=="undefined"?new Int32Array(d):d}var d=signed_crc_table();function slice_by_16_tables(i){var d=0,p=0,y=0,v=typeof Int32Array!=="undefined"?new Int32Array(4096):new Array(4096);for(y=0;y!=256;++y)v[y]=i[y];for(y=0;y!=256;++y){p=i[y];for(d=256+y;d<4096;d+=256)p=v[d]=p>>>8^i[p&255]}var D=[];for(y=1;y!=16;++y)D[y-1]=typeof Int32Array!=="undefined"?v.subarray(y*256,y*256+256):v.slice(y*256,y*256+256);return D}var p=slice_by_16_tables(d);var y=p[0],v=p[1],D=p[2],M=p[3],U=p[4];var j=p[5],V=p[6],K=p[7],ee=p[8],te=p[9];var re=p[10],ne=p[11],ie=p[12],se=p[13],oe=p[14];function crc32_bstr(i,p){var y=p^-1;for(var v=0,D=i.length;v<D;)y=y>>>8^d[(y^i.charCodeAt(v++))&255];return~y}function crc32_buf(i,p){var ae=p^-1,ce=i.length-15,le=0;for(;le<ce;)ae=oe[i[le++]^ae&255]^se[i[le++]^ae>>8&255]^ie[i[le++]^ae>>16&255]^ne[i[le++]^ae>>>24]^re[i[le++]]^te[i[le++]]^ee[i[le++]]^K[i[le++]]^V[i[le++]]^j[i[le++]]^U[i[le++]]^M[i[le++]]^D[i[le++]]^v[i[le++]]^y[i[le++]]^d[i[le++]];ce+=15;while(le<ce)ae=ae>>>8^d[(ae^i[le++])&255];return~ae}function crc32_str(i,p){var y=p^-1;for(var v=0,D=i.length,M=0,U=0;v<D;){M=i.charCodeAt(v++);if(M<128){y=y>>>8^d[(y^M)&255]}else if(M<2048){y=y>>>8^d[(y^(192|M>>6&31))&255];y=y>>>8^d[(y^(128|M&63))&255]}else if(M>=55296&&M<57344){M=(M&1023)+64;U=i.charCodeAt(v++)&1023;y=y>>>8^d[(y^(240|M>>8&7))&255];y=y>>>8^d[(y^(128|M>>2&63))&255];y=y>>>8^d[(y^(128|U>>6&15|(M&3)<<4))&255];y=y>>>8^d[(y^(128|U&63))&255]}else{y=y>>>8^d[(y^(224|M>>12&15))&255];y=y>>>8^d[(y^(128|M>>6&63))&255];y=y>>>8^d[(y^(128|M&63))&255]}}return~y}i.table=d;i.bstr=crc32_bstr;i.buf=crc32_buf;i.str=crc32_str}))},3662:(i,d,p)=>{"use strict";const{Transform:y}=p(29963);const v=p(84891);class CRC32Stream extends y{constructor(i){super(i);this.checksum=Buffer.allocUnsafe(4);this.checksum.writeInt32BE(0,0);this.rawSize=0}_transform(i,d,p){if(i){this.checksum=v.buf(i,this.checksum)>>>0;this.rawSize+=i.length}p(null,i)}digest(i){const d=Buffer.allocUnsafe(4);d.writeUInt32BE(this.checksum>>>0,0);return i?d.toString(i):d}hex(){return this.digest("hex").toUpperCase()}size(){return this.rawSize}}i.exports=CRC32Stream},76252:(i,d,p)=>{"use strict";const{DeflateRaw:y}=p(43106);const v=p(84891);class DeflateCRC32Stream extends y{constructor(i){super(i);this.checksum=Buffer.allocUnsafe(4);this.checksum.writeInt32BE(0,0);this.rawSize=0;this.compressedSize=0}push(i,d){if(i){this.compressedSize+=i.length}return super.push(i,d)}_transform(i,d,p){if(i){this.checksum=v.buf(i,this.checksum)>>>0;this.rawSize+=i.length}super._transform(i,d,p)}digest(i){const d=Buffer.allocUnsafe(4);d.writeUInt32BE(this.checksum>>>0,0);return i?d.toString(i):d}hex(){return this.digest("hex").toUpperCase()}size(i=false){if(i){return this.compressedSize}else{return this.rawSize}}}i.exports=DeflateCRC32Stream},82770:(i,d,p)=>{"use strict";i.exports={CRC32Stream:p(3662),DeflateCRC32Stream:p(76252)}},6110:(i,d,p)=>{d.formatArgs=formatArgs;d.save=save;d.load=load;d.useColors=useColors;d.storage=localstorage();d.destroy=(()=>{let i=false;return()=>{if(!i){i=true;console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}}})();d.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function useColors(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="unLine truncated
|
||||
/**
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
* @copyright 2015 Toru Nagashima. All rights reserved.
|
||||
* See LICENSE file in root directory for full license.
|
||||
*/Object.defineProperty(d,"__esModule",{value:true});const p=new WeakMap;const y=new WeakMap;function pd(i){const d=p.get(i);console.assert(d!=null,"'this' is expected an Event object, but got",i);return d}function setCancelFlag(i){if(i.passiveListener!=null){if(typeof console!=="undefined"&&typeof console.error==="function"){console.error("Unable to preventDefault inside passive event listener invocation.",i.passiveListener)}return}if(!i.event.cancelable){return}i.canceled=true;if(typeof i.event.preventDefault==="function"){i.event.preventDefault()}}function Event(i,d){p.set(this,{eventTarget:i,event:d,eventPhase:2,currentTarget:i,canceled:false,stopped:false,immediateStopped:false,passiveListener:null,timeStamp:d.timeStamp||Date.now()});Object.defineProperty(this,"isTrusted",{value:false,enumerable:true});const y=Object.keys(d);for(let i=0;i<y.length;++i){const d=y[i];if(!(d in this)){Object.defineProperty(this,d,defineRedirectDescriptor(d))}}}Event.prototype={get type(){return pd(this).event.type},get target(){return pd(this).eventTarget},get currentTarget(){return pd(this).currentTarget},composedPath(){const i=pd(this).currentTarget;if(i==null){return[]}return[i]},get NONE(){return 0},get CAPTURING_PHASE(){return 1},get AT_TARGET(){return 2},get BUBBLING_PHASE(){return 3},get eventPhase(){return pd(this).eventPhase},stopPropagation(){const i=pd(this);i.stopped=true;if(typeof i.event.stopPropagation==="function"){i.event.stopPropagation()}},stopImmediatePropagation(){const i=pd(this);i.stopped=true;i.immediateStopped=true;if(typeof i.event.stopImmediatePropagation==="function"){i.event.stopImmediatePropagation()}},get bubbles(){return Boolean(pd(this).event.bubbles)},get cancelable(){return Boolean(pd(this).event.cancelable)},preventDefault(){setCancelFlag(pd(this))},get defaultPrevented(){return pd(this).canceled},get composed(){return Boolean(pd(this).event.composed)},get timeStamp(){return pd(this).timeStamp},get srcElement(){return pd(this).eventTarget},get cancelBubble(){return pd(this).stopped},set cancelBubble(i){if(!i){return}const d=pd(this);d.stopped=true;if(typeof d.event.cancelBubble==="boolean"){d.event.cancelBubble=true}},get returnValue(){return!pd(this).canceled},set returnValue(i){if(!i){setCancelFlag(pd(this))}},initEvent(){}};Object.defineProperty(Event.prototype,"constructor",{value:Event,configurable:true,writable:true});if(typeof window!=="undefined"&&typeof window.Event!=="undefined"){Object.setPrototypeOf(Event.prototype,window.Event.prototype);y.set(window.Event.prototype,Event)}function defineRedirectDescriptor(i){return{get(){return pd(this).event[i]},set(d){pd(this).event[i]=d},configurable:true,enumerable:true}}function defineCallDescriptor(i){return{value(){const d=pd(this).event;return d[i].apply(d,arguments)},configurable:true,enumerable:true}}function defineWrapper(i,d){const p=Object.keys(d);if(p.length===0){return i}function CustomEvent(d,p){i.call(this,d,p)}CustomEvent.prototype=Object.create(i.prototype,{constructor:{value:CustomEvent,configurable:true,writable:true}});for(let y=0;y<p.length;++y){const v=p[y];if(!(v in i.prototype)){const i=Object.getOwnPropertyDescriptor(d,v);const p=typeof i.value==="function";Object.defineProperty(CustomEvent.prototype,v,p?defineCallDescriptor(v):defineRedirectDescriptor(v))}}return CustomEvent}function getWrapper(i){if(i==null||i===Object.prototype){return Event}let d=y.get(i);if(d==null){d=defineWrapper(getWrapper(Object.getPrototypeOf(i)),i);y.set(i,d)}return d}function wrapEvent(i,d){const p=getWrapper(Object.getPrototypeOf(d));return new p(i,d)}function isStopped(i){return pd(i).immediateStopped}function setEventPhase(i,d){pd(i).eventPhase=d}function setCurrentTarget(i,d){pd(i).currentTarget=d}function setPassiveListener(i,d){pd(i).passiveListener=d}const v=new WeakMap;const D=1;const M=2;const U=3;function isObject(i){return i!==null&&typeof i==="object"}function getListeners(i){const d=v.get(i);if(d==null){throw new TypeError("'this' is expected an EventTarget object, but got another value.")}return d}function defineEventAttributeDescriptor(i){return{get(){const d=getListeners(this);let p=d.get(i);while(p!=null){if(p.listenerType===U){return p.listener}p=p.next}return null},set(d){if(typeof d!=="function"&&!isObject(d)){d=null}const p=getListeners(this);let y=null;let v=p.get(i);while(v!=null){if(v.listenerType===U){if(y!==null){y.next=v.next}else if(v.next!==null){p.set(i,v.next)}else{p.delete(i)}}else{y=v}v=v.next}if(d!==null){const v={listener:d,listenerType:U,passive:false,once:false,next:null};if(y===null){p.set(i,v)}else{y.next=v}}},configurable:true,enumerable:true}}function defineEventAttribute(i,d){Object.defineProperty(i,`on${d}`,defineEventAttributeDescriptor(d))}function defineCustomEventTarget(i){function CustomEventTarget(){EventTarget.call(this)}CustomEventTarget.prototype=Object.create(EventTarget.prototype,{constructor:{value:CustomEventTarget,configurable:true,writable:true}});for(let d=0;d<i.length;++d){Line truncated
|
||||
/*! https://mths.be/he v1.2.0 by @mathias | MIT license */(function(p){var y=true&&d;var v=true&&i&&i.exports==y&&i;var D=typeof global=="object"&&global;if(D.global===D||D.window===D){p=D}var M=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;var U=/[\x01-\x7F]/g;var j=/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;var V=/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;var K={"":"shy","":"zwnj","":"zwj","":"lrm","":"ic","":"it","":"af","":"rlm","":"ZeroWidthSpace","":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp"," ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprimeLine truncated
|
||||
/*!
|
||||
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
|
||||
*
|
||||
* Copyright (c) 2014-2017, Jon Schlinkert.
|
||||
* Released under the MIT License.
|
||||
*/function isObject(i){return Object.prototype.toString.call(i)==="[object Object]"}function isPlainObject(i){var d,p;if(isObject(i)===false)return false;d=i.constructor;if(d===undefined)return true;p=d.prototype;if(isObject(p)===false)return false;if(p.hasOwnProperty("isPrototypeOf")===false){return false}return true}d.isPlainObject=isPlainObject},96543:i=>{"use strict";const isStream=i=>i!==null&&typeof i==="object"&&typeof i.pipe==="function";isStream.writable=i=>isStream(i)&&i.writable!==false&&typeof i._write==="function"&&typeof i._writableState==="object";isStream.readable=i=>isStream(i)&&i.readable!==false&&typeof i._read==="function"&&typeof i._readableState==="object";isStream.duplex=i=>isStream.writable(i)&&isStream.readable(i);isStream.transform=i=>isStream.duplex(i)&&typeof i._transform==="function";i.exports=isStream},82513:i=>{var d={}.toString;i.exports=Array.isArray||function(i){return d.call(i)=="[object Array]"}},74281:(i,d,p)=>{"use strict";var y=p(91950);var v=p(59980);function renamed(i,d){return function(){throw new Error("Function yaml."+i+" is removed in js-yaml 4. "+"Use yaml."+d+" instead, which is now safe by default.")}}i.exports.Type=p(9557);i.exports.Schema=p(62046);i.exports.FAILSAFE_SCHEMA=p(69832);i.exports.JSON_SCHEMA=p(58927);i.exports.CORE_SCHEMA=p(55746);i.exports.DEFAULT_SCHEMA=p(97336);i.exports.load=y.load;i.exports.loadAll=y.loadAll;i.exports.dump=v.dump;i.exports.YAMLException=p(41248);i.exports.types={binary:p(8149),float:p(57584),map:p(47316),null:p(4333),pairs:p(16267),set:p(78758),timestamp:p(28966),bool:p(67296),int:p(62271),merge:p(76854),omap:p(58649),seq:p(77161),str:p(53929)};i.exports.safeLoad=renamed("safeLoad","load");i.exports.safeLoadAll=renamed("safeLoadAll","loadAll");i.exports.safeDump=renamed("safeDump","dump")},19816:i=>{"use strict";function isNothing(i){return typeof i==="undefined"||i===null}function isObject(i){return typeof i==="object"&&i!==null}function toArray(i){if(Array.isArray(i))return i;else if(isNothing(i))return[];return[i]}function extend(i,d){var p,y,v,D;if(d){D=Object.keys(d);for(p=0,y=D.length;p<y;p+=1){v=D[p];i[v]=d[v]}}return i}function repeat(i,d){var p="",y;for(y=0;y<d;y+=1){p+=i}return p}function isNegativeZero(i){return i===0&&Number.NEGATIVE_INFINITY===1/i}i.exports.isNothing=isNothing;i.exports.isObject=isObject;i.exports.toArray=toArray;i.exports.repeat=repeat;i.exports.isNegativeZero=isNegativeZero;i.exports.extend=extend},59980:(i,d,p)=>{"use strict";var y=p(19816);var v=p(41248);var D=p(97336);var M=Object.prototype.toString;var U=Object.prototype.hasOwnProperty;var j=65279;var V=9;var K=10;var ee=13;var te=32;var re=33;var ne=34;var ie=35;var se=37;var oe=38;var ae=39;var ce=42;var le=44;var de=45;var ue=58;var pe=61;var me=62;var fe=63;var he=64;var ge=91;var Ae=93;var ye=96;var be=123;var Ee=124;var ve=125;var Ce={};Ce[0]="\\0";Ce[7]="\\a";Ce[8]="\\b";Ce[9]="\\t";Ce[10]="\\n";Ce[11]="\\v";Ce[12]="\\f";Ce[13]="\\r";Ce[27]="\\e";Ce[34]='\\"';Ce[92]="\\\\";Ce[133]="\\N";Ce[160]="\\_";Ce[8232]="\\L";Ce[8233]="\\P";var we=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];var Se=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function compileStyleMap(i,d){var p,y,v,D,M,j,V;if(d===null)return{};p={};y=Object.keys(d);for(v=0,D=y.length;v<D;v+=1){M=y[v];j=String(d[M]);if(M.slice(0,2)==="!!"){M="tag:yaml.org,2002:"+M.slice(2)}V=i.compiledTypeMap["fallback"][M];if(V&&U.call(V.styleAliases,j)){j=V.styleAliases[j]}p[M]=j}return p}function encodeHex(i){var d,p,D;d=i.toString(16).toUpperCase();if(i<=255){p="x";D=2}else if(i<=65535){p="u";D=4}else if(i<=4294967295){p="U";D=8}else{throw new v("code point within a string may not be greater than 0xFFFFFFFF")}return"\\"+p+y.repeat("0",D-d.length)+d}var xe=1,Ie=2;function State(i){this.schema=i["schema"]||D;this.indent=Math.max(1,i["indent"]||2);this.noArrayIndent=i["noArrayIndent"]||false;this.skipInvalid=i["skipInvalid"]||false;this.flowLevel=y.isNothing(i["flowLevel"])?-1:i["flowLevel"];this.styleMap=compileStyleMap(this.schema,i["styles"]||null);this.sortKeys=i["sortKeys"]||false;this.lineWidth=i["lineWidth"]||80;this.noRefs=i["noRefs"]||false;this.noCompatMode=i["noCompatMode"]||false;this.condenseFlow=i["condenseFlow"]||false;this.quotingType=i["quotingType"]==='"'?Ie:xe;this.forceQuotes=i["forceQuotes"]||false;this.replacer=typeof i["replacer"]==="function"?i["replacer"]:null;this.implicitTypes=this.schema.compiledImplicit;this.explicitTypes=this.schema.compiledExplicit;this.tag=null;this.result="";this.duplicates=[];this.usedDuplicates=null}function indentString(i,d){var p=y.repeat(" ",d),v=0,D=-1,M="",U,j=i.length;while(v<j){D=i.indexOf("\n",v);if(D===-1){U=i.slice(v);v=j}else{U=i.slice(v,D+1);v=D+1}if(U.length&&U!=="\n")M+=p;M+=U}return M}function generateNextLine(i,d){return"\n"+y.repeat(" ",i.indent*d)}function testImplicitResolving(i,d){var p,y,v;for(p=0,y=i.implicitTypes.length;p<y;p+=1){v=i.implicitTypes[p];if(v.resolve(d)){return true}}Line truncated
|
||||
/*!
|
||||
* mime-db
|
||||
* Copyright(c) 2014 Jonathan Ong
|
||||
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
||||
* MIT Licensed
|
||||
*/
|
||||
i.exports=p(81813)},14096:(i,d,p)=>{"use strict";
|
||||
/*!
|
||||
* mime-types
|
||||
* Copyright(c) 2014 Jonathan Ong
|
||||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||||
* MIT Licensed
|
||||
*/var y=p(99829);var v=p(16928).extname;var D=/^\s*([^;\s]*)(?:;|\s|$)/;var M=/^text\//i;d.charset=charset;d.charsets={lookup:charset};d.contentType=contentType;d.extension=extension;d.extensions=Object.create(null);d.lookup=lookup;d.types=Object.create(null);populateMaps(d.extensions,d.types);function charset(i){if(!i||typeof i!=="string"){return false}var d=D.exec(i);var p=d&&y[d[1].toLowerCase()];if(p&&p.charset){return p.charset}if(d&&M.test(d[1])){return"UTF-8"}return false}function contentType(i){if(!i||typeof i!=="string"){return false}var p=i.indexOf("/")===-1?d.lookup(i):i;if(!p){return false}if(p.indexOf("charset")===-1){var y=d.charset(p);if(y)p+="; charset="+y.toLowerCase()}return p}function extension(i){if(!i||typeof i!=="string"){return false}var p=D.exec(i);var y=p&&d.extensions[p[1].toLowerCase()];if(!y||!y.length){return false}return y[0]}function lookup(i){if(!i||typeof i!=="string"){return false}var p=v("x."+i).toLowerCase().substr(1);if(!p){return false}return d.types[p]||false}function populateMaps(i,d){var p=["nginx","apache",undefined,"iana"];Object.keys(y).forEach((function forEachMimeType(v){var D=y[v];var M=D.extensions;if(!M||!M.length){return}i[v]=M;for(var U=0;U<M.length;U++){var j=M[U];if(d[j]){var V=p.indexOf(y[d[j]].source);var K=p.indexOf(D.source);if(d[j]!=="application/octet-stream"&&(V>K||V===K&&d[j].substr(0,12)==="application/")){continue}}d[j]=v}}))}},43772:(i,d,p)=>{i.exports=minimatch;minimatch.Minimatch=Minimatch;var y=function(){try{return p(16928)}catch(i){}}()||{sep:"/"};minimatch.sep=y.sep;var v=minimatch.GLOBSTAR=Minimatch.GLOBSTAR={};var D=p(73783);var M={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}};var U="[^/]";var j=U+"*?";var V="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";var K="(?:(?!(?:\\/|^)\\.).)*?";var ee=charSet("().*{}+?[]^$\\!");function charSet(i){return i.split("").reduce((function(i,d){i[d]=true;return i}),{})}var te=/\/+/;minimatch.filter=filter;function filter(i,d){d=d||{};return function(p,y,v){return minimatch(p,i,d)}}function ext(i,d){d=d||{};var p={};Object.keys(i).forEach((function(d){p[d]=i[d]}));Object.keys(d).forEach((function(i){p[i]=d[i]}));return p}minimatch.defaults=function(i){if(!i||typeof i!=="object"||!Object.keys(i).length){return minimatch}var d=minimatch;var p=function minimatch(p,y,v){return d(p,y,ext(i,v))};p.Minimatch=function Minimatch(p,y){return new d.Minimatch(p,ext(i,y))};p.Minimatch.defaults=function defaults(p){return d.defaults(ext(i,p)).Minimatch};p.filter=function filter(p,y){return d.filter(p,ext(i,y))};p.defaults=function defaults(p){return d.defaults(ext(i,p))};p.makeRe=function makeRe(p,y){return d.makeRe(p,ext(i,y))};p.braceExpand=function braceExpand(p,y){return d.braceExpand(p,ext(i,y))};p.match=function(p,y,v){return d.match(p,y,ext(i,v))};return p};Minimatch.defaults=function(i){return minimatch.defaults(i).Minimatch};function minimatch(i,d,p){assertValidPattern(d);if(!p)p={};if(!p.nocomment&&d.charAt(0)==="#"){return false}return new Minimatch(d,p).match(i)}function Minimatch(i,d){if(!(this instanceof Minimatch)){return new Minimatch(i,d)}assertValidPattern(i);if(!d)d={};i=i.trim();if(!d.allowWindowsEscape&&y.sep!=="/"){i=i.split(y.sep).join("/")}this.options=d;this.set=[];this.pattern=i;this.regexp=null;this.negate=false;this.comment=false;this.empty=false;this.partial=!!d.partial;this.make()}Minimatch.prototype.debug=function(){};Minimatch.prototype.make=make;function make(){var i=this.pattern;var d=this.options;if(!d.nocomment&&i.charAt(0)==="#"){this.comment=true;return}if(!i){this.empty=true;return}this.parseNegate();var p=this.globSet=this.braceExpand();if(d.debug)this.debug=function debug(){console.error.apply(console,arguments)};this.debug(this.pattern,p);p=this.globParts=p.map((function(i){return i.split(te)}));this.debug(this.pattern,p);p=p.map((function(i,d,p){return i.map(this.parse,this)}),this);this.debug(this.pattern,p);p=p.filter((function(i){return i.indexOf(false)===-1}));this.debug(this.pattern,p);this.set=p}Minimatch.prototype.parseNegate=parseNegate;function parseNegate(){var i=this.pattern;var d=false;var p=this.options;var y=0;if(p.nonegate)return;for(var v=0,D=i.length;v<D&&i.charAt(v)==="!";v++){d=!d;y++}if(y)this.pattern=i.substr(y);this.negate=d}minimatch.braceExpand=function(i,d){return braceExpand(i,d)};Minimatch.prototype.braceExpand=braceExpand;function braceExpand(i,d){if(!d){if(this instanceof Minimatch){d=this.options}else{d={}}}i=typeof i==="undefined"?this.pattern:i;assertValidPattern(i);if(d.nobrace||!/\{(?:(?!\{).)*\}/.test(i)){return[i]}return D(i)}var re=1024*64;var assertValidPattern=function(i){if(typeof i!=="string"){throw new TypeError("invalid pattern")}if(i.length>re){throw new TypeError("pattern is too long")}};Minimatch.prototype.parse=parse;var ne={};function parse(i,d){assertValidPattern(i);var p=this.options;if(i==="**"){if(!p.noglobstar)return v;eLine truncated
|
||||
/*!
|
||||
* normalize-path <https://github.com/jonschlinkert/normalize-path>
|
||||
*
|
||||
* Copyright (c) 2014-2018, Jon Schlinkert.
|
||||
* Released under the MIT License.
|
||||
*/
|
||||
i.exports=function(i,d){if(typeof i!=="string"){throw new TypeError("expected path to be a string")}if(i==="\\"||i==="/")return"/";var p=i.length;if(p<=1)return i;var y="";if(p>4&&i[3]==="\\"){var v=i[2];if((v==="?"||v===".")&&i.slice(0,2)==="\\\\"){i=i.slice(2);y="//"}}var D=i.split(/[/\\]+/);if(d!==false&&D[D.length-1]===""){D.pop()}return y+D.join("/")}},55560:(i,d,p)=>{var y=p(58264);i.exports=y(once);i.exports.strict=y(onceStrict);once.proto=once((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return once(this)},configurable:true});Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return onceStrict(this)},configurable:true})}));function once(i){var f=function(){if(f.called)return f.value;f.called=true;return f.value=i.apply(this,arguments)};f.called=false;return f}function onceStrict(i){var f=function(){if(f.called)throw new Error(f.onceError);f.called=true;return f.value=i.apply(this,arguments)};var d=i.name||"Function wrapped with `once`";f.onceError=d+" shouldn't be called more than once";f.called=false;return f}},41564:i=>{"use strict";if(typeof process==="undefined"||!process.version||process.version.indexOf("v0.")===0||process.version.indexOf("v1.")===0&&process.version.indexOf("v1.8.")!==0){i.exports={nextTick:nextTick}}else{i.exports=process}function nextTick(i,d,p,y){if(typeof i!=="function"){throw new TypeError('"callback" argument must be a function')}var v=arguments.length;var D,M;switch(v){case 0:case 1:return process.nextTick(i);case 2:return process.nextTick((function afterTickOne(){i.call(null,d)}));case 3:return process.nextTick((function afterTickTwo(){i.call(null,d,p)}));case 4:return process.nextTick((function afterTickThree(){i.call(null,d,p,y)}));default:D=new Array(v-1);M=0;while(M<D.length){D[M++]=arguments[M]}return process.nextTick((function afterTick(){i.apply(null,D)}))}}},7945:i=>{i.exports=global.process},5506:(i,d,p)=>{i.exports=typeof process!=="undefined"&&typeof process.nextTick==="function"?process.nextTick.bind(process):p(36828)},36828:i=>{i.exports=typeof queueMicrotask==="function"?queueMicrotask:i=>Promise.resolve().then(i)},80652:(i,d,p)=>{"use strict";const{SymbolDispose:y}=p(50999);const{AbortError:v,codes:D}=p(69220);const{isNodeStream:M,isWebStream:U,kControllerErrorFunction:j}=p(83426);const V=p(36815);const{ERR_INVALID_ARG_TYPE:K}=D;let ee;const validateAbortSignal=(i,d)=>{if(typeof i!=="object"||!("aborted"in i)){throw new K(d,"AbortSignal",i)}};i.exports.addAbortSignal=function addAbortSignal(d,p){validateAbortSignal(d,"signal");if(!M(p)&&!U(p)){throw new K("stream",["ReadableStream","WritableStream","Stream"],p)}return i.exports.addAbortSignalNoValidate(d,p)};i.exports.addAbortSignalNoValidate=function(i,d){if(typeof i!=="object"||!("aborted"in i)){return d}const D=M(d)?()=>{d.destroy(new v(undefined,{cause:i.reason}))}:()=>{d[j](new v(undefined,{cause:i.reason}))};if(i.aborted){D()}else{ee=ee||p(23539).addAbortListener;const v=ee(i,D);V(d,v[y])}return d}},77336:(i,d,p)=>{"use strict";const{StringPrototypeSlice:y,SymbolIterator:v,TypedArrayPrototypeSet:D,Uint8Array:M}=p(50999);const{Buffer:U}=p(20181);const{inspect:j}=p(23539);i.exports=class BufferList{constructor(){this.head=null;this.tail=null;this.length=0}push(i){const d={data:i,next:null};if(this.length>0)this.tail.next=d;else this.head=d;this.tail=d;++this.length}unshift(i){const d={data:i,next:this.head};if(this.length===0)this.tail=d;this.head=d;++this.length}shift(){if(this.length===0)return;const i=this.head.data;if(this.length===1)this.head=this.tail=null;else this.head=this.head.next;--this.length;return i}clear(){this.head=this.tail=null;this.length=0}join(i){if(this.length===0)return"";let d=this.head;let p=""+d.data;while((d=d.next)!==null)p+=i+d.data;return p}concat(i){if(this.length===0)return U.alloc(0);const d=U.allocUnsafe(i>>>0);let p=this.head;let y=0;while(p){D(d,p.data,y);y+=p.data.length;p=p.next}return d}consume(i,d){const p=this.head.data;if(i<p.length){const d=p.slice(0,i);this.head.data=p.slice(i);return d}if(i===p.length){return this.shift()}return d?this._getString(i):this._getBuffer(i)}first(){return this.head.data}*[v](){for(let i=this.head;i;i=i.next){yield i.data}}_getString(i){let d="";let p=this.head;let v=0;do{const D=p.data;if(i>D.length){d+=D;i-=D.length}else{if(i===D.length){d+=D;++v;if(p.next)this.head=p.next;else this.head=this.tail=null}else{d+=y(D,0,i);this.head=p;p.data=y(D,i)}break}++v}while((p=p.next)!==null);this.length-=v;return d}_getBuffer(i){const d=U.allocUnsafe(i);const p=i;let y=this.head;let v=0;do{const U=y.data;if(i>U.length){D(d,U,p-i);i-=U.length}else{if(i===U.length){D(d,U,p-i);++v;if(y.next)this.head=y.next;else this.head=this.tail=null}else{D(d,new M(U.buffer,U.byteOffset,i),p-i);this.head=y;y.data=U.slice(i)}break}++v}while((y=y.next)!==null);this.length-=v;return d}[Symbol.for("nodejs.util.inspect.custom")](i,d){return j(this,{...d,depth:0,customInspect:false})}}},64999:(i,d,p)=>{"use sLine truncated
|
||||
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */if(!String.fromCodePoint){(function(){var i=String.fromCharCode;var d=Math.floor;var fromCodePoint=function(){var p=16384;var y=[];var v;var D;var M=-1;var U=arguments.length;if(!U){return""}var j="";while(++M<U){var V=Number(arguments[M]);if(!isFinite(V)||V<0||V>1114111||d(V)!==V){throw RangeError("Invalid code point: "+V)}if(V<=65535){y.push(V)}else{V-=65536;v=(V>>10)+55296;D=V%1024+56320;y.push(v,D)}if(M+1===U||y.length>p){j+=i.apply(null,y);y.length=0}}return j};if(Object.defineProperty){Object.defineProperty(String,"fromCodePoint",{value:fromCodePoint,configurable:true,writable:true})}else{String.fromCodePoint=fromCodePoint}})()}})(false?0:d)},39318:(i,d)=>{d=i.exports=SemVer;var p;if(typeof process==="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)){p=function(){var i=Array.prototype.slice.call(arguments,0);i.unshift("SEMVER");console.log.apply(console,i)}}else{p=function(){}}d.SEMVER_SPEC_VERSION="2.0.0";var y=256;var v=Number.MAX_SAFE_INTEGER||9007199254740991;var D=16;var M=y-6;var U=d.re=[];var j=d.safeRe=[];var V=d.src=[];var K=d.tokens={};var ee=0;function tok(i){K[i]=ee++}var te="[a-zA-Z0-9-]";var re=[["\\s",1],["\\d",y],[te,M]];function makeSafeRe(i){for(var d=0;d<re.length;d++){var p=re[d][0];var y=re[d][1];i=i.split(p+"*").join(p+"{0,"+y+"}").split(p+"+").join(p+"{1,"+y+"}")}return i}tok("NUMERICIDENTIFIER");V[K.NUMERICIDENTIFIER]="0|[1-9]\\d*";tok("NUMERICIDENTIFIERLOOSE");V[K.NUMERICIDENTIFIERLOOSE]="\\d+";tok("NONNUMERICIDENTIFIER");V[K.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-]"+te+"*";tok("MAINVERSION");V[K.MAINVERSION]="("+V[K.NUMERICIDENTIFIER]+")\\."+"("+V[K.NUMERICIDENTIFIER]+")\\."+"("+V[K.NUMERICIDENTIFIER]+")";tok("MAINVERSIONLOOSE");V[K.MAINVERSIONLOOSE]="("+V[K.NUMERICIDENTIFIERLOOSE]+")\\."+"("+V[K.NUMERICIDENTIFIERLOOSE]+")\\."+"("+V[K.NUMERICIDENTIFIERLOOSE]+")";tok("PRERELEASEIDENTIFIER");V[K.PRERELEASEIDENTIFIER]="(?:"+V[K.NUMERICIDENTIFIER]+"|"+V[K.NONNUMERICIDENTIFIER]+")";tok("PRERELEASEIDENTIFIERLOOSE");V[K.PRERELEASEIDENTIFIERLOOSE]="(?:"+V[K.NUMERICIDENTIFIERLOOSE]+"|"+V[K.NONNUMERICIDENTIFIER]+")";tok("PRERELEASE");V[K.PRERELEASE]="(?:-("+V[K.PRERELEASEIDENTIFIER]+"(?:\\."+V[K.PRERELEASEIDENTIFIER]+")*))";tok("PRERELEASELOOSE");V[K.PRERELEASELOOSE]="(?:-?("+V[K.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+V[K.PRERELEASEIDENTIFIERLOOSE]+")*))";tok("BUILDIDENTIFIER");V[K.BUILDIDENTIFIER]=te+"+";tok("BUILD");V[K.BUILD]="(?:\\+("+V[K.BUILDIDENTIFIER]+"(?:\\."+V[K.BUILDIDENTIFIER]+")*))";tok("FULL");tok("FULLPLAIN");V[K.FULLPLAIN]="v?"+V[K.MAINVERSION]+V[K.PRERELEASE]+"?"+V[K.BUILD]+"?";V[K.FULL]="^"+V[K.FULLPLAIN]+"$";tok("LOOSEPLAIN");V[K.LOOSEPLAIN]="[v=\\s]*"+V[K.MAINVERSIONLOOSE]+V[K.PRERELEASELOOSE]+"?"+V[K.BUILD]+"?";tok("LOOSE");V[K.LOOSE]="^"+V[K.LOOSEPLAIN]+"$";tok("GTLT");V[K.GTLT]="((?:<|>)?=?)";tok("XRANGEIDENTIFIERLOOSE");V[K.XRANGEIDENTIFIERLOOSE]=V[K.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*";tok("XRANGEIDENTIFIER");V[K.XRANGEIDENTIFIER]=V[K.NUMERICIDENTIFIER]+"|x|X|\\*";tok("XRANGEPLAIN");V[K.XRANGEPLAIN]="[v=\\s]*("+V[K.XRANGEIDENTIFIER]+")"+"(?:\\.("+V[K.XRANGEIDENTIFIER]+")"+"(?:\\.("+V[K.XRANGEIDENTIFIER]+")"+"(?:"+V[K.PRERELEASE]+")?"+V[K.BUILD]+"?"+")?)?";tok("XRANGEPLAINLOOSE");V[K.XRANGEPLAINLOOSE]="[v=\\s]*("+V[K.XRANGEIDENTIFIERLOOSE]+")"+"(?:\\.("+V[K.XRANGEIDENTIFIERLOOSE]+")"+"(?:\\.("+V[K.XRANGEIDENTIFIERLOOSE]+")"+"(?:"+V[K.PRERELEASELOOSE]+")?"+V[K.BUILD]+"?"+")?)?";tok("XRANGE");V[K.XRANGE]="^"+V[K.GTLT]+"\\s*"+V[K.XRANGEPLAIN]+"$";tok("XRANGELOOSE");V[K.XRANGELOOSE]="^"+V[K.GTLT]+"\\s*"+V[K.XRANGEPLAINLOOSE]+"$";tok("COERCE");V[K.COERCE]="(^|[^\\d])"+"(\\d{1,"+D+"})"+"(?:\\.(\\d{1,"+D+"}))?"+"(?:\\.(\\d{1,"+D+"}))?"+"(?:$|[^\\d])";tok("COERCERTL");U[K.COERCERTL]=new RegExp(V[K.COERCE],"g");j[K.COERCERTL]=new RegExp(makeSafeRe(V[K.COERCE]),"g");tok("LONETILDE");V[K.LONETILDE]="(?:~>?)";tok("TILDETRIM");V[K.TILDETRIM]="(\\s*)"+V[K.LONETILDE]+"\\s+";U[K.TILDETRIM]=new RegExp(V[K.TILDETRIM],"g");j[K.TILDETRIM]=new RegExp(makeSafeRe(V[K.TILDETRIM]),"g");var ne="$1~";tok("TILDE");V[K.TILDE]="^"+V[K.LONETILDE]+V[K.XRANGEPLAIN]+"$";tok("TILDELOOSE");V[K.TILDELOOSE]="^"+V[K.LONETILDE]+V[K.XRANGEPLAINLOOSE]+"$";tok("LONECARET");V[K.LONECARET]="(?:\\^)";tok("CARETTRIM");V[K.CARETTRIM]="(\\s*)"+V[K.LONECARET]+"\\s+";U[K.CARETTRIM]=new RegExp(V[K.CARETTRIM],"g");j[K.CARETTRIM]=new RegExp(makeSafeRe(V[K.CARETTRIM]),"g");var ie="$1^";tok("CARET");V[K.CARET]="^"+V[K.LONECARET]+V[K.XRANGEPLAIN]+"$";tok("CARETLOOSE");V[K.CARETLOOSE]="^"+V[K.LONECARET]+V[K.XRANGEPLAINLOOSE]+"$";tok("COMPARATORLOOSE");V[K.COMPARATORLOOSE]="^"+V[K.GTLT]+"\\s*("+V[K.LOOSEPLAIN]+")$|^$";tok("COMPARATOR");V[K.COMPARATOR]="^"+V[K.GTLT]+"\\s*("+V[K.FULLPLAIN]+")$|^$";tok("COMPARATORTRIM");V[K.COMPARATORTRIM]="(\\s*)"+V[K.GTLT]+"\\s*("+V[K.LOOSEPLAIN]+"|"+V[K.XRANGEPLAIN]+")";U[K.COMPARATORTRIM]=new RegExp(V[K.COMPARATORTRIM],"g");j[K.COMPARATORTRIM]=new RegExp(makeSafeRe(V[K.COMPARATORTRIM]),"g");var se="$1Line truncated
|
||||
/*!
|
||||
* Tmp
|
||||
*
|
||||
* Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu>
|
||||
*
|
||||
* MIT Licensed
|
||||
*/
|
||||
const y=p(79896);const v=p(70857);const D=p(16928);const M=p(76982);const U={fs:y.constants,os:v.constants};const j="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",V=/XXXXXX/,K=3,ee=(U.O_CREAT||U.fs.O_CREAT)|(U.O_EXCL||U.fs.O_EXCL)|(U.O_RDWR||U.fs.O_RDWR),te=v.platform()==="win32",re=U.EBADF||U.os.errno.EBADF,ne=U.ENOENT||U.os.errno.ENOENT,ie=448,se=384,oe="exit",ae=[],ce=y.rmdirSync.bind(y);let le=false;function rimraf(i,d){return y.rm(i,{recursive:true},d)}function FN_RIMRAF_SYNC(i){return y.rmSync(i,{recursive:true})}function tmpName(i,d){const p=_parseArguments(i,d),v=p[0],D=p[1];_assertAndSanitizeOptions(v,(function(i,d){if(i)return D(i);let p=d.tries;(function _getUniqueName(){try{const i=_generateTmpName(d);y.stat(i,(function(d){if(!d){if(p-- >0)return _getUniqueName();return D(new Error("Could not get a unique tmp filename, max tries reached "+i))}D(null,i)}))}catch(i){D(i)}})()}))}function tmpNameSync(i){const d=_parseArguments(i),p=d[0];const v=_assertAndSanitizeOptionsSync(p);let D=v.tries;do{const i=_generateTmpName(v);try{y.statSync(i)}catch(d){return i}}while(D-- >0);throw new Error("Could not get a unique tmp filename, max tries reached")}function file(i,d){const p=_parseArguments(i,d),v=p[0],D=p[1];tmpName(v,(function _tmpNameCreated(i,d){if(i)return D(i);y.open(d,ee,v.mode||se,(function _fileCreated(i,p){if(i)return D(i);if(v.discardDescriptor){return y.close(p,(function _discardCallback(i){return D(i,d,undefined,_prepareTmpFileRemoveCallback(d,-1,v,false))}))}else{const i=v.discardDescriptor||v.detachDescriptor;D(null,d,p,_prepareTmpFileRemoveCallback(d,i?-1:p,v,false))}}))}))}function fileSync(i){const d=_parseArguments(i),p=d[0];const v=p.discardDescriptor||p.detachDescriptor;const D=tmpNameSync(p);let M=y.openSync(D,ee,p.mode||se);if(p.discardDescriptor){y.closeSync(M);M=undefined}return{name:D,fd:M,removeCallback:_prepareTmpFileRemoveCallback(D,v?-1:M,p,true)}}function dir(i,d){const p=_parseArguments(i,d),v=p[0],D=p[1];tmpName(v,(function _tmpNameCreated(i,d){if(i)return D(i);y.mkdir(d,v.mode||ie,(function _dirCreated(i){if(i)return D(i);D(null,d,_prepareTmpDirRemoveCallback(d,v,false))}))}))}function dirSync(i){const d=_parseArguments(i),p=d[0];const v=tmpNameSync(p);y.mkdirSync(v,p.mode||ie);return{name:v,removeCallback:_prepareTmpDirRemoveCallback(v,p,true)}}function _removeFileAsync(i,d){const _handler=function(i){if(i&&!_isENOENT(i)){return d(i)}d()};if(0<=i[0])y.close(i[0],(function(){y.unlink(i[1],_handler)}));else y.unlink(i[1],_handler)}function _removeFileSync(i){let d=null;try{if(0<=i[0])y.closeSync(i[0])}catch(i){if(!_isEBADF(i)&&!_isENOENT(i))throw i}finally{try{y.unlinkSync(i[1])}catch(i){if(!_isENOENT(i))d=i}}if(d!==null){throw d}}function _prepareTmpFileRemoveCallback(i,d,p,y){const v=_prepareRemoveCallback(_removeFileSync,[d,i],y);const D=_prepareRemoveCallback(_removeFileAsync,[d,i],y,v);if(!p.keep)ae.unshift(v);return y?v:D}function _prepareTmpDirRemoveCallback(i,d,p){const v=d.unsafeCleanup?rimraf:y.rmdir.bind(y);const D=d.unsafeCleanup?FN_RIMRAF_SYNC:ce;const M=_prepareRemoveCallback(D,i,p);const U=_prepareRemoveCallback(v,i,p,M);if(!d.keep)ae.unshift(M);return p?M:U}function _prepareRemoveCallback(i,d,p,y){let v=false;return function _cleanupCallback(D){if(!v){const M=y||_cleanupCallback;const U=ae.indexOf(M);if(U>=0)ae.splice(U,1);v=true;if(p||i===ce||i===FN_RIMRAF_SYNC){return i(d)}else{return i(d,D||function(){})}}}}function _garbageCollector(){if(!le)return;while(ae.length){try{ae[0]()}catch(i){}}}function _randomChars(i){let d=[],p=null;try{p=M.randomBytes(i)}catch(d){p=M.pseudoRandomBytes(i)}for(let y=0;y<i;y++){d.push(j[p[y]%j.length])}return d.join("")}function _isUndefined(i){return typeof i==="undefined"}function _parseArguments(i,d){if(typeof i==="function"){return[{},i]}if(_isUndefined(i)){return[{},d]}const p={};for(const d of Object.getOwnPropertyNames(i)){p[d]=i[d]}return[p,d]}function _resolvePath(i,d,p){const v=D.isAbsolute(i)?i:D.join(d,i);y.stat(v,(function(i){if(i){y.realpath(D.dirname(v),(function(i,d){if(i)return p(i);p(null,D.join(d,D.basename(v)))}))}else{y.realpath(v,p)}}))}function _resolvePathSync(i,d){const p=D.isAbsolute(i)?i:D.join(d,i);try{y.statSync(p);return y.realpathSync(p)}catch(i){const d=y.realpathSync(D.dirname(p));return D.join(d,D.basename(p))}}function _generateTmpName(i){const d=i.tmpdir;if(!_isUndefined(i.name)){return D.join(d,i.dir,i.name)}if(!_isUndefined(i.template)){return D.join(d,i.dir,i.template).replace(V,_randomChars(6))}const p=[i.prefix?i.prefix:"tmp","-",process.pid,"-",_randomChars(12),i.postfix?"-"+i.postfix:""].join("");return D.join(d,i.dir,p)}function _assertOptionsBase(i){if(!_isUndefined(i.name)){const d=i.name;if(D.isAbsolute(d))throw new Error(`name option must not contain an absolute path, found "${d}".`);const p=D.basename(d);if(p===".."||p==="."||p!==d)throw new Error(`name option must not contain a path, found "${d}".`)}if(!_isUndefined(i.template)&&!i.template.match(V)){throwLine truncated
|
||||
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */;const escape=i=>i.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22");const normalizeLinefeeds=i=>i.replace(/\r?\n|\r/g,"\r\n");const y=[];const v=new Uint8Array([13,10]);ee=0;let D=false;for(const[d,M]of i){if(typeof M==="string"){const i=ye.encode(p+`; name="${escape(normalizeLinefeeds(d))}"`+`\r\n\r\n${normalizeLinefeeds(M)}\r\n`);y.push(i);ee+=i.byteLength}else{const i=ye.encode(`${p}; name="${escape(normalizeLinefeeds(d))}"`+(M.name?`; filename="${escape(M.name)}"`:"")+"\r\n"+`Content-Type: ${M.type||"application/octet-stream"}\r\n\r\n`);y.push(i,M,v);if(typeof M.size==="number"){ee+=i.byteLength+M.size+v.byteLength}else{D=true}}}const M=ye.encode(`--${d}--`);y.push(M);ee+=M.byteLength;if(D){ee=null}K=i;V=async function*(){for(const i of y){if(i.stream){yield*i.stream()}else{yield i}}};te="multipart/form-data; boundary="+d}else if(M(i)){K=i;ee=i.size;if(i.type){te=i.type}}else if(typeof i[Symbol.asyncIterator]==="function"){if(d){throw new TypeError("keepalive")}if(v.isDisturbed(i)||i.locked){throw new TypeError("Response body object should not be disturbed or locked")}y=i instanceof ge?i:D(i)}if(typeof K==="string"||v.isBuffer(K)){ee=Buffer.byteLength(K)}if(V!=null){let d;y=new ge({async start(){d=V(i)[Symbol.asyncIterator]()},async pull(i){const{value:p,done:v}=await d.next();if(v){queueMicrotask((()=>{i.close()}))}else{if(!le(y)){i.enqueue(new Uint8Array(p))}}return i.desiredSize>0},async cancel(i){await d.return()},type:undefined})}const re={stream:y,source:K,length:ee};return[re,te]}function safelyExtractBody(i,d=false){if(!ge){ge=p(63774).ReadableStream}if(i instanceof ge){ce(!v.isDisturbed(i),"The body has already been consumed.");ce(!i.locked,"The stream is locked.")}return extractBody(i,d)}function cloneBody(i){const[d,p]=i.stream.tee();const y=ie(p,{transfer:[p]});const[,v]=y.tee();i.stream=d;return{stream:v,length:i.length,source:i.source}}async function*consumeBody(i){if(i){if(de(i)){yield i}else{const d=i.stream;if(v.isDisturbed(d)){throw new TypeError("The body has already been consumed.")}if(d.locked){throw new TypeError("The stream is locked.")}d[ae]=true;yield*d}}}function throwIfAborted(i){if(i.aborted){throw new ne("The operation was aborted.","AbortError")}}function bodyMixinMethods(i){const d={blob(){return specConsumeBody(this,(i=>{let d=bodyMimeType(this);if(d==="failure"){d=""}else if(d){d=fe(d)}return new se([i],{type:d})}),i)},arrayBuffer(){return specConsumeBody(this,(i=>new Uint8Array(i).buffer),i)},text(){return specConsumeBody(this,utf8DecodeBytes,i)},json(){return specConsumeBody(this,parseJSONFromBytes,i)},async formData(){re.brandCheck(this,i);throwIfAborted(this[te]);const d=this.headers.get("Content-Type");if(/multipart\/form-data/.test(d)){const i={};for(const[d,p]of this.headers)i[d.toLowerCase()]=p;const d=new ee;let p;try{p=new y({headers:i,preservePath:true})}catch(i){throw new ne(`${i}`,"AbortError")}p.on("field",((i,p)=>{d.append(i,p)}));p.on("file",((i,p,y,v,D)=>{const M=[];if(v==="base64"||v.toLowerCase()==="base64"){let v="";p.on("data",(i=>{v+=i.toString().replace(/[\r\n]/gm,"");const d=v.length-v.length%4;M.push(Buffer.from(v.slice(0,d),"base64"));v=v.slice(d)}));p.on("end",(()=>{M.push(Buffer.from(v,"base64"));d.append(i,new Ae(M,y,{type:D}))}))}else{p.on("data",(i=>{M.push(i)}));p.on("end",(()=>{d.append(i,new Ae(M,y,{type:D}))}))}}));const v=new Promise(((i,d)=>{p.on("finish",i);p.on("error",(i=>d(new TypeError(i))))}));if(this.body!==null)for await(const i of consumeBody(this[te].body))p.write(i);p.end();await v;return d}else if(/application\/x-www-form-urlencoded/.test(d)){let i;try{let d="";const p=new TextDecoder("utf-8",{ignoreBOM:true});for await(const i of consumeBody(this[te].body)){if(!de(i)){throw new TypeError("Expected Uint8Array chunk")}d+=p.decode(i,{stream:true})}d+=p.decode();i=new URLSearchParams(d)}catch(i){throw Object.assign(new TypeError,{cause:i})}const d=new ee;for(const[p,y]of i){d.append(p,y)}return d}else{await Promise.resolve();throwIfAborted(this[te]);throw re.errors.exception({header:`${i.name}.formData`,message:"Could not parse content as FormData."})}}};return d}function mixinBody(i){Object.assign(i.prototype,bodyMixinMethods(i))}async function specConsumeBody(i,d,p){re.brandCheck(i,p);throwIfAborted(i[te]);if(bodyUnusable(i[te].body)){throw new TypeError("Body is unusable")}const y=V();const errorSteps=i=>y.reject(i);const successSteps=i=>{try{y.resolve(d(i))}catch(i){errorSteps(i)}};if(i[te].body==null){successSteps(new Uint8Array);return y.promise}await K(i[te].body,successSteps,errorSteps);return y.promise}function bodyUnusable(i){return i!=null&&(i.stream.locked||v.isDisturbed(i.stream))}function utf8DecodeBytes(i){if(i.length===0){return""}if(i[0]===239&&i[1]===187&&i[2]===191){i=i.subarray(3)}const d=be.decode(i);return d}function parseJSONFromBytes(i){return JSON.parse(utf8DecodeBytes(i))}function bodyMimeType(i){Line truncated
|
||||
/*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */D[v-4]=this.maskKey[0];D[v-3]=this.maskKey[1];D[v-2]=this.maskKey[2];D[v-1]=this.maskKey[3];D[1]=p;if(p===126){D.writeUInt16BE(d,2)}else if(p===127){D[2]=D[3]=0;D.writeUIntBE(d,4,6)}D[1]|=128;for(let i=0;i<d;i++){D[v+i]=this.frameData[i]^this.maskKey[i%4]}return D}}i.exports={WebsocketFrameSend:WebsocketFrameSend}},43171:(i,d,p)=>{"use strict";const{Writable:y}=p(2203);const v=p(31637);const{parserStates:D,opcodes:M,states:U,emptyBuffer:j}=p(45913);const{kReadyState:V,kSentClose:K,kResponse:ee,kReceivedClose:te}=p(62933);const{isValidStatusCode:re,failWebsocketConnection:ne,websocketMessageReceived:ie}=p(3574);const{WebsocketFrameSend:se}=p(31237);const oe={};oe.ping=v.channel("undici:websocket:ping");oe.pong=v.channel("undici:websocket:pong");class ByteParser extends y{#o=[];#a=0;#c=D.INFO;#l={};#d=[];constructor(i){super();this.ws=i}_write(i,d,p){this.#o.push(i);this.#a+=i.length;this.run(p)}run(i){while(true){if(this.#c===D.INFO){if(this.#a<2){return i()}const d=this.consume(2);this.#l.fin=(d[0]&128)!==0;this.#l.opcode=d[0]&15;this.#l.originalOpcode??=this.#l.opcode;this.#l.fragmented=!this.#l.fin&&this.#l.opcode!==M.CONTINUATION;if(this.#l.fragmented&&this.#l.opcode!==M.BINARY&&this.#l.opcode!==M.TEXT){ne(this.ws,"Invalid frame type was fragmented.");return}const p=d[1]&127;if(p<=125){this.#l.payloadLength=p;this.#c=D.READ_DATA}else if(p===126){this.#c=D.PAYLOADLENGTH_16}else if(p===127){this.#c=D.PAYLOADLENGTH_64}if(this.#l.fragmented&&p>125){ne(this.ws,"Fragmented frame exceeded 125 bytes.");return}else if((this.#l.opcode===M.PING||this.#l.opcode===M.PONG||this.#l.opcode===M.CLOSE)&&p>125){ne(this.ws,"Payload length for control frame exceeded 125 bytes.");return}else if(this.#l.opcode===M.CLOSE){if(p===1){ne(this.ws,"Received close frame with a 1-byte body.");return}const i=this.consume(p);this.#l.closeInfo=this.parseCloseBody(false,i);if(!this.ws[K]){const i=Buffer.allocUnsafe(2);i.writeUInt16BE(this.#l.closeInfo.code,0);const d=new se(i);this.ws[ee].socket.write(d.createFrame(M.CLOSE),(i=>{if(!i){this.ws[K]=true}}))}this.ws[V]=U.CLOSING;this.ws[te]=true;this.end();return}else if(this.#l.opcode===M.PING){const d=this.consume(p);if(!this.ws[te]){const i=new se(d);this.ws[ee].socket.write(i.createFrame(M.PONG));if(oe.ping.hasSubscribers){oe.ping.publish({payload:d})}}this.#c=D.INFO;if(this.#a>0){continue}else{i();return}}else if(this.#l.opcode===M.PONG){const d=this.consume(p);if(oe.pong.hasSubscribers){oe.pong.publish({payload:d})}if(this.#a>0){continue}else{i();return}}}else if(this.#c===D.PAYLOADLENGTH_16){if(this.#a<2){return i()}const d=this.consume(2);this.#l.payloadLength=d.readUInt16BE(0);this.#c=D.READ_DATA}else if(this.#c===D.PAYLOADLENGTH_64){if(this.#a<8){return i()}const d=this.consume(8);const p=d.readUInt32BE(0);if(p>2**31-1){ne(this.ws,"Received payload length > 2^31 bytes.");return}const y=d.readUInt32BE(4);this.#l.payloadLength=(p<<8)+y;this.#c=D.READ_DATA}else if(this.#c===D.READ_DATA){if(this.#a<this.#l.payloadLength){return i()}else if(this.#a>=this.#l.payloadLength){const i=this.consume(this.#l.payloadLength);this.#d.push(i);if(!this.#l.fragmented||this.#l.fin&&this.#l.opcode===M.CONTINUATION){const i=Buffer.concat(this.#d);ie(this.ws,this.#l.originalOpcode,i);this.#l={};this.#d.length=0}this.#c=D.INFO}}if(this.#a>0){continue}else{i();break}}}consume(i){if(i>this.#a){return null}else if(i===0){return j}if(this.#o[0].length===i){this.#a-=this.#o[0].length;return this.#o.shift()}const d=Buffer.allocUnsafe(i);let p=0;while(p!==i){const y=this.#o[0];const{length:v}=y;if(v+p===i){d.set(this.#o.shift(),p);break}else if(v+p>i){d.set(y.subarray(0,i-p),p);this.#o[0]=y.subarray(i-p);break}else{d.set(this.#o.shift(),p);p+=y.length}}this.#a-=i;return d}parseCloseBody(i,d){let p;if(d.length>=2){p=d.readUInt16BE(0)}if(i){if(!re(p)){return null}return{code:p}}let y=d.subarray(2);if(y[0]===239&&y[1]===187&&y[2]===191){y=y.subarray(3)}if(p!==undefined&&!re(p)){return null}try{y=new TextDecoder("utf-8",{fatal:true}).decode(y)}catch{return null}return{code:p,reason:y}}get closingInfo(){return this.#l.closeInfo}}i.exports={ByteParser:ByteParser}},62933:i=>{"use strict";i.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}},3574:(i,d,p)=>{"use strict";const{kReadyState:y,kController:v,kResponse:D,kBinaryType:M,kWebSocketURL:U}=p(62933);const{states:j,opcodes:V}=p(45913);const{MessageEvent:K,ErrorEvent:ee}=p(46255);function isEstablished(i){return i[y]===j.OPEN}function isClosing(i){return i[y]===j.CLOSING}function isClosed(i){return i[y]===j.CLOSED}function fireEvent(i,d,p=Event,y){const v=new p(i,y);d.dispatchEvent(v)}function websocketMessageReceived(i,d,p){if(i[y]!==j.OPEN){return}let v;if(d===V.TEXT){try{v=new TextDeLine truncated
|
||||
/**
|
||||
* ZipStream
|
||||
*
|
||||
* @ignore
|
||||
* @license [MIT]{@link https://github.com/archiverjs/node-zip-stream/blob/master/LICENSE}
|
||||
* @copyright (c) 2014 Chris Talkington, contributors.
|
||||
*/
|
||||
var y=p(39023).inherits;var v=p(47544).ZipArchiveOutputStream;var D=p(47544).ZipArchiveEntry;var M=p(53296);var U=i.exports=function(i){if(!(this instanceof U)){return new U(i)}i=this.options=i||{};i.zlib=i.zlib||{};v.call(this,i);if(typeof i.level==="number"&&i.level>=0){i.zlib.level=i.level;delete i.level}if(!i.forceZip64&&typeof i.zlib.level==="number"&&i.zlib.level===0){i.store=true}i.namePrependSlash=i.namePrependSlash||false;if(i.comment&&i.comment.length>0){this.setComment(i.comment)}};y(U,v);U.prototype._normalizeFileData=function(i){i=M.defaults(i,{type:"file",name:null,namePrependSlash:this.options.namePrependSlash,linkname:null,date:null,mode:null,store:this.options.store,comment:""});var d=i.type==="directory";var p=i.type==="symlink";if(i.name){i.name=M.sanitizePath(i.name);if(!p&&i.name.slice(-1)==="/"){d=true;i.type="directory"}else if(d){i.name+="/"}}if(d||p){i.store=true}i.date=M.dateify(i.date);return i};U.prototype.entry=function(i,d,p){if(typeof p!=="function"){p=this._emitErrorCallback.bind(this)}d=this._normalizeFileData(d);if(d.type!=="file"&&d.type!=="directory"&&d.type!=="symlink"){p(new Error(d.type+" entries not currently supported"));return}if(typeof d.name!=="string"||d.name.length===0){p(new Error("entry name must be a non-empty string value"));return}if(d.type==="symlink"&&typeof d.linkname!=="string"){p(new Error("entry linkname must be a non-empty string value when type equals symlink"));return}var y=new D(d.name);y.setTime(d.date,this.options.forceLocalTime);if(d.namePrependSlash){y.setName(d.name,true)}if(d.store){y.setMethod(0)}if(d.comment.length>0){y.setComment(d.comment)}if(d.type==="symlink"&&typeof d.mode!=="number"){d.mode=40960}if(typeof d.mode==="number"){if(d.type==="symlink"){d.mode|=40960}y.setUnixMode(d.mode)}if(d.type==="symlink"&&typeof d.linkname==="string"){i=Buffer.from(d.linkname)}return v.prototype.entry.call(this,y,i,p)};U.prototype.finalize=function(){this.finish()}},94258:function(i,d,p){"use strict";var y=this&&this.__createBinding||(Object.create?function(i,d,p,y){if(y===undefined)y=p;var v=Object.getOwnPropertyDescriptor(d,p);if(!v||("get"in v?!d.__esModule:v.writable||v.configurable)){v={enumerable:true,get:function(){return d[p]}}}Object.defineProperty(i,y,v)}:function(i,d,p,y){if(y===undefined)y=p;i[y]=d[p]});var v=this&&this.__setModuleDefault||(Object.create?function(i,d){Object.defineProperty(i,"default",{enumerable:true,value:d})}:function(i,d){i["default"]=d});var D=this&&this.__importStar||function(){var ownKeys=function(i){ownKeys=Object.getOwnPropertyNames||function(i){var d=[];for(var p in i)if(Object.prototype.hasOwnProperty.call(i,p))d[d.length]=p;return d};return ownKeys(i)};return function(i){if(i&&i.__esModule)return i;var d={};if(i!=null)for(var p=ownKeys(i),D=0;D<p.length;D++)if(p[D]!=="default")y(d,i,p[D]);v(d,i);return d}}();var M=this&&this.__awaiter||function(i,d,p,y){function adopt(i){return i instanceof p?i:new p((function(d){d(i)}))}return new(p||(p=Promise))((function(p,v){function fulfilled(i){try{step(y.next(i))}catch(i){v(i)}}function rejected(i){try{step(y["throw"](i))}catch(i){v(i)}}function step(i){i.done?p(i.value):adopt(i.value).then(fulfilled,rejected)}step((y=y.apply(i,d||[])).next())}))};Object.defineProperty(d,"__esModule",{value:true});d.getRegistriesData=d.getAccountIDs=d.getRegion=d.isPubECR=d.isECR=void 0;const U=D(p(37484));const j=p(28249);const V=p(29821);const K=p(61279);const ee=p(81970);const te=p(3669);const re=/^(([0-9]{12})\.(dkr\.ecr|dkr-ecr)\.(.+)\.(on\.aws|amazonaws\.(com(.cn)?|eu)))(\/([^:]+)(:.+)?)?$/;const ne=/public\.ecr\.aws|ecr-public\.aws\.com/;const isECR=i=>re.test(i)||(0,d.isPubECR)(i);d.isECR=isECR;const isPubECR=i=>ne.test(i);d.isPubECR=isPubECR;const getRegion=i=>{if((0,d.isPubECR)(i)){return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION||"us-east-1"}const p=i.match(re);if(!p){return""}return p[4]};d.getRegion=getRegion;const getAccountIDs=i=>{if((0,d.isPubECR)(i)){return[]}const p=i.match(re);if(!p){return[]}const y=[p[2]];if(process.env.AWS_ACCOUNT_IDS){y.push(...process.env.AWS_ACCOUNT_IDS.split(","))}return y.filter(((i,d)=>y.indexOf(i)===d))};d.getAccountIDs=getAccountIDs;const getRegistriesData=(i,p,y)=>M(void 0,void 0,void 0,(function*(){const v=(0,d.getRegion)(i);const D=(0,d.getAccountIDs)(i);const M={};if(D.length>0){U.debug(`Requesting AWS ECR auth token for ${D.join(", ")}`);M["registryIds"]=D}let re;const ne=process.env.http_proxy||process.env.HTTP_PROXY||"";if(ne){U.debug(`Using http proxy ${ne}`);re=new ee.HttpProxyAgent(ne)}let ie;const se=process.env.https_proxy||process.env.HTTPS_PROXY||"";if(se){U.debug(`Using https proxy ${se}`);ie=new te.HttpsProxyAgent(se)}const oe=p&&y?{accessKeyId:p,secretAccessKey:y}:undefined;if((0,d.isPubECR)(i)){U.info(`AWS Public ECR detected with ${v} region`);const i=new V.ECRPUBLIC({customUserAgent:"docker-login-action",credentials:oe,region:v,requestHandler:new K.NodeHttpHandler({httpAgent:re,httpsAgent:ie})});const d=yieLine truncated
|
||||
//# sourceMappingURL=index.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"sources":["../webpack:/docker-login/node_modules/@actions/core/lib/command.js","../webpack:/docker-login/node_modules/@actions/core/lib/core.js","../webpack:/docker-login/node_modules/@actions/core/lib/file-command.js","../webpack:/docker-login/node_modules/@actions/core/lib/oidc-utils.js","../webpack:/docker-login/node_modules/@actions/core/lib/utils.js","../webpack:/docker-login/node_modules/@actions/exec/lib/exec.js","../webpack:/docker-login/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/docker-login/node_modules/@actions/http-client/auth.js","../webpack:/docker-login/node_modules/@actions/http-client/index.js","../webpack:/docker-login/node_modules/@actions/http-client/proxy.js","../webpack:/docker-login/node_modules/@actions/io/lib/io-util.js","../webpack:/docker-login/node_modules/@actions/io/lib/io.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/ECRPUBLIC.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/ECRPUBLICClient.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/BatchCheckLayerAvailabilityCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/BatchDeleteImageCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/CompleteLayerUploadCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/CreateRepositoryCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/DeleteRepositoryCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/DeleteRepositoryPolicyCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/DescribeImageTagsCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/DescribeImagesCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/DescribeRegistriesCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/DescribeRepositoriesCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/GetAuthorizationTokenCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/GetRegistryCatalogDataCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/GetRepositoryCatalogDataCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/GetRepositoryPolicyCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/InitiateLayerUploadCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/ListTagsForResourceCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/PutImageCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/PutRegistryCatalogDataCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/PutRepositoryCatalogDataCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/SetRepositoryPolicyCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/TagResourceCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/UntagResourceCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/UploadLayerPartCommand.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/commands/index.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/endpoints.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/index.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/models/ECRPUBLICServiceException.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/models/index.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/models/models_0.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/pagination/DescribeImageTagsPaginator.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/pagination/DescribeImagesPaginator.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/pagination/DescribeRegistriesPaginator.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/pagination/DescribeRepositoriesPaginator.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/pagination/Interfaces.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/pagination/index.js","../webpack:/docker-login/node_modules/@aws-sdk/client-ecr-public/dist-cjs/protocols/Aws_json1_1.js","../Line truncated
|
||||
{"version":3,"file":"index.js","names":["__createBinding","this","Object","create","o","m","k","k2","undefined","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","defineProperty","__exportStar","exports","p","prototype","hasOwnProperty","call","value","client_1","__webpack_require__","client","DefaultArtifactClient","Timestamp","runtime_1","runtime_2","runtime_3","runtime_4","runtime_5","runtime_6","runtime_7","Timestamp$Type","MessageType","constructor","super","no","name","kind","T","now","msg","ms","Date","seconds","PbLong","from","Math","floor","toString","nanos","toDate","message","toNumber","ceil","fromDate","date","getTime","internalJsonWrite","options","parse","Error","z","nanosStr","substring","toISOString","replace","internalJsonRead","json","target","typeofJsonValue","matches","match","Number","isNaN","globalThis","parseInt","repeat","length","MESSAGE_TYPE","reflectionMergePartial","internalBinaryRead","reader","end","pos","fieldNo","wireType","tag","int64","int32","u","readUnknownField","typeName","d","skip","UnknownFieldHandler","onRead","internalBinaryWrite","writer","WireType","Varint","writeUnknownFields","onWrite","BytesValue","StringValue","BoolValue","UInt32Value","Int32Value","UInt64Value","Int64Value","FloatValue","DoubleValue","DoubleValue$Type","refJsonWriter","scalar","refJsonReader","double","Bit64","FloatValue$Type","float","Bit32","Int64Value$Type","ScalarType","INT64","LongType","STRING","UInt64Value$Type","UINT64","uint64","Int32Value$Type","UInt32Value$Type","uint32","BoolValue$Type","bool","StringValue$Type","string","LengthDelimited","BytesValue$Type","Uint8Array","bytes","ArtifactService","DeleteArtifactResponse","DeleteArtifactRequest","GetSignedArtifactURLResponse","GetSignedArtifactURLRequest","ListArtifactsResponse_MonolithArtifact","ListArtifactsResponse","ListArtifactsRequest","FinalizeArtifactResponse","FinalizeArtifactRequest","CreateArtifactResponse","CreateArtifactRequest","FinalizeMigratedArtifactResponse","FinalizeMigratedArtifactRequest","MigrateArtifactResponse","MigrateArtifactRequest","runtime_rpc_1","wrappers_1","wrappers_2","timestamp_1","MigrateArtifactRequest$Type","workflowRunBackendId","expiresAt","fork","join","MigrateArtifactResponse$Type","ok","signedUploadUrl","FinalizeMigratedArtifactRequest$Type","size","FinalizeMigratedArtifactResponse$Type","artifactId","CreateArtifactRequest$Type","workflowJobRunBackendId","version","CreateArtifactResponse$Type","FinalizeArtifactRequest$Type","hash","FinalizeArtifactResponse$Type","ListArtifactsRequest$Type","nameFilter","idFilter","ListArtifactsResponse$Type","artifacts","push","i","ListArtifactsResponse_MonolithArtifact$Type","databaseId","createdAt","digest","GetSignedArtifactURLRequest$Type","GetSignedArtifactURLResponse$Type","signedUrl","DeleteArtifactRequest$Type","DeleteArtifactResponse$Type","ServiceType","I","O","ArtifactServiceClientProtobuf","ArtifactServiceClientJSON","artifact_1","rpc","CreateArtifact","bind","FinalizeArtifact","ListArtifacts","GetSignedArtifactURL","DeleteArtifact","request","data","toJson","useProtoFieldName","emitDefaultValues","promise","then","fromJson","ignoreUnknownFields","toBinary","fromBinary","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","apply","__rest","s","t","indexOf","getOwnPropertySymbols","propertyIsEnumerable","core_1","config_1","upload_artifact_1","download_artifact_1","delete_artifact_1","get_artifact_1","list_artifacts_1","errors_1","uploadArtifact","files","rootDirectory","isGhes","GHESNotSupportedError","error","warning","downloadArtifact","findBy","repositoryOwner","repositoryName","token","downloadOptions","downloadArtifactPublic","downloadArtifactInternal","listArtifacts","workflowRunId","listArtifactsPublic","latest","listArtifactsInternal","getArtifact","artifactName","getArtifactPublic","getArtifactInternal","deleteArtifact","deleteArtifactPublic","deleteArtifactInternal","github_1","user_agent_1","retry_options_1","utils_1","plugin_request_log_1","plugin_retry_1","artifact_twirp_client_1","util_1","generated_1","_a","retryOpts","requestOpts","getRetryOptions","defaults","opts","log","userAgent","getUserAgentString","previews","retry","github","getOctokit","requestLog","getArtifactResp","deleteArtifactResp","rest","actions","owner","repo","artifact_id","artifact","id","status","InvalidResponseError","headers","artifactClient","internalArtifactTwirpClient","getBackendIdsFromToken","listReq","listRes","ArtifactNotFoundError","sort","a","b","debug","req","res","info","__setModuleDefault","v","__importStar","mod","__importDefault","default","streamExtractExternal","promises_1","crypto","stream","core","httpClient","unzip_stream_1","scrubQueryParameters","url","parsed","URL","search","exists","path","access","code","streamExtract","directory","retryCount","setTimeout","HttpClient","response","statusCode","statusMessLine truncated
|
||||
+11337
-5356
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -1 +1 @@
|
||||
(()=>{var e={650:e=>{var r=Object.prototype.toString;var n=typeof Buffer.alloc==="function"&&typeof Buffer.allocUnsafe==="function"&&typeof Buffer.from==="function";function isArrayBuffer(e){return r.call(e).slice(8,-1)==="ArrayBuffer"}function fromArrayBuffer(e,r,t){r>>>=0;var o=e.byteLength-r;if(o<0){throw new RangeError("'offset' is out of bounds")}if(t===undefined){t=o}else{t>>>=0;if(t>o){throw new RangeError("'length' is out of bounds")}}return n?Buffer.from(e.slice(r,r+t)):new Buffer(new Uint8Array(e.slice(r,r+t)))}function fromString(e,r){if(typeof r!=="string"||r===""){r="utf8"}if(!Buffer.isEncoding(r)){throw new TypeError('"encoding" must be a valid string encoding')}return n?Buffer.from(e,r):new Buffer(e,r)}function bufferFrom(e,r,t){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(isArrayBuffer(e)){return fromArrayBuffer(e,r,t)}if(typeof e==="string"){return fromString(e,r)}return n?Buffer.from(e):new Buffer(e)}e.exports=bufferFrom},284:(e,r,n)=>{e=n.nmd(e);var t=n(596).SourceMapConsumer;var o=n(17);var i;try{i=n(147);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(650);function dynamicRequire(e,r){return e.require(r)}var u=false;var s=false;var l=false;var c="auto";var p={};var f={};var g=/^data:application\/json[^,]+base64,/;var h=[];var d=[];function isInBrowser(){if(c==="browser")return true;if(c==="node")return false;return typeof window!=="undefined"&&typeof XMLHttpRequest==="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function hasGlobalProcessEventEmitter(){return typeof process==="object"&&process!==null&&typeof process.on==="function"}function globalProcessVersion(){if(typeof process==="object"&&process!==null){return process.version}else{return""}}function globalProcessStderr(){if(typeof process==="object"&&process!==null){return process.stderr}}function globalProcessExit(e){if(typeof process==="object"&&process!==null&&typeof process.exit==="function"){return process.exit(e)}}function handlerExec(e){return function(r){for(var n=0;n<e.length;n++){var t=e[n](r);if(t){return t}}return null}}var m=handlerExec(h);h.push((function(e){e=e.trim();if(/^file:/.test(e)){e=e.replace(/file:\/\/\/(\w:)?/,(function(e,r){return r?"":"/"}))}if(e in p){return p[e]}var r="";try{if(!i){var n=new XMLHttpRequest;n.open("GET",e,false);n.send(null);if(n.readyState===4&&n.status===200){r=n.responseText}}else if(i.existsSync(e)){r=i.readFileSync(e,"utf8")}}catch(e){}return p[e]=r}));function supportRelativeURL(e,r){if(!e)return r;var n=o.dirname(e);var t=/^\w+:\/\/[^\/]*/.exec(n);var i=t?t[0]:"";var a=n.slice(i.length);if(i&&/^\/\w\:/.test(a)){i+="/";return i+o.resolve(n.slice(i.length),r).replace(/\\/g,"/")}return i+o.resolve(n.slice(i.length),r)}function retrieveSourceMapURL(e){var r;if(isInBrowser()){try{var n=new XMLHttpRequest;n.open("GET",e,false);n.send(null);r=n.readyState===4?n.responseText:null;var t=n.getResponseHeader("SourceMap")||n.getResponseHeader("X-SourceMap");if(t){return t}}catch(e){}}r=m(e);var o=/(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/gm;var i,a;while(a=o.exec(r))i=a;if(!i)return null;return i[1]}var v=handlerExec(d);d.push((function(e){var r=retrieveSourceMapURL(e);if(!r)return null;var n;if(g.test(r)){var t=r.slice(r.indexOf(",")+1);n=a(t,"base64").toString();r=e}else{r=supportRelativeURL(e,r);n=m(r)}if(!n){return null}return{url:r,map:n}}));function mapSourcePosition(e){var r=f[e.source];if(!r){var n=v(e.source);if(n){r=f[e.source]={url:n.url,map:new t(n.map)};if(r.map.sourcesContent){r.map.sources.forEach((function(e,n){var t=r.map.sourcesContent[n];if(t){var o=supportRelativeURL(r.url,e);p[o]=t}}))}}else{r=f[e.source]={url:null,map:null}}}if(r&&r.map&&typeof r.map.originalPositionFor==="function"){var o=r.map.originalPositionFor(e);if(o.source!==null){o.source=supportRelativeURL(r.url,o.source);return o}}return e}function mapEvalOrigin(e){var r=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(e);if(r){var n=mapSourcePosition({source:r[2],line:+r[3],column:r[4]-1});return"eval at "+r[1]+" ("+n.source+":"+n.line+":"+(n.column+1)+")"}r=/^eval at ([^(]+) \((.+)\)$/.exec(e);if(r){return"eval at "+r[1]+" ("+mapEvalOrigin(r[2])+")"}return e}function CallSiteToString(){var e;var r="";if(this.isNative()){r="native"}else{e=this.getScriptNameOrSourceURL();if(!e&&this.isEval()){r=this.getEvalOrigin();r+=", "}if(e){r+=e}else{r+="<anonymous>"}var n=this.getLineNumber();if(n!=null){r+=":"+n;var t=this.getColumnNumber();if(t){r+=":"+t}}}var o="";var i=this.getFunctionName();var a=true;var u=this.isConstructor();var s=!(this.isToplevel()||u);if(s){var l=this.getTypeName();if(l==="[object Object]"){l="null"}var c=this.getMethodName();if(i){if(l&&i.indexOf(l)!=0){o+=l+"."}o+=i;if(c&&i.indexOf("."+c)!=i.length-c.length-1){o+=" [as "+c+"]"}}else{o+=l+"."+(c||"<anonymous>")}}else if(u){o+="new "+(i||"<anonymous>")}else if(i){o+=i}elLine truncated
|
||||
(()=>{var e={296:e=>{var r=Object.prototype.toString;var n=typeof Buffer!=="undefined"&&typeof Buffer.alloc==="function"&&typeof Buffer.allocUnsafe==="function"&&typeof Buffer.from==="function";function isArrayBuffer(e){return r.call(e).slice(8,-1)==="ArrayBuffer"}function fromArrayBuffer(e,r,t){r>>>=0;var o=e.byteLength-r;if(o<0){throw new RangeError("'offset' is out of bounds")}if(t===undefined){t=o}else{t>>>=0;if(t>o){throw new RangeError("'length' is out of bounds")}}return n?Buffer.from(e.slice(r,r+t)):new Buffer(new Uint8Array(e.slice(r,r+t)))}function fromString(e,r){if(typeof r!=="string"||r===""){r="utf8"}if(!Buffer.isEncoding(r)){throw new TypeError('"encoding" must be a valid string encoding')}return n?Buffer.from(e,r):new Buffer(e,r)}function bufferFrom(e,r,t){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(isArrayBuffer(e)){return fromArrayBuffer(e,r,t)}if(typeof e==="string"){return fromString(e,r)}return n?Buffer.from(e):new Buffer(e)}e.exports=bufferFrom},599:(e,r,n)=>{e=n.nmd(e);var t=n(927).SourceMapConsumer;var o=n(928);var i;try{i=n(896);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(296);function dynamicRequire(e,r){return e.require(r)}var u=false;var s=false;var l=false;var c="auto";var p={};var f={};var g=/^data:application\/json[^,]+base64,/;var d=[];var h=[];function isInBrowser(){if(c==="browser")return true;if(c==="node")return false;return typeof window!=="undefined"&&typeof XMLHttpRequest==="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function hasGlobalProcessEventEmitter(){return typeof process==="object"&&process!==null&&typeof process.on==="function"}function globalProcessVersion(){if(typeof process==="object"&&process!==null){return process.version}else{return""}}function globalProcessStderr(){if(typeof process==="object"&&process!==null){return process.stderr}}function globalProcessExit(e){if(typeof process==="object"&&process!==null&&typeof process.exit==="function"){return process.exit(e)}}function handlerExec(e){return function(r){for(var n=0;n<e.length;n++){var t=e[n](r);if(t){return t}}return null}}var m=handlerExec(d);d.push((function(e){e=e.trim();if(/^file:/.test(e)){e=e.replace(/file:\/\/\/(\w:)?/,(function(e,r){return r?"":"/"}))}if(e in p){return p[e]}var r="";try{if(!i){var n=new XMLHttpRequest;n.open("GET",e,false);n.send(null);if(n.readyState===4&&n.status===200){r=n.responseText}}else if(i.existsSync(e)){r=i.readFileSync(e,"utf8")}}catch(e){}return p[e]=r}));function supportRelativeURL(e,r){if(!e)return r;var n=o.dirname(e);var t=/^\w+:\/\/[^\/]*/.exec(n);var i=t?t[0]:"";var a=n.slice(i.length);if(i&&/^\/\w\:/.test(a)){i+="/";return i+o.resolve(n.slice(i.length),r).replace(/\\/g,"/")}return i+o.resolve(n.slice(i.length),r)}function retrieveSourceMapURL(e){var r;if(isInBrowser()){try{var n=new XMLHttpRequest;n.open("GET",e,false);n.send(null);r=n.readyState===4?n.responseText:null;var t=n.getResponseHeader("SourceMap")||n.getResponseHeader("X-SourceMap");if(t){return t}}catch(e){}}r=m(e);var o=/(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/gm;var i,a;while(a=o.exec(r))i=a;if(!i)return null;return i[1]}var v=handlerExec(h);h.push((function(e){var r=retrieveSourceMapURL(e);if(!r)return null;var n;if(g.test(r)){var t=r.slice(r.indexOf(",")+1);n=a(t,"base64").toString();r=e}else{r=supportRelativeURL(e,r);n=m(r)}if(!n){return null}return{url:r,map:n}}));function mapSourcePosition(e){var r=f[e.source];if(!r){var n=v(e.source);if(n){r=f[e.source]={url:n.url,map:new t(n.map)};if(r.map.sourcesContent){r.map.sources.forEach((function(e,n){var t=r.map.sourcesContent[n];if(t){var o=supportRelativeURL(r.url,e);p[o]=t}}))}}else{r=f[e.source]={url:null,map:null}}}if(r&&r.map&&typeof r.map.originalPositionFor==="function"){var o=r.map.originalPositionFor(e);if(o.source!==null){o.source=supportRelativeURL(r.url,o.source);return o}}return e}function mapEvalOrigin(e){var r=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(e);if(r){var n=mapSourcePosition({source:r[2],line:+r[3],column:r[4]-1});return"eval at "+r[1]+" ("+n.source+":"+n.line+":"+(n.column+1)+")"}r=/^eval at ([^(]+) \((.+)\)$/.exec(e);if(r){return"eval at "+r[1]+" ("+mapEvalOrigin(r[2])+")"}return e}function CallSiteToString(){var e;var r="";if(this.isNative()){r="native"}else{e=this.getScriptNameOrSourceURL();if(!e&&this.isEval()){r=this.getEvalOrigin();r+=", "}if(e){r+=e}else{r+="<anonymous>"}var n=this.getLineNumber();if(n!=null){r+=":"+n;var t=this.getColumnNumber();if(t){r+=":"+t}}}var o="";var i=this.getFunctionName();var a=true;var u=this.isConstructor();var s=!(this.isToplevel()||u);if(s){var l=this.getTypeName();if(l==="[object Object]"){l="null"}var c=this.getMethodName();if(i){if(l&&i.indexOf(l)!=0){o+=l+"."}o+=i;if(c&&i.indexOf("."+c)!=i.length-c.length-1){o+=" [as "+c+"]"}}else{o+=l+"."+(c||"<anonymous>")}}else if(u){o+="new "+(i||"<aLine truncated
|
||||
+15
-2
@@ -1,9 +1,15 @@
|
||||
target "_common" {
|
||||
args = {
|
||||
BUILDKIT_CONTEXT_KEEP_GIT_DIR = 1
|
||||
}
|
||||
}
|
||||
|
||||
group "default" {
|
||||
targets = ["build"]
|
||||
}
|
||||
|
||||
group "pre-checkin" {
|
||||
targets = ["vendor-update", "format", "build"]
|
||||
targets = ["vendor", "format", "build"]
|
||||
}
|
||||
|
||||
group "validate" {
|
||||
@@ -11,42 +17,49 @@ group "validate" {
|
||||
}
|
||||
|
||||
target "build" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "build-update"
|
||||
output = ["."]
|
||||
}
|
||||
|
||||
target "build-validate" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "build-validate"
|
||||
output = ["type=cacheonly"]
|
||||
}
|
||||
|
||||
target "format" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "format-update"
|
||||
output = ["."]
|
||||
}
|
||||
|
||||
target "lint" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "lint"
|
||||
output = ["type=cacheonly"]
|
||||
}
|
||||
|
||||
target "vendor-update" {
|
||||
target "vendor" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "vendor-update"
|
||||
output = ["."]
|
||||
}
|
||||
|
||||
target "vendor-validate" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "vendor-validate"
|
||||
output = ["type=cacheonly"]
|
||||
}
|
||||
|
||||
target "test" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "dev.Dockerfile"
|
||||
target = "test-coverage"
|
||||
output = ["./coverage"]
|
||||
|
||||
+22
-2
@@ -1,10 +1,30 @@
|
||||
import fs from 'fs';
|
||||
import os from 'os';
|
||||
import path from 'path';
|
||||
|
||||
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-login-action-')).split(path.sep).join(path.posix.sep);
|
||||
|
||||
process.env = Object.assign({}, process.env, {
|
||||
TEMP: tmpDir,
|
||||
GITHUB_REPOSITORY: 'docker/login-action',
|
||||
RUNNER_TEMP: path.join(tmpDir, 'runner-temp').split(path.sep).join(path.posix.sep),
|
||||
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache').split(path.sep).join(path.posix.sep)
|
||||
}) as {
|
||||
[key: string]: string;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
clearMocks: true,
|
||||
testEnvironment: 'node',
|
||||
moduleFileExtensions: ['js', 'ts'],
|
||||
setupFiles: ["dotenv/config"],
|
||||
testMatch: ['**/*.test.ts'],
|
||||
transform: {
|
||||
'^.+\\.ts$': 'ts-jest'
|
||||
},
|
||||
moduleNameMapper: {
|
||||
'^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs'
|
||||
},
|
||||
collectCoverageFrom: ['src/**/{!(main.ts),}.ts'],
|
||||
coveragePathIgnorePatterns: ['lib/', 'node_modules/', '__tests__/'],
|
||||
verbose: true
|
||||
}
|
||||
};
|
||||
+33
-35
@@ -1,13 +1,16 @@
|
||||
{
|
||||
"name": "docker-login",
|
||||
"description": "GitHub Action to login against a Docker registry",
|
||||
"main": "lib/main.js",
|
||||
"main": "src/main.ts",
|
||||
"scripts": {
|
||||
"build": "ncc build src/main.ts --source-map --minify --license licenses.txt",
|
||||
"lint": "eslint src/**/*.ts __tests__/**/*.ts",
|
||||
"format": "eslint --fix src/**/*.ts __tests__/**/*.ts",
|
||||
"test": "jest --coverage",
|
||||
"all": "yarn run build && yarn run format && yarn test"
|
||||
"build": "ncc build --source-map --minify --license licenses.txt",
|
||||
"lint": "yarn run prettier && yarn run eslint",
|
||||
"format": "yarn run prettier:fix && yarn run eslint:fix",
|
||||
"eslint": "eslint --max-warnings=0 .",
|
||||
"eslint:fix": "eslint --fix .",
|
||||
"prettier": "prettier --check \"./**/*.ts\"",
|
||||
"prettier:fix": "prettier --write \"./**/*.ts\"",
|
||||
"test": "jest"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -18,37 +21,32 @@
|
||||
"docker",
|
||||
"login"
|
||||
],
|
||||
"author": "Docker",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "CrazyMax",
|
||||
"url": "https://crazymax.dev"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"author": "Docker Inc.",
|
||||
"license": "Apache-2.0",
|
||||
"packageManager": "yarn@4.9.2",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.6.0",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/io": "^1.1.2",
|
||||
"@aws-sdk/client-ecr": "^3.53.0",
|
||||
"@aws-sdk/client-ecr-public": "^3.53.0",
|
||||
"http-proxy-agent": "^5.0.0",
|
||||
"https-proxy-agent": "^5.0.1"
|
||||
"@actions/core": "^1.11.1",
|
||||
"@aws-sdk/client-ecr": "^3.890.0",
|
||||
"@aws-sdk/client-ecr-public": "^3.890.0",
|
||||
"@docker/actions-toolkit": "^0.63.0",
|
||||
"http-proxy-agent": "^7.0.2",
|
||||
"https-proxy-agent": "^7.0.6",
|
||||
"js-yaml": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^16.11.26",
|
||||
"@typescript-eslint/eslint-plugin": "^5.14.0",
|
||||
"@typescript-eslint/parser": "^5.14.0",
|
||||
"@vercel/ncc": "^0.33.3",
|
||||
"dotenv": "^16.0.0",
|
||||
"eslint": "^8.11.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-jest": "^26.1.1",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"jest": "^27.2.5",
|
||||
"prettier": "^2.3.1",
|
||||
"ts-jest": "^27.1.2",
|
||||
"ts-node": "^10.7.0",
|
||||
"typescript": "^4.4.4"
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^20.19.9",
|
||||
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
||||
"@typescript-eslint/parser": "^7.18.0",
|
||||
"@vercel/ncc": "^0.38.3",
|
||||
"eslint": "^8.57.1",
|
||||
"eslint-config-prettier": "^9.1.2",
|
||||
"eslint-plugin-jest": "^28.14.0",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.6.2",
|
||||
"ts-jest": "^29.4.1",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.9.2"
|
||||
}
|
||||
}
|
||||
+9
-4
@@ -1,18 +1,19 @@
|
||||
import * as core from '@actions/core';
|
||||
import {ECR} from '@aws-sdk/client-ecr';
|
||||
import {ECRPUBLIC} from '@aws-sdk/client-ecr-public';
|
||||
import {NodeHttpHandler} from '@aws-sdk/node-http-handler';
|
||||
import {NodeHttpHandler} from '@smithy/node-http-handler';
|
||||
import {HttpProxyAgent} from 'http-proxy-agent';
|
||||
import {HttpsProxyAgent} from 'https-proxy-agent';
|
||||
|
||||
const ecrRegistryRegex = /^(([0-9]{12})\.dkr\.ecr\.(.+)\.amazonaws\.com(.cn)?)(\/([^:]+)(:.+)?)?$/;
|
||||
const ecrRegistryRegex = /^(([0-9]{12})\.(dkr\.ecr|dkr-ecr)\.(.+)\.(on\.aws|amazonaws\.(com(.cn)?|eu)))(\/([^:]+)(:.+)?)?$/;
|
||||
const ecrPublicRegistryRegex = /public\.ecr\.aws|ecr-public\.aws\.com/;
|
||||
|
||||
export const isECR = (registry: string): boolean => {
|
||||
return ecrRegistryRegex.test(registry) || isPubECR(registry);
|
||||
};
|
||||
|
||||
export const isPubECR = (registry: string): boolean => {
|
||||
return registry === 'public.ecr.aws';
|
||||
return ecrPublicRegistryRegex.test(registry);
|
||||
};
|
||||
|
||||
export const getRegion = (registry: string): string => {
|
||||
@@ -23,7 +24,7 @@ export const getRegion = (registry: string): string => {
|
||||
if (!matches) {
|
||||
return '';
|
||||
}
|
||||
return matches[3];
|
||||
return matches[4];
|
||||
};
|
||||
|
||||
export const getAccountIDs = (registry: string): string[] => {
|
||||
@@ -96,6 +97,8 @@ export const getRegistriesData = async (registry: string, username?: string, pas
|
||||
}
|
||||
const authToken = Buffer.from(authTokenResponse.authorizationData.authorizationToken, 'base64').toString('utf-8');
|
||||
const creds = authToken.split(':', 2);
|
||||
core.setSecret(creds[0]); // redacted in workflow logs
|
||||
core.setSecret(creds[1]); // redacted in workflow logs
|
||||
return [
|
||||
{
|
||||
registry: 'public.ecr.aws',
|
||||
@@ -122,6 +125,8 @@ export const getRegistriesData = async (registry: string, username?: string, pas
|
||||
for (const authData of authTokenResponse.authorizationData) {
|
||||
const authToken = Buffer.from(authData.authorizationToken || '', 'base64').toString('utf-8');
|
||||
const creds = authToken.split(':', 2);
|
||||
core.setSecret(creds[0]); // redacted in workflow logs
|
||||
core.setSecret(creds[1]); // redacted in workflow logs
|
||||
regDatas.push({
|
||||
registry: authData.proxyEndpoint || '',
|
||||
username: creds[0],
|
||||
|
||||
+72
-1
@@ -1,11 +1,27 @@
|
||||
import path from 'path';
|
||||
import * as core from '@actions/core';
|
||||
import * as yaml from 'js-yaml';
|
||||
|
||||
import {Buildx} from '@docker/actions-toolkit/lib/buildx/buildx';
|
||||
import {Util} from '@docker/actions-toolkit/lib/util';
|
||||
|
||||
export interface Inputs {
|
||||
registry: string;
|
||||
username: string;
|
||||
password: string;
|
||||
scope: string;
|
||||
ecr: string;
|
||||
logout: boolean;
|
||||
registryAuth: string;
|
||||
}
|
||||
|
||||
export interface Auth {
|
||||
registry: string;
|
||||
username: string;
|
||||
password: string;
|
||||
scope: string;
|
||||
ecr: string;
|
||||
configDir: string;
|
||||
}
|
||||
|
||||
export function getInputs(): Inputs {
|
||||
@@ -13,7 +29,62 @@ export function getInputs(): Inputs {
|
||||
registry: core.getInput('registry'),
|
||||
username: core.getInput('username'),
|
||||
password: core.getInput('password'),
|
||||
scope: core.getInput('scope'),
|
||||
ecr: core.getInput('ecr'),
|
||||
logout: core.getBooleanInput('logout')
|
||||
logout: core.getBooleanInput('logout'),
|
||||
registryAuth: core.getInput('registry-auth')
|
||||
};
|
||||
}
|
||||
|
||||
export function getAuthList(inputs: Inputs): Array<Auth> {
|
||||
if (inputs.registryAuth && (inputs.registry || inputs.username || inputs.password || inputs.scope || inputs.ecr)) {
|
||||
throw new Error('Cannot use registry-auth with other inputs');
|
||||
}
|
||||
let auths: Array<Auth> = [];
|
||||
if (!inputs.registryAuth) {
|
||||
auths.push({
|
||||
registry: inputs.registry || 'docker.io',
|
||||
username: inputs.username,
|
||||
password: inputs.password,
|
||||
scope: inputs.scope,
|
||||
ecr: inputs.ecr || 'auto',
|
||||
configDir: scopeToConfigDir(inputs.registry, inputs.scope)
|
||||
});
|
||||
} else {
|
||||
auths = (yaml.load(inputs.registryAuth) as Array<Auth>).map(auth => {
|
||||
core.setSecret(auth.password); // redacted in workflow logs
|
||||
return {
|
||||
registry: auth.registry || 'docker.io',
|
||||
username: auth.username,
|
||||
password: auth.password,
|
||||
scope: auth.scope,
|
||||
ecr: auth.ecr || 'auto',
|
||||
configDir: scopeToConfigDir(auth.registry || 'docker.io', auth.scope)
|
||||
};
|
||||
});
|
||||
}
|
||||
if (auths.length == 0) {
|
||||
throw new Error('No registry to login');
|
||||
}
|
||||
return auths;
|
||||
}
|
||||
|
||||
export function scopeToConfigDir(registry: string, scope?: string): string {
|
||||
if (scopeDisabled() || !scope || scope === '') {
|
||||
return '';
|
||||
}
|
||||
let configDir = path.join(Buildx.configDir, 'config', registry === 'docker.io' ? 'registry-1.docker.io' : registry);
|
||||
if (scope.startsWith('@')) {
|
||||
configDir += scope;
|
||||
} else {
|
||||
configDir = path.join(configDir, scope);
|
||||
}
|
||||
return configDir;
|
||||
}
|
||||
|
||||
function scopeDisabled(): boolean {
|
||||
if (process.env.DOCKER_LOGIN_SCOPE_DISABLED) {
|
||||
return Util.parseBool(process.env.DOCKER_LOGIN_SCOPE_DISABLED);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
+63
-53
@@ -1,71 +1,81 @@
|
||||
import * as aws from './aws';
|
||||
import * as core from '@actions/core';
|
||||
import * as exec from '@actions/exec';
|
||||
|
||||
export async function login(registry: string, username: string, password: string, ecr: string): Promise<void> {
|
||||
if (/true/i.test(ecr) || (ecr == 'auto' && aws.isECR(registry))) {
|
||||
await loginECR(registry, username, password);
|
||||
import * as aws from './aws';
|
||||
import * as context from './context';
|
||||
|
||||
import {Docker} from '@docker/actions-toolkit/lib/docker/docker';
|
||||
|
||||
export async function login(auth: context.Auth): Promise<void> {
|
||||
if (/true/i.test(auth.ecr) || (auth.ecr == 'auto' && aws.isECR(auth.registry))) {
|
||||
await loginECR(auth.registry, auth.username, auth.password, auth.scope);
|
||||
} else {
|
||||
await loginStandard(registry, username, password);
|
||||
await loginStandard(auth.registry, auth.username, auth.password, auth.scope);
|
||||
}
|
||||
}
|
||||
|
||||
export async function logout(registry: string): Promise<void> {
|
||||
await exec
|
||||
.getExecOutput('docker', ['logout', registry], {
|
||||
ignoreReturnCode: true
|
||||
})
|
||||
.then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
core.warning(res.stderr.trim());
|
||||
}
|
||||
});
|
||||
export async function logout(registry: string, configDir: string): Promise<void> {
|
||||
let envs: {[key: string]: string} | undefined;
|
||||
if (configDir !== '') {
|
||||
envs = Object.assign({}, process.env, {
|
||||
DOCKER_CONFIG: configDir
|
||||
}) as {
|
||||
[key: string]: string;
|
||||
};
|
||||
core.info(`Alternative config dir: ${configDir}`);
|
||||
}
|
||||
await Docker.getExecOutput(['logout', registry], {
|
||||
ignoreReturnCode: true,
|
||||
env: envs
|
||||
}).then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
core.warning(res.stderr.trim());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export async function loginStandard(registry: string, username: string, password: string): Promise<void> {
|
||||
if (!username || !password) {
|
||||
export async function loginStandard(registry: string, username: string, password: string, scope?: string): Promise<void> {
|
||||
if (!username && !password) {
|
||||
throw new Error('Username and password required');
|
||||
}
|
||||
|
||||
const loginArgs: Array<string> = ['login', '--password-stdin'];
|
||||
loginArgs.push('--username', username);
|
||||
loginArgs.push(registry);
|
||||
|
||||
if (registry) {
|
||||
core.info(`Logging into ${registry}...`);
|
||||
} else {
|
||||
core.info(`Logging into Docker Hub...`);
|
||||
if (!username) {
|
||||
throw new Error('Username required');
|
||||
}
|
||||
await exec
|
||||
.getExecOutput('docker', loginArgs, {
|
||||
ignoreReturnCode: true,
|
||||
silent: true,
|
||||
input: Buffer.from(password)
|
||||
})
|
||||
.then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
throw new Error(res.stderr.trim());
|
||||
}
|
||||
core.info(`Login Succeeded!`);
|
||||
});
|
||||
if (!password) {
|
||||
throw new Error('Password required');
|
||||
}
|
||||
await loginExec(registry, username, password, scope);
|
||||
}
|
||||
|
||||
export async function loginECR(registry: string, username: string, password: string): Promise<void> {
|
||||
export async function loginECR(registry: string, username: string, password: string, scope?: string): Promise<void> {
|
||||
core.info(`Retrieving registries data through AWS SDK...`);
|
||||
const regDatas = await aws.getRegistriesData(registry, username, password);
|
||||
for (const regData of regDatas) {
|
||||
core.info(`Logging into ${regData.registry}...`);
|
||||
await exec
|
||||
.getExecOutput('docker', ['login', '--password-stdin', '--username', regData.username, regData.registry], {
|
||||
ignoreReturnCode: true,
|
||||
silent: true,
|
||||
input: Buffer.from(regData.password)
|
||||
})
|
||||
.then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
throw new Error(res.stderr.trim());
|
||||
}
|
||||
core.info('Login Succeeded!');
|
||||
});
|
||||
await loginExec(regData.registry, regData.username, regData.password, scope);
|
||||
}
|
||||
}
|
||||
|
||||
async function loginExec(registry: string, username: string, password: string, scope?: string): Promise<void> {
|
||||
let envs: {[key: string]: string} | undefined;
|
||||
const configDir = context.scopeToConfigDir(registry, scope);
|
||||
if (configDir !== '') {
|
||||
envs = Object.assign({}, process.env, {
|
||||
DOCKER_CONFIG: configDir
|
||||
}) as {
|
||||
[key: string]: string;
|
||||
};
|
||||
core.info(`Logging into ${registry} (scope ${scope})...`);
|
||||
} else {
|
||||
core.info(`Logging into ${registry}...`);
|
||||
}
|
||||
await Docker.getExecOutput(['login', '--password-stdin', '--username', username, registry], {
|
||||
ignoreReturnCode: true,
|
||||
silent: true,
|
||||
input: Buffer.from(password),
|
||||
env: envs
|
||||
}).then(res => {
|
||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||
throw new Error(res.stderr.trim());
|
||||
}
|
||||
core.info('Login Succeeded!');
|
||||
});
|
||||
}
|
||||
+25
-15
@@ -1,28 +1,38 @@
|
||||
import * as core from '@actions/core';
|
||||
import * as actionsToolkit from '@docker/actions-toolkit';
|
||||
|
||||
import * as context from './context';
|
||||
import * as docker from './docker';
|
||||
import * as stateHelper from './state-helper';
|
||||
|
||||
export async function run(): Promise<void> {
|
||||
try {
|
||||
const input: context.Inputs = context.getInputs();
|
||||
stateHelper.setRegistry(input.registry);
|
||||
stateHelper.setLogout(input.logout);
|
||||
await docker.login(input.registry, input.username, input.password, input.ecr);
|
||||
} catch (error) {
|
||||
core.setFailed(error.message);
|
||||
export async function main(): Promise<void> {
|
||||
const inputs: context.Inputs = context.getInputs();
|
||||
stateHelper.setLogout(inputs.logout);
|
||||
|
||||
const auths = context.getAuthList(inputs);
|
||||
stateHelper.setRegistries(Array.from(new Map(auths.map(auth => [`${auth.registry}|${auth.configDir}`, {registry: auth.registry, configDir: auth.configDir} as stateHelper.RegistryState])).values()));
|
||||
|
||||
if (auths.length === 1) {
|
||||
await docker.login(auths[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const auth of auths) {
|
||||
await core.group(`Login to ${auth.registry}`, async () => {
|
||||
await docker.login(auth);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function logout(): Promise<void> {
|
||||
async function post(): Promise<void> {
|
||||
if (!stateHelper.logout) {
|
||||
return;
|
||||
}
|
||||
await docker.logout(stateHelper.registry);
|
||||
for (const registryState of stateHelper.registries) {
|
||||
await core.group(`Logout from ${registryState.registry}`, async () => {
|
||||
await docker.logout(registryState.registry, registryState.configDir);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!stateHelper.IsPost) {
|
||||
run();
|
||||
} else {
|
||||
logout();
|
||||
}
|
||||
actionsToolkit.run(main, post);
|
||||
+8
-8
@@ -1,17 +1,17 @@
|
||||
import * as core from '@actions/core';
|
||||
|
||||
export const IsPost = !!process.env['STATE_isPost'];
|
||||
export const registry = process.env['STATE_registry'] || '';
|
||||
export const registries = process.env['STATE_registries'] ? (JSON.parse(process.env['STATE_registries']) as Array<RegistryState>) : [];
|
||||
export const logout = /true/i.test(process.env['STATE_logout'] || '');
|
||||
|
||||
export function setRegistry(registry: string) {
|
||||
core.saveState('registry', registry);
|
||||
export interface RegistryState {
|
||||
registry: string;
|
||||
configDir: string;
|
||||
}
|
||||
|
||||
export function setRegistries(registries: Array<RegistryState>) {
|
||||
core.saveState('registries', JSON.stringify(registries));
|
||||
}
|
||||
|
||||
export function setLogout(logout: boolean) {
|
||||
core.saveState('logout', logout);
|
||||
}
|
||||
|
||||
if (!IsPost) {
|
||||
core.saveState('isPost', 'true');
|
||||
}
|
||||
+5
-3
@@ -1,19 +1,21 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"target": "es6",
|
||||
"module": "commonjs",
|
||||
"strict": true,
|
||||
"newLine": "lf",
|
||||
"outDir": "./lib",
|
||||
"rootDir": "./src",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitAny": false,
|
||||
"resolveJsonModule": true,
|
||||
"useUnknownInCatchVariables": false,
|
||||
},
|
||||
"exclude": [
|
||||
"./__tests__/**/*",
|
||||
"./lib/**/*",
|
||||
"node_modules",
|
||||
"**/*.test.ts",
|
||||
"jest.config.ts"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user