feat: add checkpoint response handling #325
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
| name: Integration Tests | |
| on: | |
| pull_request: | |
| branches: [ main ] | |
| permissions: | |
| contents: read | |
| id-token: write | |
| jobs: | |
| integration-tests: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.13"] | |
| steps: | |
| - name: Checkout Language SDK (this PR) | |
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | |
| with: | |
| path: language-sdk | |
| - name: Parse testing SDK branch from PR body | |
| id: parse | |
| run: python language-sdk/ops/parse_sdk_branch.py | |
| env: | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| - name: Checkout Testing SDK | |
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | |
| with: | |
| repository: aws/aws-durable-execution-sdk-python-testing | |
| ref: ${{ steps.parse.outputs.testing_ref }} | |
| token: ${{ secrets.CROSS_REPO_PAT }} | |
| path: testing-sdk | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install Hatch | |
| run: python -m pip install hatch==1.15.0 | |
| - name: Setup and run Testing SDK | |
| working-directory: testing-sdk | |
| env: | |
| AWS_DURABLE_SDK_URL: file://${{ github.workspace }}/language-sdk | |
| run: | | |
| echo "Running Testing SDK tests against Language SDK PR changes..." | |
| echo "Using Language SDK from: $AWS_DURABLE_SDK_URL" | |
| python -m pip install -e . | |
| hatch fmt --check | |
| hatch run types:check | |
| hatch run test:cov | |
| hatch run test:examples | |
| hatch build | |
| e2e-tests: | |
| needs: integration-tests | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| env: | |
| AWS_REGION: us-west-2 | |
| steps: | |
| - name: Checkout Language SDK (this PR) | |
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | |
| with: | |
| path: language-sdk | |
| - name: Parse testing SDK branch from PR body | |
| id: parse | |
| run: python language-sdk/ops/parse_sdk_branch.py | |
| env: | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| - name: Checkout Testing SDK | |
| uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 | |
| with: | |
| repository: aws/aws-durable-execution-sdk-python-testing | |
| ref: ${{ steps.parse.outputs.testing_ref }} | |
| token: ${{ secrets.CROSS_REPO_PAT }} | |
| path: testing-sdk | |
| - name: Set up Python 3.13 | |
| uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 | |
| with: | |
| python-version: '3.13' | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1 | |
| with: | |
| role-to-assume: "${{ secrets.ACTIONS_INTEGRATION_ROLE_NAME }}" | |
| role-session-name: languageSDKIntegrationTest | |
| aws-region: ${{ env.AWS_REGION }} | |
| - name: Install Hatch and setup Testing SDK | |
| working-directory: testing-sdk | |
| env: | |
| AWS_DURABLE_SDK_URL: file://${{ github.workspace }}/language-sdk | |
| run: | | |
| pip install hatch==1.15.0 | |
| python -m pip install -e . | |
| - name: Get integration examples | |
| id: get-examples | |
| working-directory: testing-sdk/examples | |
| run: | | |
| echo "examples=$(jq -c '.examples | map(select(.integration == true)) | .[0:2]' examples-catalog.json)" >> $GITHUB_OUTPUT | |
| - name: Install AWS CLI v2 | |
| run: | | |
| curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "/tmp/awscliv2.zip" | |
| unzip -q /tmp/awscliv2.zip -d /tmp | |
| rm /tmp/awscliv2.zip | |
| sudo /tmp/aws/install --update | |
| rm -rf /tmp/aws/ | |
| - name: Deploy and test examples | |
| working-directory: testing-sdk | |
| env: | |
| AWS_DURABLE_SDK_URL: file://${{ github.workspace }}/language-sdk | |
| AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
| LAMBDA_ENDPOINT: ${{ secrets.LAMBDA_ENDPOINT }} | |
| INVOKE_ACCOUNT_ID: ${{ secrets.INVOKE_ACCOUNT_ID }} | |
| KMS_KEY_ARN: ${{ secrets.KMS_KEY_ARN }} | |
| run: | | |
| echo "Building examples..." | |
| hatch run examples:build | |
| # Get first integration example for testing | |
| EXAMPLE_NAME=$(echo '${{ steps.get-examples.outputs.examples }}' | jq -r '.[0].name') | |
| EXAMPLE_NAME_CLEAN=$(echo "$EXAMPLE_NAME" | sed 's/ //g') | |
| FUNCTION_NAME="${EXAMPLE_NAME_CLEAN}-LanguageSDK-PR-${{ github.event.number }}" | |
| echo "Deploying example: $EXAMPLE_NAME as $FUNCTION_NAME" | |
| hatch run examples:deploy "$EXAMPLE_NAME" --function-name "$FUNCTION_NAME" | |
| QUALIFIED_FUNCTION_NAME="$FUNCTION_NAME:\$LATEST" | |
| echo "Waiting for function to be ready..." | |
| aws lambda wait function-active --function-name "$FUNCTION_NAME" --endpoint-url "$LAMBDA_ENDPOINT" --region "${{ env.AWS_REGION }}" | |
| echo "Invoking Lambda function: $QUALIFIED_FUNCTION_NAME" | |
| aws lambda invoke \ | |
| --function-name "$QUALIFIED_FUNCTION_NAME" \ | |
| --cli-binary-format raw-in-base64-out \ | |
| --payload '{"name": "World"}' \ | |
| --region "${{ env.AWS_REGION }}" \ | |
| --endpoint-url "$LAMBDA_ENDPOINT" \ | |
| /tmp/response.json \ | |
| > /tmp/invoke_response.json | |
| echo "Response:" | |
| cat /tmp/response.json | |
| # Check for function errors | |
| FUNCTION_ERROR=$(jq -r '.FunctionError // empty' /tmp/invoke_response.json) | |
| if [ -n "$FUNCTION_ERROR" ]; then | |
| echo "ERROR: Lambda function failed with error: $FUNCTION_ERROR" | |
| cat /tmp/response.json | |
| exit 1 | |
| fi | |
| echo "Getting durable executions..." | |
| aws lambda list-durable-executions-by-function \ | |
| --function-name "$QUALIFIED_FUNCTION_NAME" \ | |
| --statuses SUCCEEDED \ | |
| --region "${{ env.AWS_REGION }}" \ | |
| --endpoint-url "$LAMBDA_ENDPOINT" \ | |
| --cli-binary-format raw-in-base64-out \ | |
| > /tmp/executions.json | |
| echo "Durable Executions:" | |
| cat /tmp/executions.json | |
| # Cleanup | |
| echo "Cleaning up function: $FUNCTION_NAME" | |
| aws lambda delete-function \ | |
| --function-name "$FUNCTION_NAME" \ | |
| --endpoint-url "$LAMBDA_ENDPOINT" \ | |
| --region "${{ env.AWS_REGION }}" || echo "Function cleanup failed or already deleted" |