@@ -18,18 +18,22 @@ import {X509Certificate} from 'crypto';
1818import fs from 'fs' ;
1919import path from 'path' ;
2020
21- import { signingEndpoints , SigstoreInstance } from '@actions/attest/lib/endpoints' ;
21+ import { Endpoints } from '@actions/attest/lib/endpoints' ;
2222import * as core from '@actions/core' ;
2323import { signPayload } from '@actions/attest/lib/sign' ;
2424import { bundleToJSON } from '@sigstore/bundle' ;
2525import { Attestation } from '@actions/attest' ;
2626import { Bundle } from '@sigstore/sign' ;
2727
28- import { Subject } from '../types/intoto/intoto' ;
28+ import { GitHub } from '../github' ;
29+
30+ import { MEDIATYPE_PAYLOAD as intotoMediatypePayload , Subject } from '../types/intoto/intoto' ;
31+ import { FULCIO_URL , REKOR_URL , SEARCH_URL , TSASERVER_URL } from '../types/sigstore/sigstore' ;
2932
3033export interface SignProvenanceBlobsOpts {
3134 localExportDir : string ;
3235 name ?: string ;
36+ noTransparencyLog ?: boolean ;
3337}
3438
3539export interface SignProvenanceBlobsResult extends Attestation {
@@ -38,18 +42,14 @@ export interface SignProvenanceBlobsResult extends Attestation {
3842}
3943
4044export class Sigstore {
41- private intotoPayloadType = 'application/vnd.in-toto+json' ;
42- private searchSigstoreURL = 'https://search.sigstore.dev' ;
43-
4445 public async signProvenanceBlobs ( opts : SignProvenanceBlobsOpts ) : Promise < Record < string , SignProvenanceBlobsResult > > {
4546 const result : Record < string , SignProvenanceBlobsResult > = { } ;
4647 try {
4748 if ( ! process . env . ACTIONS_ID_TOKEN_REQUEST_URL ) {
4849 throw new Error ( 'missing "id-token" permission. Please add "permissions: id-token: write" to your workflow.' ) ;
4950 }
5051
51- const sigstoreInstance : SigstoreInstance = 'public-good' ;
52- const endpoints = signingEndpoints ( sigstoreInstance ) ;
52+ const endpoints = this . signingEndpoints ( opts ) ;
5353 core . info ( `Using Sigstore signing endpoint: ${ endpoints . fulcioURL } ` ) ;
5454
5555 const provenanceBlobs = Sigstore . getProvenanceBlobs ( opts ) ;
@@ -65,7 +65,7 @@ export class Sigstore {
6565 const bundle = await signPayload (
6666 {
6767 body : blob ,
68- type : this . intotoPayloadType
68+ type : intotoMediatypePayload
6969 } ,
7070 endpoints
7171 ) ;
@@ -76,7 +76,7 @@ export class Sigstore {
7676 core . info ( ` - ${ subject . name } (${ digestAlg } :${ digestValue } )` ) ;
7777 }
7878 if ( attest . tlogID ) {
79- core . info ( `Attestation signature uploaded to Rekor transparency log: ${ this . searchSigstoreURL } ?logIndex=${ attest . tlogID } ` ) ;
79+ core . info ( `Attestation signature uploaded to Rekor transparency log: ${ SEARCH_URL } ?logIndex=${ attest . tlogID } ` ) ;
8080 }
8181 core . info ( `Writing Sigstore bundle to: ${ bundlePath } ` ) ;
8282 fs . writeFileSync ( bundlePath , JSON . stringify ( attest . bundle , null , 2 ) , {
@@ -95,6 +95,16 @@ export class Sigstore {
9595 return result ;
9696 }
9797
98+ private signingEndpoints ( opts : SignProvenanceBlobsOpts ) : Endpoints {
99+ const noTransparencyLog = opts . noTransparencyLog ?? GitHub . context . payload . repository ?. private ;
100+ core . info ( `Upload to transparency log: ${ noTransparencyLog ? 'disabled' : 'enabled' } ` ) ;
101+ return {
102+ fulcioURL : FULCIO_URL ,
103+ rekorURL : noTransparencyLog ? undefined : REKOR_URL ,
104+ tsaServerURL : TSASERVER_URL
105+ } ;
106+ }
107+
98108 private static getProvenanceBlobs ( opts : SignProvenanceBlobsOpts ) : Record < string , Buffer > {
99109 // For single platform build
100110 const singleProvenance = path . join ( opts . localExportDir , 'provenance.json' ) ;
0 commit comments