Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
001cca4
feat: allow unsetting widget icon URL by providing an empty string.
stenwire Dec 25, 2025
a12ec25
feat: Implement API key validation and improved error handling for AI…
stenwire Dec 25, 2025
7f6cd10
feat: enable API key-based model configuration for agents by centrali…
stenwire Dec 25, 2025
8e03776
feat: implement guest user lead status with backend API and dashboard…
stenwire Dec 25, 2025
22c9d0d
feat: Switch to DatabaseSessionService for session management and add…
stenwire Dec 25, 2025
da9ebed
feat: Add production Dockerfiles, GitHub Actions deployment, PostgreS…
stenwire Dec 27, 2025
f5e5e5a
Merge pull request #1 from stenwire/main
stenwire Dec 27, 2025
eee923d
fix: add Docker cleanup to prevent disk space issues
stenwire Dec 27, 2025
6eaec66
Merge pull request #3 from stenwire/main
stenwire Dec 27, 2025
0aed234
feat: Enhance CI/CD build reliability by adding disk space cleanup, c…
stenwire Dec 27, 2025
f6d70b7
Merge pull request #5 from stenwire/main
stenwire Dec 27, 2025
6b4626c
fix: Use dynamically generated lowercase image names throughout the d…
stenwire Dec 27, 2025
fc4cdb1
Merge pull request #7 from stenwire/main
stenwire Dec 27, 2025
9c7d7e8
refactor: Update deploy workflow to use standard Docker commands for …
stenwire Dec 27, 2025
a88536c
Merge pull request #9 from stenwire/main
stenwire Dec 27, 2025
eb9b8bd
feat: Migrate deployment workflow to use Podman by aliasing docker co…
stenwire Dec 27, 2025
5e45167
Merge pull request #11 from stenwire/main
stenwire Dec 27, 2025
0da49ad
feat: Implement external embedding for RAG, remove local embedding de…
stenwire Dec 30, 2025
489d02e
feat: Add frontend loading UI, backend security headers with rate lim…
stenwire Dec 30, 2025
3bc1431
feat: update frontend with new logo and favicon, configure Dockerfile…
stenwire Dec 30, 2025
66ff61e
feat: Implement comprehensive GitHub Actions deployment to VPS with D…
stenwire Dec 31, 2025
49862c2
feat: Introduce WhatsApp integration and logo URL for widget settings…
stenwire Jan 1, 2026
0aa3143
Merge pull request #13 from stenwire/main
stenwire Jan 1, 2026
66668b1
ci: Update GitHub Actions runner to `ld-vps-runner`.
stenwire Jan 1, 2026
5681b21
Merge pull request #15 from stenwire/main
stenwire Jan 1, 2026
69fe780
refactor: Update DocumentList to use typed Document objects and refac…
stenwire Jan 1, 2026
aa9dd75
Merge pull request #17 from stenwire/main
stenwire Jan 1, 2026
e197791
fix: add sudo permissions for deployment directories
stenwire Jan 1, 2026
f59d660
Merge pull request #19 from stenwire/main
stenwire Jan 1, 2026
92458a3
chore: Update data and backup directory paths and simplify directory …
stenwire Jan 1, 2026
033c92c
chore: Dynamically set data, postgres, and backup directory paths usi…
stenwire Jan 1, 2026
a4c2c62
Merge pull request #21 from stenwire/main
stenwire Jan 1, 2026
9284cfb
feat: Comment out adk columns on
stenwire Jan 1, 2026
90be388
Merge pull request #23 from stenwire/main
stenwire Jan 1, 2026
e14737e
refactor: Use `env` context for `PROJECT_PREFIX` variable in deploy w…
stenwire Jan 1, 2026
3dee7d0
docs: clarify PROJECT_PREFIX comments in deploy workflow
stenwire Jan 1, 2026
97c8382
Merge pull request #25 from stenwire/main
stenwire Jan 1, 2026
16bdc20
refactor: Define dynamic workflow variables within a step using GITHU…
stenwire Jan 1, 2026
8de4548
Merge pull request #27 from stenwire/main
stenwire Jan 1, 2026
61bce94
refactor: Replace dynamic step outputs with global environment variab…
stenwire Jan 1, 2026
8f31a76
Merge pull request #29 from stenwire/main
stenwire Jan 1, 2026
ae0f92c
fix: enable Uvicorn proxy headers and disable HTTPS redirect middleware
stenwire Jan 1, 2026
4c2d708
Merge pull request #31 from stenwire/main
stenwire Jan 1, 2026
d041eea
feat: Comment out HTTPS redirect middleware as it's behind a reverse …
stenwire Jan 1, 2026
13b194f
Merge pull request #33 from stenwire/main
stenwire Jan 1, 2026
656204f
chore: Reduce Uvicorn workers from 4 to 1 in production Dockerfile.
stenwire Jan 1, 2026
274d844
Merge pull request #35 from stenwire/main
stenwire Jan 1, 2026
9f55536
chore: Update existing logo and add a new full logo.
stenwire Jan 1, 2026
a6e35b5
update favicon
stenwire Jan 1, 2026
1ec4c8c
Merge pull request #37 from stenwire/main
stenwire Jan 1, 2026
c746d20
feat: Add environment-specific frontend URI configuration, update exa…
stenwire Jan 4, 2026
b241c87
Merge pull request #39 from stenwire/main
stenwire Jan 4, 2026
4785b31
config: update CORS to allow all origins.
stenwire Jan 4, 2026
8bae8cf
Merge pull request #41 from stenwire/main
stenwire Jan 4, 2026
a478b43
feat: Introduce `is_active` flag for widgets, including database migr…
stenwire Jan 4, 2026
c473c29
Merge pull request #43 from stenwire/main
stenwire Jan 4, 2026
bbf176a
feat: Introduce Chief Agent to orchestrate specialized sub-agents, re…
stenwire Jan 17, 2026
cc6923b
feat: Add jailbreak detection and response sanitization callbacks, an…
stenwire Jan 17, 2026
3097a84
feat: Implement escalation functionality.
stenwire Jan 31, 2026
baaeba9
feat: Implement agent-to-human escalation with dedicated API, models,…
stenwire Feb 1, 2026
6bfc84a
feat: Implement human escalation and sentiment analysis features with…
stenwire Feb 1, 2026
b15cdac
Merge pull request #46 from stenwire/escalation-feature
stenwire Feb 1, 2026
a79a483
Merge pull request #47 from stenwire/dev
stenwire Feb 1, 2026
c77086f
feat: Introduce JWT secret to deployment and a backend test target; f…
stenwire Feb 1, 2026
7805b00
Merge pull request #49 from stenwire/escalation-feature
stenwire Feb 1, 2026
251aec2
Merge pull request #50 from stenwire/dev
stenwire Feb 1, 2026
1e84910
update cors
stenwire Feb 1, 2026
4e1e909
Merge pull request #52 from stenwire/escalation-feature
stenwire Feb 1, 2026
ff3a88d
Merge pull request #53 from stenwire/dev
stenwire Feb 1, 2026
163d1d0
feat: Refactor dashboard layout for improved responsiveness, sidebar …
stenwire Feb 1, 2026
9868b7c
Merge pull request #56 from stenwire/escalation-feature
stenwire Feb 1, 2026
9d3b5fc
Merge pull request #57 from stenwire/dev
stenwire Feb 1, 2026
c2e2dc2
feat: Implement subscription management with new API endpoints, model…
stenwire Feb 22, 2026
59a3550
feat: Implement comprehensive subscription plan management, usage tra…
stenwire Mar 15, 2026
f0d8486
feat: implement WhatsApp integration, update agent instructions with …
stenwire Apr 6, 2026
32807ce
refactor: remove mandatory Gemini API key requirement and associated …
stenwire Apr 6, 2026
ec5775f
refactor: overhaul testing suite with comprehensive unit, integration…
stenwire Apr 6, 2026
fb251b8
refactor: overhaul testing infrastructure with comprehensive unit and…
stenwire Apr 6, 2026
9925541
Merge pull request #59 from stenwire/whatsapp-intg-v1
stenwire Apr 6, 2026
7529d42
Remove markdown files from tracking
stenwire Apr 6, 2026
ee68d99
Remove useless fe files from tracking
stenwire Apr 6, 2026
a9347d9
Remove useless be files from tracking
stenwire Apr 6, 2026
00b5a44
update gitignore files
stenwire Apr 6, 2026
f9ad0cc
Merge pull request #61 from stenwire/whatsapp-intg-v1
stenwire Apr 6, 2026
d6f49d3
feat: implement admin authentication and user management with is_admi…
stenwire Apr 7, 2026
f30809f
feat: add create admin cmd to makefile
stenwire Apr 7, 2026
dd4250e
refactor: update create-admin make target to support promoting existi…
stenwire Apr 7, 2026
0ad9370
Merge pull request #64 from stenwire/whatsapp-intg-v1
stenwire Apr 7, 2026
0f93326
test: mock GOOGLE_API_KEY in API and integration tests to satisfy con…
stenwire Apr 7, 2026
8b80b89
Merge pull request #65 from stenwire/whatsapp-intg-v1
stenwire Apr 7, 2026
ac68983
Merge pull request #60 from stenwire/dev
stenwire Apr 7, 2026
1c9e3a9
run lint
stenwire May 10, 2026
df9cc51
feat: Implement product catalogue management
stenwire May 31, 2026
fec02fc
run lint
stenwire May 31, 2026
2120e63
feat: add order management API and types
stenwire Jun 27, 2026
6ea4265
Merge pull request #67 from stenwire/catalogue-feature
stenwire Jul 4, 2026
598c157
setup root dir dockerfile
stenwire Jul 4, 2026
ce213ee
priotise db url
stenwire Jul 4, 2026
01b2074
setup staging env url factory
stenwire Jul 4, 2026
cef2e6c
update staging URLs on frontend
stenwire Jul 4, 2026
e22dcb9
feat: Add start script for backend and update Dockerfile to use it
stenwire Jul 4, 2026
11af3ea
fix: Simplify DATABASE_URL handling in Alembic env.py
stenwire Jul 4, 2026
4db2dd0
run lint
stenwire Jul 4, 2026
bbee838
clean dir
stenwire Jul 4, 2026
1c0a69f
Merge origin/main into root-dir-dockerfile, resolving conflicts
stenwire Jul 4, 2026
237f4bd
fix: correct staging URL expectations in frontend config test
stenwire Jul 4, 2026
35acaa3
Merge pull request #68 from stenwire/root-dir-dockerfile
stenwire Jul 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 34 additions & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
# Dependencies
**/node_modules
**/.venv
**/.git
**/__pycache__

