diff --git a/pom.xml b/pom.xml
index 6eaabd2..856b680 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
org.jenkins-ci.plugins
plugin
- 3.28
+ 3.29
@@ -56,6 +56,7 @@
2.60.3
8
+ 1.3
@@ -75,7 +76,20 @@
org.jenkins-ci.plugins
credentials
- 2.1.5
+ 2.1.16
+
+
+
+ io.jenkins
+ configuration-as-code
+ ${configuration-as-code-plugin.version}
+ test
+
+
+ io.jenkins.configuration-as-code
+ configuration-as-code-support
+ ${configuration-as-code-plugin.version}
+ test
diff --git a/src/main/java/org/jenkinsci/plugins/plaincredentials/impl/FileCredentialsImpl.java b/src/main/java/org/jenkinsci/plugins/plaincredentials/impl/FileCredentialsImpl.java
index 6c2148c..ccdfa74 100644
--- a/src/main/java/org/jenkinsci/plugins/plaincredentials/impl/FileCredentialsImpl.java
+++ b/src/main/java/org/jenkinsci/plugins/plaincredentials/impl/FileCredentialsImpl.java
@@ -137,10 +137,10 @@ public FileCredentialsImpl(@CheckForNull CredentialsScope scope, @CheckForNull S
*/
@DataBoundConstructor
public FileCredentialsImpl(@CheckForNull CredentialsScope scope, @CheckForNull String id,
- @CheckForNull String description, @Nonnull FileItem file, @CheckForNull String fileName,
+ @CheckForNull String description, @CheckForNull FileItem file, @CheckForNull String fileName,
@CheckForNull SecretBytes secretBytes) throws IOException {
super(scope, id, description);
- String name = file.getName();
+ String name = file != null ? file.getName() : "";
if (name.length() > 0) {
this.fileName = name.replaceFirst("^.+[/\\\\]", "");
this.secretBytes = SecretBytes.fromBytes(file.get());
diff --git a/src/test/java/org/jenkinsci/plugins/plaincredentials/ConfigurationAsCodeTest.java b/src/test/java/org/jenkinsci/plugins/plaincredentials/ConfigurationAsCodeTest.java
new file mode 100644
index 0000000..677d286
--- /dev/null
+++ b/src/test/java/org/jenkinsci/plugins/plaincredentials/ConfigurationAsCodeTest.java
@@ -0,0 +1,33 @@
+package org.jenkinsci.plugins.plaincredentials;
+
+import com.cloudbees.plugins.credentials.CredentialsMatchers;
+import com.cloudbees.plugins.credentials.CredentialsProvider;
+import com.cloudbees.plugins.credentials.domains.DomainRequirement;
+import hudson.security.ACL;
+import io.jenkins.plugins.casc.ConfigurationAsCode;
+import org.apache.commons.io.IOUtils;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.jvnet.hudson.test.JenkinsRule;
+
+/**
+ * @author Nicolas De Loof
+ */
+public class ConfigurationAsCodeTest {
+
+ @Rule
+ public JenkinsRule j = new JenkinsRule();
+
+ @Test
+ public void should_configure_file_credentials() throws Exception {
+ ConfigurationAsCode.get().configure(getClass().getResource("ConfigurationAsCode.yaml").toString());
+ final FileCredentials credentials = CredentialsMatchers.firstOrNull(
+ CredentialsProvider.lookupCredentials(FileCredentials.class, j.jenkins, ACL.SYSTEM, (DomainRequirement) null),
+ CredentialsMatchers.withId("secret-file"));
+ Assert.assertNotNull(credentials);
+ Assert.assertEquals("Some secret file", credentials.getDescription());
+ Assert.assertEquals("my-secret-file", credentials.getFileName());
+ Assert.assertEquals("FOO_BAR", IOUtils.toString(credentials.getContent()));
+ }
+}
diff --git a/src/test/resources/org/jenkinsci/plugins/plaincredentials/ConfigurationAsCode.yaml b/src/test/resources/org/jenkinsci/plugins/plaincredentials/ConfigurationAsCode.yaml
new file mode 100644
index 0000000..14eb9b8
--- /dev/null
+++ b/src/test/resources/org/jenkinsci/plugins/plaincredentials/ConfigurationAsCode.yaml
@@ -0,0 +1,12 @@
+credentials:
+ system:
+ domainCredentials:
+ # global credentials
+ - credentials:
+ - file:
+ id: secret-file
+ scope: SYSTEM
+ description: "Some secret file"
+ fileName: my-secret-file
+ # FOO_BAR base64 encoded
+ secretBytes: Rk9PX0JBUg==