Skip to content

Commit 2ae8a11

Browse files
committed
Use the conformance token everywhere
Use the Untrusted GCP Beacon token provider dynamically in all tests and workflow examples, mostly avoiding dependency on ambient OIDC configuration in local development. Signed-off-by: Appu <appu@google.com>
1 parent 671f1b5 commit 2ae8a11

7 files changed

Lines changed: 28 additions & 19 deletions

File tree

.github/workflows/examples.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ jobs:
1717
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}-release
1818
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
1919

20-
permissions:
21-
id-token: write
22-
2320
steps:
2421
- name: Enable long paths in Git
2522
if: runner.os == 'Windows'

examples/hello-world/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Simple sigstore signing examples
44

55
These examples sign with sigstore (and PGP as required by Maven Central)
66

7+
In CI: These example use env `SIGSTORE_JAVA_ID_TOKEN` from test.sh to use a throwaway id token
8+
79
## gradle
810

911
```

sigstore-gradle/sigstore-gradle-sign-base-plugin/src/test/kotlin/dev/sigstore/gradle/SigstoreSignTest.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,18 @@
1717
package dev.sigstore.gradle
1818

1919
import dev.sigstore.testkit.BaseGradleTest
20-
import dev.sigstore.testkit.TestedGradle
2120
import dev.sigstore.testkit.TestedGradleAndSigstoreJava
22-
import dev.sigstore.testkit.TestedSigstoreJava
23-
import dev.sigstore.testkit.annotations.EnabledIfOidcExists
2421
import org.assertj.core.api.Assertions.assertThat
2522
import org.gradle.util.GradleVersion
2623
import org.junit.jupiter.params.ParameterizedTest
2724
import org.junit.jupiter.params.provider.MethodSource
2825

29-
@EnabledIfOidcExists
3026
class SigstoreSignTest: BaseGradleTest() {
3127
@ParameterizedTest
3228
@MethodSource("gradleAndSigstoreJavaVersions")
3329
fun `sign file`(case: TestedGradleAndSigstoreJava) {
30+
val oidcToken = java.net.URL("https://storage.googleapis.com/sigstore-conformance-testing-token/untrusted-testing-token.txt").readText().trim()
31+
gradleRunner.withEnvironment(System.getenv() + mapOf("JAVA_HOME" to TEST_JAVA_HOME, "SIGSTORE_JAVA_ID_TOKEN" to oidcToken))
3432
val destLine =
3533
if (case.gradle.version < GradleVersion.version("8.0"))
3634
"""outputFile = file("helloProps.txt")"""

sigstore-gradle/sigstore-gradle-sign-plugin/src/test/kotlin/dev/sigstore/gradle/RemoveSigstoreAscTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,12 @@ package dev.sigstore.gradle
1919
import dev.sigstore.testkit.BaseGradleTest
2020
import dev.sigstore.testkit.TestedGradle
2121
import dev.sigstore.testkit.TestedGradleAndSigstoreJava
22-
import dev.sigstore.testkit.annotations.EnabledIfOidcExists
2322
import org.assertj.core.api.Assertions.assertThat
2423
import org.assertj.core.api.SoftAssertions
2524
import org.gradle.util.GradleVersion
2625
import org.junit.jupiter.params.ParameterizedTest
2726
import org.junit.jupiter.params.provider.MethodSource
2827

29-
@EnabledIfOidcExists
3028
class RemoveSigstoreAscTest : BaseGradleTest() {
3129
companion object {
3230
@JvmStatic
@@ -102,6 +100,8 @@ class RemoveSigstoreAscTest : BaseGradleTest() {
102100
}
103101

104102
private fun prepareBuildScripts(case: TestedGradleAndSigstoreJava) {
103+
val oidcToken = java.net.URL("https://storage.googleapis.com/sigstore-conformance-testing-token/untrusted-testing-token.txt").readText().trim()
104+
gradleRunner.withEnvironment(System.getenv() + mapOf("JAVA_HOME" to TEST_JAVA_HOME, "SIGSTORE_JAVA_ID_TOKEN" to oidcToken))
105105
writeBuildGradle(
106106
"""
107107
plugins {

sigstore-gradle/sigstore-gradle-sign-plugin/src/test/kotlin/dev/sigstore/gradle/SigstorePublishSignTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@ package dev.sigstore.gradle
1818

1919
import dev.sigstore.testkit.BaseGradleTest
2020
import dev.sigstore.testkit.TestedGradleAndSigstoreJava
21-
import dev.sigstore.testkit.annotations.EnabledIfOidcExists
2221
import org.assertj.core.api.Assertions.assertThat
2322
import org.junit.jupiter.params.ParameterizedTest
2423
import org.junit.jupiter.params.provider.MethodSource
2524

26-
@EnabledIfOidcExists
2725
class SigstorePublishSignTest : BaseGradleTest() {
2826
@ParameterizedTest
2927
@MethodSource("gradleAndSigstoreJavaVersions")
3028
fun `sign file`(case: TestedGradleAndSigstoreJava) {
29+
val oidcToken = java.net.URL("https://storage.googleapis.com/sigstore-conformance-testing-token/untrusted-testing-token.txt").readText().trim()
30+
gradleRunner.withEnvironment(System.getenv() + mapOf("JAVA_HOME" to TEST_JAVA_HOME, "SIGSTORE_JAVA_ID_TOKEN" to oidcToken))
3131
writeBuildGradle(
3232
"""
3333
plugins {

sigstore-java/src/test/java/dev/sigstore/KeylessTest.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
import dev.sigstore.bundle.Bundle;
2020
import dev.sigstore.dsse.InTotoPayload;
2121
import dev.sigstore.json.JsonParseException;
22+
import dev.sigstore.oidc.client.OidcClients;
23+
import dev.sigstore.oidc.client.TokenStringOidcClient;
2224
import dev.sigstore.testkit.annotations.DisabledIfSkipStaging;
2325
import dev.sigstore.testkit.annotations.EnabledIfOidcExists;
2426
import dev.sigstore.testkit.annotations.OidcProviderType;
27+
import dev.sigstore.testkit.oidc.ConformanceTestingTokenProvider;
2528
import dev.sigstore.trustroot.ImmutableSigstoreSigningConfig;
2629
import dev.sigstore.trustroot.Service;
2730
import dev.sigstore.tuf.SigstoreTufClient;
@@ -50,6 +53,10 @@ public class KeylessTest {
5053
public static List<byte[]> artifactDigests;
5154
public static String payload;
5255

56+
private static final OidcClients CONFORMANCE_TOKEN_CLIENT = OidcClients.of(
57+
TokenStringOidcClient.from(
58+
ConformanceTestingTokenProvider.newProviderFromGcp()));
59+
5360
@BeforeAll
5461
public static void setupArtifact() throws IOException {
5562
artifactDigests = new ArrayList<>();
@@ -75,7 +82,7 @@ public static void setupArtifact() throws IOException {
7582

7683
@Test
7784
@EnabledIfOidcExists(provider = OidcProviderType.ANY)
78-
public void sign_production() throws Exception {
85+
public void sign_production_and_test_oidc() throws Exception {
7986
var signer = KeylessSigner.builder().sigstorePublicDefaults().build();
8087
var results = signer.sign(artifactDigests);
8188

@@ -93,7 +100,6 @@ public void sign_production() throws Exception {
93100
* Should be merged into "sign_production" above when ready.
94101
*/
95102
@Test
96-
@EnabledIfOidcExists(provider = OidcProviderType.ANY)
97103
public void sign_production_rekorV2() throws Exception {
98104
// TODO(#1033): Get Rekor v2 service from TUF signing config when in prod
99105
var prodTufClient = SigstoreTufClient.builder().usePublicGoodInstance().build();
@@ -107,6 +113,7 @@ public void sign_production_rekorV2() throws Exception {
107113
var signer =
108114
KeylessSigner.builder()
109115
.sigstorePublicDefaults()
116+
.forceCredentialProviders(CONFORMANCE_TOKEN_CLIENT)
110117
.signingConfigProvider(() -> signingConfig)
111118
.enableRekorV2(true)
112119
.build();
@@ -123,11 +130,14 @@ public void sign_production_rekorV2() throws Exception {
123130

124131
@ParameterizedTest
125132
@ValueSource(booleans = {true, false})
126-
@EnabledIfOidcExists(provider = OidcProviderType.ANY)
127133
@DisabledIfSkipStaging
128134
public void sign_staging(boolean enableRekorV2) throws Exception {
129135
var signer =
130-
KeylessSigner.builder().sigstoreStagingDefaults().enableRekorV2(enableRekorV2).build();
136+
KeylessSigner.builder()
137+
.sigstoreStagingDefaults()
138+
.forceCredentialProviders(CONFORMANCE_TOKEN_CLIENT)
139+
.enableRekorV2(enableRekorV2)
140+
.build();
131141
var results = signer.sign(artifactDigests);
132142
verifySigningResult(results, enableRekorV2);
133143

@@ -139,7 +149,6 @@ public void sign_staging(boolean enableRekorV2) throws Exception {
139149
}
140150

141151
@Test
142-
@EnabledIfOidcExists(provider = OidcProviderType.ANY)
143152
public void attest_production() throws Exception {
144153
// TODO(#1033): Get Rekor v2 service from TUF signing config when in prod
145154
var prodTufClient = SigstoreTufClient.builder().usePublicGoodInstance().build();
@@ -153,6 +162,7 @@ public void attest_production() throws Exception {
153162
var signer =
154163
KeylessSigner.builder()
155164
.sigstorePublicDefaults()
165+
.forceCredentialProviders(CONFORMANCE_TOKEN_CLIENT)
156166
.signingConfigProvider(() -> signingConfig)
157167
.enableRekorV2(true)
158168
.build();
@@ -172,10 +182,12 @@ public void attest_production() throws Exception {
172182
}
173183

174184
@Test
175-
@EnabledIfOidcExists(provider = OidcProviderType.ANY)
176185
@DisabledIfSkipStaging
177186
public void attest_staging() throws Exception {
178-
var signer = KeylessSigner.builder().sigstoreStagingDefaults().enableRekorV2(true).build();
187+
var signer = KeylessSigner.builder().sigstoreStagingDefaults()
188+
.forceCredentialProviders(CONFORMANCE_TOKEN_CLIENT)
189+
.enableRekorV2(true)
190+
.build();
179191
var result = signer.attest(payload);
180192

181193
Assertions.assertNotNull(result.getDsseEnvelope().get());

sigstore-maven-plugin/src/test/java/dev/sigstore/plugin/test/MavenTestProject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
/**
3030
* Initialize a test project verifier. You should use this to inject the right local repository into
31-
* settings.xml and the proejct version into pom.xml. Works with the test Maven projects in the
31+
* settings.xml and the project version into pom.xml. Works with the test Maven projects in the
3232
* {@code resources/maven/projects} directory.
3333
*/
3434
public class MavenTestProject {

0 commit comments

Comments
 (0)