Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,27 @@ jobs:
retention-days: 3

test:
name: 'Test ACM Package'
name: 'Test ACM Package (AEM ${{ matrix.aem }})'
runs-on: ubuntu-latest
needs: build
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include:
- aem: '6.5.0'
quickstart_prefix: 'cq-quickstart-6.5.0.jar'
java_download_url: 'https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u432-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u432b06.tar.gz'
- aem: '6.6.x'
quickstart_prefix: 'cq-quickstart-6.6.'
java_download_url: 'https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21%2B35/OpenJDK21U-jdk_x64_linux_hotspot_21_35.tar.gz'
permissions:
contents: read
actions: read
checks: write
env:
AEM_OUTPUT_LOG_MODE: none
AEM_VENDOR_JAVA_DOWNLOAD_URL: ${{ matrix.java_download_url }}
FORCE_COLOR: 1
steps:
- name: Checkout Code
Expand Down Expand Up @@ -110,7 +121,13 @@ jobs:
echo "Preparing AEM instance"
echo "AEM_PUBLISH_ACTIVE=false" >> .env
mkdir -p aem/home/lib
aws s3 cp --no-progress --only-show-errors s3://${{ secrets.AWS_S3_BUCKET_NAME }}/aem/on-prem/cq-quickstart-6.5.0.jar aem/home/lib/cq-quickstart-6.5.0.jar
JAR_FILE=$(aws s3 ls "s3://${{ secrets.AWS_S3_BUCKET_NAME }}/aem/on-prem/${{ matrix.quickstart_prefix }}" | awk '{print $4}' | sort -V | tail -n 1)
if [ -z "$JAR_FILE" ]; then
echo "::error::No AEM quickstart matching '${{ matrix.quickstart_prefix }}' found in S3!"
exit 1
fi
echo "Downloading AEM quickstart '$JAR_FILE'"
aws s3 cp --no-progress --only-show-errors "s3://${{ secrets.AWS_S3_BUCKET_NAME }}/aem/on-prem/$JAR_FILE" "aem/home/lib/$JAR_FILE"
aws s3 cp --no-progress --only-show-errors s3://${{ secrets.AWS_S3_BUCKET_NAME }}/aem/on-prem/license.properties aem/home/lib/license.properties
echo "Prepared AEM instance"
echo "Launching AEM instance"
Expand Down Expand Up @@ -141,6 +158,6 @@ jobs:
uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: acm-playwright-report
name: acm-playwright-report-${{ matrix.aem }}
path: ./test/e2e/playwright-report/
retention-days: 30
4 changes: 2 additions & 2 deletions aem/default/etc/aem.yml
Original file line number Diff line number Diff line change
Expand Up @@ -260,10 +260,10 @@ vendor:
# Auto-installed JDK options
download:
# Source URL with template vars support
url: "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u432-b06/OpenJDK8U-jdk_[[.Arch]]_[[.Os]]_hotspot_8u432b06.[[.ArchiveExt]]"
#url: "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u432-b06/OpenJDK8U-jdk_[[.Arch]]_[[.Os]]_hotspot_8u432b06.[[.ArchiveExt]]"
#url: "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.18%2B10/OpenJDK11U-jdk_[[.Arch]]_[[.Os]]_hotspot_11.0.18_10.[[.ArchiveExt]]"
#url: "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8%2B7/OpenJDK17U-jdk_[[.Arch]]_[[.Os]]_hotspot_17.0.8_7.[[.ArchiveExt]]"
#url: "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21%2B35/OpenJDK21U-jdk_[[.Arch]]_[[.Os]]_hotspot_21_35.[[.ArchiveExt]]"
url: "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21%2B35/OpenJDK21U-jdk_[[.Arch]]_[[.Os]]_hotspot_21_35.[[.ArchiveExt]]"
# Map source URL template vars to be compatible with Adoptium Java
replacements:
# Var 'Os' (GOOS)
Expand Down
10 changes: 3 additions & 7 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ DynamicImport-Package: *
<include>src/main/java/**/*.java</include>
<include>src/test/java/**/*.java</include>
</includes>
<palantirJavaFormat/>
<palantirJavaFormat>
<version>${palantir.java.format.version}</version>
</palantirJavaFormat>
<importOrder/>
<removeUnusedImports/>
<formatAnnotations/>
Expand Down Expand Up @@ -168,12 +170,6 @@ DynamicImport-Package: *
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.classloader</artifactId>
<version>1.4.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
Expand Down
4 changes: 4 additions & 0 deletions core/src/main/java/dev/vml/es/acm/core/acl/Acl.java
Original file line number Diff line number Diff line change
Expand Up @@ -668,4 +668,8 @@ public AclAuthorizable authorizable(Authorizable authorizable) {
public AclChecker getChecker() {
return checker;
}

public AclContext getContext() {
return context;
}
}
9 changes: 7 additions & 2 deletions core/src/main/java/dev/vml/es/acm/core/acl/AclContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@

