Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ## Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | |
| ## SPDX-License-Identifier: Apache-2.0 | |
| # This is a reusable workflow for running the Java Enablement Canary test for Application Signals on Lambda. | |
| # It is meant to be called from another workflow. | |
| # Read more about reusable workflows: https://docs.github.com/en/actions/using-workflows/reusing-workflows#overview | |
| name: Java Lambda Default Use Case | |
| on: | |
| workflow_call: | |
| inputs: | |
| aws-region: | |
| required: true | |
| type: string | |
| caller-workflow-name: | |
| required: true | |
| type: string | |
| outputs: | |
| job-started: | |
| value: ${{ jobs.java-lambda-default.outputs.job-started }} | |
| validation-result: | |
| value: ${{ jobs.java-lambda-default.outputs.validation-result }} | |
| push: | |
| branches: | |
| - lambda-layer/v2-test | |
| permissions: | |
| id-token: write | |
| contents: read | |
| env: | |
| E2E_TEST_AWS_REGION: us-east-1 | |
| CALLER_WORKFLOW_NAME: ${{ inputs.caller-workflow-name }} | |
| E2E_TEST_ACCOUNT_ID: ${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ACCOUNT_ID }} | |
| E2E_TEST_ROLE_NAME: ${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ROLE_NAME }} | |
| METRIC_NAMESPACE: ApplicationSignals | |
| LOG_GROUP_NAME: /aws/application-signals/data | |
| SAMPLE_APP_ZIP: s3://aws-appsignals-sample-app-prod-us-east-1/java-lambda-function.zip | |
| TEST_RESOURCES_FOLDER: ${GITHUB_WORKSPACE} | |
| STAGING_S3_BUCKET: ${{ secrets.STAGING_BUCKET_NAME }} | |
| IS_CANARY: false | |
| jobs: | |
| java-lambda-default: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| outputs: | |
| job-started: ${{ steps.job-started.outputs.job-started }} | |
| validation-result: ${{ steps.validation-result.outputs.validation-result }} | |
| steps: | |
| - name: Check if the job started | |
| id: job-started | |
| run: echo "job-started=true" >> $GITHUB_OUTPUT | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: 'aws-observability/aws-application-signals-test-framework' | |
| ref: ${{ env.CALLER_WORKFLOW_NAME == 'main-build' && 'main' || github.ref }} | |
| fetch-depth: 0 | |
| # We initialize Gradlew Daemon early on during the workflow because sometimes initialization | |
| # fails due to transient issues. If it fails here, then we will try again later before the validators | |
| - name: Initiate Gradlew Daemon | |
| id: initiate-gradlew | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| continue-on-error: true | |
| with: | |
| command: "./gradlew :validator:build" | |
| cleanup: "./gradlew clean" | |
| max_retry: 3 | |
| sleep_time: 60 | |
| - name: Generate testing id | |
| run: echo TESTING_ID="${{ github.run_id }}-${{ github.run_number }}-${RANDOM}" >> $GITHUB_ENV | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: arn:aws:iam::${{ env.E2E_TEST_ACCOUNT_ID }}:role/${{ env.E2E_TEST_ROLE_NAME }} | |
| aws-region: us-east-1 | |
| - name: Retrieve account | |
| uses: aws-actions/aws-secretsmanager-get-secrets@v1 | |
| with: | |
| secret-ids: | |
| ACCOUNT_ID, region-account/${{ env.E2E_TEST_AWS_REGION }} | |
| - name: Configure AWS Credentials | |
| if: ${{ github.event.repository.name == 'aws-application-signals-test-framework' }} | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.E2E_TEST_ROLE_NAME }} | |
| aws-region: ${{ env.E2E_TEST_AWS_REGION }} | |
| - name: Set Lambda Layer artifact directory path | |
| run: echo ARTIFACTS_DIR="${{ github.workspace }}/lambda_artifacts" >> $GITHUB_ENV | |
| - name: Download Lambda Layer artifact for E2E Test | |
| if: ${{ env.CALLER_WORKFLOW_NAME != 'appsignals-java-e2e-lambda-canary-test' }} | |
| run: | | |
| aws s3 cp s3://lambdav2-test1/aws-opentelemetry-java-layer.zip ${{ env.ARTIFACTS_DIR }}/layer.zip | |
| - name: Download the lambda function artifact for E2E test | |
| run: aws s3 cp ${{ env.SAMPLE_APP_ZIP }} ${{ env.ARTIFACTS_DIR }}/java-function.zip | |
| - name: Set Canary Environment Variable | |
| if: ${{ env.CALLER_WORKFLOW_NAME == 'appsignals-java-e2e-lambda-canary-test' }} | |
| run: | | |
| echo IS_CANARY=true >> $GITHUB_ENV | |
| - name: Set up terraform | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| with: | |
| command: "wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg" | |
| post-command: 'echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list | |
| && sudo apt update && sudo apt install terraform' | |
| sleep_time: 60 | |
| - name: Initiate Terraform | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| with: | |
| command: "cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && terraform init && terraform validate" | |
| cleanup: "rm -rf .terraform && rm -rf .terraform.lock.hcl" | |
| max_retry: 6 | |
| sleep_time: 60 | |
| - name: Get terraform Lambda function name | |
| shell: bash | |
| run: | | |
| echo TERRAFORM_LAMBDA_FUNCTION_NAME="AdotLambdaJavaSampleApp-${{ github.run_id }}"| | |
| tee --append $GITHUB_ENV | |
| - name: Apply terraform | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| with: | |
| command: 'cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && terraform apply -auto-approve | |
| -var="sdk_layer_name=AWSOpenTelemetryDistroJava-${{ github.run_id }}" | |
| -var="function_name=${{env.TERRAFORM_LAMBDA_FUNCTION_NAME}}" | |
| -var="layer_artifacts_directory=${{ env.ARTIFACTS_DIR }}" | |
| -var="region=${{ env.E2E_TEST_AWS_REGION }}\" | |
| -var="is_canary=${{ env.IS_CANARY }}"' | |
| max_retry: 6 | |
| sleep_time: 60 | |
| - name: Extract endpoint | |
| id: extract-endpoint | |
| shell: bash | |
| run: cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && echo API_GATEWAY_URL=$(terraform output -raw api-gateway-url) >> $GITHUB_ENV | |
| - name: Send request to endpoint | |
| shell: bash | |
| run: sleep 30s; curl -sS ${{ env.API_GATEWAY_URL }} | |
| - name: Initiate Gradlew Daemon | |
| if: steps.initiate-gradlew == 'failure' | |
| uses: ./.github/workflows/actions/execute_and_retry | |
| continue-on-error: true | |
| with: | |
| command: "./gradlew :validator:build" | |
| cleanup: "./gradlew clean" | |
| max_retry: 3 | |
| sleep_time: 60 | |
| - name: Validate generated traces | |
| id: trace-validation | |
| # will be removed after data quality bug fixed | |
| continue-on-error: true | |
| run: ./gradlew validator:run --args='-c java/lambda/trace-validation.yml | |
| --testing-id ${{ env.TESTING_ID }} | |
| --endpoint http://${{ env.API_GATEWAY_URL }} | |
| --region us-east-1 | |
| --account-id ${{ env.ACCOUNT_ID }} | |
| --metric-namespace ${{ env.METRIC_NAMESPACE }} | |
| --log-group ${{ env.LOG_GROUP_NAME }} | |
| --service-name ${{ env.TERRAFORM_LAMBDA_FUNCTION_NAME }} | |
| --rollup' | |
| # Validation for pulse telemetry data | |
| - name: Validate generated EMF logs | |
| id: log-validation | |
| if: (success() || steps.trace-validation.outcome == 'failure') && !cancelled() | |
| # will be removed after data quality bug fixed | |
| continue-on-error: true | |
| run: ./gradlew validator:run --args='-c java/lambda/log-validation.yml | |
| --testing-id ${{ env.TESTING_ID }} | |
| --endpoint http://${{ env.API_GATEWAY_URL }} | |
| --region us-east-1 | |
| --account-id ${{ env.ACCOUNT_ID }} | |
| --metric-namespace ${{ env.METRIC_NAMESPACE }} | |
| --log-group ${{ env.LOG_GROUP_NAME }} | |
| --service-name ${{ env.TERRAFORM_LAMBDA_FUNCTION_NAME }} | |
| --rollup' | |
| - name: Validate generated metrics | |
| id: metric-validation | |
| # will be removed after data quality bug fixed | |
| continue-on-error: true | |
| if: (success() || steps.trace-validation.outcome == 'failure' || steps.log-validation.outcome == 'failure') && !cancelled() | |
| run: ./gradlew validator:run --args='-c java/lambda/metric-validation.yml | |
| --testing-id ${{ env.TESTING_ID }} | |
| --endpoint http://${{ env.API_GATEWAY_URL }} | |
| --region us-east-1 | |
| --account-id ${{ env.ACCOUNT_ID }} | |
| --metric-namespace ${{ env.METRIC_NAMESPACE }} | |
| --log-group ${{ env.LOG_GROUP_NAME }} | |
| --service-name ${{ env.TERRAFORM_LAMBDA_FUNCTION_NAME }} | |
| --rollup' | |
| - name: Refresh AWS Credentials | |
| if: ${{ github.event.repository.name == 'aws-application-signals-test-framework' }} | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/${{ env.E2E_TEST_ROLE_NAME }} | |
| aws-region: ${{ env.E2E_TEST_AWS_REGION }} | |
| - name: Save test results | |
| if: always() | |
| id: validation-result | |
| run: | | |
| if [ "${{ steps.log-validation.outcome }}" = "success" ] && [ "${{ steps.metric-validation.outcome }}" = "success" ] && [ "${{ steps.trace-validation.outcome }}" = "success" ]; then | |
| echo "validation-result=success" >> $GITHUB_OUTPUT | |
| else | |
| echo "validation-result=failure" >> $GITHUB_OUTPUT | |
| fi | |
| # Clean up Procedures | |
| - name: Terraform destroy | |
| if: always() | |
| continue-on-error: true | |
| run: | | |
| cd ${{ env.TEST_RESOURCES_FOLDER }}/terraform/java/lambda/lambda && terraform destroy -auto-approve \ | |
| -var="sdk_layer_name=AWSOpenTelemetryDistroJava-${{ github.run_id }}" \ | |
| -var="function_name=${{env.TERRAFORM_LAMBDA_FUNCTION_NAME}}" \ | |
| -var="layer_artifacts_directory=${{ env.ARTIFACTS_DIR }}" \ | |
| -var="region=${{ env.E2E_TEST_AWS_REGION }}" \ | |
| -var="is_canary=${{ env.IS_CANARY }}" |