Skip to content

Commit 09699fc

Browse files
authored
Add helmoci repository (#391)
1 parent e7537b7 commit 09699fc

File tree

10 files changed

+165
-5
lines changed

10 files changed

+165
-5
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.jfrog.artifactory.client.model.repository.settings;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
5+
@JsonIgnoreProperties(ignoreUnknown = true)
6+
public interface HelmOciRepositorySettings extends DockerRepositorySettings {
7+
8+
}

services/src/main/java/org/jfrog/artifactory/client/impl/jackson/RepositorySettingsMixIn.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
@JsonSubTypes.Type(value = CondaRepositorySettingsImpl.class, name = "conda"),
4242
@JsonSubTypes.Type(value = PuppetRepositorySettingsImpl.class, name = "puppet"),
4343
@JsonSubTypes.Type(value = HelmRepositorySettingsImpl.class, name = "helm"),
44+
@JsonSubTypes.Type(value = HelmOciRepositorySettingsImpl.class, name = "helmoci"),
4445
@JsonSubTypes.Type(value = GoRepositorySettingsImpl.class, name = "go"),
4546
@JsonSubTypes.Type(value = CargoRepositorySettingsImpl.class, name = "cargo"),
4647
@JsonSubTypes.Type(value = TerraformRepositorySettingsImpl.class, name = "terraform"),

services/src/main/java/org/jfrog/artifactory/client/model/impl/FederatedRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
public class FederatedRepositoryBuilderImpl extends NonVirtualRepositoryBuilderBase<FederatedRepositoryBuilder, FederatedRepository> implements FederatedRepositoryBuilder {
1818
private static Set<PackageType> federatedRepositorySupportedTypes = new HashSet<>(Arrays.asList(
19-
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, go, cargo, terraform, oci
19+
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci
2020
));
2121

2222
protected List<FederatedMember> members = new ArrayList<>();

services/src/main/java/org/jfrog/artifactory/client/model/impl/LocalRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818
public class LocalRepositoryBuilderImpl extends NonVirtualRepositoryBuilderBase<LocalRepositoryBuilder, LocalRepository> implements LocalRepositoryBuilder {
1919
private static Set<PackageType> localRepositorySupportedTypes = new HashSet<PackageType>(Arrays.asList(
20-
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, go, cargo, terraform, oci
20+
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, pypi, sbt, vagrant, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci
2121
));
2222

2323
protected LocalRepositoryBuilderImpl() {

services/src/main/java/org/jfrog/artifactory/client/model/impl/PackageTypeImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public enum PackageTypeImpl implements PackageType {
3131
chef,
3232
puppet,
3333
helm,
34+
helmoci,
3435
go,
3536
cargo,
3637
terraform,

services/src/main/java/org/jfrog/artifactory/client/model/impl/RemoteRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818
public class RemoteRepositoryBuilderImpl extends NonVirtualRepositoryBuilderBase<RemoteRepositoryBuilder, RemoteRepository> implements RemoteRepositoryBuilder {
1919
private static Set<PackageType> remoteRepositorySupportedTypes = new HashSet<PackageType>(Arrays.asList(
20-
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, p2, pypi, sbt, vcs, yum, rpm, composer, conan, chef, puppet, helm, go, cargo, terraform, oci
20+
bower, cocoapods, cran, conda, debian, docker, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, opkg, p2, pypi, sbt, vcs, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, cargo, terraform, oci
2121
));
2222

2323
private String url;

services/src/main/java/org/jfrog/artifactory/client/model/impl/VirtualRepositoryBuilderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
public class VirtualRepositoryBuilderImpl extends RepositoryBuilderBase<VirtualRepositoryBuilder, VirtualRepository> implements VirtualRepositoryBuilder {
1717
private static Set<PackageType> virtualRepositorySupportedTypes = new HashSet<PackageType>(Arrays.asList(
18-
bower, cran, conda, docker, debian, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, p2, pypi, sbt, yum, rpm, composer, conan, chef, puppet, helm, go, terraform, oci
18+
bower, cran, conda, docker, debian, gems, generic, gitlfs, gradle, ivy, maven, npm, nuget, p2, pypi, sbt, yum, rpm, composer, conan, chef, puppet, helm, helmoci, go, terraform, oci
1919
));
2020

2121
private Collection<String> repositories = Collections.emptyList();
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.jfrog.artifactory.client.model.repository.settings.impl;
2+
3+
import org.jfrog.artifactory.client.model.PackageType;
4+
import org.jfrog.artifactory.client.model.impl.PackageTypeImpl;
5+
import org.jfrog.artifactory.client.model.repository.settings.OciRepositorySettings;
6+
7+
public class HelmOciRepositorySettingsImpl extends DockerRepositorySettingsImpl implements OciRepositorySettings {
8+
public static String defaultLayout = "simple-default";
9+
10+
public PackageType getPackageType() {
11+
return PackageTypeImpl.helmoci;
12+
}
13+
14+
@Override
15+
public boolean equals(Object o) {
16+
if (!(o instanceof HelmOciRepositorySettingsImpl)) {
17+
return false;
18+
}
19+
return super.equals(o);
20+
}
21+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=2.18.0
1+
version=2.18.x-SNAPSHOT
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package org.jfrog.artifactory.client
2+
3+
import org.hamcrest.CoreMatchers
4+
import org.jfrog.artifactory.client.model.RepositoryType
5+
import org.jfrog.artifactory.client.model.repository.settings.RepositorySettings
6+
import org.jfrog.artifactory.client.model.repository.settings.docker.DockerApiVersion
7+
import org.jfrog.artifactory.client.model.repository.settings.impl.HelmOciRepositorySettingsImpl
8+
import org.testng.annotations.BeforeMethod
9+
import org.testng.annotations.Test
10+
11+
/**
12+
* test that client correctly sends and receives repository configuration with `helmoci` package type
13+
*
14+
*/
15+
class HelmOciPackageTypeRepositoryTests extends BaseRepositoryTests {
16+
17+
HelmOciPackageTypeRepositoryTests() {
18+
remoteRepoUrl = "https://registry-1.docker.io"
19+
}
20+
21+
@Override
22+
RepositorySettings getRepositorySettings(RepositoryType repositoryType) {
23+
def settings = new HelmOciRepositorySettingsImpl()
24+
25+
settings.with {
26+
// local
27+
dockerApiVersion = DockerApiVersion.V2
28+
dockerTagRetention = Math.abs(rnd.nextInt())
29+
30+
// remote
31+
enableTokenAuthentication = rnd.nextBoolean()
32+
listRemoteFolderItems = rnd.nextBoolean()
33+
}
34+
35+
return settings
36+
}
37+
38+
@BeforeMethod
39+
protected void setUp() {
40+
storeArtifactsLocallyInRemoteRepo = true
41+
super.setUp()
42+
}
43+
44+
@Test(groups = "helmOciPackageTypeRepo")
45+
void testOciLocalRepo() {
46+
artifactory.repositories().create(0, localRepo)
47+
def expectedSettings = localRepo.repositorySettings
48+
49+
def resp = artifactory.repository(localRepo.getKey()).get()
50+
assertThat(resp, CoreMatchers.notNullValue())
51+
assertThat(resp.repoLayoutRef, CoreMatchers.is(HelmOciRepositorySettingsImpl.defaultLayout))
52+
resp.getRepositorySettings().with {
53+
assertThat(packageType, CoreMatchers.is(expectedSettings.getPackageType()))
54+
assertThat(repoLayout, CoreMatchers.is(expectedSettings.getRepoLayout()))
55+
56+
// local
57+
assertThat(dockerApiVersion, CoreMatchers.is(expectedSettings.getDockerApiVersion()))
58+
assertThat(dockerTagRetention, CoreMatchers.is(expectedSettings.getDockerTagRetention()))
59+
60+
// remote
61+
assertThat(enableTokenAuthentication, CoreMatchers.is(CoreMatchers.nullValue()))
62+
assertThat(listRemoteFolderItems, CoreMatchers.is(CoreMatchers.nullValue()))
63+
}
64+
}
65+
66+
@Test(groups = "helmOciPackageTypeRepo")
67+
void testOciFederatedRepo() {
68+
artifactory.repositories().create(0, federatedRepo)
69+
def expectedSettings = federatedRepo.repositorySettings
70+
71+
def resp = artifactory.repository(federatedRepo.getKey()).get()
72+
assertThat(resp, CoreMatchers.notNullValue())
73+
assertThat(resp.repoLayoutRef, CoreMatchers.is(HelmOciRepositorySettingsImpl.defaultLayout))
74+
resp.getRepositorySettings().with {
75+
assertThat(packageType, CoreMatchers.is(expectedSettings.getPackageType()))
76+
assertThat(repoLayout, CoreMatchers.is(expectedSettings.getRepoLayout()))
77+
78+
// local
79+
assertThat(dockerApiVersion, CoreMatchers.is(expectedSettings.getDockerApiVersion()))
80+
81+
// remote
82+
assertThat(enableTokenAuthentication, CoreMatchers.is(CoreMatchers.nullValue()))
83+
assertThat(listRemoteFolderItems, CoreMatchers.is(CoreMatchers.nullValue()))
84+
}
85+
}
86+
87+
@Test(groups = "helmOciPackageTypeRepo")
88+
void testOciRemoteRepo() {
89+
artifactory.repositories().create(0, remoteRepo)
90+
def expectedSettings = remoteRepo.repositorySettings
91+
92+
def resp = artifactory.repository(remoteRepo.getKey()).get()
93+
assertThat(resp, CoreMatchers.notNullValue())
94+
assertThat(resp.repoLayoutRef, CoreMatchers.is(HelmOciRepositorySettingsImpl.defaultLayout))
95+
resp.getRepositorySettings().with {
96+
assertThat(packageType, CoreMatchers.is(expectedSettings.getPackageType()))
97+
assertThat(repoLayout, CoreMatchers.is(expectedSettings.getRepoLayout()))
98+
99+
// local
100+
assertThat(dockerApiVersion, CoreMatchers.is(expectedSettings.getDockerApiVersion()))
101+
// always in resp payload
102+
103+
// remote
104+
assertThat(enableTokenAuthentication, CoreMatchers.is(expectedSettings.getEnableTokenAuthentication()))
105+
assertThat(listRemoteFolderItems, CoreMatchers.is(expectedSettings.getListRemoteFolderItems()))
106+
}
107+
}
108+
109+
@Test(groups = "helmOciPackageTypeRepo")
110+
void testDockerVirtualRepo() {
111+
artifactory.repositories().create(0, virtualRepo)
112+
def expectedSettings = virtualRepo.repositorySettings
113+
114+
def resp = artifactory.repository(virtualRepo.getKey()).get()
115+
assertThat(resp, CoreMatchers.notNullValue())
116+
assertThat(resp.repoLayoutRef, CoreMatchers.is(HelmOciRepositorySettingsImpl.defaultLayout))
117+
resp.getRepositorySettings().with {
118+
assertThat(packageType, CoreMatchers.is(expectedSettings.getPackageType()))
119+
assertThat(repoLayout, CoreMatchers.is(expectedSettings.getRepoLayout()))
120+
121+
// local
122+
assertThat(dockerApiVersion, CoreMatchers.is(expectedSettings.getDockerApiVersion()))
123+
124+
// remote
125+
assertThat(enableTokenAuthentication, CoreMatchers.is(CoreMatchers.nullValue()))
126+
assertThat(listRemoteFolderItems, CoreMatchers.is(CoreMatchers.nullValue()))
127+
}
128+
}
129+
}

0 commit comments

Comments
 (0)