name: Portfolio Re-Evaluation on: # Manual trigger with optional limit workflow_dispatch: inputs: limit: description: 'Max US tickers to re-evaluate (0 = all)' required: false default: '0' # Also runs daily at 14:00 UTC (after market open) schedule: - cron: '0 14 * * 1-5' jobs: reeval: runs-on: ubuntu-latest timeout-minutes: 30 permissions: contents: write steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install alpaca-trade-api>=3.0 || echo "alpaca-trade-api install skipped" pip install "websockets>=13.0" --force-reinstall --quiet - name: Re-Evaluate Portfolio env: BRAVE_API_KEY: ${{ secrets.BRAVE_API_KEY }} OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} FINNHUB_API_KEY: ${{ secrets.FINNHUB_API_KEY }} LANGCHAIN_TRACING_V2: "true" LANGCHAIN_API_KEY: ${{ secrets.LANGCHAIN_API_KEY }} LANGCHAIN_PROJECT: primogreedy LANGSMITH_WORKSPACE_ID: ${{ secrets.LANGSMITH_WORKSPACE_ID }} VPS_API_URL: ${{ secrets.VPS_API_URL }} VPS_API_KEY: ${{ secrets.VPS_API_KEY }} ALPACA_API_KEY: ${{ secrets.ALPACA_API_KEY }} ALPACA_SECRET_KEY: ${{ secrets.ALPACA_SECRET_KEY }} ALPACA_ENABLED: ${{ secrets.ALPACA_ENABLED }} USE_DEBATE: ${{ secrets.USE_DEBATE }} PROMPT_VERSION: ${{ secrets.PROMPT_VERSION || 'latest' }} RESEND_API_KEY_CISCO: ${{ secrets.RESEND_API_KEY_CISCO }} EMAIL_CISCO: ${{ secrets.EMAIL_CISCO }} run: | LIMIT="${{ github.event.inputs.limit || '0' }}" PYTHONPATH=. python src/reeval_portfolio.py --limit "$LIMIT"