Skip to content

Instantly share code, notes, and snippets.

@serdroid
Created February 19, 2018 07:51
Show Gist options
  • Save serdroid/c9bc0a7b2b8b4c6988caec4e28cd09d8 to your computer and use it in GitHub Desktop.
Save serdroid/c9bc0a7b2b8b4c6988caec4e28cd09d8 to your computer and use it in GitHub Desktop.
nexus-3 repository clean groovy script
import org.sonatype.nexus.repository.storage.Asset;
import org.sonatype.nexus.repository.storage.Component;
import org.sonatype.nexus.repository.storage.Query;
import org.sonatype.nexus.repository.storage.StorageFacet;
import org.sonatype.nexus.repository.storage.Query.Builder;
import groovy.json.JsonOutput;
import groovy.json.JsonSlurper;
def request = new JsonSlurper().parseText(args);
assert request.repoName: 'repoName parameter is required';
def count = request.count ?: 5;
def compInfo = { Component c -> "{${c.group()}:${c.name()}:${c.version()}:${c.lastUpdated()}}" };
def repo = repository.repositoryManager.get(request.repoName);
StorageFacet storageFacet = repo.facet(StorageFacet);
def tx = storageFacet.txSupplier().get();
def urls = [];
Builder qBuilder = Query.builder();
if ( request.groupId != null )
qBuilder.where('group = ').param(request.groupId);
if ( request.artifactId != null ) {
if (qBuilder.hasWhere()) {
qBuilder.and('name = ').param(request.artifactId);
} else {
qBuilder.where('name = ').param(request.artifactId);
};
};
tx.begin();
Iterable<Component> comps = tx.findComponents(qBuilder.build(), [repo]);
tx.close();
def componentByName = [:];
for(Component comp : comps) {
if(componentByName.containsKey( comp.name() )) {
componentByName.get(comp.name()).add(comp);
} else {
componentByName.put(comp.name(), [comp]);
};
};
def toDelete = [];
for(List<Component> compList : componentByName.values()) {
if ( compList.size() > count ) {
compList.sort( { a,b-> a.lastUpdated() <=> b.lastUpdated() } );
for( int idx = 0; idx < compList.size() - count; ++idx) {
toDelete.add(compList.get(idx));
}
}
};
if(request.delete) {
toDelete.each({
tx2 = storageFacet.txSupplier().get();
tx2.begin();
tx2.deleteComponent(it);
tx2.commit();
tx2.close();
});
log.info(toDelete.size() + " components deleted");
};
return toDelete.flatten(compInfo);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment