Skip to content

feat: Add botocore instrumentation extension for Bedrock AgentCore se… #130

feat: Add botocore instrumentation extension for Bedrock AgentCore se…

feat: Add botocore instrumentation extension for Bedrock AgentCore se… #130

Workflow file for this run

# This workflow build the aws-opentelemetry-distro wheel file, upload to staging S3 bucket, and build project docker image then push to staging ECR
name: Python Instrumentation Main Build
on:
push:
branches:
- main
- "release/v*"
- ci-workflow
workflow_dispatch: # be able to run the workflow on demand
env:
AWS_DEFAULT_REGION: us-east-1
STAGING_ECR_REGISTRY: 637423224110.dkr.ecr.us-east-1.amazonaws.com
STAGING_ECR_REPOSITORY: aws-observability/adot-autoinstrumentation-python-staging
STAGING_S3_BUCKET: ${{ secrets.STAGING_BUCKET_NAME }}
concurrency:
group: python-instrumentation-main-build
cancel-in-progress: false
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
outputs:
aws_default_region: ${{ steps.python_output.outputs.awsDefaultRegion}}
python_image_tag: ${{ steps.python_output.outputs.python_image_tag}}
staging_image: ${{ steps.python_output.outputs.stagingImage}}
staging_registry: ${{ steps.python_output.outputs.stagingRegistry}}
staging_repository: ${{ steps.python_output.outputs.stagingRepository}}
staging_wheel_file: ${{ steps.staging_wheel_output.outputs.STAGING_WHEEL}}
steps:
- name: Checkout Repo @ SHA - ${{ github.sha }}
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #5.0.0
- name: Get Python Distro Output
id: python_output
run: |
pkg_version=$(grep '__version__' ./aws-opentelemetry-distro/src/amazon/opentelemetry/distro/version.py | awk -F '"' '{print $2}')
echo "ADOT_PYTHON_VERSION=$pkg_version" >> $GITHUB_OUTPUT
shortsha="$(git rev-parse --short HEAD)"
echo "SHORT_SHA=$shortsha" >> $GITHUB_ENV
python_distro_tag=$pkg_version-$shortsha
echo "awsDefaultRegion=${{ env.AWS_DEFAULT_REGION }}" >> $GITHUB_OUTPUT
echo "python_image_tag=$python_distro_tag" >> $GITHUB_OUTPUT
echo "stagingRegistry=${{ env.STAGING_ECR_REGISTRY }}" >> $GITHUB_OUTPUT
echo "stagingRepository=${{ env.STAGING_ECR_REPOSITORY }}" >> $GITHUB_OUTPUT
echo "stagingImage=${{ env.STAGING_ECR_REGISTRY }}/${{ env.STAGING_ECR_REPOSITORY }}:$python_distro_tag" >> $GITHUB_OUTPUT
- name: Build and Push Wheel and Image Files
uses: ./.github/actions/artifacts_build
with:
aws-region: ${{ env.AWS_DEFAULT_REGION }}
image_uri_with_tag: ${{ steps.python_output.outputs.stagingImage}}
image_registry: ${{ env.STAGING_ECR_REGISTRY }}
snapshot-ecr-role: ${{ secrets.AWS_ASSUME_ROLE_ARN }}
push_image: true
load_image: false
python_version: "3.10"
package_name: aws-opentelemetry-distro
os: ubuntu-latest
# workaround: prefixing the short-sha with a 0 to create a valid
# wheel file name as per https://peps.python.org/pep-0427/#file-name-convention
- name: Output Wheel File Name
id: staging_wheel_output
run: |
staging_wheel="aws_opentelemetry_distro-${{ steps.python_output.outputs.ADOT_PYTHON_VERSION}}-0${{ env.SHORT_SHA }}-py3-none-any.whl"
echo "STAGING_WHEEL=$staging_wheel" >> $GITHUB_OUTPUT
cd ./dist
cp aws_opentelemetry_distro-${{ steps.python_output.outputs.ADOT_PYTHON_VERSION}}-py3-none-any.whl $staging_wheel
- name: Build and Publish Lambda Staging Layer
uses: ./.github/actions/lambda_artifacts_build
with:
aws-region: ${{ env.AWS_DEFAULT_REGION }}
snapshot-ecr-role: ${{ secrets.AWS_ASSUME_ROLE_ARN }}
python_version: "3.12"
layer_directory: lambda-layer
staging_s3_bucket: ${{ env.STAGING_S3_BUCKET }}
os: ubuntu-latest
- name: Upload wheel to S3
run: |
aws s3 cp dist/${{ steps.staging_wheel_output.outputs.STAGING_WHEEL}} s3://${{ env.STAGING_S3_BUCKET }}
- name: Upload Wheel to GitHub Actions
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 #v4.6.2
with:
name: ${{ steps.staging_wheel_output.outputs.STAGING_WHEEL}}
path: dist/${{ steps.staging_wheel_output.outputs.STAGING_WHEEL}}
- name: Set up and run contract tests with pytest
run: |
bash scripts/set-up-contract-tests.sh
pip install pytest
pytest contract-tests/tests
application-signals-e2e-test:
name: "Application Signals E2E Test"
needs: [ build ]
uses: ./.github/workflows/application-signals-e2e-test.yml
secrets: inherit
permissions:
id-token: write
contents: read
with:
staging-wheel-name: ${{ needs.build.outputs.staging_wheel_file }}
adot-image-name: ${{ needs.build.outputs.staging_registry }}/aws-observability/adot-autoinstrumentation-python-staging:${{ needs.build.outputs.python_image_tag }}
publish-main-build-status:
name: "Publish Main Build Status"
needs: [ build, application-signals-e2e-test ]
runs-on: ubuntu-latest
if: always()
steps:
- name: Configure AWS Credentials for emitting metrics
uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #5.0.0
with:
role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }}
aws-region: ${{ env.AWS_DEFAULT_REGION }}
- name: Publish main build status
run: |
value="${{ needs.build.result == 'success' && needs.application-signals-e2e-test.result == 'success' && '0.0' || '1.0'}}"
aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \
--metric-name Failure \
--dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=main_build \
--value $value