diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index fdefded..5d00ea0 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -5,7 +5,7 @@ body: - type: markdown attributes: value: | - Thanks for reporting a problem with a sample. If LocalStack itself behaves differently from the cloud provider, please report it in [localstack/localstack](https://github.com/localstack/localstack/issues) instead. + Thanks for reporting a problem with a sample. If LocalStack itself behaves differently from the cloud provider, please [start a discussion](https://github.com/orgs/localstack/discussions) in the LocalStack community instead. - type: checkboxes attributes: label: Is there an existing issue for this? diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index fc3b8bc..efddb28 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: true contact_links: - name: Bug in LocalStack itself - url: https://github.com/localstack/localstack/issues - about: An API or service behaves differently from the cloud provider? Report it to LocalStack. + url: https://github.com/orgs/localstack/discussions + about: An API or service behaves differently from the cloud provider? Start a discussion in the LocalStack community. - name: LocalStack Community Slack url: https://localstack.cloud/slack about: Ask questions and get help running a sample. diff --git a/.github/workflows/status.yml b/.github/workflows/status.yml new file mode 100644 index 0000000..b4c6d1b --- /dev/null +++ b/.github/workflows/status.yml @@ -0,0 +1,61 @@ +name: Update STATUS.md + +on: + schedule: + # Mondays at 06:00 UTC + - cron: "0 6 * * 1" + workflow_dispatch: + push: + branches: + - main + paths: + - scripts/generate_status.py + - status.toml + - .github/workflows/status.yml + # Pull requests only check that the generator runs; nothing is committed + pull_request: + paths: + - scripts/generate_status.py + - status.toml + - .github/workflows/status.yml + +permissions: + contents: write + +concurrency: + group: status-md-${{ github.ref }} + cancel-in-progress: false + +jobs: + update: + name: Generate STATUS.md + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Generate STATUS.md + env: + GITHUB_TOKEN: ${{ github.token }} + run: python scripts/generate_status.py + + - name: Show the changes + run: git diff --stat -- STATUS.md + + - name: Commit STATUS.md + if: github.event_name != 'pull_request' + run: | + git add STATUS.md + if git diff --cached --quiet; then + echo "STATUS.md is up to date" + exit 0 + fi + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git commit -m "Update STATUS.md" + git push diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 63ca7eb..fa0b9d0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ Open issues in the repository of the sample they are about, and search its exist - **A sample does not deploy, or its test fails:** use the **Sample bug report** form. Include how you started LocalStack, the LocalStack version, the commands you ran and the error output. - **You would like a new sample:** use the **Sample request** form and describe the scenario and the services it should cover. -- **LocalStack itself behaves differently from the cloud provider**, for example an API returns the wrong result: report it in [localstack/localstack](https://github.com/localstack/localstack/issues) instead, with the sample as a reproduction. +- **LocalStack itself behaves differently from the cloud provider**, for example an API returns the wrong result: [start a discussion](https://github.com/orgs/localstack/discussions) in the LocalStack community instead, with the sample as a reproduction. - **Questions and help:** ask in the [LocalStack Community Slack](https://localstack.cloud/slack). ## Pull requests diff --git a/README.md b/README.md index 796be4a..e4541d8 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,5 @@ Organization-wide defaults for [localstack-samples](https://github.com/localstac | [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md), [`CONTRIBUTING.md`](CONTRIBUTING.md) | Shown in every repository that does not have its own. | | [`.github/ISSUE_TEMPLATE/`](.github/ISSUE_TEMPLATE/), [`.github/PULL_REQUEST_TEMPLATE.md`](.github/PULL_REQUEST_TEMPLATE.md) | The default issue forms and pull request template. A repository with its own `.github/ISSUE_TEMPLATE` folder or pull request template uses those instead. | | [`workflow-templates/`](workflow-templates/) | The **LocalStack sample CI** workflow, offered in every repository under **Actions → New workflow**. | +| [`STATUS.md`](STATUS.md) | CI status of every public, unarchived repository, regenerated weekly (or on demand) by the [`status.yml`](.github/workflows/status.yml) workflow from [`scripts/generate_status.py`](scripts/generate_status.py). Exceptions to its rules go in [`status.toml`](status.toml). | | [`assets/`](assets/) | Images used by the profile. | diff --git a/STATUS.md b/STATUS.md new file mode 100644 index 0000000..ea5a64c --- /dev/null +++ b/STATUS.md @@ -0,0 +1,111 @@ +# Sample status + + + +CI status of the 76 public, unarchived repositories in [localstack-samples](https://github.com/localstack-samples). Each badge shows the latest run of the sample's main test workflow on its default branch; select it to see the runs. "CI disabled" means GitHub turned the workflow off after 60 days without activity. The [Update STATUS.md](https://github.com/localstack-samples/.github/actions/workflows/status.yml) workflow regenerates this page every week. + +## AWS + +| Sample | Description | CI | +|---|---|---| +| [amazon-managed-service-for-apache-flink-examples](https://github.com/localstack-samples/amazon-managed-service-for-apache-flink-examples) | Amazon Managed Service for Apache Flink applications, organized by language and use case, running on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/amazon-managed-service-for-apache-flink-examples/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/amazon-managed-service-for-apache-flink-examples/actions/workflows/main.yml) | +| [aurora-serverless-v2](https://github.com/localstack-samples/aurora-serverless-v2) | Simple Aurora Serverless V2 with Lambda and APIGW deployed on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/aurora-serverless-v2/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/aurora-serverless-v2/actions/workflows/main.yml) | +| [aws-atproto-demo](https://github.com/localstack-samples/aws-atproto-demo) | A basic demo of consuming the ATProto firehose in AWS. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/aws-atproto-demo/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/aws-atproto-demo/actions/workflows/main.yml) | +| [aws-deep-dives](https://github.com/localstack-samples/aws-deep-dives) | A series of examples that will dig into using popular AWS services | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/aws-deep-dives/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/aws-deep-dives/actions/workflows/main.yml) | +| [aws-for-frontend-devs](https://github.com/localstack-samples/aws-for-frontend-devs) | A series of examples exploring the AWS primitives needed to deploy a web application to AWS. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/aws-for-frontend-devs/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/aws-for-frontend-devs/actions/workflows/main.yml) | +| [cloudformation-registry-demo](https://github.com/localstack-samples/cloudformation-registry-demo) | A WIP demonstration of using the CloudFormation registry in LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/cloudformation-registry-demo/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/cloudformation-registry-demo/actions/workflows/main.yml) | +| [durable-serverlesspresso](https://github.com/localstack-samples/durable-serverlesspresso) | singledigit/durable-serverlesspresso running on LocalStack, with Jest and Playwright tests (branch localstack-tests) | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/durable-serverlesspresso/integration-test.yml?branch=localstack-tests&label=CI)](https://github.com/localstack-samples/durable-serverlesspresso/actions/workflows/integration-test.yml) | +| [ecs-code-mounting-python-cdk](https://github.com/localstack-samples/ecs-code-mounting-python-cdk) | Sample application showcasing how to use the ECS Code Mounting feature with AWS CDK in Python. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/ecs-code-mounting-python-cdk/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/ecs-code-mounting-python-cdk/actions/workflows/ci.yml) | +| [kirocrew-demo](https://github.com/localstack-samples/kirocrew-demo) | A simple demo showing how to automate a local test using KiroCrew and LocalStack | No CI | +| [lambda-sam-authorizer](https://github.com/localstack-samples/lambda-sam-authorizer) | AWS Serverless Application Model (SAM) with LocalStack Lambda and Authorizer | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/lambda-sam-authorizer/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/lambda-sam-authorizer/actions/workflows/main.yml) | +| [local-testing-ses-emails-mailhog](https://github.com/localstack-samples/local-testing-ses-emails-mailhog) | Local Testing of SES Workflows Using LocalStack & MailHog Extension | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/local-testing-ses-emails-mailhog/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/local-testing-ses-emails-mailhog/actions/workflows/ci.yml) | +| [localstack-aws-samples](https://github.com/localstack-samples/localstack-aws-samples) | Next iteration of localstack-pro-samples with IaC deployments and tested by LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-aws-samples/test.yml?branch=main&label=CI)](https://github.com/localstack-samples/localstack-aws-samples/actions/workflows/test.yml) | +| [localstack-demo](https://github.com/localstack-samples/localstack-demo) | Simple demo application deployed using LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-demo/integration-test.yml?branch=master&label=CI)](https://github.com/localstack-samples/localstack-demo/actions/workflows/integration-test.yml) | +| [localstack-pro-samples](https://github.com/localstack-samples/localstack-pro-samples) | Sample projects to demonstrate advanced LocalStack features | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-pro-samples/test.yml?branch=master&label=CI)](https://github.com/localstack-samples/localstack-pro-samples/actions/workflows/test.yml) | +| [localstack-swag-store](https://github.com/localstack-samples/localstack-swag-store) | Gamified swag store application showcasing the entire LocalStack platform — AWS emulation, Cloud Pods, Chaos Engineering, IAM Policy Stream, Application Inspector, and end-to-end testing. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-swag-store/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/localstack-swag-store/actions/workflows/ci.yml) | +| [localstack-terraform-samples](https://github.com/localstack-samples/localstack-terraform-samples) | Repository with terraform samples for LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-terraform-samples/makefile.yml?branch=master&label=CI)](https://github.com/localstack-samples/localstack-terraform-samples/actions/workflows/makefile.yml) | +| [lstk-aws-demo](https://github.com/localstack-samples/lstk-aws-demo) | Quick lstk CLI demo: deploy a real S3 static website via Terraform on the LocalStack AWS emulator | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/lstk-aws-demo/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/lstk-aws-demo/actions/workflows/main.yml) | +| [powertools-typescript-demos](https://github.com/localstack-samples/powertools-typescript-demos) | AWS Powertools for TypeScript Running in LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/powertools-typescript-demos/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/powertools-typescript-demos/actions/workflows/main.yml) | +| [rds-proxy-terraform-sample](https://github.com/localstack-samples/rds-proxy-terraform-sample) | Demo project using RDS, RDS Proxy, Terraform, with different auth methods for interacting with the database | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/rds-proxy-terraform-sample/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/rds-proxy-terraform-sample/actions/workflows/main.yml) | +| [sample-amplify-gen2-todo-app](https://github.com/localstack-samples/sample-amplify-gen2-todo-app) | Todo app built with AWS Amplify Gen 2 (Cognito, AppSync, DynamoDB) and deployed to LocalStack with ampx sandbox. Shows the Amplify Gen 2 developer sandbox running entirely locally, with a React frontend and an end-to-end test. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-amplify-gen2-todo-app/integration-test.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-amplify-gen2-todo-app/actions/workflows/integration-test.yml) | +| [sample-anti-corruption-layer-pattern](https://github.com/localstack-samples/sample-anti-corruption-layer-pattern) | Sample application demonstrating Anti-Corruption Layer pattern with API Gateway, DynamoDB, and Lambda! | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-anti-corruption-layer-pattern/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-anti-corruption-layer-pattern/actions/workflows/main.yml) | +| [sample-appsync-graphql-api](https://github.com/localstack-samples/sample-appsync-graphql-api) | Proxy data from different resources such as DynamoDB tables & RDS databases using AppSync GraphQL APIs deployed using Serverless Framework on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-appsync-graphql-api/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-appsync-graphql-api/actions/workflows/main.yml) | +| [sample-athena-glue-s3-data-lake-query](https://github.com/localstack-samples/sample-athena-glue-s3-data-lake-query) | Build and test a data analytics pipeline to query structured data in S3 using Athena and Glue on LocalStack. Demonstrates local Big Data testing and using the Resource Browser for interactive SQL queries. | [![CI: disabled](https://img.shields.io/badge/CI-disabled-lightgrey)](https://github.com/localstack-samples/sample-athena-glue-s3-data-lake-query/actions/workflows/main.yml) | +| [sample-cdk-cognito-dynamodb-api-gateway](https://github.com/localstack-samples/sample-cdk-cognito-dynamodb-api-gateway) | Step-up Authentication using Amazon Cognito, DynamoDB, API Gateway Lambda Authorizer, and Lambda functions deployed using LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-cognito-dynamodb-api-gateway/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-cognito-dynamodb-api-gateway/actions/workflows/main.yml) | +| [sample-cdk-ecs-fargate-hot-reloading-debugging](https://github.com/localstack-samples/sample-cdk-ecs-fargate-hot-reloading-debugging) | Deploy a containerized Node.js app on ECS Fargate with an ALB using AWS CDK. Showcases ECS code-mounting for hot-reloading and remote debugging capabilities for rapid development cycles on LocalStack. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-ecs-fargate-hot-reloading-debugging/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-ecs-fargate-hot-reloading-debugging/actions/workflows/ci.yml) | +| [sample-cdk-event-bridge-microservices](https://github.com/localstack-samples/sample-cdk-event-bridge-microservices) | Cross-region and cross-account EventBridge buses with Lambda functions, deployed with CDK on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-event-bridge-microservices/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-event-bridge-microservices/actions/workflows/ci.yml) | +| [sample-cdk-kinesis-firehose-redshift](https://github.com/localstack-samples/sample-cdk-kinesis-firehose-redshift) | LocalStack sample CDK app deploying a Kinesis Event Stream to Data Firehose to Redshift data pipeline, including sample producer and consumer | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-kinesis-firehose-redshift/main.yaml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-kinesis-firehose-redshift/actions/workflows/main.yaml) | +| [sample-cdk-sqs-fargate-dynamodb](https://github.com/localstack-samples/sample-cdk-sqs-fargate-dynamodb) | SQS Fargate sample adapted to run on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-sqs-fargate-dynamodb/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-sqs-fargate-dynamodb/actions/workflows/ci.yml) | +| [sample-cdk-typescript-hot-reloading](https://github.com/localstack-samples/sample-cdk-typescript-hot-reloading) | Hot reloading TypeScript Lambda functions deployed with CDK on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-typescript-hot-reloading/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-typescript-hot-reloading/actions/workflows/ci.yml) | +| [sample-dms-cdc-rds-to-kinesis](https://github.com/localstack-samples/sample-dms-cdc-rds-to-kinesis) | Showcases real-time data replication from RDS (MariaDB) to Kinesis using AWS DMS on LocalStack. Implements both full-load and Change Data Capture (CDC) tasks to stream database changes for analytics. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-dms-cdc-rds-to-kinesis/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-dms-cdc-rds-to-kinesis/actions/workflows/ci.yml) | +| [sample-dms-postgresql-kinesis](https://github.com/localstack-samples/sample-dms-postgresql-kinesis) | Sample Application showcasing how to use Aurora PostgreSQL as a source and kinesis as a target in DMS to create a cdc task using the CDK in Python | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-dms-postgresql-kinesis/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-dms-postgresql-kinesis/actions/workflows/ci.yml) | +| [sample-dms-s3-kinesis](https://github.com/localstack-samples/sample-dms-s3-kinesis) | Sample Application showcasing how to use s3 as a source and kinesis as a target to create full-load and cdc tasks using the CDK in Python | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-dms-s3-kinesis/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-dms-s3-kinesis/actions/workflows/ci.yml) | +| [sample-durable-functions-order-processing](https://github.com/localstack-samples/sample-durable-functions-order-processing) | Order processing workflow built with AWS Lambda Durable Functions, deployed and tested locally on LocalStack with CDK | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-durable-functions-order-processing/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-durable-functions-order-processing/actions/workflows/main.yml) | +| [sample-dynamodb-kinesisfirehose-s3-ingestion](https://github.com/localstack-samples/sample-dynamodb-kinesisfirehose-s3-ingestion) | DynamoDB ingestion into S3 with Kinesis Data Streams and Kinesis Data Firehose | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-dynamodb-kinesisfirehose-s3-ingestion/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-dynamodb-kinesisfirehose-s3-ingestion/actions/workflows/main.yml) | +| [sample-eventbridge-producer-consumer](https://github.com/localstack-samples/sample-eventbridge-producer-consumer) | Simple producer/consumer example for EventBridge deployed using LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-eventbridge-producer-consumer/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/sample-eventbridge-producer-consumer/actions/workflows/main.yml) | +| [sample-fuzzy-movie-search-lambda-kinesis-elasticsearch](https://github.com/localstack-samples/sample-fuzzy-movie-search-lambda-kinesis-elasticsearch) | Application to host a website for fuzzy-searching a movie database | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-fuzzy-movie-search-lambda-kinesis-elasticsearch/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-fuzzy-movie-search-lambda-kinesis-elasticsearch/actions/workflows/main.yml) | +| [sample-go-ecs-dynamodb](https://github.com/localstack-samples/sample-go-ecs-dynamodb) | Golang webservice with Elastic Container Service, Application Load Balancer, and DynamoDB | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-go-ecs-dynamodb/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-go-ecs-dynamodb/actions/workflows/ci.yml) | +| [sample-lambda-neo4j](https://github.com/localstack-samples/sample-lambda-neo4j) | Integrating a local Lambda function with Neo4j using LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-lambda-neo4j/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-lambda-neo4j/actions/workflows/main.yml) | +| [sample-lambda-s3-image-resizer-hot-reload](https://github.com/localstack-samples/sample-lambda-s3-image-resizer-hot-reload) | A serverless application that automatically resizes images on S3 upload using Lambda. Showcases Lambda hot reloading for rapid development, integration testing, and S3 event-driven architecture on LocalStack. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-lambda-s3-image-resizer-hot-reload/integration-test.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-lambda-s3-image-resizer-hot-reload/actions/workflows/integration-test.yml) | +| [sample-loan-broker-stepfunctions-lambda](https://github.com/localstack-samples/sample-loan-broker-stepfunctions-lambda) | Loan Broker application using Step Functions, DynamoDB, Lambda, SQS, and SNS. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-loan-broker-stepfunctions-lambda/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-loan-broker-stepfunctions-lambda/actions/workflows/main.yml) | +| [sample-microservices-apigateway-lambda-dynamodb-sqs](https://github.com/localstack-samples/sample-microservices-apigateway-lambda-dynamodb-sqs) | Serverless Microservices with Amazon API Gateway, DynamoDB, SQS, and Lambda deployed using LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-microservices-apigateway-lambda-dynamodb-sqs/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-microservices-apigateway-lambda-dynamodb-sqs/actions/workflows/main.yml) | +| [sample-mnist-digit-recognition-sagemaker](https://github.com/localstack-samples/sample-mnist-digit-recognition-sagemaker) | Demo to run the MNIST handwritten digit model on a locally running SageMaker endpoint | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-mnist-digit-recognition-sagemaker/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-mnist-digit-recognition-sagemaker/actions/workflows/main.yml) | +| [sample-notes-app-dynamodb-lambda-apigateway](https://github.com/localstack-samples/sample-notes-app-dynamodb-lambda-apigateway) | A simple note taking application using modular AWS SDK for JavaScript (v3) | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-notes-app-dynamodb-lambda-apigateway/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-notes-app-dynamodb-lambda-apigateway/actions/workflows/main.yml) | +| [sample-ollama-ecs-fargate-alb](https://github.com/localstack-samples/sample-ollama-ecs-fargate-alb) | AI chatbot with Ollama on ECS Fargate behind an Application Load Balancer, running on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-ollama-ecs-fargate-alb/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-ollama-ecs-fargate-alb/actions/workflows/main.yml) | +| [sample-pipes-kinesis-lambda-streaming](https://github.com/localstack-samples/sample-pipes-kinesis-lambda-streaming) | This demo, demonstrates deploying and testing an EventBridge Pipe with the following flow: Kinesis source stream to Lambda enrichment to Kinesis target stream. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-pipes-kinesis-lambda-streaming/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-pipes-kinesis-lambda-streaming/actions/workflows/ci.yml) | +| [sample-sam-sns-fifo-dynamodb-lambda](https://github.com/localstack-samples/sample-sam-sns-fifo-dynamodb-lambda) | The sample application demonstrates a recruiting agency application with a job listings website. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-sam-sns-fifo-dynamodb-lambda/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/sample-sam-sns-fifo-dynamodb-lambda/actions/workflows/main.yml) | +| [sample-serverless-rds-proxy-demo](https://github.com/localstack-samples/sample-serverless-rds-proxy-demo) | This sample demonstrates benefits of using RDS proxy in terms of connection pooling and elasticity | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-serverless-rds-proxy-demo/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-serverless-rds-proxy-demo/actions/workflows/main.yml) | +| [sample-serverless-shopping-cart-apigateway-lambda-cognito](https://github.com/localstack-samples/sample-serverless-shopping-cart-apigateway-lambda-cognito) | Serverless Shopping Cart is a sample implementation of a serverless shopping cart for an e-commerce website. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-serverless-shopping-cart-apigateway-lambda-cognito/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/sample-serverless-shopping-cart-apigateway-lambda-cognito/actions/workflows/main.yml) | +| [sample-sqs-lambda-dynamodb](https://github.com/localstack-samples/sample-sqs-lambda-dynamodb) | Event-driven architecture showcasing an inventory management system with SQS, Lambda, and DynamoDB! | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-sqs-lambda-dynamodb/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-sqs-lambda-dynamodb/actions/workflows/main.yml) | +| [sample-terraform-cognito-expense-claims](https://github.com/localstack-samples/sample-terraform-cognito-expense-claims) | Expense claims portal on LocalStack showing Amazon Cognito hosted UI with PKCE, a JWT authorizer backed by the pool's JWKS, TOTP multi-factor sign-in, and client-credentials tokens, deployed with Terraform | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-terraform-cognito-expense-claims/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-terraform-cognito-expense-claims/actions/workflows/main.yml) | +| [sample-terraform-ecs-apigateway](https://github.com/localstack-samples/sample-terraform-ecs-apigateway) | Serverless Container-based APIs with Amazon ECS and Amazon API Gateway deployed using LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-terraform-ecs-apigateway/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-terraform-ecs-apigateway/actions/workflows/main.yml) | +| [serverless-data-processing-pipeline](https://github.com/localstack-samples/serverless-data-processing-pipeline) | API Gateway -> Lambda -> Kinesis Stream -> Lambda -> DynamoDB -> DynamoDB stream -> Lambda -> Postgres | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/serverless-data-processing-pipeline/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/serverless-data-processing-pipeline/actions/workflows/main.yml) | +| [serverless-python-rest-api-with-dynamodb](https://github.com/localstack-samples/serverless-python-rest-api-with-dynamodb) | Serverless CRUD service exposing a REST HTTP interface integrated with LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/serverless-python-rest-api-with-dynamodb/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/serverless-python-rest-api-with-dynamodb/actions/workflows/main.yml) | +| [weather-app-lambda-rds-apigw](https://github.com/localstack-samples/weather-app-lambda-rds-apigw) | Small sample application demonstrating LocalStack working with RDS, Lambda, API Gateway, VPC, private subnets, NAT Gateway, Internet Gateway. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/weather-app-lambda-rds-apigw/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/weather-app-lambda-rds-apigw/actions/workflows/main.yml) | +| [wordpress-ecs-rds-cdk](https://github.com/localstack-samples/wordpress-ecs-rds-cdk) | Deploy Wordpress with ECS and RDS using CDK | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/wordpress-ecs-rds-cdk/integration-test.yml?branch=main&label=CI)](https://github.com/localstack-samples/wordpress-ecs-rds-cdk/actions/workflows/integration-test.yml) | + +## Snowflake + +| Sample | Description | CI | +|---|---|---| +| [localstack-snowflake-samples](https://github.com/localstack-samples/localstack-snowflake-samples) | Examples & use-cases around LocalStack for Snowflake | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-snowflake-samples/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/localstack-snowflake-samples/actions/workflows/main.yml) | +| [polaris-demo](https://github.com/localstack-samples/polaris-demo) | Apache Polaris catalog with LocalStack for Snowflake and Trino for local Iceberg development | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/polaris-demo/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/polaris-demo/actions/workflows/main.yml) | +| [snowflake-smart-factory-app](https://github.com/localstack-samples/snowflake-smart-factory-app) | End-to-end smart-factory pipeline on LocalStack’s Snowflake emulator: S3 → Snowpipe → dbt → Dagster + Streamlit dashboard, real-time SES alerts, and zero-copy clone recovery. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/snowflake-smart-factory-app/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/snowflake-smart-factory-app/actions/workflows/ci.yml) | + +## Azure + +| Sample | Description | CI | +|---|---|---| +| [aks-samples](https://github.com/localstack-samples/aks-samples) | This repository contains samples and tutorials for Azure Kubernetes Service (AKS) in LocalStack emulator for Azure. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/aks-samples/samples.yml?branch=main&label=CI)](https://github.com/localstack-samples/aks-samples/actions/workflows/samples.yml) | + +## Kubernetes + +| Sample | Description | CI | +|---|---|---| +| [k8s-lifecycle-demo](https://github.com/localstack-samples/k8s-lifecycle-demo) | Sample app for k8s lifecycle talk | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/k8s-lifecycle-demo/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/k8s-lifecycle-demo/actions/workflows/main.yml) | +| [localstack-k8s-demo](https://github.com/localstack-samples/localstack-k8s-demo) | LocalStack running in Kubernetes, with a Lambda function querying a MySQL database, deployed with Terraform | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-k8s-demo/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/localstack-k8s-demo/actions/workflows/main.yml) | +| [localstack-on-eks](https://github.com/localstack-samples/localstack-on-eks) | DevOps blueprint to run LocalStack on EKS in AWS | [![CI: disabled](https://img.shields.io/badge/CI-disabled-lightgrey)](https://github.com/localstack-samples/localstack-on-eks/actions/workflows/weekly_test.yml) | +| [localstack-pulumi-samples](https://github.com/localstack-samples/localstack-pulumi-samples) | Sample Pulumi projects to demonstrate LocalStack features | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-pulumi-samples/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/localstack-pulumi-samples/actions/workflows/main.yml) | + +## LocalStack features + +| Sample | Description | CI | +|---|---|---| +| [chaos-sample](https://github.com/localstack-samples/chaos-sample) | Chaos engineering experiment against DynamoDB on LocalStack with the AWS SDK for .NET | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/chaos-sample/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/chaos-sample/actions/workflows/main.yml) | +| [cloud-pods-collaboration-demo](https://github.com/localstack-samples/cloud-pods-collaboration-demo) | Demo app for LocalStack Cloud Pods collaboration feature | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/cloud-pods-collaboration-demo/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/cloud-pods-collaboration-demo/actions/workflows/main.yml) | +| [localstack-cloud-pods-blogpost-demo](https://github.com/localstack-samples/localstack-cloud-pods-blogpost-demo) | Demo repository meant to highlight the Cloud Pod functionality of LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-cloud-pods-blogpost-demo/terraform-infra.yml?branch=main&label=CI)](https://github.com/localstack-samples/localstack-cloud-pods-blogpost-demo/actions/workflows/terraform-infra.yml) | +| [localstack-init-hooks](https://github.com/localstack-samples/localstack-init-hooks) | Examples showing how to use LocalStack initialization hooks | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/localstack-init-hooks/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/localstack-init-hooks/actions/workflows/main.yml) | +| [replicator-infrastructure](https://github.com/localstack-samples/replicator-infrastructure) | Replicate a platform VPC from AWS into LocalStack with the AWS Replicator, using Terraform or CDK | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/replicator-infrastructure/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/replicator-infrastructure/actions/workflows/main.yml) | +| [sample-cdk-rds-database-initialization](https://github.com/localstack-samples/sample-cdk-rds-database-initialization) | Demonstrates how to setup and provision an RDS database using CDK and a Lambda custom resource on LocalStack. Showcases Cloud Pods for pre‑seeded CI and fast, reproducible tests on LocalStack. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-cdk-rds-database-initialization/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-cdk-rds-database-initialization/actions/workflows/main.yml) | +| [sample-chaos-serverless-multi-region-failover](https://github.com/localstack-samples/sample-chaos-serverless-multi-region-failover) | Demonstrates chaos engineering in a multi-region serverless application using API Gateway, Lambda, DynamoDB, and Route53. Test resilience, automated failover, and data integrity with LocalStack's Chaos API. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-chaos-serverless-multi-region-failover/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-chaos-serverless-multi-region-failover/actions/workflows/ci.yml) | +| [sample-serverless-quiz-app](https://github.com/localstack-samples/sample-serverless-quiz-app) | A complete serverless quiz application showcasing the entire LocalStack platform. Demonstrates Cloud Pods, Chaos Engineering, IAM Policy Stream, Ephemeral Instances, and end-to-end testing. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-serverless-quiz-app/integration-test.yml?branch=main&label=CI)](https://github.com/localstack-samples/sample-serverless-quiz-app/actions/workflows/integration-test.yml) | +| [terraform-init-hooks-demo](https://github.com/localstack-samples/terraform-init-hooks-demo) | Demo using Terraform configuration files as init hooks | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/terraform-init-hooks-demo/integration-tests.yml?branch=main&label=CI)](https://github.com/localstack-samples/terraform-init-hooks-demo/actions/workflows/integration-tests.yml) | + +## CI and testing + +| Sample | Description | CI | +|---|---|---| +| [sample-terraform-fullstack-serverless-shipment-app](https://github.com/localstack-samples/sample-terraform-fullstack-serverless-shipment-app) | A full-stack shipment management app (React, Spring Boot) using S3, Lambda, and DynamoDB. Demonstrates IaC testing with Terraform and highlights AWS parity for seamless local development on LocalStack. | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/sample-terraform-fullstack-serverless-shipment-app/ci.yml?branch=master&label=CI)](https://github.com/localstack-samples/sample-terraform-fullstack-serverless-shipment-app/actions/workflows/ci.yml) | +| [samples-codepipeline](https://github.com/localstack-samples/samples-codepipeline) | CodePipeline samples with CodeBuild, S3 and CodeArtifact on LocalStack | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/samples-codepipeline/main.yml?branch=master&label=CI)](https://github.com/localstack-samples/samples-codepipeline/actions/workflows/main.yml) | +| [terraform-tests-localstack-github-actions-ci](https://github.com/localstack-samples/terraform-tests-localstack-github-actions-ci) | Serverless image resizer (Lambda, S3) with Terraform tests that run against LocalStack in GitHub Actions | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/terraform-tests-localstack-github-actions-ci/ci.yml?branch=main&label=CI)](https://github.com/localstack-samples/terraform-tests-localstack-github-actions-ci/actions/workflows/ci.yml) | +| [test-codepipeline-source](https://github.com/localstack-samples/test-codepipeline-source) | Java (Maven) application used as the pipeline source in LocalStack CodePipeline samples | [![CI](https://img.shields.io/github/actions/workflow/status/localstack-samples/test-codepipeline-source/main.yml?branch=main&label=CI)](https://github.com/localstack-samples/test-codepipeline-source/actions/workflows/main.yml) | diff --git a/profile/README.md b/profile/README.md index cf65a94..1a3f293 100644 --- a/profile/README.md +++ b/profile/README.md @@ -33,10 +33,10 @@ Sample applications that run on [LocalStack](https://localstack.cloud), the loca 3. Clone a sample and follow its README to deploy and test it. -Browse [all repositories](https://github.com/orgs/localstack-samples/repositories), or find samples by service in the [docs](https://docs.localstack.cloud/applications/). +Browse [all repositories](https://github.com/orgs/localstack-samples/repositories), check the [CI status of every sample](https://github.com/localstack-samples/.github/blob/main/STATUS.md), or find samples by service in the [docs](https://docs.localstack.cloud/applications/). ## Contributing Found a broken sample or want a new one? [Open an issue](https://github.com/localstack-samples/.github/blob/main/CONTRIBUTING.md#issues) in the sample's repository, or read the [contributing guide](https://github.com/localstack-samples/.github/blob/main/CONTRIBUTING.md) to add your own. Everyone taking part is expected to follow our [Code of Conduct](https://github.com/localstack-samples/.github/blob/main/CODE_OF_CONDUCT.md). -Bugs in LocalStack itself belong in [localstack/localstack](https://github.com/localstack/localstack/issues). For questions, join the [LocalStack Community Slack](https://localstack.cloud/slack). +Found a bug in LocalStack itself? [Start a discussion](https://github.com/orgs/localstack/discussions) in the LocalStack community. For questions, join the [LocalStack Community Slack](https://localstack.cloud/slack). diff --git a/scripts/generate_status.py b/scripts/generate_status.py new file mode 100644 index 0000000..be19790 --- /dev/null +++ b/scripts/generate_status.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +"""Write STATUS.md: every public, unarchived repository in the organization, with its +description and a CI badge for the workflow that deploys and tests the sample. + +Uses the GitHub REST API. Set GITHUB_TOKEN (or GH_TOKEN) to avoid the unauthenticated +rate limit. Exceptions to the rules below go in status.toml. +""" +import json +import os +import re +import sys +import tomllib +import urllib.parse +import urllib.request +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +ORG = "localstack-samples" +API = "https://api.github.com" + +# Workflows that do not test the sample never get the badge +NON_TEST = re.compile(r"keep ?alive|preview|sync|lint|pre-commit|release|dependabot|dependency|codeql|inject state|create cloud pod on", re.I) +# Skipped when a repository has another test workflow +SECONDARY = re.compile(r"cloud pod|snapshot", re.I) + +# Sections in page order; a repository goes into the first one whose rule matches its name or topics +SECTIONS = [ + ("Snowflake", re.compile(r"snowflake|polaris")), + ("Azure", re.compile(r"azure|^aks")), + ("Kubernetes", re.compile(r"k8s|eks|kube|k3d")), + ("LocalStack features", re.compile(r"cloud-pods|chaos|replicator|init-hooks|snapshot|extension")), + ("CI and testing", re.compile(r"github-actions|codepipeline|testcontainers|terraform-tests")), +] +DEFAULT_SECTION = "AWS" +PAGE_ORDER = ["AWS", "Snowflake", "Azure", "Kubernetes", "LocalStack features", "CI and testing"] + + +def request(url): + token = os.environ.get("GITHUB_TOKEN") or os.environ.get("GH_TOKEN") + req = urllib.request.Request(url, headers={"Accept": "application/vnd.github+json", "X-GitHub-Api-Version": "2022-11-28"}) + if token: + req.add_header("Authorization", f"Bearer {token}") + with urllib.request.urlopen(req) as response: + return json.load(response), response.headers.get("Link", "") + + +def get_object(path): + return request(f"{API}{path}")[0] + + +def get_list(path): + """GET a list endpoint and follow its pagination.""" + url, items = f"{API}{path}", [] + while url: + body, links = request(url) + items += body + url = next((part.split(";")[0].strip(" <>") for part in links.split(",") if 'rel="next"' in part), None) + return items + + +def section(repo, overrides): + if repo["name"] in overrides: + return overrides[repo["name"]] + for name, rule in SECTIONS: + if rule.search(repo["name"].lower()) or any(rule.search(topic) for topic in repo.get("topics", [])): + return name + return DEFAULT_SECTION + + +def main_workflow(repo, overrides): + """The workflow file that gets the badge and whether it is active, or (None, False) without a test workflow.""" + workflows = get_object(f"/repos/{ORG}/{repo['name']}/actions/workflows?per_page=100")["workflows"] + workflows = [w for w in workflows if w["path"].startswith(".github/workflows/")] + by_file = {Path(w["path"]).name: w for w in workflows} + if repo["name"] in overrides: + chosen = by_file.get(overrides[repo["name"]]) + if not chosen: + sys.exit(f"status.toml: {repo['name']} has no workflow {overrides[repo['name']]}") + return Path(chosen["path"]).name, chosen["state"] == "active" + tests = sorted((w for w in workflows if not NON_TEST.search(w["name"])), key=lambda w: w["path"]) + # GitHub disables scheduled workflows after 60 days without activity; such a workflow is only picked + # when the repository has no active test workflow, and then shows as disabled + tests = [w for w in tests if w["state"] == "active"] or tests + tests = [w for w in tests if not SECONDARY.search(w["name"])] or tests + tests = [w for w in tests if "integration" in w["name"].lower()] or tests + if not tests: + return None, False + return Path(tests[0]["path"]).name, tests[0]["state"] == "active" + + +def badge(repo, workflow, active): + if not workflow: + return "No CI" + runs = f"https://github.com/{ORG}/{repo['name']}/actions/workflows/{workflow}" + if not active: + return f"[![CI: disabled](https://img.shields.io/badge/CI-disabled-lightgrey)]({runs})" + branch = urllib.parse.quote(repo["default_branch"], safe="") + image = f"https://img.shields.io/github/actions/workflow/status/{ORG}/{repo['name']}/{workflow}?branch={branch}&label=CI" + return f"[![CI]({image})]({runs})" + + +def cell(text): + return " ".join((text or "").split()).replace("|", "\\|") + + +def main(): + config = tomllib.loads((ROOT / "status.toml").read_text()) + exclude = set(config.get("exclude", [])) + repos = [r for r in get_list(f"/orgs/{ORG}/repos?type=public&per_page=100") + if not r["archived"] and not r["private"] and r["name"] not in exclude] + rows = {} + for repo in sorted(repos, key=lambda r: r["name"].lower()): + workflow, active = main_workflow(repo, config.get("workflow", {})) + rows.setdefault(section(repo, config.get("area", {})), []).append( + f"| [{repo['name']}](https://github.com/{ORG}/{repo['name']}) | {cell(repo['description'])} | {badge(repo, workflow, active)} |") + + lines = [ + "# Sample status", + "", + "", + "", + f"CI status of the {len(repos)} public, unarchived repositories in [{ORG}](https://github.com/{ORG}). " + "Each badge shows the latest run of the sample's main test workflow on its default branch; select it to see the runs. " + "\"CI disabled\" means GitHub turned the workflow off after 60 days without activity. " + f"The [Update STATUS.md](https://github.com/{ORG}/.github/actions/workflows/status.yml) workflow regenerates this page every week.", + ] + for name in PAGE_ORDER + sorted(set(rows) - set(PAGE_ORDER)): + if name not in rows: + continue + lines += ["", f"## {name}", "", "| Sample | Description | CI |", "|---|---|---|", *rows[name]] + (ROOT / "STATUS.md").write_text("\n".join(lines) + "\n") + print(f"STATUS.md: {len(repos)} repositories in {len(rows)} sections") + + +if __name__ == "__main__": + main() diff --git a/status.toml b/status.toml new file mode 100644 index 0000000..4d99ecb --- /dev/null +++ b/status.toml @@ -0,0 +1,12 @@ +# Overrides for scripts/generate_status.py, which writes STATUS.md + +# Repositories left out of STATUS.md +exclude = [".github"] + +# Section for a repository that the name and topic rules place in the wrong one, e.g. +# my-repo = "LocalStack features" +[area] + +# Workflow file that gets the badge, for a repository whose main test workflow the rules do not pick +[workflow] +sample-serverless-quiz-app = "integration-test.yml"