1717 - " .github/workflows/api-ci.yml"
1818
1919jobs :
20- test :
20+ lint :
2121 runs-on : ubuntu-latest
2222
2323 steps :
@@ -29,24 +29,75 @@ jobs:
2929 - name : Set up Python
3030 run : uv python install 3.11
3131
32- - name : Install dependencies
33- run : uv sync --extra dev
32+ - name : Install API package with dev dependencies
33+ run : uv sync --package shelly-manager-api --extra dev
34+
35+ - name : Run black
36+ run : uv run black --check packages/api/
37+
38+ - name : Run ruff
39+ run : uv run ruff check packages/api/
40+
41+ - name : Run mypy
42+ run : uv run mypy packages/api/src/api
43+
44+ test :
45+ runs-on : ubuntu-latest
46+
47+ steps :
48+ - uses : actions/checkout@v4
3449
35- - name : Lint
36- run : |
37- uv run black --check packages/api/
38- uv run ruff check packages/api/
39- uv run mypy packages/api/src/api
50+ - name : Install uv
51+ uses : astral-sh/setup-uv@v4
4052
41- - name : Test
53+ - name : Set up Python
54+ run : uv python install 3.11
55+
56+ - name : Install API package with dev dependencies
57+ run : uv sync --package shelly-manager-api --extra dev
58+
59+ - name : Run tests
4260 run : uv run --package shelly-manager-api pytest packages/api/tests/ -v --cov=api
4361
44- - name : Build Docker image
45- run : docker build -f packages/api/Dockerfile -t shelly-manager-api:latest .
62+ build :
63+ runs-on : ubuntu-latest
64+ needs : [lint, test]
65+
66+ steps :
67+ - uses : actions/checkout@v4
68+
69+ - name : Set up Docker Buildx
70+ uses : docker/setup-buildx-action@v3
71+
72+ - name : Log in to GitHub Container Registry
73+ if : github.event_name != 'pull_request'
74+ uses : docker/login-action@v3
75+ with :
76+ registry : ghcr.io
77+ username : ${{ github.actor }}
78+ password : ${{ secrets.GITHUB_TOKEN }}
79+
80+ - name : Extract metadata
81+ id : meta
82+ uses : docker/metadata-action@v5
83+ with :
84+ images : ghcr.io/jfmlima/shelly-manager/api
85+ tags : |
86+ type=ref,event=branch
87+ type=ref,event=pr
88+ type=semver,pattern={{version}}
89+ type=semver,pattern={{major}}.{{minor}}
90+ type=semver,pattern={{major}}
91+ type=raw,value=latest,enable={{is_default_branch}}
4692
47- - name : Test Docker image
48- run : |
49- docker run --rm -d -p 8000:8000 --name test-api shelly-manager-api:latest
50- sleep 10
51- curl -f http://localhost:8000/health || echo "Health check endpoint may not exist yet"
52- docker stop test-api
93+ - name : Build and push Docker image
94+ uses : docker/build-push-action@v5
95+ with :
96+ context : .
97+ file : packages/api/Dockerfile
98+ platforms : linux/amd64,linux/arm64
99+ push : ${{ github.event_name != 'pull_request' }}
100+ tags : ${{ steps.meta.outputs.tags }}
101+ labels : ${{ steps.meta.outputs.labels }}
102+ cache-from : type=gha
103+ cache-to : type=gha,mode=max
0 commit comments