revamp the github action workflows #117
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: Create and Test LocalStack Cloud Pod | |
on: | |
schedule: | |
# At 00:00 on Saturday. | |
- cron: "0 0 * * 6" | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
permissions: | |
contents: write | |
actions: read | |
jobs: | |
create-pod: | |
name: Create Cloud Pod | |
runs-on: ubuntu-latest | |
outputs: | |
pod_artifact_name: cloud-pod-${{ github.run_id }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Install Dependencies | |
run: | | |
pip install -r requirements-dev.txt --upgrade | |
- name: Start LocalStack | |
uses: LocalStack/setup-localstack@main | |
with: | |
use-pro: 'true' | |
install-awslocal: 'true' | |
env: | |
DEBUG: 1 | |
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
- name: Deploy Infrastructure (Example) | |
run: | | |
bin/build_lambdas.sh && deployment/awslocal/deploy.sh | |
- name: Export LocalStack State (Cloud Pod) | |
id: export_state | |
env: | |
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
run: | | |
echo "Exporting LocalStack state..." | |
localstack state export cloud-pod.zip | |
ls -la cloud-pod.zip # Verify the file exists | |
echo "pod_artifact_name=cloud-pod-${{ github.run_id }}" >> $GITHUB_OUTPUT | |
- name: Upload Cloud Pod Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.export_state.outputs.pod_artifact_name }} | |
path: cloud-pod.zip | |
retention-days: 1 | |
test-pod: | |
name: Test Cloud Pod | |
needs: create-pod | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Install Test Dependencies | |
run: | | |
pip install -r requirements-dev.txt --upgrade | |
- name: Start LocalStack | |
uses: LocalStack/setup-localstack@main | |
with: | |
use-pro: 'true' | |
install-awslocal: 'true' | |
env: | |
DEBUG: 1 | |
POD_LOAD_CLI_TIMEOUT: 300 | |
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
- name: Download Cloud Pod Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ needs.create-pod.outputs.pod_artifact_name }} | |
- name: Inject Pod (Import State) | |
env: | |
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
run: | | |
echo "Importing LocalStack state from cloud-pod.zip..." | |
ls -la # Check if download was successful | |
localstack state import cloud-pod.zip | |
- name: Run Tests | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
AWS_REGION: us-east-1 | |
AWS_ACCESS_KEY_ID: test | |
AWS_SECRET_ACCESS_KEY: test | |
run: | | |
pytest tests | |
- name: Show LocalStack Logs | |
if: always() | |
run: | | |
echo "::error::Tests failed. Dumping LocalStack logs:" | |
localstack logs | |
- name: Send a Slack notification | |
if: failure() || github.event_name != 'pull_request' | |
uses: ravsamhq/notify-slack-action@v2 | |
with: | |
status: ${{ job.status }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
notification_title: "{workflow} has {status_message}" | |
message_format: "{emoji} *{workflow}* {status_message} in <{repo_url}|{repo}>" | |
footer: "Linked Repo <{repo_url}|{repo}> | <{run_url}|View Workflow run>" | |
notify_when: "failure" | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
- name: Generate a Diagnostic Report | |
if: failure() | |
run: | | |
curl -s localhost:4566/_localstack/diagnose | gzip -cf > diagnose.json.gz | |
- name: Upload the Diagnostic Report | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: diagnose.json.gz | |
path: ./diagnose.json.gz | |
- name: Prevent Workflow from becoming Stale | |
if: always() && github.ref == 'refs/heads/main' | |
uses: liskin/gh-workflow-keepalive@v1 |