diff --git a/.github/workflows/aws-lambda-java-core.yml b/.github/workflows/aws-lambda-java-core.yml index b1bed919f..ecd9e4ea0 100644 --- a/.github/workflows/aws-lambda-java-core.yml +++ b/.github/workflows/aws-lambda-java-core.yml @@ -1,9 +1,10 @@ # This workflow will be triggered if there will be changes to aws-lambda-java-core -# package and it builds the package and the packages that depend on it. +# package and it builds the package. name: Java CI aws-lambda-java-core on: + workflow_dispatch: push: branches: [ main ] paths: @@ -29,18 +30,7 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + - name: Install core with Maven run: mvn -B install --file aws-lambda-java-core/pom.xml - - # Package modules that depend on base module - - name: Package log4j2 with Maven - run: mvn -B package --file aws-lambda-java-log4j2/pom.xml - - # Test Runtime Interface Client - - name: Run 'pr' target - working-directory: ./aws-lambda-java-runtime-interface-client - run: make pr - env: - IS_JAVA_8: true diff --git a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml index 1f1f08870..4e3f7bde6 100644 --- a/.github/workflows/aws-lambda-java-events-sdk-transformer.yml +++ b/.github/workflows/aws-lambda-java-events-sdk-transformer.yml @@ -1,17 +1,21 @@ -# This workflow will be triggered if there will be changes to -# aws-lambda-java-events-sdk-transformer package and it builds the package. +# This workflow will be triggered if there will be changes to +# aws-lambda-java-events-sdk-transformer package or its dependency (events), +# and it builds the package. name: Java CI aws-lambda-java-events-sdk-transformer on: + workflow_dispatch: push: branches: [ main ] paths: - 'aws-lambda-java-events-sdk-transformer/**' + - 'aws-lambda-java-events/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-events-sdk-transformer/**' + - 'aws-lambda-java-events/**' - '.github/workflows/aws-lambda-java-events-sdk-transformer.yml' permissions: @@ -29,11 +33,11 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven - # Install base module + # Install dependency - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml # Package target module - name: Package events-sdk-transformer with Maven run: mvn -B package --file aws-lambda-java-events-sdk-transformer/pom.xml - diff --git a/.github/workflows/aws-lambda-java-events.yml b/.github/workflows/aws-lambda-java-events.yml index 2d101018d..ab6f1a172 100644 --- a/.github/workflows/aws-lambda-java-events.yml +++ b/.github/workflows/aws-lambda-java-events.yml @@ -1,9 +1,10 @@ # This workflow will be triggered if there will be changes to aws-lambda-java-events -# package and it builds the package and the packages that depend on it. +# package and it builds the package. name: Java CI aws-lambda-java-events on: + workflow_dispatch: push: branches: [ main ] paths: @@ -29,14 +30,7 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml - - # Package modules that depend on base module - - name: Package serialization with Maven - run: mvn -B package --file aws-lambda-java-serialization/pom.xml - - name: Package events-sdk-transformer with Maven - run: mvn -B package --file aws-lambda-java-events-sdk-transformer/pom.xml - diff --git a/.github/workflows/aws-lambda-java-log4j2.yml b/.github/workflows/aws-lambda-java-log4j2.yml index e9f6a56c1..7df0831f9 100644 --- a/.github/workflows/aws-lambda-java-log4j2.yml +++ b/.github/workflows/aws-lambda-java-log4j2.yml @@ -1,17 +1,20 @@ -# This workflow will be triggered if there will be changes to -# aws-lambda-java-log4j2 package and it builds the package. +# This workflow will be triggered if there will be changes to +# aws-lambda-java-log4j2 package or its dependency (core), and it builds the package. name: Java CI aws-lambda-java-log4j2 on: push: + workflow_dispatch: branches: [ main ] paths: - 'aws-lambda-java-log4j2/**' + - 'aws-lambda-java-core/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-log4j2/**' + - 'aws-lambda-java-core/**' - '.github/workflows/aws-lambda-java-log4j2.yml' permissions: @@ -29,11 +32,11 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + + # Install dependency - name: Install core with Maven run: mvn -B install --file aws-lambda-java-core/pom.xml # Package target module - name: Package log4j2 with Maven run: mvn -B package --file aws-lambda-java-log4j2/pom.xml - diff --git a/.github/workflows/aws-lambda-java-profiler.yml b/.github/workflows/aws-lambda-java-profiler.yml index a3afe3729..9fb5d2b18 100644 --- a/.github/workflows/aws-lambda-java-profiler.yml +++ b/.github/workflows/aws-lambda-java-profiler.yml @@ -29,6 +29,7 @@ jobs: with: java-version: 21 distribution: corretto + cache: maven - name: Issue AWS credentials uses: aws-actions/configure-aws-credentials@v4 diff --git a/.github/workflows/aws-lambda-java-serialization.yml b/.github/workflows/aws-lambda-java-serialization.yml index 13b7e08b0..5a7060c74 100644 --- a/.github/workflows/aws-lambda-java-serialization.yml +++ b/.github/workflows/aws-lambda-java-serialization.yml @@ -1,17 +1,20 @@ -# This workflow will be triggered if there will be changes to aws-lambda-java-serialization -# package and it builds the package and the packages that depend on it. +# This workflow will be triggered if there will be changes to aws-lambda-java-serialization +# package or its dependency (events), and it builds the package. name: Java CI aws-lambda-java-serialization on: + workflow_dispatch: push: branches: [ main ] paths: - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-events/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-events/**' - '.github/workflows/aws-lambda-java-serialization.yml' permissions: @@ -29,8 +32,9 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + + # Install dependency - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml diff --git a/.github/workflows/aws-lambda-java-tests.yml b/.github/workflows/aws-lambda-java-tests.yml index 363647cc4..fddae31ad 100644 --- a/.github/workflows/aws-lambda-java-tests.yml +++ b/.github/workflows/aws-lambda-java-tests.yml @@ -1,5 +1,5 @@ # This workflow will be triggered if there will be changes to aws-lambda-java-tests -# package and it builds the package and the packages that depend on it. +# package or its dependencies (events, serialization), and it builds the package. name: Java CI aws-lambda-java-tests @@ -9,16 +9,14 @@ on: branches: [ main ] paths: - 'aws-lambda-java-tests/**' - - 'aws-lambda-java-runtime-interface-client/**' - - 'aws-lambda-java-serialization/**' - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-tests/**' - - 'aws-lambda-java-runtime-interface-client/**' - - 'aws-lambda-java-serialization/**' - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' - '.github/workflows/aws-lambda-java-tests.yml' permissions: @@ -36,8 +34,9 @@ jobs: with: java-version: 8 distribution: corretto - - # Install base module + cache: maven + + # Install dependencies - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml - name: Install serialization with Maven @@ -46,4 +45,3 @@ jobs: # Package target module - name: Package tests with Maven run: mvn -B package --file aws-lambda-java-tests/pom.xml - diff --git a/.github/workflows/runtime-interface-client_merge_to_main.yml b/.github/workflows/runtime-interface-client_merge_to_main.yml index 3560207f3..c4dcc8075 100644 --- a/.github/workflows/runtime-interface-client_merge_to_main.yml +++ b/.github/workflows/runtime-interface-client_merge_to_main.yml @@ -11,12 +11,12 @@ name: Publish artifact for aws-lambda-java-runtime-interface-client on: + workflow_dispatch: push: branches: [ main ] paths: - 'aws-lambda-java-runtime-interface-client/**' - '.github/workflows/runtime-interface-client_*.yml' - workflow_dispatch: jobs: @@ -35,6 +35,7 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/.github/workflows/runtime-interface-client_pr.yml b/.github/workflows/runtime-interface-client_pr.yml index dcad4fa0a..637991ac7 100644 --- a/.github/workflows/runtime-interface-client_pr.yml +++ b/.github/workflows/runtime-interface-client_pr.yml @@ -1,13 +1,17 @@ -# This workflow will be triggered if there will be changes to -# aws-lambda-java-runtime-interface-client package and it builds the package. +# This workflow will be triggered if there will be changes to +# aws-lambda-java-runtime-interface-client package or its dependencies (core, serialization), +# and it builds the package. name: PR to runtime-interface-client on: + workflow_dispatch: pull_request: branches: [ '*' ] paths: - 'aws-lambda-java-runtime-interface-client/**' + - 'aws-lambda-java-core/**' + - 'aws-lambda-java-serialization/**' - '.github/workflows/runtime-interface-client_*.yml' permissions: @@ -17,15 +21,19 @@ jobs: smoke-test: runs-on: ubuntu-latest + strategy: + matrix: + java-version: [8, 11, 17, 21, 25] steps: - uses: actions/checkout@v5 - - name: Set up JDK 1.8 + - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@v4 with: - java-version: 8 + java-version: ${{ matrix.java-version }} distribution: corretto - + cache: maven + - name: Build and install core dependency locally working-directory: ./aws-lambda-java-core run: mvn clean install @@ -38,8 +46,8 @@ jobs: working-directory: ./aws-lambda-java-runtime-interface-client run: make pr env: - IS_JAVA_8: true - + IS_JAVA_8: ${{ matrix.java-version == 8 }} + build: runs-on: ubuntu-latest steps: @@ -50,6 +58,7 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -61,7 +70,7 @@ jobs: - name: Available buildx platforms run: echo ${{ steps.buildx.outputs.platforms }} - + - name: Build and install core dependency locally working-directory: ./aws-lambda-java-core run: mvn clean install diff --git a/.github/workflows/samples.yml b/.github/workflows/samples.yml index aebb708a7..3ef55ec22 100644 --- a/.github/workflows/samples.yml +++ b/.github/workflows/samples.yml @@ -1,17 +1,24 @@ -# This workflow will be triggered if there will be changes to aws-lambda-java-core -# package and it builds the package and the packages that depend on it. +# This workflow will be triggered if there will be changes to samples +# or their dependencies (events, serialization, tests). name: Java CI samples on: + workflow_dispatch: push: branches: [ main ] paths: - 'samples/**' + - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-tests/**' pull_request: branches: [ '*' ] paths: - 'samples/**' + - 'aws-lambda-java-events/**' + - 'aws-lambda-java-serialization/**' + - 'aws-lambda-java-tests/**' - '.github/workflows/samples.yml' permissions: @@ -27,14 +34,13 @@ jobs: with: java-version: 8 distribution: corretto + cache: maven - # Install events module + # Install dependencies - name: Install events with Maven run: mvn -B install --file aws-lambda-java-events/pom.xml - # Install serialization module - name: Install serialization with Maven run: mvn -B install --file aws-lambda-java-serialization/pom.xml - # Install tests module - name: Install tests with Maven run: mvn -B install --file aws-lambda-java-tests/pom.xml @@ -54,6 +60,7 @@ jobs: 8 21 distribution: corretto + cache: maven # Install events module using Java 8 - name: Install events with Maven diff --git a/.gitignore b/.gitignore index 5eb5456a1..dce5fdef6 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,17 @@ experimental/aws-lambda-java-profiler/integration_tests/helloworld/bin /scratch/ .vscode .kiro -build \ No newline at end of file +build + +# Logs +*.log + +# Maven flatten plugin +.flattened-pom.xml + +# Vim swap files +*.swp +*.swo + +# Tool version manager +mise.toml diff --git a/aws-lambda-java-events-sdk-transformer/pom.xml b/aws-lambda-java-events-sdk-transformer/pom.xml index d719ec8ac..7c72e98c4 100644 --- a/aws-lambda-java-events-sdk-transformer/pom.xml +++ b/aws-lambda-java-events-sdk-transformer/pom.xml @@ -38,6 +38,7 @@ 1.8 1.11.914 2.15.40 + 5.14.3 @@ -70,7 +71,7 @@ org.junit.jupiter junit-jupiter-engine - 5.7.0 + ${junit-jupiter.version} test diff --git a/aws-lambda-java-events/pom.xml b/aws-lambda-java-events/pom.xml index 714c825d9..ba93601dc 100644 --- a/aws-lambda-java-events/pom.xml +++ b/aws-lambda-java-events/pom.xml @@ -39,6 +39,7 @@ UTF-8 2.20.1 2.40.1 + 5.14.3 @@ -58,7 +59,7 @@ org.junit.jupiter junit-jupiter-engine - 5.9.2 + ${junit-jupiter.version} test diff --git a/aws-lambda-java-runtime-interface-client/Makefile b/aws-lambda-java-runtime-interface-client/Makefile index 6c3a268fb..78cfa11a6 100644 --- a/aws-lambda-java-runtime-interface-client/Makefile +++ b/aws-lambda-java-runtime-interface-client/Makefile @@ -15,57 +15,63 @@ endif # making it possible to publish resulting artifacts to a codeartifact maven repository -include ric-dev-environment/codeartifact-repo.mk -.PHONY: target + target: $(info ${HELP_MESSAGE}) @exit 0 -.PHONY: test + test: mvn test $(EXTRA_LOAD_ARG) -.PHONY: setup-codebuild-agent + setup-codebuild-agent: docker build -t codebuild-agent \ --build-arg ARCHITECTURE=$(ARCHITECTURE_ALIAS) \ - < test/integration/codebuild-local/Dockerfile.agent -.PHONY: test-smoke + test-smoke: setup-codebuild-agent CODEBUILD_IMAGE_TAG=codebuild-agent test/integration/codebuild-local/test_one.sh test/integration/codebuild/buildspec.os.alpine.yml alpine 3.15 corretto11 linux/amd64 CODEBUILD_IMAGE_TAG=codebuild-agent test/integration/codebuild-local/test_one.sh test/integration/codebuild/buildspec.os.alpine.yml alpine 3.15 corretto11 linux/arm64/v8 CODEBUILD_IMAGE_TAG=codebuild-agent test/integration/codebuild-local/test_one.sh test/integration/codebuild/buildspec.os.amazoncorretto.yml amazoncorretto amazoncorretto 11 linux/amd64 CODEBUILD_IMAGE_TAG=codebuild-agent test/integration/codebuild-local/test_one.sh test/integration/codebuild/buildspec.os.amazoncorretto.yml amazoncorretto amazoncorretto 11 linux/arm64/v8 -.PHONY: test-integ + test-integ: setup-codebuild-agent CODEBUILD_IMAGE_TAG=codebuild-agent test/integration/codebuild-local/test_all.sh test/integration/codebuild # Command to run everytime you make changes to verify everything works -.PHONY: dev + dev: test # Verifications to run before sending a pull request -.PHONY: pr + pr: test test-smoke -.PHONY: build + +# The default `mvn clean install` builds all 4 native .so variants (x86_64/aarch64 × glibc/musl) +# and bundles them into a single jar (see build-jni-lib.sh), runs the tests for the host +# environment, and updates coverage data. This is sufficient for what we want to do here. +# +# Running profile-specific builds (e.g., `mvn install -P linux-aarch64`) does NOT test the +# cross-compiled .so — JniHelper.load() tries each .so in order and always loads the first +# one matching the host platform (linux-x86_64 on GitHub Actions runners), so the other +# variants are never exercised. +# +# Platform-specific tests are run through test-smoke via codebuild containers. + build: - mvn clean install $(EXTRA_LOAD_ARG) - mvn install -P linux-x86_64 $(EXTRA_LOAD_ARG) - mvn install -P linux_musl-x86_64 $(EXTRA_LOAD_ARG) - mvn install -P linux-aarch64 $(EXTRA_LOAD_ARG) - mvn install -P linux_musl-aarch64 $(EXTRA_LOAD_ARG) + mvn clean install $(EXTRA_LOAD_ARG) -.PHONY: publish publish: ./ric-dev-environment/publish_snapshot.sh -.PHONY: publish + test-publish: ./ric-dev-environment/test-platform-specific-jar-snapshot.sh -.PHONY: test-rie + test-rie: ./scripts/test-rie.sh "EchoHandler::handleRequest" @@ -80,3 +86,5 @@ TARGETS test Run the Unit tests. test-rie Build and test RIC locally with Lambda Runtime Interface Emulator. (Requires building the project first) endef + +.PHONY: target test setup-codebuild-agent test-smoke test-integ dev pr build publish publish test-rie \ No newline at end of file diff --git a/aws-lambda-java-runtime-interface-client/pom.xml b/aws-lambda-java-runtime-interface-client/pom.xml index 65304c61a..f84ffe558 100644 --- a/aws-lambda-java-runtime-interface-client/pom.xml +++ b/aws-lambda-java-runtime-interface-client/pom.xml @@ -37,7 +37,7 @@ 0.8.12 2.4 3.1.1 - 5.9.2 + 5.14.3 3.4.0