Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
700b0a9962 | ||
|
|
f41311b4cd |
@@ -0,0 +1,10 @@
|
|||||||
|
rules:
|
||||||
|
document-end: disable
|
||||||
|
document-start:
|
||||||
|
level: warning
|
||||||
|
present: false
|
||||||
|
line-length:
|
||||||
|
level: warning
|
||||||
|
max: 80
|
||||||
|
allow-non-breakable-words: true
|
||||||
|
allow-non-breakable-inline-mappings: true
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
import eslint from '@eslint/js'
|
import eslint from '@eslint/js'
|
||||||
import importplugin from 'eslint-plugin-import'
|
import importplugin from 'eslint-plugin-import'
|
||||||
import jestplugin from 'eslint-plugin-jest'
|
import jestplugin from 'eslint-plugin-jest'
|
||||||
import path from 'node:path'
|
|
||||||
import tseslint from 'typescript-eslint'
|
import tseslint from 'typescript-eslint'
|
||||||
|
|
||||||
export default tseslint.config(
|
export default tseslint.config(
|
||||||
// Ignore non-project files
|
// Ignore non-project files
|
||||||
{
|
{
|
||||||
name: 'ignore',
|
name: 'ignore',
|
||||||
ignores: ['.github', 'dist', 'coverage', '**/*.json', 'jest.setup.js', 'eslint.config.mjs']
|
ignores: ['.github', 'dist', 'coverage', '**/*.json', 'jest.setup.js']
|
||||||
},
|
},
|
||||||
// Use recommended rules from ESLint, TypeScript, and other plugins
|
// Use recommended rules from ESLint, TypeScript, and other plugins
|
||||||
eslint.configs.recommended,
|
eslint.configs.recommended,
|
||||||
@@ -22,7 +21,7 @@ export default tseslint.config(
|
|||||||
languageOptions: {
|
languageOptions: {
|
||||||
ecmaVersion: 2023,
|
ecmaVersion: 2023,
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
project: [ './tsconfig.lint.json' ]
|
project: ['./.github/linters/tsconfig.json', './tsconfig.json']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/tsconfig",
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"noEmit": true
|
||||||
|
},
|
||||||
|
"include": ["../../__tests__/**/*", "../../src/**/*"],
|
||||||
|
"exclude": ["../../dist", "../../node_modules", "../../coverage", "*.json"]
|
||||||
|
}
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
id: checkout
|
id: checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
id: setup-node
|
id: setup-node
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
id: checkout
|
id: checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
id: setup-node
|
id: setup-node
|
||||||
@@ -58,7 +58,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
id: checkout
|
id: checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||||
- name: Calculate subject digest
|
- name: Calculate subject digest
|
||||||
id: subject
|
id: subject
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
id: checkout
|
id: checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
id: initialize
|
id: initialize
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
name: Lint Codebase
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: read
|
||||||
|
statuses: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
name: Lint Codebase
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
id: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
id: setup-node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version-file: .node-version
|
||||||
|
cache: npm
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
id: install
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Lint Codebase
|
||||||
|
id: super-linter
|
||||||
|
uses: super-linter/super-linter/slim@v7
|
||||||
|
env:
|
||||||
|
DEFAULT_BRANCH: main
|
||||||
|
FILTER_REGEX_EXCLUDE: dist/**/*
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
TYPESCRIPT_DEFAULT_STYLE: prettier
|
||||||
|
VALIDATE_ALL_CODEBASE: true
|
||||||
|
VALIDATE_JAVASCRIPT_STANDARD: false
|
||||||
|
VALIDATE_TYPESCRIPT_STANDARD: false
|
||||||
|
VALIDATE_JSCPD: false
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
name: 'Publish Immutable Action Version'
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
id-token: write
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checking out
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Publish
|
||||||
|
id: publish
|
||||||
|
uses: actions/[email protected]
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
24.5.0
|
20.6.0
|
||||||
|
|||||||
@@ -18,12 +18,6 @@ Once the attestation has been created and signed, it will be uploaded to the GH
|
|||||||
attestations API and associated with the repository from which the workflow was
|
attestations API and associated with the repository from which the workflow was
|
||||||
initiated.
|
initiated.
|
||||||
|
|
||||||
When an attestation is created, the attestation is stored on the local
|
|
||||||
filesystem used by the runner. For each attestation created, the filesystem path
|
|
||||||
will be appended to the file `${RUNNER_TEMP}/created_attestation_paths.txt`.
|
|
||||||
This can be used to gather all attestations created by all jobs during a the
|
|
||||||
workflow.
|
|
||||||
|
|
||||||
Attestations can be verified using the [`attestation` command in the GitHub
|
Attestations can be verified using the [`attestation` command in the GitHub
|
||||||
CLI][5].
|
CLI][5].
|
||||||
|
|
||||||
@@ -71,7 +65,7 @@ attest:
|
|||||||
The `subject-path` parameter should identify the artifact for which you want
|
The `subject-path` parameter should identify the artifact for which you want
|
||||||
to generate an attestation. The `predicate-type` can be any of the the
|
to generate an attestation. The `predicate-type` can be any of the the
|
||||||
[vetted predicate types][3] or a custom value. The `predicate-path`
|
[vetted predicate types][3] or a custom value. The `predicate-path`
|
||||||
identifies a file containing the JSON-encoded predicate parameters.
|
identifies a file containg the JSON-encoded predicate parameters.
|
||||||
|
|
||||||
### Inputs
|
### Inputs
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ describe('subjectFromInputs', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('when the algorithm is not supported', () => {
|
describe('when the alogrithm is not supported', () => {
|
||||||
it('throws an error', async () => {
|
it('throws an error', async () => {
|
||||||
const inputs: SubjectInputs = {
|
const inputs: SubjectInputs = {
|
||||||
...blankInputs,
|
...blankInputs,
|
||||||
@@ -473,13 +473,6 @@ badline
|
|||||||
'187dcd1506a170337415589ff00c8743f19d41cc31fca246c2739dfd450d0b9d'
|
'187dcd1506a170337415589ff00c8743f19d41cc31fca246c2739dfd450d0b9d'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
expect(subjects).toContainEqual({
|
|
||||||
name: 'demo_0.0.1_darwin_arm64',
|
|
||||||
digest: {
|
|
||||||
sha512:
|
|
||||||
'5d8b4751ef31f9440d843fcfa4e53ca2e25b1cb1f13fd355fdc7c24b41fe645293291ea9297ba3989078abb77ebbaac66be073618a9e4974dbd0361881d4c718'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -487,8 +480,8 @@ badline
|
|||||||
describe('when specifying a subject checksums string', () => {
|
describe('when specifying a subject checksums string', () => {
|
||||||
const checksums = `
|
const checksums = `
|
||||||
f861e68a080799ca83104630b56abb90d8dbcc5f8b5a8639cb691e269838f29e demo_0.0.1_linux_386
|
f861e68a080799ca83104630b56abb90d8dbcc5f8b5a8639cb691e269838f29e demo_0.0.1_linux_386
|
||||||
187dcd1506a170337415589ff00c8743f19d41cc31fca246c2739dfd450d0b9d *demo_0.0.1_linux_amd64
|
187dcd1506a170337415589ff00c8743f19d41cc31fca246c2739dfd450d0b9d demo_0.0.1_linux_amd64
|
||||||
9ecbf449e286a8a8748c161c52aa28b6b2fc64ab86f94161c5d1b3abc18156c5 demo_0.0.1_linux_arm64`
|
9ecbf449e286a8a8748c161c52aa28b6b2fc64ab86f94161c5d1b3abc18156c5 demo_0.0.1_linux_arm64`
|
||||||
|
|
||||||
it('returns the multiple subjects', async () => {
|
it('returns the multiple subjects', async () => {
|
||||||
const inputs: SubjectInputs = {
|
const inputs: SubjectInputs = {
|
||||||
@@ -507,20 +500,6 @@ f861e68a080799ca83104630b56abb90d8dbcc5f8b5a8639cb691e269838f29e demo_0.0.1_lin
|
|||||||
'f861e68a080799ca83104630b56abb90d8dbcc5f8b5a8639cb691e269838f29e'
|
'f861e68a080799ca83104630b56abb90d8dbcc5f8b5a8639cb691e269838f29e'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
expect(subjects).toContainEqual({
|
|
||||||
name: 'demo_0.0.1_linux_amd64',
|
|
||||||
digest: {
|
|
||||||
sha256:
|
|
||||||
'187dcd1506a170337415589ff00c8743f19d41cc31fca246c2739dfd450d0b9d'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
expect(subjects).toContainEqual({
|
|
||||||
name: 'demo_0.0.1_linux_arm64',
|
|
||||||
digest: {
|
|
||||||
sha256:
|
|
||||||
'9ecbf449e286a8a8748c161c52aa28b6b2fc64ab86f94161c5d1b3abc18156c5'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -73,5 +73,5 @@ outputs:
|
|||||||
description: 'The URL for the attestation summary.'
|
description: 'The URL for the attestation summary.'
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: node24
|
using: node20
|
||||||
main: ./dist/index.js
|
main: ./dist/index.js
|
||||||
|
|||||||
+389
-10506
File diff suppressed because it is too large
Load Diff
Generated
+3612
-5391
File diff suppressed because it is too large
Load Diff
+21
-21
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "actions/attest",
|
"name": "actions/attest",
|
||||||
"description": "Generate signed attestations for workflow artifacts",
|
"description": "Generate signed attestations for workflow artifacts",
|
||||||
"version": "3.0.0",
|
"version": "2.2.0",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/actions/attest",
|
"homepage": "https://github.com/actions/attest",
|
||||||
@@ -20,15 +20,15 @@
|
|||||||
".": "./dist/index.js"
|
".": "./dist/index.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24"
|
"node": ">=20"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"bundle": "npm run format:write && npm run package",
|
"bundle": "npm run format:write && npm run package",
|
||||||
"ci-test": "jest",
|
"ci-test": "jest",
|
||||||
"format:write": "prettier --write **/*.ts",
|
"format:write": "prettier --write **/*.ts",
|
||||||
"format:check": "prettier --check **/*.ts",
|
"format:check": "prettier --check **/*.ts",
|
||||||
"lint:eslint": "npx eslint",
|
"lint:eslint": "npx eslint . -c ./.github/linters/eslint.config.mjs",
|
||||||
"lint:markdown": "npx markdownlint --config .markdown-lint.yml \"*.md\"",
|
"lint:markdown": "npx markdownlint --config .github/linters/.markdown-lint.yml \"*.md\"",
|
||||||
"lint": "npm run lint:eslint && npm run lint:markdown",
|
"lint": "npm run lint:eslint && npm run lint:markdown",
|
||||||
"package": "ncc build src/index.ts --license licenses.txt",
|
"package": "ncc build src/index.ts --license licenses.txt",
|
||||||
"package:watch": "npm run package -- --watch",
|
"package:watch": "npm run package -- --watch",
|
||||||
@@ -69,31 +69,31 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/attest": "^1.6.0",
|
"@actions/attest": "^1.5.0",
|
||||||
"@actions/core": "^1.11.1",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/github": "^6.0.1",
|
"@actions/github": "^6.0.0",
|
||||||
"@actions/glob": "^0.5.0",
|
"@actions/glob": "^0.5.0",
|
||||||
"@sigstore/oci": "^0.6.0",
|
"@sigstore/oci": "^0.4.0",
|
||||||
"csv-parse": "^5.6.0"
|
"csv-parse": "^5.6.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.34.0",
|
"@eslint/js": "^9.19.0",
|
||||||
"@sigstore/mock": "^0.11.0",
|
"@sigstore/mock": "^0.9.0",
|
||||||
"@types/jest": "^30.0.0",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/make-fetch-happen": "^10.0.4",
|
"@types/make-fetch-happen": "^10.0.4",
|
||||||
"@types/node": "^24.3.0",
|
"@types/node": "^22.10.10",
|
||||||
"@vercel/ncc": "^0.38.3",
|
"@vercel/ncc": "^0.38.3",
|
||||||
"eslint": "^9.34.0",
|
"eslint": "^9.19.0",
|
||||||
"eslint-plugin-import": "^2.32.0",
|
"eslint-plugin-import": "^2.31.0",
|
||||||
"eslint-plugin-jest": "^29.0.1",
|
"eslint-plugin-jest": "^28.11.0",
|
||||||
"jest": "^30.0.5",
|
"jest": "^29.7.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"markdownlint-cli": "^0.45.0",
|
"markdownlint-cli": "^0.44.0",
|
||||||
"nock": "^13.5.6",
|
"nock": "^13.5.6",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.4.2",
|
||||||
"ts-jest": "^29.4.1",
|
"ts-jest": "^29.2.5",
|
||||||
"typescript": "^5.9.2",
|
"typescript": "^5.7.3",
|
||||||
"typescript-eslint": "^8.41.0",
|
"typescript-eslint": "^8.22.0",
|
||||||
"undici": "^5.29.0"
|
"undici": "^5.28.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -25,9 +25,12 @@ export const createAttestation = async (
|
|||||||
predicateType: predicate.type,
|
predicateType: predicate.type,
|
||||||
predicate: predicate.params,
|
predicate: predicate.params,
|
||||||
sigstore: opts.sigstoreInstance,
|
sigstore: opts.sigstoreInstance,
|
||||||
token: opts.githubToken
|
token: opts.githubToken,
|
||||||
|
skipWrite: true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
console.log(JSON.stringify(attestation.bundle))
|
||||||
|
|
||||||
const result: AttestResult = attestation
|
const result: AttestResult = attestation
|
||||||
|
|
||||||
if (subjects.length === 1 && opts.pushToRegistry) {
|
if (subjects.length === 1 && opts.pushToRegistry) {
|
||||||
|
|||||||
-20
@@ -16,7 +16,6 @@ import {
|
|||||||
import type { Subject } from '@actions/attest'
|
import type { Subject } from '@actions/attest'
|
||||||
|
|
||||||
const ATTESTATION_FILE_NAME = 'attestation.json'
|
const ATTESTATION_FILE_NAME = 'attestation.json'
|
||||||
const ATTESTATION_PATHS_FILE_NAME = 'created_attestation_paths.txt'
|
|
||||||
|
|
||||||
export type RunInputs = SubjectInputs &
|
export type RunInputs = SubjectInputs &
|
||||||
PredicateInputs & {
|
PredicateInputs & {
|
||||||
@@ -80,28 +79,11 @@ export async function run(inputs: RunInputs): Promise<void> {
|
|||||||
flag: 'a'
|
flag: 'a'
|
||||||
})
|
})
|
||||||
|
|
||||||
const baseDir = process.env.RUNNER_TEMP
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (baseDir) {
|
|
||||||
const outputSummaryPath = path.join(baseDir, ATTESTATION_PATHS_FILE_NAME)
|
|
||||||
// Append the output path to the attestations paths file
|
|
||||||
fs.appendFileSync(outputSummaryPath, outputPath + os.EOL, {
|
|
||||||
encoding: 'utf-8',
|
|
||||||
flag: 'a'
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
core.warning(
|
|
||||||
'RUNNER_TEMP environment variable is not set. Cannot write attestation paths file.'
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (att.attestationID) {
|
if (att.attestationID) {
|
||||||
core.setOutput('attestation-id', att.attestationID)
|
core.setOutput('attestation-id', att.attestationID)
|
||||||
core.setOutput('attestation-url', attestationURL(att.attestationID))
|
core.setOutput('attestation-url', attestationURL(att.attestationID))
|
||||||
}
|
}
|
||||||
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (inputs.showSummary) {
|
if (inputs.showSummary) {
|
||||||
await logSummary(att)
|
await logSummary(att)
|
||||||
}
|
}
|
||||||
@@ -159,7 +141,6 @@ const logAttestation = (
|
|||||||
core.info(`${SEARCH_PUBLIC_GOOD_URL}?logIndex=${attestation.tlogID}`)
|
core.info(`${SEARCH_PUBLIC_GOOD_URL}?logIndex=${attestation.tlogID}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (attestation.attestationID) {
|
if (attestation.attestationID) {
|
||||||
core.info(style.highlight('Attestation uploaded to repository'))
|
core.info(style.highlight('Attestation uploaded to repository'))
|
||||||
core.info(attestationURL(attestation.attestationID))
|
core.info(attestationURL(attestation.attestationID))
|
||||||
@@ -175,7 +156,6 @@ const logAttestation = (
|
|||||||
const logSummary = async (attestation: AttestResult): Promise<void> => {
|
const logSummary = async (attestation: AttestResult): Promise<void> => {
|
||||||
const { attestationID } = attestation
|
const { attestationID } = attestation
|
||||||
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (attestationID) {
|
if (attestationID) {
|
||||||
const url = attestationURL(attestationID)
|
const url = attestationURL(attestationID)
|
||||||
core.summary.addHeading('Attestation Created', 3)
|
core.summary.addHeading('Attestation Created', 3)
|
||||||
|
|||||||
+15
-12
@@ -181,24 +181,25 @@ const getSubjectFromChecksumsString = (checksums: string): Subject[] => {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// It's common for checksum records to have a leading flag character before
|
// Swallow the type identifier character at the beginning of the name
|
||||||
// the artifact name. It will be either a '*' or a space.
|
const name = record.slice(delimIndex + 2)
|
||||||
const flag_and_name = record.slice(delimIndex + 1)
|
|
||||||
const name =
|
|
||||||
flag_and_name.startsWith('*') || flag_and_name.startsWith(' ')
|
|
||||||
? flag_and_name.slice(1)
|
|
||||||
: flag_and_name
|
|
||||||
|
|
||||||
const digest = record.slice(0, delimIndex)
|
const digest = record.slice(0, delimIndex)
|
||||||
|
|
||||||
if (!HEX_STRING_RE.test(digest)) {
|
if (!HEX_STRING_RE.test(digest)) {
|
||||||
throw new Error(`Invalid digest: ${digest}`)
|
throw new Error(`Invalid digest: ${digest}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
subjects.push({
|
if (digestAlgorithm(digest) === 'sha1') {
|
||||||
name,
|
subjects.push({
|
||||||
digest: { [digestAlgorithm(digest)]: digest }
|
uri: name,
|
||||||
})
|
digest: { [digestAlgorithm(digest)]: digest }
|
||||||
|
} as any)
|
||||||
|
} else {
|
||||||
|
subjects.push({
|
||||||
|
name,
|
||||||
|
digest: { [digestAlgorithm(digest)]: digest }
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return subjects
|
return subjects
|
||||||
@@ -239,6 +240,8 @@ const parseSubjectPathList = (input: string): string[] => {
|
|||||||
|
|
||||||
const digestAlgorithm = (digest: string): string => {
|
const digestAlgorithm = (digest: string): string => {
|
||||||
switch (digest.length) {
|
switch (digest.length) {
|
||||||
|
case 40:
|
||||||
|
return 'sha1'
|
||||||
case 64:
|
case 64:
|
||||||
return 'sha256'
|
return 'sha256'
|
||||||
case 128:
|
case 128:
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
"module": "NodeNext",
|
"module": "NodeNext",
|
||||||
"rootDir": "./src",
|
"rootDir": "./src",
|
||||||
"moduleResolution": "NodeNext",
|
"moduleResolution": "NodeNext",
|
||||||
"isolatedModules": true,
|
|
||||||
"baseUrl": "./",
|
"baseUrl": "./",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"outDir": "./dist",
|
"outDir": "./dist",
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://json.schemastore.org/tsconfig",
|
|
||||||
"extends": "./tsconfig.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"noEmit": true
|
|
||||||
},
|
|
||||||
"include": ["./__tests__/**/*", "./src/**/*"],
|
|
||||||
"exclude": ["./dist", "./node_modules", "./coverage", "*.json"]
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user