Agent: "Stwórz workflow GitHub Actions dla Docker:
- Skanowanie bezpieczeństwa
# .github/workflows/docker-ci.yml
branches: [main, develop]
IMAGE_NAME: ${{ github.repository }}
uses: actions/checkout@v4
- name: Konfiguracja Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Logowanie do registry
uses: docker/login-action@v3
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Wyciąganie metadanych
uses: docker/metadata-action@v5
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
type=semver,pattern={{version}}
- name: Build i push obrazu Docker
uses: docker/build-push-action@v5
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-to: type=gha,mode=max
VERSION=${{ github.sha }}
- name: Uruchomienie skanera Trivy
uses: aquasecurity/trivy-action@master
image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
output: 'trivy-results.sarif'
- name: Upload wyników Trivy
uses: github/codeql-action/upload-sarif@v3
sarif_file: 'trivy-results.sarif'
- name: Uruchomienie testów integracyjnych
docker compose -f docker-compose.test.yml up --abort-on-container-exit
docker compose -f docker-compose.test.yml down -v
if: github.ref == 'refs/heads/main'
- name: Wdrożenie na staging
uses: digitalocean/action-doctl@v2
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
doctl kubernetes cluster kubeconfig save staging-cluster
kubectl set image deployment/app app=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
kubectl rollout status deployment/app