Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f1e5c092b | ||
|
|
2ee9744a24 | ||
|
|
023c0c6795 | ||
|
|
f2ceca496b | ||
|
|
4d300f7174 | ||
|
|
7db33ded55 |
@@ -28,11 +28,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
id: checkout
|
id: checkout
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/[email protected]
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
id: setup-node
|
id: setup-node
|
||||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version-file: .node-version
|
node-version-file: .node-version
|
||||||
cache: npm
|
cache: npm
|
||||||
@@ -60,7 +60,7 @@ jobs:
|
|||||||
- if: ${{ failure() && steps.diff.outcome == 'failure' }}
|
- if: ${{ failure() && steps.diff.outcome == 'failure' }}
|
||||||
name: Upload Artifact
|
name: Upload Artifact
|
||||||
id: upload
|
id: upload
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: dist
|
name: dist
|
||||||
path: dist/
|
path: dist/
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
id: setup-node
|
id: setup-node
|
||||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||||
with:
|
with:
|
||||||
node-version-file: .node-version
|
node-version-file: .node-version
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|||||||
@@ -32,19 +32,19 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
id: checkout
|
id: checkout
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/[email protected]
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
id: initialize
|
id: initialize
|
||||||
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
uses: github/codeql-action/init@v4
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
source-root: src
|
source-root: src
|
||||||
|
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
id: autobuild
|
id: autobuild
|
||||||
uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
uses: github/codeql-action/autobuild@v4
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
id: analyze
|
id: analyze
|
||||||
uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
|
uses: github/codeql-action/analyze@v4
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
name: GitHub Sigstore Prober
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
# run every 5 minutes, as often as Github Actions allows
|
|
||||||
- cron: '*/5 * * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prober:
|
|
||||||
if: github.repository_owner == 'actions'
|
|
||||||
permissions:
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
secrets: inherit
|
|
||||||
uses: ./.github/workflows/prober.yml
|
|
||||||
with:
|
|
||||||
sigstore: github
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
name: Public-Good Sigstore Prober
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
# run every 5 minutes, as often as Github Actions allows
|
|
||||||
- cron: '*/5 * * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prober:
|
|
||||||
if: github.repository_owner == 'actions'
|
|
||||||
permissions:
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
secrets: inherit
|
|
||||||
uses: ./.github/workflows/prober.yml
|
|
||||||
with:
|
|
||||||
sigstore: public-good
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
name: Prober Workflow
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
sigstore:
|
|
||||||
description: 'Which Sigstore instance to use for signing'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
probe:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
attestations: write
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Request OIDC Token
|
|
||||||
run: |
|
|
||||||
curl "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=nobody" \
|
|
||||||
-H "Authorization: bearer ${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" \
|
|
||||||
-H "Accept: application/json; api-version=2.0" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
--silent | jq -r '.value' | jq -R 'split(".") | .[0],.[1] | @base64d | fromjson'
|
|
||||||
|
|
||||||
- name: Create artifact
|
|
||||||
run: |
|
|
||||||
date > artifact
|
|
||||||
|
|
||||||
- name: Attest build provenance
|
|
||||||
uses: actions/attest@main
|
|
||||||
env:
|
|
||||||
INPUT_PRIVATE-SIGNING: ${{ inputs.sigstore == 'github' && 'true' || 'false' }}
|
|
||||||
with:
|
|
||||||
subject-path: artifact
|
|
||||||
|
|
||||||
- name: Verify build artifact
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
gh attestation verify ./artifact --owner "$GITHUB_REPOSITORY_OWNER"
|
|
||||||
|
|
||||||
- name: Upload build artifact
|
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
||||||
with:
|
|
||||||
path: "artifact"
|
|
||||||
|
|
||||||
- name: Report attestation prober success
|
|
||||||
if: ${{ success() }}
|
|
||||||
uses: masci/datadog@d7cb6cfc2ba13f7c2ae5227a26f2e2f42a7d179e # v2.0.2
|
|
||||||
with:
|
|
||||||
api-key: "${{ secrets.DATADOG_API_KEY }}"
|
|
||||||
service-checks: |
|
|
||||||
- check: "attestation-integration.actions.prober"
|
|
||||||
status: 0
|
|
||||||
host_name: github.com
|
|
||||||
tags:
|
|
||||||
- "catalog_service:${{ secrets.CATALOG_SERVICE }}"
|
|
||||||
- "service:${{ secrets.CATALOG_SERVICE }}"
|
|
||||||
- "stamp:${{ secrets.STAMP }}"
|
|
||||||
- "env:production"
|
|
||||||
- "repo:${{ github.repository }}"
|
|
||||||
- "team:${{ secrets.TEAM }}"
|
|
||||||
- "sigstore:${{ inputs.sigstore }}"
|
|
||||||
|
|
||||||
- name: Report attestation prober failure
|
|
||||||
if: ${{ failure() }}
|
|
||||||
uses: masci/datadog@d7cb6cfc2ba13f7c2ae5227a26f2e2f42a7d179e # v2.0.2
|
|
||||||
with:
|
|
||||||
api-key: "${{ secrets.DATADOG_API_KEY }}"
|
|
||||||
service-checks: |
|
|
||||||
- check: "attestation-integration.actions.prober"
|
|
||||||
message: "${{ github.repository_owner }} failed prober check"
|
|
||||||
status: 2
|
|
||||||
host_name: github.com
|
|
||||||
tags:
|
|
||||||
- "catalog_service:${{ secrets.CATALOG_SERVICE }}"
|
|
||||||
- "service:${{ secrets.CATALOG_SERVICE }}"
|
|
||||||
- "stamp:${{ secrets.STAMP }}"
|
|
||||||
- "env:production"
|
|
||||||
- "repo:${{ github.repository }}"
|
|
||||||
- "team:${{ secrets.TEAM }}"
|
|
||||||
- "sigstore:${{ inputs.sigstore }}"
|
|
||||||
@@ -48,11 +48,11 @@ the inputs you provide:
|
|||||||
|
|
||||||
<!-- markdownlint-disable MD013 -->
|
<!-- markdownlint-disable MD013 -->
|
||||||
|
|
||||||
| Mode | When Used | Description |
|
| Mode | When Used | Description |
|
||||||
| -------------- | ------------------------------------------------------ | ----------------------------------------------- |
|
| -------------- | ------------------------------------------------------ | ------------------------------------------------ |
|
||||||
| **Provenance** | No `sbom-path` or predicate inputs | Auto-generates [SLSA build provenance][10] |
|
| **Provenance** | No `sbom-path` or predicate inputs | Auto-generates [SLSA build provenance][10] |
|
||||||
| **SBOM** | `sbom-path` is provided | Creates attestation from SPDX or CycloneDX SBOM |
|
| **SBOM** | `sbom-path` is provided | Creates attestation from SPDX or CycloneDX SBOM |
|
||||||
| **Custom** | `predicate-type`/`predicate`/`predicate-path` provided | User-supplied predicate |
|
| **Custom** | `predicate-type`/`predicate`/`predicate-path` provided | User-supplied predicate |
|
||||||
|
|
||||||
<!-- markdownlint-enable MD013 -->
|
<!-- markdownlint-enable MD013 -->
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ See [action.yml](action.yml)
|
|||||||
<!-- markdownlint-disable MD013 -->
|
<!-- markdownlint-disable MD013 -->
|
||||||
|
|
||||||
| Name | Description | Example |
|
| Name | Description | Example |
|
||||||
| -------------------- | -------------------------------------------------------------- | ------------------------------------------------ |
|
| ------------------- | -------------------------------------------------------------- | ------------------------------------------------ |
|
||||||
| `attestation-id` | GitHub ID for the attestation | `123456` |
|
| `attestation-id` | GitHub ID for the attestation | `123456` |
|
||||||
| `attestation-url` | URL for the attestation summary | `https://github.com/foo/bar/attestations/123456` |
|
| `attestation-url` | URL for the attestation summary | `https://github.com/foo/bar/attestations/123456` |
|
||||||
| `bundle-path` | Absolute path to the file containing the generated attestation | `/tmp/attestation.json` |
|
| `bundle-path` | Absolute path to the file containing the generated attestation | `/tmp/attestation.json` |
|
||||||
@@ -320,25 +320,9 @@ fully-qualified image name (e.g. "ghcr.io/user/app" or
|
|||||||
"acme.azurecr.io/user/app"). Do NOT include a tag as part of the image name --
|
"acme.azurecr.io/user/app"). Do NOT include a tag as part of the image name --
|
||||||
the specific image being attested is identified by the supplied digest.
|
the specific image being attested is identified by the supplied digest.
|
||||||
|
|
||||||
#### Artifact Metadata Storage Records
|
If the `push-to-registry` option is set to true, the Action will also
|
||||||
|
emit an Artifact Metadata Storage Record. If you do not want to emit a
|
||||||
When generating a build provenance attestation, if the `push-to-registry` option
|
storage record, set `create-storage-record` to `false`.
|
||||||
is set to true, the Action will also emit an
|
|
||||||
[Artifact Metadata Storage Record](https://docs.github.com/en/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-artifact-metadata-storage-record).
|
|
||||||
Storage records enrich artifact metadata by capturing storage related details,
|
|
||||||
such as which registry an image is hosted on and whether it's marked as active.
|
|
||||||
|
|
||||||
If you do not want to emit a storage record, set `create-storage-record` to
|
|
||||||
`false`.
|
|
||||||
|
|
||||||
> **NOTE**: Storage records can only be created for artifacts built from
|
|
||||||
> [organization-owned](https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/about-organizations)
|
|
||||||
> repositories.
|
|
||||||
|
|
||||||
Artifacts associated with a storage record can be viewed by navigating to the
|
|
||||||
`Linked Artifacts` page in your organization:
|
|
||||||
`https://github.com/orgs/YOUR_ORG/artifacts` (replace `YOUR_ORG` with your
|
|
||||||
organization name).
|
|
||||||
|
|
||||||
> **NOTE**: When pushing to Docker Hub, please use "docker.io" as the registry
|
> **NOTE**: When pushing to Docker Hub, please use "docker.io" as the registry
|
||||||
> portion of the image name.
|
> portion of the image name.
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ describe('index', () => {
|
|||||||
'subject-name': 'my-artifact',
|
'subject-name': 'my-artifact',
|
||||||
'subject-digest': '',
|
'subject-digest': '',
|
||||||
'subject-checksums': '',
|
'subject-checksums': '',
|
||||||
'subject-version': '',
|
|
||||||
'predicate-type': 'https://example.com/predicate',
|
'predicate-type': 'https://example.com/predicate',
|
||||||
predicate: '{}',
|
predicate: '{}',
|
||||||
'predicate-path': '',
|
'predicate-path': '',
|
||||||
@@ -58,7 +57,6 @@ describe('index', () => {
|
|||||||
subjectName: 'my-artifact',
|
subjectName: 'my-artifact',
|
||||||
subjectDigest: '',
|
subjectDigest: '',
|
||||||
subjectChecksums: '',
|
subjectChecksums: '',
|
||||||
subjectVersion: '',
|
|
||||||
predicateType: 'https://example.com/predicate',
|
predicateType: 'https://example.com/predicate',
|
||||||
predicate: '{}',
|
predicate: '{}',
|
||||||
predicatePath: '',
|
predicatePath: '',
|
||||||
|
|||||||
@@ -145,8 +145,7 @@ describe('createAttestation', () => {
|
|||||||
const storageOpts = {
|
const storageOpts = {
|
||||||
...defaultOpts,
|
...defaultOpts,
|
||||||
pushToRegistry: true,
|
pushToRegistry: true,
|
||||||
createStorageRecord: true,
|
createStorageRecord: true
|
||||||
subjectVersion: '1.2.3'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
it('should create storage record when enabled and owner is org', async () => {
|
it('should create storage record when enabled and owner is org', async () => {
|
||||||
@@ -158,27 +157,10 @@ describe('createAttestation', () => {
|
|||||||
storageOpts
|
storageOpts
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(mockCreateStorageRecord).toHaveBeenCalledWith(
|
expect(mockCreateStorageRecord).toHaveBeenCalled()
|
||||||
expect.objectContaining({ version: '1.2.3' }),
|
|
||||||
expect.anything(),
|
|
||||||
expect.anything()
|
|
||||||
)
|
|
||||||
expect(result.storageRecordIds).toEqual([12345])
|
expect(result.storageRecordIds).toEqual([12345])
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should omit version from storage record when subjectVersion is empty', async () => {
|
|
||||||
const subjects = [TEST_SUBJECT_WITH_REGISTRY]
|
|
||||||
const opts = { ...storageOpts, subjectVersion: '' }
|
|
||||||
|
|
||||||
await createAttestation(subjects, TEST_PREDICATE, opts)
|
|
||||||
|
|
||||||
expect(mockCreateStorageRecord).toHaveBeenCalledWith(
|
|
||||||
expect.objectContaining({ version: undefined }),
|
|
||||||
expect.anything(),
|
|
||||||
expect.anything()
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should skip storage record when owner is User', async () => {
|
it('should skip storage record when owner is User', async () => {
|
||||||
mockGetOctokit.mockReturnValue(createOctokitMock('User'))
|
mockGetOctokit.mockReturnValue(createOctokitMock('User'))
|
||||||
const subjects = [TEST_SUBJECT_WITH_REGISTRY]
|
const subjects = [TEST_SUBJECT_WITH_REGISTRY]
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ const defaultInputs: RunInputs = {
|
|||||||
subjectChecksums: '',
|
subjectChecksums: '',
|
||||||
pushToRegistry: false,
|
pushToRegistry: false,
|
||||||
createStorageRecord: false,
|
createStorageRecord: false,
|
||||||
subjectVersion: '',
|
|
||||||
showSummary: false,
|
showSummary: false,
|
||||||
githubToken: 'test-token',
|
githubToken: 'test-token',
|
||||||
privateSigning: false
|
privateSigning: false
|
||||||
|
|||||||
@@ -30,11 +30,6 @@ inputs:
|
|||||||
attestation. Must specify exactly one of "subject-path", "subject-digest",
|
attestation. Must specify exactly one of "subject-path", "subject-digest",
|
||||||
or "subject-checksums".
|
or "subject-checksums".
|
||||||
required: false
|
required: false
|
||||||
subject-version:
|
|
||||||
description: >
|
|
||||||
Version of the subject for the attestation. Only used when
|
|
||||||
"push-to-registry" and "create-storage-record" are both set to true.
|
|
||||||
required: false
|
|
||||||
sbom-path:
|
sbom-path:
|
||||||
description: >
|
description: >
|
||||||
Path to the JSON-formatted SBOM file (SPDX or CycloneDX) to attest.
|
Path to the JSON-formatted SBOM file (SPDX or CycloneDX) to attest.
|
||||||
|
|||||||
+3
-47
@@ -108507,27 +108507,6 @@ exports.LRUCache = LRUCache;
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 86705:
|
|
||||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
||||||
|
|
||||||
// This file exists as a CommonJS module to read the version from package.json.
|
|
||||||
// In an ESM package, using `require()` directly in .ts files requires disabling
|
|
||||||
// ESLint rules and doesn't work reliably across all Node.js versions.
|
|
||||||
// By keeping this as a .cjs file, we can use require() naturally and export
|
|
||||||
// the version for the ESM modules to import.
|
|
||||||
const packageJson = __nccwpck_require__(47849)
|
|
||||||
module.exports = {version: packageJson.version}
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 47849:
|
|
||||||
/***/ ((module) => {
|
|
||||||
|
|
||||||
module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/attest","version":"3.2.0","description":"Actions attestation lib","keywords":["github","actions","attestation"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/attest","license":"MIT","type":"module","main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"directories":{"lib":"lib","test":"__tests__"},"files":["lib"],"publishConfig":{"access":"public","provenance":true},"repository":{"type":"git","url":"git+https://github.com/actions/toolkit.git","directory":"packages/attest"},"scripts":{"test":"echo \\"Error: run tests from root\\" && exit 1","tsc":"tsc && cp src/internal/package-version.cjs lib/internal/"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"devDependencies":{"@sigstore/mock":"^0.10.0","@sigstore/rekor-types":"^3.0.0","@types/jsonwebtoken":"^9.0.6","nock":"^13.5.1","undici":"^6.23.0"},"dependencies":{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@actions/http-client":"^4.0.0","@octokit/plugin-retry":"^8.0.3","@sigstore/bundle":"^3.1.0","@sigstore/sign":"^3.1.0","jose":"^5.10.0"}}');
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 4592:
|
/***/ 4592:
|
||||||
/***/ ((module) => {
|
/***/ ((module) => {
|
||||||
|
|
||||||
@@ -115947,22 +115926,6 @@ function retry(octokit, octokitOptions) {
|
|||||||
retry.VERSION = plugin_retry_dist_bundle_VERSION;
|
retry.VERSION = plugin_retry_dist_bundle_VERSION;
|
||||||
|
|
||||||
|
|
||||||
// EXTERNAL MODULE: ./node_modules/@actions/attest/lib/internal/package-version.cjs
|
|
||||||
var package_version = __nccwpck_require__(86705);
|
|
||||||
;// CONCATENATED MODULE: ./node_modules/@actions/attest/lib/internal/utils.js
|
|
||||||
|
|
||||||
const utils_getUserAgent = () => {
|
|
||||||
const baseUserAgent = `@actions/attest-${package_version.version}`;
|
|
||||||
const orchId = process.env['ACTIONS_ORCHESTRATION_ID'];
|
|
||||||
if (orchId) {
|
|
||||||
// Sanitize the orchestration ID to ensure it contains only valid characters
|
|
||||||
// Valid characters: 0-9, a-z, _, -, .
|
|
||||||
const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, '_');
|
|
||||||
return `${baseUserAgent} actions_orchestration_id/${sanitizedId}`;
|
|
||||||
}
|
|
||||||
return baseUserAgent;
|
|
||||||
};
|
|
||||||
//# sourceMappingURL=utils.js.map
|
|
||||||
;// CONCATENATED MODULE: ./node_modules/@actions/attest/lib/artifactMetadata.js
|
;// CONCATENATED MODULE: ./node_modules/@actions/attest/lib/artifactMetadata.js
|
||||||
var artifactMetadata_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var artifactMetadata_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
@@ -115986,7 +115949,6 @@ var __rest = (undefined && undefined.__rest) || function (s, e) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const CREATE_STORAGE_RECORD_REQUEST = 'POST /orgs/{owner}/artifacts/metadata/storage-record';
|
const CREATE_STORAGE_RECORD_REQUEST = 'POST /orgs/{owner}/artifacts/metadata/storage-record';
|
||||||
const DEFAULT_RETRY_COUNT = 5;
|
const DEFAULT_RETRY_COUNT = 5;
|
||||||
/**
|
/**
|
||||||
@@ -116004,9 +115966,8 @@ function createStorageRecord(artifactOptions, packageRegistryOptions, token, ret
|
|||||||
return artifactMetadata_awaiter(this, void 0, void 0, function* () {
|
return artifactMetadata_awaiter(this, void 0, void 0, function* () {
|
||||||
const retries = retryAttempts !== null && retryAttempts !== void 0 ? retryAttempts : DEFAULT_RETRY_COUNT;
|
const retries = retryAttempts !== null && retryAttempts !== void 0 ? retryAttempts : DEFAULT_RETRY_COUNT;
|
||||||
const octokit = getOctokit(token, { retry: { retries } }, retry);
|
const octokit = getOctokit(token, { retry: { retries } }, retry);
|
||||||
const headersWithUserAgent = Object.assign({ 'User-Agent': utils_getUserAgent() }, headers);
|
|
||||||
try {
|
try {
|
||||||
const response = yield octokit.request(CREATE_STORAGE_RECORD_REQUEST, Object.assign({ owner: github_context.repo.owner, headers: headersWithUserAgent }, buildRequestParams(artifactOptions, packageRegistryOptions)));
|
const response = yield octokit.request(CREATE_STORAGE_RECORD_REQUEST, Object.assign({ owner: github_context.repo.owner, headers }, buildRequestParams(artifactOptions, packageRegistryOptions)));
|
||||||
const data = typeof response.data == 'string'
|
const data = typeof response.data == 'string'
|
||||||
? JSON.parse(response.data)
|
? JSON.parse(response.data)
|
||||||
: response.data;
|
: response.data;
|
||||||
@@ -116160,7 +116121,6 @@ var store_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _ar
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const CREATE_ATTESTATION_REQUEST = 'POST /repos/{owner}/{repo}/attestations';
|
const CREATE_ATTESTATION_REQUEST = 'POST /repos/{owner}/{repo}/attestations';
|
||||||
const store_DEFAULT_RETRY_COUNT = 5;
|
const store_DEFAULT_RETRY_COUNT = 5;
|
||||||
/**
|
/**
|
||||||
@@ -116174,12 +116134,11 @@ const writeAttestation = (attestation_1, token_1, ...args_1) => store_awaiter(vo
|
|||||||
var _a;
|
var _a;
|
||||||
const retries = (_a = options.retry) !== null && _a !== void 0 ? _a : store_DEFAULT_RETRY_COUNT;
|
const retries = (_a = options.retry) !== null && _a !== void 0 ? _a : store_DEFAULT_RETRY_COUNT;
|
||||||
const octokit = getOctokit(token, { retry: { retries } }, retry);
|
const octokit = getOctokit(token, { retry: { retries } }, retry);
|
||||||
const headers = Object.assign({ 'User-Agent': utils_getUserAgent() }, options.headers);
|
|
||||||
try {
|
try {
|
||||||
const response = yield octokit.request(CREATE_ATTESTATION_REQUEST, {
|
const response = yield octokit.request(CREATE_ATTESTATION_REQUEST, {
|
||||||
owner: github_context.repo.owner,
|
owner: github_context.repo.owner,
|
||||||
repo: github_context.repo.repo,
|
repo: github_context.repo.repo,
|
||||||
headers,
|
headers: options.headers,
|
||||||
bundle: attestation
|
bundle: attestation
|
||||||
});
|
});
|
||||||
const data = typeof response.data == 'string'
|
const data = typeof response.data == 'string'
|
||||||
@@ -120899,8 +120858,7 @@ const createAttestation = async (subjects, predicate, opts) => {
|
|||||||
const registryUrl = getRegistryURL(subject.name);
|
const registryUrl = getRegistryURL(subject.name);
|
||||||
const artifactOpts = {
|
const artifactOpts = {
|
||||||
name: subject.name,
|
name: subject.name,
|
||||||
digest: subjectDigest,
|
digest: subjectDigest
|
||||||
version: opts.subjectVersion || undefined
|
|
||||||
};
|
};
|
||||||
const packageRegistryOpts = {
|
const packageRegistryOpts = {
|
||||||
registryUrl
|
registryUrl
|
||||||
@@ -121158,7 +121116,6 @@ async function run(inputs) {
|
|||||||
sigstoreInstance,
|
sigstoreInstance,
|
||||||
pushToRegistry: inputs.pushToRegistry,
|
pushToRegistry: inputs.pushToRegistry,
|
||||||
createStorageRecord: inputs.createStorageRecord,
|
createStorageRecord: inputs.createStorageRecord,
|
||||||
subjectVersion: inputs.subjectVersion,
|
|
||||||
githubToken: inputs.githubToken
|
githubToken: inputs.githubToken
|
||||||
});
|
});
|
||||||
logAttestation(subjects, att, sigstoreInstance);
|
logAttestation(subjects, att, sigstoreInstance);
|
||||||
@@ -121300,7 +121257,6 @@ const inputs = {
|
|||||||
predicatePath: getInput('predicate-path'),
|
predicatePath: getInput('predicate-path'),
|
||||||
pushToRegistry: getBooleanInput('push-to-registry'),
|
pushToRegistry: getBooleanInput('push-to-registry'),
|
||||||
createStorageRecord: getBooleanInput('create-storage-record'),
|
createStorageRecord: getBooleanInput('create-storage-record'),
|
||||||
subjectVersion: getInput('subject-version'),
|
|
||||||
showSummary: getBooleanInput('show-summary'),
|
showSummary: getBooleanInput('show-summary'),
|
||||||
githubToken: getInput('github-token'),
|
githubToken: getInput('github-token'),
|
||||||
// undocumented -- not part of public interface
|
// undocumented -- not part of public interface
|
||||||
|
|||||||
Generated
+575
-532
File diff suppressed because it is too large
Load Diff
+12
-12
@@ -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": "4.1.0",
|
"version": "3.2.0",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/attest": "^3.2.0",
|
"@actions/attest": "^3.0.0",
|
||||||
"@actions/core": "^3.0.0",
|
"@actions/core": "^3.0.0",
|
||||||
"@actions/github": "^9.0.0",
|
"@actions/github": "^9.0.0",
|
||||||
"@actions/glob": "^0.6.1",
|
"@actions/glob": "^0.6.1",
|
||||||
@@ -87,23 +87,23 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.39.2",
|
"@eslint/js": "^9.39.2",
|
||||||
"@jest/globals": "^30.3.0",
|
"@jest/globals": "^30.2.0",
|
||||||
"@sigstore/mock": "^0.12.0",
|
"@sigstore/mock": "^0.11.0",
|
||||||
"@types/jest": "^30.0.0",
|
"@types/jest": "^30.0.0",
|
||||||
"@types/make-fetch-happen": "^10.0.4",
|
"@types/make-fetch-happen": "^10.0.4",
|
||||||
"@types/node": "^25.6.0",
|
"@types/node": "^25.2.0",
|
||||||
"@vercel/ncc": "^0.38.4",
|
"@vercel/ncc": "^0.38.4",
|
||||||
"eslint": "^9.39.2",
|
"eslint": "^9.39.2",
|
||||||
"eslint-plugin-import": "^2.32.0",
|
"eslint-plugin-import": "^2.32.0",
|
||||||
"eslint-plugin-jest": "^29.15.2",
|
"eslint-plugin-jest": "^29.12.1",
|
||||||
"jest": "^30.3.0",
|
"jest": "^30.2.0",
|
||||||
"js-yaml": "^4.1.1",
|
"js-yaml": "^4.1.1",
|
||||||
"markdownlint-cli": "^0.48.0",
|
"markdownlint-cli": "^0.47.0",
|
||||||
"nock": "^13.5.6",
|
"nock": "^13.5.6",
|
||||||
"prettier": "^3.8.3",
|
"prettier": "^3.8.1",
|
||||||
"ts-jest": "^29.4.9",
|
"ts-jest": "^29.4.6",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
"typescript-eslint": "^8.58.2",
|
"typescript-eslint": "^8.54.0",
|
||||||
"undici": "^7.24.4"
|
"undici": "^7.20.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -26,7 +26,6 @@ export const createAttestation = async (
|
|||||||
sigstoreInstance: SigstoreInstance
|
sigstoreInstance: SigstoreInstance
|
||||||
pushToRegistry: boolean
|
pushToRegistry: boolean
|
||||||
createStorageRecord: boolean
|
createStorageRecord: boolean
|
||||||
subjectVersion?: string
|
|
||||||
githubToken: string
|
githubToken: string
|
||||||
}
|
}
|
||||||
): Promise<AttestResult> => {
|
): Promise<AttestResult> => {
|
||||||
@@ -78,8 +77,7 @@ export const createAttestation = async (
|
|||||||
const registryUrl = getRegistryURL(subject.name)
|
const registryUrl = getRegistryURL(subject.name)
|
||||||
const artifactOpts = {
|
const artifactOpts = {
|
||||||
name: subject.name,
|
name: subject.name,
|
||||||
digest: subjectDigest,
|
digest: subjectDigest
|
||||||
version: opts.subjectVersion || undefined
|
|
||||||
}
|
}
|
||||||
const packageRegistryOpts = {
|
const packageRegistryOpts = {
|
||||||
registryUrl
|
registryUrl
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ const inputs: RunInputs = {
|
|||||||
predicatePath: core.getInput('predicate-path'),
|
predicatePath: core.getInput('predicate-path'),
|
||||||
pushToRegistry: core.getBooleanInput('push-to-registry'),
|
pushToRegistry: core.getBooleanInput('push-to-registry'),
|
||||||
createStorageRecord: core.getBooleanInput('create-storage-record'),
|
createStorageRecord: core.getBooleanInput('create-storage-record'),
|
||||||
subjectVersion: core.getInput('subject-version'),
|
|
||||||
showSummary: core.getBooleanInput('show-summary'),
|
showSummary: core.getBooleanInput('show-summary'),
|
||||||
githubToken: core.getInput('github-token'),
|
githubToken: core.getInput('github-token'),
|
||||||
// undocumented -- not part of public interface
|
// undocumented -- not part of public interface
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ export type RunInputs = SubjectInputs &
|
|||||||
SBOMInputs & {
|
SBOMInputs & {
|
||||||
pushToRegistry: boolean
|
pushToRegistry: boolean
|
||||||
createStorageRecord: boolean
|
createStorageRecord: boolean
|
||||||
subjectVersion: string
|
|
||||||
githubToken: string
|
githubToken: string
|
||||||
showSummary: boolean
|
showSummary: boolean
|
||||||
privateSigning: boolean
|
privateSigning: boolean
|
||||||
@@ -98,7 +97,6 @@ export async function run(inputs: RunInputs): Promise<void> {
|
|||||||
sigstoreInstance,
|
sigstoreInstance,
|
||||||
pushToRegistry: inputs.pushToRegistry,
|
pushToRegistry: inputs.pushToRegistry,
|
||||||
createStorageRecord: inputs.createStorageRecord,
|
createStorageRecord: inputs.createStorageRecord,
|
||||||
subjectVersion: inputs.subjectVersion,
|
|
||||||
githubToken: inputs.githubToken
|
githubToken: inputs.githubToken
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user