reference @actions/attest package (#10)
Signed-off-by: Brian DeHamer <bdehamer@github.com>
This commit is contained in:
@@ -2,4 +2,3 @@ lib/
|
|||||||
dist/
|
dist/
|
||||||
node_modules/
|
node_modules/
|
||||||
coverage/
|
coverage/
|
||||||
packages/
|
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ jobs:
|
|||||||
id: install
|
id: install
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Build @actions/attest
|
|
||||||
run: npm run build --workspace packages/attest
|
|
||||||
|
|
||||||
- name: Build dist/ Directory
|
- name: Build dist/ Directory
|
||||||
id: build
|
id: build
|
||||||
run: npm run bundle
|
run: npm run bundle
|
||||||
|
|||||||
@@ -34,9 +34,6 @@ jobs:
|
|||||||
id: npm-ci
|
id: npm-ci
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Build @actions/attest
|
|
||||||
run: npm run build --workspace packages/attest
|
|
||||||
|
|
||||||
- name: Check Format
|
- name: Check Format
|
||||||
id: npm-format-check
|
id: npm-format-check
|
||||||
run: npm run format:check
|
run: npm run format:check
|
||||||
|
|||||||
@@ -36,9 +36,6 @@ jobs:
|
|||||||
id: install
|
id: install
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Build @actions/attest
|
|
||||||
run: npm run build --workspace packages/attest
|
|
||||||
|
|
||||||
- name: Lint Codebase
|
- name: Lint Codebase
|
||||||
id: super-linter
|
id: super-linter
|
||||||
uses: super-linter/super-linter/slim@v6
|
uses: super-linter/super-linter/slim@v6
|
||||||
|
|||||||
@@ -101,6 +101,3 @@ __tests__/runner/*
|
|||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
||||||
packages/**/dist
|
|
||||||
packages/attest/dist
|
|
||||||
|
|||||||
+474
-350
File diff suppressed because it is too large
Load Diff
+11
-1
@@ -1,5 +1,15 @@
|
|||||||
@actions/attest
|
@actions/attest
|
||||||
Apache-2.0
|
MIT
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright 2024 GitHub
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
@actions/core
|
@actions/core
|
||||||
MIT
|
MIT
|
||||||
|
|||||||
Generated
+14
-614
@@ -8,10 +8,8 @@
|
|||||||
"name": "typescript-action",
|
"name": "typescript-action",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
|
||||||
"./packages/*"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@actions/attest": "^1.0.0",
|
||||||
"@actions/core": "^1.10.1",
|
"@actions/core": "^1.10.1",
|
||||||
"@actions/glob": "^0.4.0",
|
"@actions/glob": "^0.4.0",
|
||||||
"@sigstore/oci": "^0.1.0"
|
"@sigstore/oci": "^0.1.0"
|
||||||
@@ -48,8 +46,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/attest": {
|
"node_modules/@actions/attest": {
|
||||||
"resolved": "packages/attest",
|
"version": "1.0.0",
|
||||||
"link": true
|
"resolved": "https://registry.npmjs.org/@actions/attest/-/attest-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-EGm631ap0ixJLA7NJPt7vQM7+bWAjGtwK/zpATJl1NMZdeBpGpX52TUCJJ5A5wL52ty1QFmE6qPMVPT5OZ96Xg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/github": "^6.0.0",
|
||||||
|
"@sigstore/bundle": "^2.2.0",
|
||||||
|
"@sigstore/sign": "^2.2.3",
|
||||||
|
"make-fetch-happen": "^13.0.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/core": {
|
"node_modules/@actions/core": {
|
||||||
"version": "1.10.1",
|
"version": "1.10.1",
|
||||||
@@ -1457,167 +1462,6 @@
|
|||||||
"@octokit/openapi-types": "^19.1.0"
|
"@octokit/openapi-types": "^19.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@peculiar/asn1-cms": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509-attr": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-csr": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-ecc": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-pfx": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-cms": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pkcs8": "^2.3.8",
|
|
||||||
"@peculiar/asn1-rsa": "^2.3.8",
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-pkcs8": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-pkcs9": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-cms": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pfx": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pkcs8": "^2.3.8",
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509-attr": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-rsa": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-schema": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-x509": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"ipaddr.js": "^2.1.0",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/asn1-x509-attr": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/json-schema": {
|
|
||||||
"version": "1.1.12",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/webcrypto": {
|
|
||||||
"version": "1.4.5",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/json-schema": "^1.1.12",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2",
|
|
||||||
"webcrypto-core": "^1.7.8"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10.12.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@peculiar/x509": {
|
|
||||||
"version": "1.9.7",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-cms": "^2.3.8",
|
|
||||||
"@peculiar/asn1-csr": "^2.3.8",
|
|
||||||
"@peculiar/asn1-ecc": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pkcs9": "^2.3.8",
|
|
||||||
"@peculiar/asn1-rsa": "^2.3.8",
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"reflect-metadata": "^0.2.1",
|
|
||||||
"tslib": "^2.6.2",
|
|
||||||
"tsyringe": "^4.8.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pkgjs/parseargs": {
|
"node_modules/@pkgjs/parseargs": {
|
||||||
"version": "0.11.0",
|
"version": "0.11.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -1654,26 +1498,6 @@
|
|||||||
"node": "^16.14.0 || >=18.0.0"
|
"node": "^16.14.0 || >=18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sigstore/mock": {
|
|
||||||
"version": "0.6.5",
|
|
||||||
"dev": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/webcrypto": "^1.4.5",
|
|
||||||
"@peculiar/x509": "^1.9.7",
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.0",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"bytestreamjs": "^2.0.1",
|
|
||||||
"canonicalize": "^2.0.0",
|
|
||||||
"jose": "^5.2.2",
|
|
||||||
"nock": "^13.5.1",
|
|
||||||
"pkijs": "^3.0.15",
|
|
||||||
"pvutils": "^1.1.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^16.14.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@sigstore/oci": {
|
"node_modules/@sigstore/oci": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -1725,16 +1549,6 @@
|
|||||||
"@sinonjs/commons": "^3.0.0"
|
"@sinonjs/commons": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@total-typescript/shoehorn": {
|
|
||||||
"version": "0.1.1",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/@tsconfig/node18": {
|
|
||||||
"version": "18.2.2",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/@types/babel__core": {
|
"node_modules/@types/babel__core": {
|
||||||
"version": "7.20.1",
|
"version": "7.20.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -2352,19 +2166,6 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/asn1js": {
|
|
||||||
"version": "3.0.5",
|
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"pvtsutils": "^1.3.2",
|
|
||||||
"pvutils": "^1.1.3",
|
|
||||||
"tslib": "^2.4.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/ast-types-flow": {
|
"node_modules/ast-types-flow": {
|
||||||
"version": "0.0.7",
|
"version": "0.0.7",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -2593,14 +2394,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/bytestreamjs": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/cacache": {
|
"node_modules/cacache": {
|
||||||
"version": "18.0.2",
|
"version": "18.0.2",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
@@ -2716,11 +2509,6 @@
|
|||||||
],
|
],
|
||||||
"license": "CC-BY-4.0"
|
"license": "CC-BY-4.0"
|
||||||
},
|
},
|
||||||
"node_modules/canonicalize": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"dev": true,
|
|
||||||
"license": "Apache-2.0"
|
|
||||||
},
|
|
||||||
"node_modules/chalk": {
|
"node_modules/chalk": {
|
||||||
"version": "4.1.2",
|
"version": "4.1.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -4433,14 +4221,6 @@
|
|||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
},
|
},
|
||||||
"node_modules/ipaddr.js": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-array-buffer": {
|
"node_modules/is-array-buffer": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -5303,14 +5083,6 @@
|
|||||||
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/jose": {
|
|
||||||
"version": "5.2.2",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/panva"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/js-tokens": {
|
"node_modules/js-tokens": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -5362,11 +5134,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/json-stringify-safe": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"dev": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/json5": {
|
"node_modules/json5": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -5894,19 +5661,6 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/nock": {
|
|
||||||
"version": "13.5.3",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"debug": "^4.1.0",
|
|
||||||
"json-stringify-safe": "^5.0.1",
|
|
||||||
"propagate": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10.13"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-int64": {
|
"node_modules/node-int64": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -6279,21 +6033,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/pkijs": {
|
|
||||||
"version": "3.0.15",
|
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"bytestreamjs": "^2.0.0",
|
|
||||||
"pvtsutils": "^1.3.2",
|
|
||||||
"pvutils": "^1.1.3",
|
|
||||||
"tslib": "^2.4.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/prelude-ls": {
|
"node_modules/prelude-ls": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -6408,14 +6147,6 @@
|
|||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/propagate": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/punycode": {
|
"node_modules/punycode": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -6439,22 +6170,6 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/pvtsutils": {
|
|
||||||
"version": "1.3.5",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": "^2.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/pvutils": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/queue-microtask": {
|
"node_modules/queue-microtask": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -6479,11 +6194,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/reflect-metadata": {
|
|
||||||
"version": "0.2.1",
|
|
||||||
"dev": true,
|
|
||||||
"license": "Apache-2.0"
|
|
||||||
},
|
|
||||||
"node_modules/regenerator-runtime": {
|
"node_modules/regenerator-runtime": {
|
||||||
"version": "0.14.0",
|
"version": "0.14.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -7190,22 +6900,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "0BSD"
|
"license": "0BSD"
|
||||||
},
|
},
|
||||||
"node_modules/tsyringe": {
|
|
||||||
"version": "4.8.0",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": "^1.9.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/tsyringe/node_modules/tslib": {
|
|
||||||
"version": "1.14.1",
|
|
||||||
"dev": true,
|
|
||||||
"license": "0BSD"
|
|
||||||
},
|
|
||||||
"node_modules/tunnel": {
|
"node_modules/tunnel": {
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -7462,18 +7156,6 @@
|
|||||||
"makeerror": "1.0.12"
|
"makeerror": "1.0.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/webcrypto-core": {
|
|
||||||
"version": "1.7.8",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/json-schema": "^1.1.12",
|
|
||||||
"asn1js": "^3.0.1",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/which": {
|
"node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
@@ -7616,27 +7298,6 @@
|
|||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"packages/attest": {
|
|
||||||
"name": "@actions/attest",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/github": "^6.0.0",
|
|
||||||
"@sigstore/bundle": "^2.2.0",
|
|
||||||
"@sigstore/sign": "^2.2.3",
|
|
||||||
"make-fetch-happen": "^13.0.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@sigstore/mock": "^0.6.4",
|
|
||||||
"@total-typescript/shoehorn": "^0.1.1",
|
|
||||||
"@tsconfig/node18": "^18.2.2",
|
|
||||||
"@types/make-fetch-happen": "^10.0.4",
|
|
||||||
"nock": "^13.5.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -7645,17 +7306,14 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@actions/attest": {
|
"@actions/attest": {
|
||||||
"version": "file:packages/attest",
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/attest/-/attest-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-EGm631ap0ixJLA7NJPt7vQM7+bWAjGtwK/zpATJl1NMZdeBpGpX52TUCJJ5A5wL52ty1QFmE6qPMVPT5OZ96Xg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@actions/github": "^6.0.0",
|
"@actions/github": "^6.0.0",
|
||||||
"@sigstore/bundle": "^2.2.0",
|
"@sigstore/bundle": "^2.2.0",
|
||||||
"@sigstore/mock": "^0.6.4",
|
|
||||||
"@sigstore/sign": "^2.2.3",
|
"@sigstore/sign": "^2.2.3",
|
||||||
"@total-typescript/shoehorn": "^0.1.1",
|
"make-fetch-happen": "^13.0.0"
|
||||||
"@tsconfig/node18": "^18.2.2",
|
|
||||||
"@types/make-fetch-happen": "^10.0.4",
|
|
||||||
"make-fetch-happen": "^13.0.0",
|
|
||||||
"nock": "^13.5.1"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@actions/core": {
|
"@actions/core": {
|
||||||
@@ -8582,148 +8240,6 @@
|
|||||||
"@octokit/openapi-types": "^19.1.0"
|
"@octokit/openapi-types": "^19.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@peculiar/asn1-cms": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509-attr": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-csr": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-ecc": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-pfx": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-cms": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pkcs8": "^2.3.8",
|
|
||||||
"@peculiar/asn1-rsa": "^2.3.8",
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-pkcs8": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-pkcs9": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-cms": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pfx": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pkcs8": "^2.3.8",
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509-attr": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-rsa": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-schema": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-x509": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"ipaddr.js": "^2.1.0",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/asn1-x509-attr": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/json-schema": {
|
|
||||||
"version": "1.1.12",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"tslib": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/webcrypto": {
|
|
||||||
"version": "1.4.5",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/json-schema": "^1.1.12",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2",
|
|
||||||
"webcrypto-core": "^1.7.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@peculiar/x509": {
|
|
||||||
"version": "1.9.7",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-cms": "^2.3.8",
|
|
||||||
"@peculiar/asn1-csr": "^2.3.8",
|
|
||||||
"@peculiar/asn1-ecc": "^2.3.8",
|
|
||||||
"@peculiar/asn1-pkcs9": "^2.3.8",
|
|
||||||
"@peculiar/asn1-rsa": "^2.3.8",
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/asn1-x509": "^2.3.8",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"reflect-metadata": "^0.2.1",
|
|
||||||
"tslib": "^2.6.2",
|
|
||||||
"tsyringe": "^4.8.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@pkgjs/parseargs": {
|
"@pkgjs/parseargs": {
|
||||||
"version": "0.11.0",
|
"version": "0.11.0",
|
||||||
"optional": true
|
"optional": true
|
||||||
@@ -8741,22 +8257,6 @@
|
|||||||
"@sigstore/core": {
|
"@sigstore/core": {
|
||||||
"version": "1.0.0"
|
"version": "1.0.0"
|
||||||
},
|
},
|
||||||
"@sigstore/mock": {
|
|
||||||
"version": "0.6.5",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/webcrypto": "^1.4.5",
|
|
||||||
"@peculiar/x509": "^1.9.7",
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.0",
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"bytestreamjs": "^2.0.1",
|
|
||||||
"canonicalize": "^2.0.0",
|
|
||||||
"jose": "^5.2.2",
|
|
||||||
"nock": "^13.5.1",
|
|
||||||
"pkijs": "^3.0.15",
|
|
||||||
"pvutils": "^1.1.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@sigstore/oci": {
|
"@sigstore/oci": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"requires": {
|
"requires": {
|
||||||
@@ -8793,14 +8293,6 @@
|
|||||||
"@sinonjs/commons": "^3.0.0"
|
"@sinonjs/commons": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@total-typescript/shoehorn": {
|
|
||||||
"version": "0.1.1",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@tsconfig/node18": {
|
|
||||||
"version": "18.2.2",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"@types/babel__core": {
|
"@types/babel__core": {
|
||||||
"version": "7.20.1",
|
"version": "7.20.1",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -9193,15 +8685,6 @@
|
|||||||
"is-shared-array-buffer": "^1.0.2"
|
"is-shared-array-buffer": "^1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"asn1js": {
|
|
||||||
"version": "3.0.5",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pvtsutils": "^1.3.2",
|
|
||||||
"pvutils": "^1.1.3",
|
|
||||||
"tslib": "^2.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ast-types-flow": {
|
"ast-types-flow": {
|
||||||
"version": "0.0.7",
|
"version": "0.0.7",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -9350,10 +8833,6 @@
|
|||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"bytestreamjs": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"cacache": {
|
"cacache": {
|
||||||
"version": "18.0.2",
|
"version": "18.0.2",
|
||||||
"requires": {
|
"requires": {
|
||||||
@@ -9418,10 +8897,6 @@
|
|||||||
"version": "1.0.30001524",
|
"version": "1.0.30001524",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"canonicalize": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"chalk": {
|
"chalk": {
|
||||||
"version": "4.1.2",
|
"version": "4.1.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -10474,10 +9949,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ipaddr.js": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-array-buffer": {
|
"is-array-buffer": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
@@ -11036,10 +10507,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jose": {
|
|
||||||
"version": "5.2.2",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"js-tokens": {
|
"js-tokens": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -11074,10 +10541,6 @@
|
|||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"json-stringify-safe": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"json5": {
|
"json5": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -11416,15 +10879,6 @@
|
|||||||
"negotiator": {
|
"negotiator": {
|
||||||
"version": "0.6.3"
|
"version": "0.6.3"
|
||||||
},
|
},
|
||||||
"nock": {
|
|
||||||
"version": "13.5.3",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "^4.1.0",
|
|
||||||
"json-stringify-safe": "^5.0.1",
|
|
||||||
"propagate": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node-int64": {
|
"node-int64": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -11646,17 +11100,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pkijs": {
|
|
||||||
"version": "3.0.15",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"asn1js": "^3.0.5",
|
|
||||||
"bytestreamjs": "^2.0.0",
|
|
||||||
"pvtsutils": "^1.3.2",
|
|
||||||
"pvutils": "^1.1.3",
|
|
||||||
"tslib": "^2.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prelude-ls": {
|
"prelude-ls": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -11720,10 +11163,6 @@
|
|||||||
"sisteransi": "^1.0.5"
|
"sisteransi": "^1.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"propagate": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"punycode": {
|
"punycode": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.1",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -11732,17 +11171,6 @@
|
|||||||
"version": "6.0.3",
|
"version": "6.0.3",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"pvtsutils": {
|
|
||||||
"version": "1.3.5",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"tslib": "^2.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pvutils": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"queue-microtask": {
|
"queue-microtask": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -11751,10 +11179,6 @@
|
|||||||
"version": "18.2.0",
|
"version": "18.2.0",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"reflect-metadata": {
|
|
||||||
"version": "0.2.1",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"regenerator-runtime": {
|
"regenerator-runtime": {
|
||||||
"version": "0.14.0",
|
"version": "0.14.0",
|
||||||
"dev": true
|
"dev": true
|
||||||
@@ -12178,19 +11602,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tsyringe": {
|
|
||||||
"version": "4.8.0",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"tslib": "^1.9.3"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": {
|
|
||||||
"version": "1.14.1",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tunnel": {
|
"tunnel": {
|
||||||
"version": "0.0.6"
|
"version": "0.0.6"
|
||||||
},
|
},
|
||||||
@@ -12340,17 +11751,6 @@
|
|||||||
"makeerror": "1.0.12"
|
"makeerror": "1.0.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"webcrypto-core": {
|
|
||||||
"version": "1.7.8",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@peculiar/asn1-schema": "^2.3.8",
|
|
||||||
"@peculiar/json-schema": "^1.1.12",
|
|
||||||
"asn1js": "^3.0.1",
|
|
||||||
"pvtsutils": "^1.3.5",
|
|
||||||
"tslib": "^2.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"which": {
|
"which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
|||||||
+3
-6
@@ -25,7 +25,6 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"bundle": "npm run format:write && npm run package",
|
"bundle": "npm run format:write && npm run package",
|
||||||
"prepackage": "npm run build --workspace packages/attest",
|
|
||||||
"ci-test": "jest",
|
"ci-test": "jest",
|
||||||
"coverage": "make-coverage-badge --output-path ./badges/coverage.svg",
|
"coverage": "make-coverage-badge --output-path ./badges/coverage.svg",
|
||||||
"format:write": "prettier --write **/*.ts",
|
"format:write": "prettier --write **/*.ts",
|
||||||
@@ -67,15 +66,16 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@actions/attest": "^1.0.0",
|
||||||
"@actions/core": "^1.10.1",
|
"@actions/core": "^1.10.1",
|
||||||
"@actions/glob": "^0.4.0",
|
"@actions/glob": "^0.4.0",
|
||||||
"@sigstore/oci": "^0.1.0"
|
"@sigstore/oci": "^0.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.12",
|
"@types/jest": "^29.5.12",
|
||||||
|
"@types/make-fetch-happen": "^10.0.4",
|
||||||
"@types/node": "^20.11.17",
|
"@types/node": "^20.11.17",
|
||||||
"@typescript-eslint/parser": "^6.21.0",
|
"@typescript-eslint/parser": "^6.21.0",
|
||||||
"@types/make-fetch-happen": "^10.0.4",
|
|
||||||
"@vercel/ncc": "^0.38.1",
|
"@vercel/ncc": "^0.38.1",
|
||||||
"eslint": "^8.56.0",
|
"eslint": "^8.56.0",
|
||||||
"eslint-plugin-github": "^4.10.1",
|
"eslint-plugin-github": "^4.10.1",
|
||||||
@@ -89,8 +89,5 @@
|
|||||||
"prettier-eslint": "^16.3.0",
|
"prettier-eslint": "^16.3.0",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^29.1.2",
|
||||||
"typescript": "^5.3.3"
|
"typescript": "^5.3.3"
|
||||||
},
|
}
|
||||||
"workspaces": [
|
|
||||||
"./packages/*"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
preset: 'ts-jest',
|
|
||||||
testEnvironment: 'node',
|
|
||||||
testMatch: ['**/__tests__/*.test.ts'],
|
|
||||||
};
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@actions/attest",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"description": "Base library for Sigstore",
|
|
||||||
"main": "dist/index.js",
|
|
||||||
"types": "dist/index.d.ts",
|
|
||||||
"scripts": {
|
|
||||||
"clean": "shx rm -rf dist *.tsbuildinfo",
|
|
||||||
"build": "tsc --build",
|
|
||||||
"test": "jest"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"dist"
|
|
||||||
],
|
|
||||||
"author": "bdehamer@github.com",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/github/attest-js.git"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/github/attest-js/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/github/attest-js/tree/main/packages/core#readme",
|
|
||||||
"publishConfig": {
|
|
||||||
"provenance": true
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@sigstore/mock": "^0.6.4",
|
|
||||||
"@total-typescript/shoehorn": "^0.1.1",
|
|
||||||
"@tsconfig/node18": "^18.2.2",
|
|
||||||
"@types/make-fetch-happen": "^10.0.4",
|
|
||||||
"nock": "^13.5.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/github": "^6.0.0",
|
|
||||||
"@sigstore/bundle": "^2.2.0",
|
|
||||||
"@sigstore/sign": "^2.2.3",
|
|
||||||
"make-fetch-happen": "^13.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`generateProvenance returns a provenance hydrated from env vars 1`] = `
|
|
||||||
{
|
|
||||||
"_type": "https://in-toto.io/Statement/v1",
|
|
||||||
"predicate": {
|
|
||||||
"buildDefinition": {
|
|
||||||
"buildType": "https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1",
|
|
||||||
"externalParameters": {
|
|
||||||
"workflow": {
|
|
||||||
"path": ".github/workflows/main.yml",
|
|
||||||
"ref": "main",
|
|
||||||
"repository": "https://github.com/owner/repo",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"internalParameters": {
|
|
||||||
"github": {
|
|
||||||
"event_name": "push",
|
|
||||||
"repository_id": "repo-id",
|
|
||||||
"repository_owner_id": "owner-id",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"resolvedDependencies": [
|
|
||||||
{
|
|
||||||
"digest": {
|
|
||||||
"gitCommit": "babca52ab0c93ae16539e5923cb0d7403b9a093b",
|
|
||||||
},
|
|
||||||
"uri": "git+https://github.com/owner/repo@refs/heads/main",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
"runDetails": {
|
|
||||||
"builder": {
|
|
||||||
"id": "https://github.com/actions/runner/github-hosted",
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"invocationId": "https://github.com/owner/repo/actions/runs/run-id/attempts/run-attempt",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"predicateType": "https://slsa.dev/provenance/v1",
|
|
||||||
"subject": [
|
|
||||||
{
|
|
||||||
"digest": {
|
|
||||||
"sha256": "7d070f6b64d9bcc530fe99cc21eaaa4b3c364e0b2d367d7735671fa202a03b32",
|
|
||||||
},
|
|
||||||
"name": "subjecty",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
import { mockFulcio, mockRekor, mockTSA } from '@sigstore/mock'
|
|
||||||
import nock from 'nock'
|
|
||||||
import { attestProvenance } from '../attest'
|
|
||||||
|
|
||||||
describe('attest functions', () => {
|
|
||||||
// Capture original environment variables and GitHub context so we can restore
|
|
||||||
// them after each test
|
|
||||||
const originalEnv = process.env
|
|
||||||
|
|
||||||
// Fake an OIDC token
|
|
||||||
const subject = 'foo@bar.com'
|
|
||||||
const oidcPayload = { sub: subject, iss: '' }
|
|
||||||
const oidcToken = `.${Buffer.from(JSON.stringify(oidcPayload)).toString(
|
|
||||||
'base64'
|
|
||||||
)}.}`
|
|
||||||
|
|
||||||
const tokenURL = 'https://token.url'
|
|
||||||
const fulcioURL = 'https://fulcio.url'
|
|
||||||
const rekorURL = 'https://rekor.url'
|
|
||||||
const tsaServerURL = 'https://tsa.url'
|
|
||||||
const attestationID = '1234567890'
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
jest.clearAllMocks()
|
|
||||||
|
|
||||||
nock(tokenURL)
|
|
||||||
.get('/')
|
|
||||||
.query({ audience: 'sigstore' })
|
|
||||||
.reply(200, { value: oidcToken })
|
|
||||||
|
|
||||||
// Mock Fulcio endpoint
|
|
||||||
await mockFulcio({ baseURL: fulcioURL, strict: false })
|
|
||||||
|
|
||||||
// Set-up GHA environment variables
|
|
||||||
process.env = {
|
|
||||||
...originalEnv,
|
|
||||||
ACTIONS_ID_TOKEN_REQUEST_URL: tokenURL,
|
|
||||||
ACTIONS_ID_TOKEN_REQUEST_TOKEN: 'token'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// Restore the original environment
|
|
||||||
process.env = originalEnv
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('#attestProvenance', () => {
|
|
||||||
const env = {
|
|
||||||
GITHUB_REPOSITORY: 'owner/repo',
|
|
||||||
GITHUB_REF: 'refs/heads/main',
|
|
||||||
GITHUB_SHA: 'babca52ab0c93ae16539e5923cb0d7403b9a093b',
|
|
||||||
GITHUB_WORKFLOW_REF: 'owner/repo/.github/workflows/main.yml@main',
|
|
||||||
GITHUB_SERVER_URL: 'https://github.com',
|
|
||||||
GITHUB_EVENT_NAME: 'push',
|
|
||||||
GITHUB_REPOSITORY_ID: 'repo-id',
|
|
||||||
GITHUB_REPOSITORY_OWNER_ID: 'owner-id',
|
|
||||||
GITHUB_RUN_ID: 'run-id',
|
|
||||||
GITHUB_RUN_ATTEMPT: 'run-attempt',
|
|
||||||
RUNNER_ENVIRONMENT: 'github-hosted'
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
process.env = { ...process.env, ...env }
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when the timestamp authority URL is set', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await mockTSA({ baseURL: tsaServerURL })
|
|
||||||
|
|
||||||
// Mock GH attestations API
|
|
||||||
nock('https://api.github.com')
|
|
||||||
.post(/^\/repos\/.*\/.*\/attestations$/)
|
|
||||||
.reply(201, { id: attestationID })
|
|
||||||
})
|
|
||||||
|
|
||||||
it('attests provenance', async () => {
|
|
||||||
const attestation = await attestProvenance({
|
|
||||||
subjectName: 'subjective',
|
|
||||||
subjectDigest: {
|
|
||||||
sha256:
|
|
||||||
'7d070f6b64d9bcc530fe99cc21eaaa4b3c364e0b2d367d7735671fa202a03b32'
|
|
||||||
},
|
|
||||||
token: 'token',
|
|
||||||
fulcioURL,
|
|
||||||
tsaServerURL
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(attestation).toBeDefined()
|
|
||||||
expect(attestation.bundle).toBeDefined()
|
|
||||||
expect(attestation.certificate).toMatch(/-----BEGIN CERTIFICATE-----/)
|
|
||||||
expect(attestation.tlogID).toBeUndefined()
|
|
||||||
expect(attestation.attestationID).toBe(attestationID)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when the transparency log URL is set', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await mockRekor({ baseURL: rekorURL })
|
|
||||||
|
|
||||||
// Mock GH attestations API
|
|
||||||
nock('https://api.github.com')
|
|
||||||
.post(/^\/repos\/.*\/.*\/attestations$/)
|
|
||||||
.reply(201, { id: attestationID })
|
|
||||||
})
|
|
||||||
|
|
||||||
it('attests provenance', async () => {
|
|
||||||
const attestation = await attestProvenance({
|
|
||||||
subjectName: 'subjective',
|
|
||||||
subjectDigest: {
|
|
||||||
sha256:
|
|
||||||
'7d070f6b64d9bcc530fe99cc21eaaa4b3c364e0b2d367d7735671fa202a03b32'
|
|
||||||
},
|
|
||||||
token: 'token',
|
|
||||||
fulcioURL,
|
|
||||||
rekorURL
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(attestation).toBeDefined()
|
|
||||||
expect(attestation.bundle).toBeDefined()
|
|
||||||
expect(attestation.certificate).toMatch(/-----BEGIN CERTIFICATE-----/)
|
|
||||||
expect(attestation.tlogID).toBeDefined()
|
|
||||||
expect(attestation.attestationID).toBe(attestationID)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when skipWrite is set to true', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await mockRekor({ baseURL: rekorURL })
|
|
||||||
await mockTSA({ baseURL: tsaServerURL })
|
|
||||||
})
|
|
||||||
|
|
||||||
it('attests provenance', async () => {
|
|
||||||
const attestation = await attestProvenance({
|
|
||||||
subjectName: 'subjective',
|
|
||||||
subjectDigest: {
|
|
||||||
sha256:
|
|
||||||
'7d070f6b64d9bcc530fe99cc21eaaa4b3c364e0b2d367d7735671fa202a03b32'
|
|
||||||
},
|
|
||||||
token: 'token',
|
|
||||||
fulcioURL,
|
|
||||||
rekorURL,
|
|
||||||
tsaServerURL,
|
|
||||||
skipWrite: true
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(attestation).toBeDefined()
|
|
||||||
expect(attestation.bundle).toBeDefined()
|
|
||||||
expect(attestation.certificate).toMatch(/-----BEGIN CERTIFICATE-----/)
|
|
||||||
expect(attestation.tlogID).toBeDefined()
|
|
||||||
expect(attestation.attestationID).toBeUndefined()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
import { fromPartial } from '@total-typescript/shoehorn'
|
|
||||||
import {
|
|
||||||
AttestOptions,
|
|
||||||
AttestProvenanceOptions,
|
|
||||||
Attestation,
|
|
||||||
Predicate,
|
|
||||||
Subject,
|
|
||||||
attest,
|
|
||||||
attestProvenance
|
|
||||||
} from '..'
|
|
||||||
|
|
||||||
it('exports functions', () => {
|
|
||||||
expect(attestProvenance).toBeInstanceOf(Function)
|
|
||||||
expect(attest).toBeInstanceOf(Function)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('exports types', async () => {
|
|
||||||
const attestation: Attestation = fromPartial({})
|
|
||||||
expect(attestation).toBeDefined()
|
|
||||||
|
|
||||||
const attestOptions: AttestOptions = fromPartial({})
|
|
||||||
expect(attestOptions).toBeDefined()
|
|
||||||
|
|
||||||
const attestProvenanceOptions: AttestProvenanceOptions = fromPartial({})
|
|
||||||
expect(attestProvenanceOptions).toBeDefined()
|
|
||||||
|
|
||||||
const subject: Subject = fromPartial({})
|
|
||||||
expect(subject).toBeDefined()
|
|
||||||
|
|
||||||
const predicate: Predicate = fromPartial({})
|
|
||||||
expect(predicate).toBeDefined()
|
|
||||||
})
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
import { generateProvenance } from '../provenance'
|
|
||||||
import type { Subject } from '../shared.types'
|
|
||||||
|
|
||||||
describe('generateProvenance', () => {
|
|
||||||
const subject: Subject = {
|
|
||||||
name: 'subjecty',
|
|
||||||
digest: {
|
|
||||||
sha256: '7d070f6b64d9bcc530fe99cc21eaaa4b3c364e0b2d367d7735671fa202a03b32'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const env = {
|
|
||||||
GITHUB_REPOSITORY: 'owner/repo',
|
|
||||||
GITHUB_REF: 'refs/heads/main',
|
|
||||||
GITHUB_SHA: 'babca52ab0c93ae16539e5923cb0d7403b9a093b',
|
|
||||||
GITHUB_WORKFLOW_REF: 'owner/repo/.github/workflows/main.yml@main',
|
|
||||||
GITHUB_SERVER_URL: 'https://github.com',
|
|
||||||
GITHUB_EVENT_NAME: 'push',
|
|
||||||
GITHUB_REPOSITORY_ID: 'repo-id',
|
|
||||||
GITHUB_REPOSITORY_OWNER_ID: 'owner-id',
|
|
||||||
GITHUB_RUN_ID: 'run-id',
|
|
||||||
GITHUB_RUN_ATTEMPT: 'run-attempt',
|
|
||||||
RUNNER_ENVIRONMENT: 'github-hosted'
|
|
||||||
}
|
|
||||||
|
|
||||||
it('returns a provenance hydrated from env vars', () => {
|
|
||||||
const provenance = generateProvenance(subject, env)
|
|
||||||
expect(provenance).toMatchSnapshot()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
import { mockFulcio, mockRekor, mockTSA } from '@sigstore/mock'
|
|
||||||
import nock from 'nock'
|
|
||||||
import { Payload, signPayload } from '../sign'
|
|
||||||
|
|
||||||
describe('signProvenance', () => {
|
|
||||||
const originalEnv = process.env
|
|
||||||
|
|
||||||
// Fake an OIDC token
|
|
||||||
const subject = 'foo@bar.com'
|
|
||||||
const oidcPayload = { sub: subject, iss: '' }
|
|
||||||
const oidcToken = `.${Buffer.from(JSON.stringify(oidcPayload)).toString(
|
|
||||||
'base64'
|
|
||||||
)}.}`
|
|
||||||
|
|
||||||
// Dummy provenance to be signed
|
|
||||||
const provenance = {
|
|
||||||
_type: 'https://in-toto.io/Statement/v1',
|
|
||||||
subject: {
|
|
||||||
name: 'subjective',
|
|
||||||
digest: {
|
|
||||||
sha256:
|
|
||||||
'7d070f6b64d9bcc530fe99cc21eaaa4b3c364e0b2d367d7735671fa202a03b32'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const payload: Payload = {
|
|
||||||
body: Buffer.from(JSON.stringify(provenance)),
|
|
||||||
type: 'application/vnd.in-toto+json'
|
|
||||||
}
|
|
||||||
|
|
||||||
const fulcioURL = 'https://fulcio.url'
|
|
||||||
const rekorURL = 'https://rekor.url'
|
|
||||||
const tsaServerURL = 'https://tsa.url'
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
// Mock OIDC token endpoint
|
|
||||||
const tokenURL = 'https://token.url'
|
|
||||||
|
|
||||||
process.env = {
|
|
||||||
...originalEnv,
|
|
||||||
ACTIONS_ID_TOKEN_REQUEST_URL: tokenURL,
|
|
||||||
ACTIONS_ID_TOKEN_REQUEST_TOKEN: 'token'
|
|
||||||
}
|
|
||||||
|
|
||||||
nock(tokenURL)
|
|
||||||
.get('/')
|
|
||||||
.query({ audience: 'sigstore' })
|
|
||||||
.reply(200, { value: oidcToken })
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
process.env = originalEnv
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when visibility is public', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await mockFulcio({ baseURL: fulcioURL, strict: false })
|
|
||||||
await mockRekor({ baseURL: rekorURL })
|
|
||||||
})
|
|
||||||
|
|
||||||
it('returns a bundle', async () => {
|
|
||||||
const att = await signPayload(payload, { fulcioURL, rekorURL })
|
|
||||||
|
|
||||||
expect(att).toBeDefined()
|
|
||||||
expect(att.mediaType).toEqual(
|
|
||||||
'application/vnd.dev.sigstore.bundle+json;version=0.2'
|
|
||||||
)
|
|
||||||
|
|
||||||
expect(att.content.$case).toEqual('dsseEnvelope')
|
|
||||||
expect(att.verificationMaterial.content.$case).toEqual(
|
|
||||||
'x509CertificateChain'
|
|
||||||
)
|
|
||||||
expect(att.verificationMaterial.tlogEntries).toHaveLength(1)
|
|
||||||
expect(
|
|
||||||
att.verificationMaterial.timestampVerificationData?.rfc3161Timestamps
|
|
||||||
).toHaveLength(0)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when visibility is private', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
await mockFulcio({ baseURL: fulcioURL, strict: false })
|
|
||||||
await mockTSA({ baseURL: tsaServerURL })
|
|
||||||
})
|
|
||||||
|
|
||||||
it('returns a bundle', async () => {
|
|
||||||
const att = await signPayload(payload, { fulcioURL, tsaServerURL })
|
|
||||||
|
|
||||||
expect(att).toBeDefined()
|
|
||||||
expect(att.mediaType).toEqual(
|
|
||||||
'application/vnd.dev.sigstore.bundle+json;version=0.2'
|
|
||||||
)
|
|
||||||
|
|
||||||
expect(att.content.$case).toEqual('dsseEnvelope')
|
|
||||||
expect(att.verificationMaterial.content.$case).toEqual(
|
|
||||||
'x509CertificateChain'
|
|
||||||
)
|
|
||||||
expect(att.verificationMaterial.tlogEntries).toHaveLength(0)
|
|
||||||
expect(
|
|
||||||
att.verificationMaterial.timestampVerificationData?.rfc3161Timestamps
|
|
||||||
).toHaveLength(1)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
import nock from 'nock'
|
|
||||||
import { writeAttestation } from '../store'
|
|
||||||
|
|
||||||
describe('writeAttestation', () => {
|
|
||||||
const originalEnv = process.env
|
|
||||||
const attestation = { foo: 'bar ' }
|
|
||||||
const token = 'token'
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
process.env = {
|
|
||||||
...originalEnv,
|
|
||||||
GITHUB_REPOSITORY: 'foo/bar'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
process.env = originalEnv
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when the api call is successful', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
nock('https://api.github.com')
|
|
||||||
.matchHeader('authorization', `token ${token}`)
|
|
||||||
.post('/repos/foo/bar/attestations', { bundle: attestation })
|
|
||||||
.reply(201, { id: '123' })
|
|
||||||
})
|
|
||||||
|
|
||||||
it('persists the attestation', async () => {
|
|
||||||
await expect(writeAttestation(attestation, token)).resolves.toEqual('123')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('when the api call fails', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
nock('https://api.github.com')
|
|
||||||
.matchHeader('authorization', `token ${token}`)
|
|
||||||
.post('/repos/foo/bar/attestations', { bundle: attestation })
|
|
||||||
.reply(500, 'oops')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('persists the attestation', async () => {
|
|
||||||
await expect(writeAttestation(attestation, token)).rejects.toThrow(/oops/)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
import { Bundle, bundleToJSON } from '@sigstore/bundle'
|
|
||||||
import { generateProvenancePredicate } from './provenance'
|
|
||||||
import { Payload, SignOptions, signPayload } from './sign'
|
|
||||||
import { writeAttestation } from './store'
|
|
||||||
|
|
||||||
import assert from 'assert'
|
|
||||||
import { X509Certificate } from 'crypto'
|
|
||||||
import type { Attestation, Subject } from './shared.types'
|
|
||||||
|
|
||||||
const INTOTO_PAYLOAD_TYPE = 'application/vnd.in-toto+json'
|
|
||||||
const INTOTO_STATEMENT_V1_TYPE = 'https://in-toto.io/Statement/v1'
|
|
||||||
|
|
||||||
type AttestBaseOptions = SignOptions & {
|
|
||||||
subjectName: string
|
|
||||||
subjectDigest: Record<string, string>
|
|
||||||
token: string
|
|
||||||
skipWrite?: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export type AttestOptions = AttestBaseOptions & {
|
|
||||||
predicateType: string
|
|
||||||
predicate: object
|
|
||||||
}
|
|
||||||
|
|
||||||
export type AttestProvenanceOptions = AttestBaseOptions
|
|
||||||
|
|
||||||
export async function attest(options: AttestOptions): Promise<Attestation> {
|
|
||||||
const subject: Subject = {
|
|
||||||
name: options.subjectName,
|
|
||||||
digest: options.subjectDigest
|
|
||||||
}
|
|
||||||
|
|
||||||
const statement = {
|
|
||||||
_type: INTOTO_STATEMENT_V1_TYPE,
|
|
||||||
subject: [subject],
|
|
||||||
predicateType: options.predicateType,
|
|
||||||
predicate: options.predicate
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sign the provenance statement
|
|
||||||
const payload: Payload = {
|
|
||||||
body: Buffer.from(JSON.stringify(statement)),
|
|
||||||
type: INTOTO_PAYLOAD_TYPE
|
|
||||||
}
|
|
||||||
const bundle = await signPayload(payload, options)
|
|
||||||
|
|
||||||
// Store the attestation
|
|
||||||
let attestationID: string | undefined
|
|
||||||
if (options.skipWrite !== true) {
|
|
||||||
attestationID = await writeAttestation(bundleToJSON(bundle), options.token)
|
|
||||||
}
|
|
||||||
|
|
||||||
return toAttestation(bundle, attestationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function attestProvenance(
|
|
||||||
options: AttestProvenanceOptions
|
|
||||||
): Promise<Attestation> {
|
|
||||||
const predicate = generateProvenancePredicate(process.env)
|
|
||||||
return attest({
|
|
||||||
...options,
|
|
||||||
predicateType: predicate.type,
|
|
||||||
predicate: predicate.params
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function toAttestation(bundle: Bundle, attestationID?: string): Attestation {
|
|
||||||
// Extract the signing certificate from the bundle
|
|
||||||
assert(
|
|
||||||
bundle.verificationMaterial.content.$case === 'x509CertificateChain',
|
|
||||||
'Bundle must contain an x509 certificate chain'
|
|
||||||
)
|
|
||||||
|
|
||||||
const signingCert = new X509Certificate(
|
|
||||||
bundle.verificationMaterial.content.x509CertificateChain.certificates[0].rawBytes
|
|
||||||
)
|
|
||||||
|
|
||||||
// Determine if we can provide a link to the transparency log
|
|
||||||
const tlogEntries = bundle.verificationMaterial.tlogEntries
|
|
||||||
const tlogID = tlogEntries.length > 0 ? tlogEntries[0].logIndex : undefined
|
|
||||||
|
|
||||||
return {
|
|
||||||
bundle: bundleToJSON(bundle),
|
|
||||||
certificate: signingCert.toString(),
|
|
||||||
tlogID,
|
|
||||||
attestationID
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
export {
|
|
||||||
AttestOptions,
|
|
||||||
AttestProvenanceOptions,
|
|
||||||
attest,
|
|
||||||
attestProvenance
|
|
||||||
} from './attest'
|
|
||||||
export { generateProvenancePredicate } from './provenance'
|
|
||||||
export { generateSBOMPredicate } from './sbom'
|
|
||||||
|
|
||||||
export type { Attestation, Predicate, Subject, SBOM } from './shared.types'
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
import type { Predicate, Subject } from './shared.types'
|
|
||||||
|
|
||||||
const INTOTO_STATEMENT_V1_TYPE = 'https://in-toto.io/Statement/v1'
|
|
||||||
export const SLSA_PREDICATE_V1_TYPE = 'https://slsa.dev/provenance/v1'
|
|
||||||
|
|
||||||
const GITHUB_BUILDER_ID_PREFIX = 'https://github.com/actions/runner'
|
|
||||||
const GITHUB_BUILD_TYPE =
|
|
||||||
'https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1'
|
|
||||||
|
|
||||||
export const generateProvenancePredicate = (
|
|
||||||
env: NodeJS.ProcessEnv
|
|
||||||
): Predicate => {
|
|
||||||
const workflow = env.GITHUB_WORKFLOW_REF || /* istanbul ignore next */ ''
|
|
||||||
// Split just the path and ref from the workflow string.
|
|
||||||
// owner/repo/.github/workflows/main.yml@main =>
|
|
||||||
// .github/workflows/main.yml, main
|
|
||||||
const [workflowPath, workflowRef] = workflow
|
|
||||||
.replace(`${env.GITHUB_REPOSITORY}/`, '')
|
|
||||||
.split('@')
|
|
||||||
|
|
||||||
return {
|
|
||||||
type: SLSA_PREDICATE_V1_TYPE,
|
|
||||||
params: {
|
|
||||||
buildDefinition: {
|
|
||||||
buildType: GITHUB_BUILD_TYPE,
|
|
||||||
externalParameters: {
|
|
||||||
workflow: {
|
|
||||||
ref: workflowRef,
|
|
||||||
repository: `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}`,
|
|
||||||
path: workflowPath
|
|
||||||
}
|
|
||||||
},
|
|
||||||
internalParameters: {
|
|
||||||
github: {
|
|
||||||
event_name: env.GITHUB_EVENT_NAME,
|
|
||||||
repository_id: env.GITHUB_REPOSITORY_ID,
|
|
||||||
repository_owner_id: env.GITHUB_REPOSITORY_OWNER_ID
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolvedDependencies: [
|
|
||||||
{
|
|
||||||
uri: `git+${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}@${env.GITHUB_REF}`,
|
|
||||||
digest: {
|
|
||||||
gitCommit: env.GITHUB_SHA
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
runDetails: {
|
|
||||||
builder: {
|
|
||||||
id: `${GITHUB_BUILDER_ID_PREFIX}/${env.RUNNER_ENVIRONMENT}`
|
|
||||||
},
|
|
||||||
metadata: {
|
|
||||||
invocationId: `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}/attempts/${env.GITHUB_RUN_ATTEMPT}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const generateProvenance = (
|
|
||||||
subject: Subject,
|
|
||||||
env: NodeJS.ProcessEnv
|
|
||||||
): object => {
|
|
||||||
const predicate = generateProvenancePredicate(env)
|
|
||||||
return {
|
|
||||||
_type: INTOTO_STATEMENT_V1_TYPE,
|
|
||||||
subject: [subject],
|
|
||||||
predicateType: predicate.type,
|
|
||||||
predicate: predicate.params
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import type { SBOM, Predicate } from './shared.types'
|
|
||||||
|
|
||||||
export const generateSBOMPredicate = (sbom: SBOM): Predicate => {
|
|
||||||
if (sbom.type === 'spdx') {
|
|
||||||
return generateSPDXIntoto(sbom.object)
|
|
||||||
}
|
|
||||||
if (sbom.type === 'cyclonedx') {
|
|
||||||
return generateCycloneDXIntoto(sbom.object)
|
|
||||||
}
|
|
||||||
throw new Error('Unsupported SBOM format')
|
|
||||||
}
|
|
||||||
|
|
||||||
// ref: https://github.com/in-toto/attestation/blob/main/spec/predicates/spdx.md
|
|
||||||
const generateSPDXIntoto = (sbom: object): Predicate => {
|
|
||||||
const spdxVersion = (sbom as { spdxVersion?: string })?.['spdxVersion']
|
|
||||||
if (!spdxVersion) {
|
|
||||||
throw new Error('Cannot find spdxVersion in the SBOM')
|
|
||||||
}
|
|
||||||
|
|
||||||
const version = spdxVersion.split('-')[1]
|
|
||||||
|
|
||||||
return {
|
|
||||||
type: `https://spdx.dev/Document/v${version}`,
|
|
||||||
params: sbom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ref: https://github.com/in-toto/attestation/blob/main/spec/predicates/cyclonedx.md
|
|
||||||
const generateCycloneDXIntoto = (sbom: object): Predicate => {
|
|
||||||
return {
|
|
||||||
type: 'https://cyclonedx.org/bom',
|
|
||||||
params: sbom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import type { SerializedBundle } from '@sigstore/bundle'
|
|
||||||
export type Subject = {
|
|
||||||
name: string
|
|
||||||
digest: Record<string, string>
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Predicate = {
|
|
||||||
type: string
|
|
||||||
params: object
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Attestation = {
|
|
||||||
bundle: SerializedBundle
|
|
||||||
certificate: string
|
|
||||||
tlogID?: string
|
|
||||||
attestationID?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export type SBOM = {
|
|
||||||
type: 'spdx' | 'cyclonedx'
|
|
||||||
object: object
|
|
||||||
}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
import { Bundle } from '@sigstore/bundle'
|
|
||||||
import {
|
|
||||||
BundleBuilder,
|
|
||||||
CIContextProvider,
|
|
||||||
DSSEBundleBuilder,
|
|
||||||
FulcioSigner,
|
|
||||||
IdentityProvider,
|
|
||||||
RekorWitness,
|
|
||||||
TSAWitness,
|
|
||||||
Witness
|
|
||||||
} from '@sigstore/sign'
|
|
||||||
|
|
||||||
const OIDC_AUDIENCE = 'sigstore'
|
|
||||||
const DEFAULT_TIMEOUT = 10000
|
|
||||||
const DEFAULT_RETRIES = 3
|
|
||||||
|
|
||||||
export type Payload = {
|
|
||||||
body: Buffer
|
|
||||||
type: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export type SignOptions = {
|
|
||||||
fulcioURL: string
|
|
||||||
rekorURL?: string
|
|
||||||
tsaServerURL?: string
|
|
||||||
identityProvider?: IdentityProvider
|
|
||||||
timeout?: number
|
|
||||||
retry?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
// Signs the provided payload with Sigstore.
|
|
||||||
export const signPayload = async (
|
|
||||||
payload: Payload,
|
|
||||||
options: SignOptions
|
|
||||||
): Promise<Bundle> => {
|
|
||||||
const artifact = {
|
|
||||||
data: payload.body,
|
|
||||||
type: payload.type
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sign the artifact and build the bundle
|
|
||||||
return initBundleBuilder(options).create(artifact)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assembles the Sigstore bundle builder with the appropriate options
|
|
||||||
const initBundleBuilder = (opts: SignOptions): BundleBuilder => {
|
|
||||||
const identityProvider =
|
|
||||||
opts.identityProvider || new CIContextProvider(OIDC_AUDIENCE)
|
|
||||||
const timeout = opts.timeout || DEFAULT_TIMEOUT
|
|
||||||
const retry = opts.retry || DEFAULT_RETRIES
|
|
||||||
const witnesses: Witness[] = []
|
|
||||||
|
|
||||||
const signer = new FulcioSigner({
|
|
||||||
identityProvider: identityProvider,
|
|
||||||
fulcioBaseURL: opts.fulcioURL,
|
|
||||||
timeout: timeout,
|
|
||||||
retry: retry
|
|
||||||
})
|
|
||||||
|
|
||||||
if (opts.rekorURL) {
|
|
||||||
witnesses.push(
|
|
||||||
new RekorWitness({
|
|
||||||
rekorBaseURL: opts.rekorURL,
|
|
||||||
entryType: 'dsse',
|
|
||||||
timeout: timeout,
|
|
||||||
retry: retry
|
|
||||||
})
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (opts.tsaServerURL) {
|
|
||||||
witnesses.push(
|
|
||||||
new TSAWitness({
|
|
||||||
tsaBaseURL: opts.tsaServerURL,
|
|
||||||
timeout: timeout,
|
|
||||||
retry: retry
|
|
||||||
})
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return new DSSEBundleBuilder({ signer, witnesses })
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import * as github from '@actions/github'
|
|
||||||
import fetch from 'make-fetch-happen'
|
|
||||||
|
|
||||||
const CREATE_ATTESTATION_REQUEST = 'POST /repos/{owner}/{repo}/attestations'
|
|
||||||
|
|
||||||
// Upload the attestation to the repository's attestations endpoint. Returns the
|
|
||||||
// ID of the uploaded attestation.
|
|
||||||
export const writeAttestation = async (
|
|
||||||
attestation: unknown,
|
|
||||||
token: string
|
|
||||||
): Promise<string> => {
|
|
||||||
const octokit = github.getOctokit(token, { request: { fetch } })
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await octokit.request(CREATE_ATTESTATION_REQUEST, {
|
|
||||||
owner: github.context.repo.owner,
|
|
||||||
repo: github.context.repo.repo,
|
|
||||||
data: { bundle: attestation }
|
|
||||||
})
|
|
||||||
|
|
||||||
return response.data?.id
|
|
||||||
} catch (err) {
|
|
||||||
/* istanbul ignore next */
|
|
||||||
const message = err instanceof Error ? err.message : err
|
|
||||||
throw new Error(`Failed to persist attestation: ${message}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "@tsconfig/node18/tsconfig.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"composite": true,
|
|
||||||
"rootDir": "src",
|
|
||||||
"outDir": "dist",
|
|
||||||
"declaration": true,
|
|
||||||
"noFallthroughCasesInSwitch": true,
|
|
||||||
"noImplicitOverride": true,
|
|
||||||
"allowUnreachableCode": false,
|
|
||||||
"noImplicitReturns": true,
|
|
||||||
"noUnusedParameters": true
|
|
||||||
},
|
|
||||||
"exclude": [
|
|
||||||
"./dist",
|
|
||||||
"**/__tests__"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
+1
-5
@@ -15,9 +15,5 @@
|
|||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"newLine": "lf"
|
"newLine": "lf"
|
||||||
},
|
},
|
||||||
"include": [ "/src/*" ],
|
"exclude": ["./dist", "./node_modules", "./__tests__", "./coverage"]
|
||||||
"exclude": ["./dist", "./node_modules", "./__tests__", "./coverage"],
|
|
||||||
"references": [
|
|
||||||
{ "path": "./packages/attest" }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user