# Build outputs
**/.next
**/__pycache__
**/*.pyc
**/*.pyo

# Version control
**/.git
**/.gitignore

# Test artifacts
**/.pytest_cache
**/tests
**/test_*.py
**/*_test.py
**/.coverage

# Dev-only data
**/chroma_db
**/uploads
**/sql_app.db

# Secrets — pass at runtime via env_file or environment
**/.env
**/.env.*

# Misc
**/bloats
**/.vscode
**/.claude
**/postman_collection.json
**/lint_results*.txt
**/test_output.txt
**/test.txt
24 changes: 24 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: Bug Report
about: Report a bug to help us improve
labels: bug
---

## Describe the Bug
<!-- A clear description of what the bug is -->

## Steps to Reproduce
1.
2.
3.

## Expected Behavior
<!-- What you expected to happen -->

## Actual Behavior
<!-- What actually happened -->

## Environment
- Browser (if frontend):
- OS:
- Relevant version/commit:
14 changes: 14 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Feature Request
about: Suggest an idea for TaimakoAI
labels: enhancement
---

## Problem
<!-- What problem does this solve? -->

## Proposed Solution
<!-- How should it work? -->

## Alternatives Considered
<!-- Any other approaches you considered -->
24 changes: 24 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Description
<!-- What does this PR do? Why is this change needed? -->

