Skip to content

E2E Tests - push

E2E Tests - push #336

Workflow file for this run

# Run E2E tests for a branch
#
# Description:
# Runs E2E tests for a specified branch
#
# Triggers:
# - push
#
# Secrets:
# - E2E.AWS_IAM_ROLE
on:
workflow_dispatch:
push:
branches:
- main
paths: # add other modules when there are under e2e tests
- 'powertools-batch/**'
- 'powertools-core/**'
- 'powertools-cloudformation/**'
- 'powertools-common/**'
- 'powertools-e2e-tests/**'
- 'powertools-idempotency/**'
- 'powertools-large-messages/**'
- 'powertools-logging/**'
- 'powertools-metrics/**'
- 'powertools-parameters/**'
- 'powertools-serialization/**'
- 'powertools-sqs/**'
- 'powertools-tracing/**'
- 'powertools-tracing/**'
- 'powertools-validation/**'
- 'powertools-lambda-metadata/**'
- 'pom.xml'
name: E2E Tests
run-name: E2E Tests - ${{ github.event_name }}
permissions:
contents: read
jobs:
discover-tests:
name: Discover E2E test classes
runs-on: ubuntu-latest
outputs:
e2e-classes: ${{ steps.parse.outputs.e2e-classes }}
e2e-graal-classes: ${{ steps.parse.outputs.e2e-graal-classes }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Parse test classes from POM profiles
id: parse
run: |
TEST_DIR="powertools-e2e-tests/src/test/java"
POM="powertools-e2e-tests/pom.xml"
# Extracts <include> patterns from a POM profile, resolves them
# against the test directory, and outputs a compact JSON array
# of class names (without .java suffix).
resolve_classes() {
local profile_id="$1"
awk "/<id>${profile_id}<\\/id>/,/<\\/profile>/" "$POM" \
| { grep '<include>' || true; } \
| sed 's/.*<include>\(.*\)<\/include>.*/\1/' \
| while read -r pattern; do
find "$TEST_DIR" -type f -path "$TEST_DIR/$pattern" -print0 | xargs -0 -r basename -a
done \
| sed 's/\.java$//' | sort -u | jq -R . | jq -sc .
}
E2E_CLASSES=$(resolve_classes "e2e")
GRAAL_CLASSES=$(resolve_classes "e2e-graal")
echo "e2e test classes: $E2E_CLASSES"
echo "e2e-graal test classes: $GRAAL_CLASSES"
if [ "$E2E_CLASSES" = "[]" ] || [ -z "$E2E_CLASSES" ]; then
echo "::error::No e2e test classes found — check POM includes and test directory"
exit 1
fi
if [ "$GRAAL_CLASSES" = "[]" ] || [ -z "$GRAAL_CLASSES" ]; then
echo "::error::No e2e-graal test classes found — check POM includes and test directory"
exit 1
fi
echo "e2e-classes=$E2E_CLASSES" >> "$GITHUB_OUTPUT"
echo "e2e-graal-classes=$GRAAL_CLASSES" >> "$GITHUB_OUTPUT"
e2e:
name: E2E ${{ matrix.test-class }} (Java ${{ matrix.java }})
needs: discover-tests
runs-on: ubuntu-latest
permissions:
id-token: write
environment: E2E
strategy:
fail-fast: false
max-parallel: 20
matrix:
java:
- 11
- 17
- 21
- 25
test-class: ${{ fromJSON(needs.discover-tests.outputs.e2e-classes) }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: 'corretto'
java-version: ${{ matrix.java }}
cache: maven
- name: Build all modules
run: mvn -B -DskipTests -ntp install --file pom.xml
- name: Setup AWS credentials
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
with:
role-to-assume: ${{ secrets.AWS_IAM_ROLE }}
aws-region: us-east-1
- name: Run e2e test with Maven
env:
JAVA_VERSION: ${{ matrix.java }}
run: >
mvn -Pe2e -B -ntp
-Dit.test="${{ matrix.test-class }}"
verify --file powertools-e2e-tests/pom.xml
e2e-graal:
name: E2E GraalVM ${{ matrix.test-class }} (Java ${{ matrix.java }})
needs: discover-tests
runs-on: ubuntu-latest
permissions:
id-token: write
environment: E2E
strategy:
fail-fast: false
max-parallel: 5
matrix:
java:
- 25
test-class: ${{ fromJSON(needs.discover-tests.outputs.e2e-graal-classes) }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: 'corretto'
java-version: ${{ matrix.java }}
cache: maven
- name: Build all modules
run: mvn -B -DskipTests -ntp install --file pom.xml
- name: Setup AWS credentials
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
with:
role-to-assume: ${{ secrets.AWS_IAM_ROLE }}
aws-region: us-east-1
- name: Run e2e-graal test with Maven
env:
JAVA_VERSION: ${{ matrix.java }}
run: >
mvn -Pe2e-graal -B -ntp
-Dit.test="${{ matrix.test-class }}"
verify --file powertools-e2e-tests/pom.xml