diff --git a/packages/attest/RELEASES.md b/packages/attest/RELEASES.md index cf260991..b2862d72 100644 --- a/packages/attest/RELEASES.md +++ b/packages/attest/RELEASES.md @@ -1,5 +1,9 @@ # @actions/attest Releases +## 3.2.0 + +- Add custom user-agent for more API calls [#2321](https://github.com/actions/toolkit/pull/2321) + ## 3.1.0 - Add support for `ACTIONS_ORCHESTRATION_ID` in user-agent [#2320](https://github.com/actions/toolkit/pull/2320) diff --git a/packages/attest/package-lock.json b/packages/attest/package-lock.json index cc3bcdc0..b09aab32 100644 --- a/packages/attest/package-lock.json +++ b/packages/attest/package-lock.json @@ -1,12 +1,12 @@ { "name": "@actions/attest", - "version": "3.0.0", + "version": "3.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@actions/attest", - "version": "3.0.0", + "version": "3.2.0", "license": "MIT", "dependencies": { "@actions/core": "^3.0.0", diff --git a/packages/attest/package.json b/packages/attest/package.json index 367d0761..0f739f5d 100644 --- a/packages/attest/package.json +++ b/packages/attest/package.json @@ -1,6 +1,6 @@ { "name": "@actions/attest", - "version": "3.1.0", + "version": "3.2.0", "description": "Actions attestation lib", "keywords": [ "github", @@ -36,7 +36,7 @@ }, "scripts": { "test": "echo \"Error: run tests from root\" && exit 1", - "tsc": "tsc && cp src/package-version.cjs lib/" + "tsc": "tsc && cp src/internal/package-version.cjs lib/internal/" }, "bugs": { "url": "https://github.com/actions/toolkit/issues" diff --git a/packages/attest/src/artifactMetadata.ts b/packages/attest/src/artifactMetadata.ts index a01d4b39..c797dde1 100644 --- a/packages/attest/src/artifactMetadata.ts +++ b/packages/attest/src/artifactMetadata.ts @@ -1,6 +1,7 @@ import * as github from '@actions/github' import {retry} from '@octokit/plugin-retry' import {RequestHeaders} from '@octokit/types' +import {getUserAgent} from './internal/utils.js' const CREATE_STORAGE_RECORD_REQUEST = 'POST /orgs/{owner}/artifacts/metadata/storage-record' @@ -52,10 +53,16 @@ export async function createStorageRecord( ): Promise { const retries = retryAttempts ?? DEFAULT_RETRY_COUNT const octokit = github.getOctokit(token, {retry: {retries}}, retry) + + const headersWithUserAgent = { + 'User-Agent': getUserAgent(), + ...headers + } + try { const response = await octokit.request(CREATE_STORAGE_RECORD_REQUEST, { owner: github.context.repo.owner, - headers, + headers: headersWithUserAgent, ...buildRequestParams(artifactOptions, packageRegistryOptions) }) diff --git a/packages/attest/src/package-version.cjs b/packages/attest/src/internal/package-version.cjs similarity index 88% rename from packages/attest/src/package-version.cjs rename to packages/attest/src/internal/package-version.cjs index 8982a227..d17bd208 100644 --- a/packages/attest/src/package-version.cjs +++ b/packages/attest/src/internal/package-version.cjs @@ -3,5 +3,5 @@ // 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 = require('../package.json') +const packageJson = require('../../package.json') module.exports = {version: packageJson.version} diff --git a/packages/attest/src/internal/utils.ts b/packages/attest/src/internal/utils.ts new file mode 100644 index 00000000..33b68d75 --- /dev/null +++ b/packages/attest/src/internal/utils.ts @@ -0,0 +1,15 @@ +import {version} from './package-version.cjs' + +export const getUserAgent = (): string => { + const baseUserAgent = `@actions/attest-${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 +} diff --git a/packages/attest/src/store.ts b/packages/attest/src/store.ts index dc823bd1..dcddbea8 100644 --- a/packages/attest/src/store.ts +++ b/packages/attest/src/store.ts @@ -1,7 +1,7 @@ import * as github from '@actions/github' import {retry} from '@octokit/plugin-retry' import {RequestHeaders} from '@octokit/types' -import {version} from './package-version.cjs' +import {getUserAgent} from './internal/utils.js' const CREATE_ATTESTATION_REQUEST = 'POST /repos/{owner}/{repo}/attestations' const DEFAULT_RETRY_COUNT = 5 @@ -52,17 +52,3 @@ export const writeAttestation = async ( throw new Error(`Failed to persist attestation: ${message}`) } } - -const getUserAgent = (): string => { - const baseUserAgent = `@actions/attest-${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 -}