[ https://issues.apache.org/jira/browse/MBUILDCACHE-33?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17682140#comment-17682140 ]
ASF GitHub Bot commented on MBUILDCACHE-33: ------------------------------------------- gnodet commented on code in PR #35: URL: https://github.com/apache/maven-build-cache-extension/pull/35#discussion_r1090762647 ########## src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryImpl.java: ########## @@ -81,11 +90,58 @@ public RemoteCacheRepositoryImpl( RepositorySystemSession session = mavenSession.getRepositorySession(); RemoteRepository repo = new RemoteRepository.Builder( cacheConfig.getId(), "cache", cacheConfig.getUrl() ).build(); - RemoteRepository mirror = session.getMirrorSelector().getMirror( repo ); - RemoteRepository repoOrMirror = mirror != null ? mirror : repo; - Proxy proxy = session.getProxySelector().getProxy( repoOrMirror ); - Authentication auth = session.getAuthenticationSelector().getAuthentication( repoOrMirror ); - RemoteRepository repository = new RemoteRepository.Builder( repoOrMirror ) + Map<String, String> env = System.getenv(); + + // if direct connectivity isn't forced, resolving through maven settings + if ( !env.containsKey( MAVEN_BUILD_CACHE_DIRECT_CONNECT ) ) + { + RemoteRepository mirror = session.getMirrorSelector().getMirror( repo ); + if ( mirror != null ) + { + repo = mirror; + } + } + + // if proxy is set by environment, use it + Proxy proxy; + if ( env.containsKey( MAVEN_BUILD_CACHE_PROXY_URL ) ) + { + String proxyUrl = env.get( MAVEN_BUILD_CACHE_PROXY_URL ); + LOGGER.debug( "Remote build cache proxy url overridden by environment to {}", proxyUrl ); + URI uri = URI.create( proxyUrl ); + if ( env.containsKey( MAVEN_BUILD_CACHE_PROXY_USER ) ) Review Comment: `&& env.containsKey( MAVEN_BUILD_CACHE_PASSWORD )` ? Or cleanly fail if it's missing maybe. ########## src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryImpl.java: ########## @@ -81,11 +90,58 @@ public RemoteCacheRepositoryImpl( RepositorySystemSession session = mavenSession.getRepositorySession(); RemoteRepository repo = new RemoteRepository.Builder( cacheConfig.getId(), "cache", cacheConfig.getUrl() ).build(); - RemoteRepository mirror = session.getMirrorSelector().getMirror( repo ); - RemoteRepository repoOrMirror = mirror != null ? mirror : repo; - Proxy proxy = session.getProxySelector().getProxy( repoOrMirror ); - Authentication auth = session.getAuthenticationSelector().getAuthentication( repoOrMirror ); - RemoteRepository repository = new RemoteRepository.Builder( repoOrMirror ) + Map<String, String> env = System.getenv(); + + // if direct connectivity isn't forced, resolving through maven settings + if ( !env.containsKey( MAVEN_BUILD_CACHE_DIRECT_CONNECT ) ) + { + RemoteRepository mirror = session.getMirrorSelector().getMirror( repo ); + if ( mirror != null ) + { + repo = mirror; + } + } + + // if proxy is set by environment, use it + Proxy proxy; + if ( env.containsKey( MAVEN_BUILD_CACHE_PROXY_URL ) ) + { + String proxyUrl = env.get( MAVEN_BUILD_CACHE_PROXY_URL ); + LOGGER.debug( "Remote build cache proxy url overridden by environment to {}", proxyUrl ); + URI uri = URI.create( proxyUrl ); + if ( env.containsKey( MAVEN_BUILD_CACHE_PROXY_USER ) ) + { + LOGGER.debug( "Remote build cache proxy credentials overridden by environment" ); + Authentication proxyAuthentication = new AuthenticationBuilder() + .addUsername( env.get( MAVEN_BUILD_CACHE_PROXY_USER ) ) + .addPassword( env.get( MAVEN_BUILD_CACHE_PROXY_PASSWORD ) ) + .build(); + proxy = new Proxy( uri.getScheme(), uri.getHost(), uri.getPort(), proxyAuthentication ); + } + else + { + proxy = new Proxy( uri.getScheme(), uri.getHost(), uri.getPort() ); + } + } + else + { + proxy = session.getProxySelector().getProxy( repo ); + } + + Authentication auth; + if ( env.containsKey( MAVEN_BUILD_CACHE_USER ) ) Review Comment: `&& env.containsKey( MAVEN_BUILD_CACHE_PASSWORD )` ? Or cleanly fail if it's missing maybe. > Support remote cache credentials from environment variables > ------------------------------------------------------------ > > Key: MBUILDCACHE-33 > URL: https://issues.apache.org/jira/browse/MBUILDCACHE-33 > Project: Maven Build Cache Extension > Issue Type: New Feature > Reporter: Alexander Ashitkin > Priority: Major > Labels: pull-request-available > > In my current environment settings.xml are managed by a build team which is > not allowing any modification because the same build service is used by all > teams. Atop of that, maven build runs in a fresh container which doesn't have > any credentials injected for security reasons. Because of that cache cannot > read/deploy build artifacts to an authenticated http server. Still, our build > service allows to inject credentials from environment variables into build > container. Need to support cache setup without settings.xml by injecting > environment variables: > * MAVEN_BUILD_CACHE_DIRECT_CONNECT > * MAVEN_BUILD_CACHE_USER > * MAVEN_BUILD_CACHE_PASSWORD > * MAVEN_BUILD_CACHE_PROXY_USER > * MAVEN_BUILD_CACHE_PROXY_PASSWORD -- This message was sent by Atlassian Jira (v8.20.10#820010)