generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 1
140 lines (117 loc) · 4.93 KB
/
deploy-examples.yml
File metadata and controls
140 lines (117 loc) · 4.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
name: Deploy Python Examples
on:
pull_request:
branches: [ "main", "development"]
paths:
- 'src/aws_durable_execution_sdk_python_testing/**'
- 'examples/**'
- '.github/workflows/deploy-examples.yml'
workflow_dispatch:
env:
AWS_REGION: us-west-2
permissions:
id-token: write
contents: read
jobs:
setup:
runs-on: ubuntu-latest
outputs:
examples: ${{ steps.get-examples.outputs.examples }}
steps:
- uses: actions/checkout@v4
- name: Get examples from catalog
id: get-examples
working-directory: ./examples
run: |
echo "examples=$(jq -c '.examples | map(select(.integration == true))' examples-catalog.json)" >> $GITHUB_OUTPUT
integration-test:
needs: setup
runs-on: ubuntu-latest
name: ${{ matrix.example.name }}
strategy:
matrix:
example: ${{ fromJson(needs.setup.outputs.examples) }}
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Setup SSH Agent
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SDK_KEY }}
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.13'
- name: Configure AWS credentials
if: github.event_name != 'workflow_dispatch' || github.actor != 'nektos/act'
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: "${{ secrets.ACTIONS_INTEGRATION_ROLE_NAME }}"
role-session-name: pythonTestingLibraryGitHubIntegrationTest
aws-region: ${{ env.AWS_REGION }}
- name: Install Hatch
run: pip install hatch
- name: Build examples
run: hatch run examples:build
- name: Deploy Lambda function - ${{ matrix.example.name }}
id: deploy
env:
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
LAMBDA_ENDPOINT: ${{ secrets.LAMBDA_ENDPOINT_BETA }}
KMS_KEY_ARN: ${{ secrets.KMS_KEY_ARN }}
run: |
# Build function name
EXAMPLE_NAME_CLEAN=$(echo "${{ matrix.example.name }}" | sed 's/ //g')
if [ "${{ github.event_name }}" = "pull_request" ]; then
FUNCTION_NAME="${EXAMPLE_NAME_CLEAN}-Python-PR-${{ github.event.number }}"
else
FUNCTION_NAME="${EXAMPLE_NAME_CLEAN}-Python"
fi
# Clean up existing function if present to avoid conflicts
echo "Cleaning up existing function if present..."
aws lambda delete-function \
--function-name "$FUNCTION_NAME" \
--endpoint-url "$LAMBDA_ENDPOINT" \
--region "$AWS_REGION" 2>/dev/null || echo "No existing function to clean up"
# Give AWS time to process the deletion
sleep 5
echo "Deploying ${{ matrix.example.name }} as $FUNCTION_NAME"
hatch run examples:deploy "${{ matrix.example.name }}" --function-name "$FUNCTION_NAME"
# $LATEST is also a qualified version
QUALIFIED_FUNCTION_NAME="${FUNCTION_NAME}:\$LATEST"
# Store both names for later steps
echo "FUNCTION_NAME=$FUNCTION_NAME" >> $GITHUB_ENV
echo "QUALIFIED_FUNCTION_NAME=$QUALIFIED_FUNCTION_NAME" >> $GITHUB_ENV
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "DEPLOYED_FUNCTION_NAME=$FUNCTION_NAME" >> $GITHUB_OUTPUT
echo "QUALIFIED_FUNCTION_NAME=$QUALIFIED_FUNCTION_NAME" >> $GITHUB_OUTPUT
- name: Run Integration Tests - ${{ matrix.example.name }}
env:
AWS_REGION: ${{ env.AWS_REGION }}
LAMBDA_ENDPOINT: ${{ secrets.LAMBDA_ENDPOINT_BETA }}
QUALIFIED_FUNCTION_NAME: ${{ env.QUALIFIED_FUNCTION_NAME }}
LAMBDA_FUNCTION_TEST_NAME: ${{ matrix.example.name }}
run: |
echo "Running integration tests for ${{ matrix.example.name }}"
echo "Function name: ${{ steps.deploy.outputs.DEPLOYED_FUNCTION_NAME }}"
echo "Qualified function name: ${QUALIFIED_FUNCTION_NAME}"
echo "AWS Region: ${AWS_REGION}"
echo "Lambda Endpoint: ${LAMBDA_ENDPOINT}"
# Convert example name to test name: "Hello World" -> "test_hello_world"
TEST_NAME="test_$(echo "${{ matrix.example.name }}" | tr '[:upper:]' '[:lower:]' | tr ' ' '_')"
echo "Test name: ${TEST_NAME}"
# Run integration tests
hatch run test:examples-integration
# Wait for function to be ready
echo "Waiting for function to be active..."
aws lambda wait function-active --function-name "$QUALIFIED_FUNCTION_NAME" --endpoint-url "$LAMBDA_ENDPOINT" --region "$AWS_REGION"
# - name: Cleanup Lambda function
# if: always()
# env:
# LAMBDA_ENDPOINT: ${{ secrets.LAMBDA_ENDPOINT_BETA }}
# run: |
# echo "Deleting function: $FUNCTION_NAME"
# aws lambda delete-function \
# --function-name "$FUNCTION_NAME" \
# --endpoint-url "$LAMBDA_ENDPOINT" \
# --region "${{ env.AWS_REGION }}" || echo "Function already deleted or doesn't exist"