## Type of Change
- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
- [ ] Refactoring (no functional changes)
- [ ] Documentation update
- [ ] Infrastructure / CI / tooling

## Checklist
- [ ] My code follows the existing code style of this project
- [ ] I have tested my changes locally
- [ ] Lint passes (`make lint-be` / `make lint-fe`)
- [ ] Tests pass (`make test-be` / `make test-fe`)
- [ ] I have added tests for new functionality (if applicable)
- [ ] I have updated documentation (if applicable)

## Screenshots / Demo
<!-- If UI changes, include before/after screenshots. Remove this section otherwise. -->

## Related Issues
<!-- Closes #123, Fixes #456 -->
58 changes: 58 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: CI

on:
push:
branches: [main, prod]
paths:
- "backend/**"
- "frontend/**"
pull_request:
branches: [main, prod]
paths:
- "backend/**"
- "frontend/**"

jobs:
backend:
runs-on: ubuntu-latest
defaults:
run:
working-directory: backend

steps:
- uses: actions/checkout@v4

- uses: astral-sh/setup-uv@v6

- name: Install dependencies
run: uv sync --dev

- name: Lint
run: uv run ruff check .

- name: Test
run: uv run pytest tests/ -v

frontend:
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontend/package-lock.json

- name: Install dependencies
run: npm ci

