[Feature]: add plugin interface #604
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| path: language-sdk | |
| - name: Checkout the latest Testing SDK | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| repository: aws/aws-durable-execution-sdk-python-testing | |
| path: testing-sdk | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install Hatch | |
| run: python -m pip install hatch==1.16.5 | |
| - name: Setup and run tests | |
| working-directory: language-sdk | |
| run: | | |
| echo "Running SDK tests..." | |
| hatch run -- test:pip install -e ../testing-sdk | |
| hatch run -- test:pip install -e ../language-sdk | |
| 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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| path: language-sdk | |
| - name: Checkout the latest Testing SDK | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| repository: aws/aws-durable-execution-sdk-python-testing | |
| path: testing-sdk | |
| - name: Set up Python 3.13 | |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 | |
| with: | |
| python-version: '3.13' | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@ec61189d14ec14c8efccab744f656cffd0e33f37 # v6.1.0 | |
| with: | |
| role-to-assume: "${{ secrets.ACTIONS_INTEGRATION_ROLE_NAME }}" | |
| role-session-name: languageSDKIntegrationTest | |
| aws-region: ${{ env.AWS_REGION }} | |
| - name: Install Hatch | |
| run: python -m pip install hatch==1.16.5 | |
| - name: Get integration examples | |
| id: get-examples | |
| working-directory: language-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: language-sdk | |
| env: | |
| AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
| LAMBDA_ENDPOINT: "https://lambda.us-west-2.amazonaws.com" | |
| INVOKE_ACCOUNT_ID: ${{ secrets.INVOKE_ACCOUNT_ID }} | |
| KMS_KEY_ARN: ${{ secrets.KMS_KEY_ARN }} | |
| run: | | |
| echo "Building examples..." | |
| hatch run -- examples:pip install -e ../testing-sdk | |
| 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" |