Update api_sqs_lambda_stack.py -- fix the python 3.7 unsupported problem #1840
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 of the workflow | |
name: Build Pull Request | |
# Trigger the workflow on pull requests | |
on: | |
pull_request: | |
# Only run the workflow when non-Markdown files are changed | |
paths: | |
- '**' | |
jobs: | |
build: | |
# Run the job on the latest Ubuntu runner | |
runs-on: ubuntu-latest | |
# Define a matrix strategy to run the job for multiple languages | |
strategy: | |
matrix: | |
language: ['csharp', 'go', 'python', 'java', 'typescript'] | |
steps: | |
# Checkout the code from the repository | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
# Set up the required environment for the specified language | |
- name: Setup Language | |
uses: ./.github/actions/setup-language | |
with: | |
language: ${{ matrix.language }} | |
# Get the list of changed files, excluding Markdown files and deleted files | |
- name: Get changed files | |
id: changed-files | |
uses: tj-actions/changed-files@115870536a85eaf050e369291c7895748ff12aea | |
with: | |
files: ${{ matrix.language }}/** | |
files_ignore: '**/*.md' | |
files_separator: ' ' | |
# Build the changed files for the specified language | |
- name: Build changed files | |
if: steps.changed-files.outputs.any_changed == 'true' | |
run: | | |
# Create a temporary directory for build logs | |
mkdir -p /tmp/build_logs | |
yarn global add eslint@latest | |
yarn global add aws-cdk@latest | |
# Function to build a single file | |
build_file() { | |
echo "Build File $1" | |
local file="$1" | |
local log_file="/tmp/build_logs/$(basename "$file" | sed 's/\//_/g').log" | |
IFS="/" read -ra path_parts <<< "$file" | |
language=${path_parts[0]} | |
# Skip files that don't belong to the current language | |
if [[ $language != ${{ matrix.language }} ]]; then | |
return 0 | |
fi | |
echo "Build Path $file" | |
# Run the build script for the current language, passing the project directory and extra path | |
echo "::group::Building $file" | |
# Run the build command and capture output to both the log file and stdout | |
../scripts/build-${language}.sh "$file" 2>&1 | tee "$log_file" | |
local exit_code=${PIPESTATUS[0]} | |
if [ $exit_code -eq 0 ]; then | |
echo "✅ Build succeeded for $file" | |
# Clean up node_modules and cdk.out for this project immediately after successful build | |
echo "Cleaning up build artifacts for $(dirname "$file")" | |
local project_dir=$(dirname "$file") | |
# Remove node_modules directory if it exists | |
if [ -d "$project_dir/node_modules" ]; then | |
echo "Removing $project_dir/node_modules" | |
rm -rf "$project_dir/node_modules" | |
fi | |
# Remove cdk.out directory if it exists | |
if [ -d "$project_dir/cdk.out" ]; then | |
echo "Removing $project_dir/cdk.out" | |
rm -rf "$project_dir/cdk.out" | |
fi | |
else | |
echo "❌ Build failed for $file with exit code $exit_code" | |
echo "::error::Build failed for $file with exit code $exit_code" | |
fi | |
echo "::endgroup::" | |
return $exit_code | |
} | |
# Export the build_file function for use in parallel | |
export -f build_file | |
# Create an array to store directories to be built | |
apps_to_build=() | |
# Use only added and modified files, ignoring deleted files | |
files=(${{ steps.changed-files.outputs.added_files }} ${{ steps.changed-files.outputs.modified_files }}) | |
# Check the directories of each changed file for cdk.json | |
for file in "${files[@]}"; do | |
IFS="/" read -ra path_parts <<< "$file" | |
language=${path_parts[0]} | |
dir="${path_parts[0]}/${path_parts[1]}" | |
# Skip files that don't belong to the current language | |
if [[ $language != ${{ matrix.language }} ]]; then | |
continue | |
fi | |
apps_to_build+=("$(find "$dir" -name 'cdk.json')") | |
done | |
# Remove duplicate projects | |
apps_to_build=($(printf "%s\n" "${apps_to_build[@]}" | sort -u)) | |
# Print the projects to be built | |
echo "projects to build:" | |
for dir in "${apps_to_build[@]}"; do | |
echo "- $dir" | |
done | |
# Change to language directory | |
cd ./${{ matrix.language }} | |
# Run the build_file function for each project to be built | |
echo "::group::Build Output" | |
echo "Starting builds for all projects..." | |
# Track failed builds | |
failed_builds=() | |
# Process each project one by one with clear grouping | |
for app in "${apps_to_build[@]}"; do | |
echo "::group::Building $app" | |
# Run the build directly | |
set +e # Don't exit on error | |
../scripts/build-${language}.sh "$app" | |
build_exit=$? | |
set -e # Re-enable exit on error | |
if [ $build_exit -ne 0 ]; then | |
echo "❌ BUILD FAILED: $app (exit code $build_exit)" | |
failed_builds+=("$app") | |
else | |
echo "✅ BUILD SUCCEEDED: $app" | |
fi | |
echo "::endgroup::" | |
done | |
echo "::endgroup::" | |
# Print summary outside of any group | |
echo "" | |
echo "====== BUILD SUMMARY ======" | |
if [ ${#failed_builds[@]} -gt 0 ]; then | |
echo "❌ FAILED BUILDS:" | |
for failed in "${failed_builds[@]}"; do | |
echo " - $failed" | |
done | |
parallel_exit=1 | |
else | |
echo "✅ ALL BUILDS SUCCEEDED" | |
parallel_exit=0 | |
fi | |
echo "==========================" | |
echo "" | |
# If parallel failed, make sure the workflow fails too | |
if [ $parallel_exit -ne 0 ]; then | |
echo "::error::One or more builds failed. See build summary above for details." | |
exit $parallel_exit | |
else | |
echo "✅ All builds completed successfully!" | |
fi |