- name: Lint
run: npm run lint

- name: Test
run: npm test
228 changes: 228 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
name: Deploy to VPS

on:
push:
branches:
- prod
workflow_dispatch:

env:
REGISTRY: ghcr.io
# Project prefix – change this in repo secrets/variables to rename everything
PROJECT_PREFIX: "taimako" # Add to github repo actions variables

# Container and network names (derived from prefix)
POSTGRES_CONTAINER: ${{ vars.PROJECT_PREFIX }}_postgres
BACKEND_CONTAINER: ${{ vars.PROJECT_PREFIX }}_backend
FRONTEND_CONTAINER: ${{ vars.PROJECT_PREFIX }}_frontend
DOCKER_NETWORK: ${{ vars.PROJECT_PREFIX }}_network

# Volume and backup paths
DATA_DIR: ~/${{ vars.PROJECT_PREFIX }}
POSTGRES_DATA_DIR: ~/${{ vars.PROJECT_PREFIX }}/postgres_data
BACKUPS_DIR: ~/${{ vars.PROJECT_PREFIX }}/backups

BACKEND_ENV: >-
-e ENVIRONMENT="production"
-e DATABASE_URL="postgresql://${{ secrets.POSTGRES_USER }}:${{ secrets.POSTGRES_PASSWORD }}@${{ vars.PROJECT_PREFIX }}_postgres:5432/${{ secrets.POSTGRES_DB }}"
-e GOOGLE_CLIENT_ID="${{ secrets.GOOGLE_CLIENT_ID }}"
-e GOOGLE_CLIENT_SECRET="${{ secrets.GOOGLE_CLIENT_SECRET }}"
-e GOOGLE_REDIRECT_URI="${{ secrets.GOOGLE_REDIRECT_URI }}"
-e FRONTEND_REDIRECT_URI="${{ secrets.FRONTEND_REDIRECT_URI }}"
-e JWT_SECRET="${{ secrets.JWT_SECRET }}"

FRONTEND_ENV: >-
-e NODE_ENV="production"
-e NEXT_PUBLIC_ENVIRONMENT="production"
-e NEXT_PUBLIC_API_URL="${{ secrets.NEXT_PUBLIC_API_URL }}"
-e NEXT_PUBLIC_BACKEND_URL_PROD="${{ secrets.NEXT_PUBLIC_BACKEND_URL_PROD }}"
-e NEXT_PUBLIC_FRONTEND_URL_PROD="${{ secrets.NEXT_PUBLIC_FRONTEND_URL_PROD }}"

jobs:
build-and-push-backend:
runs-on: ld-vps-runner
permissions:
contents: read
packages: write

steps:
- name: Set lowercase image names
id: image-names
run: |
echo "backend_image=$(echo '${{ github.repository }}-backend' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
echo "frontend_image=$(echo '${{ github.repository }}-frontend' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT

- name: Checkout repository
uses: actions/checkout@v4

- name: Log in to GitHub Container Registry
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Build and push Backend image
run: |
cd backend
docker build \
-t ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest \
-t ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:${{ github.sha }} \
-f Dockerfile.prod .
docker push ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest
docker push ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:${{ github.sha }}
docker rmi ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:${{ github.sha }} || true

build-and-push-frontend:
needs: [build-and-push-backend]
runs-on: ld-vps-runner
permissions:
contents: read
packages: write

steps:
- name: Set lowercase image names
id: image-names
run: |
echo "backend_image=$(echo '${{ github.repository }}-backend' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
echo "frontend_image=$(echo '${{ github.repository }}-frontend' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT

- name: Checkout repository
uses: actions/checkout@v4

- name: Log in to GitHub Container Registry
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Build and push Frontend image
run: |
cd frontend
docker build \
-t ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:latest \
-t ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:${{ github.sha }} \
-f Dockerfile.prod \
--build-arg NEXT_PUBLIC_ENVIRONMENT="production" \
--build-arg NEXT_PUBLIC_API_URL="${{ secrets.NEXT_PUBLIC_API_URL }}" \
--build-arg NEXT_PUBLIC_BACKEND_URL_PROD="${{ secrets.NEXT_PUBLIC_BACKEND_URL_PROD }}" \
--build-arg NEXT_PUBLIC_FRONTEND_URL_PROD="${{ secrets.NEXT_PUBLIC_FRONTEND_URL_PROD }}" \
.
docker push ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:latest
docker push ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:${{ github.sha }}
docker rmi ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:${{ github.sha }} || true

