Compare commits

..
Author SHA1 Message Date
Brian DeHamer 60a047b675 oci compat mode input arg
Signed-off-by: Brian DeHamer <[email protected]>
2025-04-10 10:34:46 -07:00
15 changed files with 6025 additions and 8432 deletions
+1 -7
View File
@@ -1,7 +1,6 @@
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(
@@ -22,12 +21,7 @@ export default tseslint.config(
languageOptions: { languageOptions: {
ecmaVersion: 2023, ecmaVersion: 2023,
parserOptions: { parserOptions: {
project: [ project: ['./.github/linters/tsconfig.json', './tsconfig.json']
path.resolve(
path.dirname(new URL(import.meta.url).pathname),
'./tsconfig.json'
)
]
} }
}, },
rules: { rules: {
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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:
+1 -1
View File
@@ -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
+2 -6
View File
@@ -21,7 +21,7 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
id: checkout id: checkout
uses: actions/checkout@v5 uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
@@ -38,7 +38,7 @@ jobs:
- name: Lint Codebase - name: Lint Codebase
id: super-linter id: super-linter
uses: super-linter/super-linter/slim@v8.0.0 uses: super-linter/super-linter/slim@v7.2.1
env: env:
DEFAULT_BRANCH: main DEFAULT_BRANCH: main
FILTER_REGEX_EXCLUDE: dist/**/* FILTER_REGEX_EXCLUDE: dist/**/*
@@ -47,8 +47,4 @@ jobs:
VALIDATE_ALL_CODEBASE: true VALIDATE_ALL_CODEBASE: true
VALIDATE_JAVASCRIPT_STANDARD: false VALIDATE_JAVASCRIPT_STANDARD: false
VALIDATE_TYPESCRIPT_STANDARD: false VALIDATE_TYPESCRIPT_STANDARD: false
VALIDATE_TYPESCRIPT_ES: false
VALIDATE_JSCPD: false VALIDATE_JSCPD: false
- name: Run eslint
run: npm run lint:eslint
@@ -16,7 +16,7 @@ jobs:
steps: steps:
- name: Checking out - name: Checking out
uses: actions/checkout@v5 uses: actions/checkout@v4
- name: Publish - name: Publish
id: publish id: publish
uses: actions/[email protected] uses: actions/[email protected]
-6
View File
@@ -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].
+1 -1
View File
@@ -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
Generated Vendored
+2488 -3278
View File
File diff suppressed because it is too large Load Diff
+3502 -5089
View File
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -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": "2.4.0", "version": "2.2.1",
"author": "", "author": "",
"private": true, "private": true,
"homepage": "https://github.com/actions/attest", "homepage": "https://github.com/actions/attest",
@@ -71,29 +71,29 @@
"dependencies": { "dependencies": {
"@actions/attest": "^1.6.0", "@actions/attest": "^1.6.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.33.0", "@eslint/js": "^9.23.0",
"@sigstore/mock": "^0.11.0", "@sigstore/mock": "^0.10.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.2.1", "@types/node": "^22.13.14",
"@vercel/ncc": "^0.38.3", "@vercel/ncc": "^0.38.3",
"eslint": "^9.33.0", "eslint": "^9.23.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.5.3",
"ts-jest": "^29.4.1", "ts-jest": "^29.3.1",
"typescript": "^5.9.2", "typescript": "^5.8.2",
"typescript-eslint": "^8.39.1", "typescript-eslint": "^8.29.0",
"undici": "^5.29.0" "undici": "^5.28.5"
} }
} }
+2
View File
@@ -17,6 +17,7 @@ export const createAttestation = async (
sigstoreInstance: SigstoreInstance sigstoreInstance: SigstoreInstance
pushToRegistry: boolean pushToRegistry: boolean
githubToken: string githubToken: string
ociCompatMode: boolean
} }
): Promise<AttestResult> => { ): Promise<AttestResult> => {
// Sign provenance w/ Sigstore // Sign provenance w/ Sigstore
@@ -43,6 +44,7 @@ export const createAttestation = async (
'dev.sigstore.bundle.content': 'dsse-envelope', 'dev.sigstore.bundle.content': 'dsse-envelope',
'dev.sigstore.bundle.predicateType': predicate.type 'dev.sigstore.bundle.predicateType': predicate.type
}, },
compatibility: opts.ociCompatMode,
fetchOpts: { timeout: OCI_TIMEOUT, retry: OCI_RETRY } fetchOpts: { timeout: OCI_TIMEOUT, retry: OCI_RETRY }
}) })
+3
View File
@@ -18,6 +18,9 @@ const inputs: RunInputs = {
// undocumented -- not part of public interface // undocumented -- not part of public interface
privateSigning: ['true', 'True', 'TRUE', '1'].includes( privateSigning: ['true', 'True', 'TRUE', '1'].includes(
core.getInput('private-signing') core.getInput('private-signing')
),
ociCompatMode: ['true', 'True', 'TRUE', '1'].includes(
core.getInput('oci-compatibility-mode')
) )
} }
+3 -21
View File
@@ -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 & {
@@ -24,6 +23,7 @@ export type RunInputs = SubjectInputs &
githubToken: string githubToken: string
showSummary: boolean showSummary: boolean
privateSigning: boolean privateSigning: boolean
ociCompatMode: boolean
} }
/* istanbul ignore next */ /* istanbul ignore next */
@@ -69,7 +69,8 @@ export async function run(inputs: RunInputs): Promise<void> {
const att = await createAttestation(subjects, predicate, { const att = await createAttestation(subjects, predicate, {
sigstoreInstance, sigstoreInstance,
pushToRegistry: inputs.pushToRegistry, pushToRegistry: inputs.pushToRegistry,
githubToken: inputs.githubToken githubToken: inputs.githubToken,
ociCompatMode: inputs.ociCompatMode
}) })
logAttestation(subjects, att, sigstoreInstance) logAttestation(subjects, att, sigstoreInstance)
@@ -80,28 +81,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 +143,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 +158,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)
-1
View File
@@ -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",