Skip to content

feat: add checkpoint response handling #319

feat: add checkpoint response handling

feat: add checkpoint response handling #319

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"