deploy:
needs: [build-and-push-backend, build-and-push-frontend]
runs-on: ld-vps-runner

steps:
- name: Set lowercase image names
id: image-names
run: |
echo "backend_image=$(echo '${{ github.repository }}-backend' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
echo "frontend_image=$(echo '${{ github.repository }}-frontend' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT

- name: Checkout repository
uses: actions/checkout@v4

- name: Login to GitHub Container Registry
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Pull latest images
run: |
docker pull ${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest
docker pull ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:latest

- name: Create Docker network
run: docker network create ${{ env.DOCKER_NETWORK }} || true

- name: Deploy PostgreSQL container
run: |
mkdir -p ${{ env.POSTGRES_DATA_DIR }}
mkdir -p ${{ env.BACKUPS_DIR }}

if docker ps -a --format '{{.Names}}' | grep -q "^${{ env.POSTGRES_CONTAINER }}$"; then
echo "PostgreSQL container exists."
if ! docker ps --format '{{.Names}}' | grep -q "^${{ env.POSTGRES_CONTAINER }}$"; then
echo "Starting stopped PostgreSQL container..."
docker start ${{ env.POSTGRES_CONTAINER }}
fi
else
echo "Creating new PostgreSQL container..."
docker run -d \
--name ${{ env.POSTGRES_CONTAINER }} \
--network ${{ env.DOCKER_NETWORK }} \
--restart unless-stopped \
-v ${{ env.POSTGRES_DATA_DIR }}:/var/lib/postgresql/data \
-e POSTGRES_USER="${{ secrets.POSTGRES_USER }}" \
-e POSTGRES_PASSWORD="${{ secrets.POSTGRES_PASSWORD }}" \
-e POSTGRES_DB="${{ secrets.POSTGRES_DB }}" \
postgres:16-alpine
fi

echo "Waiting for PostgreSQL to be ready..."
for i in {1..30}; do
if docker exec ${{ env.POSTGRES_CONTAINER }} pg_isready -U "${{ secrets.POSTGRES_USER }}" > /dev/null 2>&1; then
echo "PostgreSQL is ready!"
break
fi
echo "Waiting... ($i/30)"
sleep 2
done

- name: Deploy Backend container
run: |
docker stop ${{ env.BACKEND_CONTAINER }} || true
docker rm ${{ env.BACKEND_CONTAINER }} || true

# Run migrations
docker run --rm \
--network ${{ env.DOCKER_NETWORK }} \
${{ env.BACKEND_ENV }} \
${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest \
alembic upgrade head

# Run backend
docker run -d \
--name ${{ env.BACKEND_CONTAINER }} \
--network ${{ env.DOCKER_NETWORK }} \
--restart unless-stopped \
-p 127.0.0.1:8000:8000 \
${{ env.BACKEND_ENV }} \
${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest

- name: Deploy Frontend container
run: |
docker stop ${{ env.FRONTEND_CONTAINER }} || true
docker rm ${{ env.FRONTEND_CONTAINER }} || true

docker run -d \
--name ${{ env.FRONTEND_CONTAINER }} \
--network ${{ env.DOCKER_NETWORK }} \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
${{ env.FRONTEND_ENV }} \
${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:latest

- name: Wait for containers to be ready
run: sleep 10

- name: Check container health
run: |
docker ps -a --filter "name=${{ vars.PROJECT_PREFIX }}"

for container in "${{ env.POSTGRES_CONTAINER }}" "${{ env.BACKEND_CONTAINER }}" "${{ env.FRONTEND_CONTAINER }}"; do
if ! docker ps --format '{{.Names}}' | grep -q "^$container$"; then
echo "$container container failed to start!"
docker logs $container
exit 1
fi
done

echo "All containers are running successfully!"

- name: Backup database
run: |
docker exec ${{ env.POSTGRES_CONTAINER }} pg_dump -U "${{ secrets.POSTGRES_USER }}" "${{ secrets.POSTGRES_DB }}" > ${{ env.BACKUPS_DIR }}/backup_$(date +%Y%m%d_%H%M%S).sql
ls -t ${{ env.BACKUPS_DIR }}/*.sql | tail -n +8 | xargs -r rm

- name: Final cleanup
if: always()
run: |
docker system prune -af --filter "until=24h"
echo "=== Final disk space ==="
df -h
Loading
Loading