public class AclContext {

private final Logger logger;
private static final Logger LOG = LoggerFactory.getLogger(AclContext.class);

private Logger logger = LOG;

private final ResourceResolver resourceResolver;

Expand All @@ -37,7 +39,6 @@ public AclContext(ResourceResolver resourceResolver) {

public AclContext(ResourceResolver resourceResolver, CommitPolicy commitPolicy) {
try {
this.logger = LoggerFactory.getLogger(AclContext.class);
JackrabbitSession session = (JackrabbitSession) resourceResolver.adaptTo(Session.class);
UserManager userManager = session.getUserManager();
AccessControlManager accessControlManager = session.getAccessControlManager();
Expand All @@ -54,6 +55,10 @@ public Logger getLogger() {
return logger;
}

public void setLogger(Logger logger) {
this.logger = logger != null ? logger : LOG;
}

public ResourceResolver getResourceResolver() {
return resourceResolver;
}
Expand Down
44 changes: 37 additions & 7 deletions core/src/main/java/dev/vml/es/acm/core/code/CodePrintStream.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.vml.es.acm.core.code;

import dev.vml.es.acm.core.AcmException;
import dev.vml.es.acm.core.code.log.CodePrintLogger;
import dev.vml.es.acm.core.code.log.LogInterceptor;
import dev.vml.es.acm.core.code.log.LogInterceptorManager;
import dev.vml.es.acm.core.code.log.LogMessage;
Expand Down Expand Up @@ -36,6 +37,8 @@ public class CodePrintStream extends PrintStream {

private final Set<String> loggerNames;

private final Set<String> bridgedLoggerNames;

private boolean loggerTimestamps;

private LogInterceptor.Handle interceptorHandle;
Expand All @@ -51,17 +54,30 @@ public CodePrintStream(OutputStream output, String id, LogInterceptorManager log

this.logInterceptorManager = logInterceptorManager;
this.loggerNames = new HashSet<>();
this.bridgedLoggerNames = new HashSet<>();
this.loggerTimestamps = true;
this.logger = LoggerFactory.getLogger(id);
this.logger = bridgeLogger(LoggerFactory.getLogger(id));
this.printerTimestamps = true;
}

Logger bridgeLogger(Logger delegate) {
bridgedLoggerNames.add(delegate.getName());
return new CodePrintLogger(delegate, this::handleLogMessage);
}

private boolean isBridgedLogger(String loggerName) {
return LOGGER_NAME_ACL.equals(loggerName)
|| LOGGER_NAME_REPO.equals(loggerName)
|| bridgedLoggerNames.contains(loggerName);
}

public void fromLogger(String loggerName) {
if (StringUtils.isBlank(loggerName)) {
throw new AcmException("Logger name cannot be blank!");
}
loggerNames.add(loggerName);
updateInterceptor();
if (loggerNames.add(loggerName.trim())) {
updateInterceptor();
}
}

@Override
Expand All @@ -73,8 +89,11 @@ public void close() {
private void updateInterceptor() {
detachInterceptor();
if (!loggerNames.isEmpty() && logInterceptorManager != null) {
interceptorHandle =
logInterceptorManager.attach(this::handleLogMessage, loggerNames.toArray(new String[0]));
String[] externalLoggers =
loggerNames.stream().filter(name -> !isBridgedLogger(name)).toArray(String[]::new);
if (externalLoggers.length > 0) {
interceptorHandle = logInterceptorManager.attach(this::handleLogMessage, externalLoggers);
}
}
}

Expand Down Expand Up @@ -134,13 +153,24 @@ public void fromRecommendedLoggers() {
}

public void fromLoggers(String... loggerNames) {
if (loggerNames == null) {
return;
}
boolean changed = false;
for (String loggerName : loggerNames) {
fromLogger(loggerName);
if (StringUtils.isNotBlank(loggerName) && this.loggerNames.add(loggerName.trim())) {
changed = true;
}
}
if (changed) {
updateInterceptor();
}
}

public void fromLoggers(List<String> loggerNames) {
loggerNames.forEach(this::fromLogger);
if (loggerNames != null) {
fromLoggers(loggerNames.toArray(new String[0]));
}
}

public void setPrinterTimestamps(boolean flag) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,15 @@ public Conditions getConditions() {
}

private void customizeBinding() {
codeContext
.getRepo()
.setLogger(printStream.bridgeLogger(codeContext.getRepo().getLogger()));
codeContext
.getAcl()
.getContext()
.setLogger(printStream.bridgeLogger(
codeContext.getAcl().getContext().getLogger()));

Binding binding = getCodeContext().getBinding();

binding.setVariable("context", this);
Expand Down
Loading
Loading