feat: add auto dependency updater workflow (#548)

<!-- .github/pull_request_template.md -->

## Description
<!-- Provide a clear description of the changes in this PR -->

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Chores**
- Introduced an automated process that regularly updates project
dependencies, enhancing stability and ensuring the app remains secure
and up-to-date.
- Removed an outdated workflow for profiling Python scripts,
streamlining the CI/CD process.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Vasilije 2025-02-19 02:33:20 -08:00 committed by GitHub
parent 424bd2127a
commit 611b048020
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 40 additions and 142 deletions

View file

@ -1,142 +0,0 @@
name: test | profiling
on:
workflow_dispatch:
pull_request:
types: [labeled, synchronize]
jobs:
profiler:
runs-on: ubuntu-22.04
steps:
# Checkout the code from the repository with full history
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history so we can checkout any commit
- name: Check if the sender is a maintainer
id: check_permissions
uses: actions/github-script@v6
with:
script: |
const sender = context.payload.sender.login;
const { data: membership } = await github.rest.orgs.getMembershipForUser({
org: context.repo.owner,
username: sender,
}).catch(() => ({ data: { role: null } }));
return membership.role;
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set is_maintainer variable
run: |
echo "is_maintainer=${{ steps.check_permissions.outputs.result == 'admin' || steps.check_permissions.outputs.result == 'maintainer' }}" >> $GITHUB_ENV
- name: Stop if not a maintainer
if: env.is_maintainer != 'true'
run: |
echo "User ${{ github.event.sender.login }} is not a maintainer. Exiting."
exit 0 # Use exit 0 to mark the job as successful but stop execution
# Set up Python environment
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Poetry
uses: snok/install-poetry@v1.4.1
with:
virtualenvs-create: true
virtualenvs-in-project: true
installer-parallel: true
- name: Install dependencies
run: |
poetry install --no-interaction --all-extras
poetry run pip install pyinstrument
poetry run pip install parso
poetry run pip install jedi
# Set environment variables for SHAs
- name: Set environment variables
run: |
echo "BASE_SHA=${{ github.event.pull_request.base.sha }}" >> $GITHUB_ENV
echo "HEAD_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
# Run profiler on the base branch
# - name: Run profiler on base branch
# env:
# BASE_SHA: ${{ env.BASE_SHA }}
# run: |
# echo "Profiling the base branch for code_graph_pipeline.py"
# echo "Checking out base SHA: $BASE_SHA"
# git checkout $BASE_SHA
# echo "This is the working directory: $PWD"
# # Ensure the script is executable
# chmod +x cognee/api/v1/cognify/code_graph_pipeline.py
# # Run Scalene
# poetry run pyinstrument --renderer json -o base_results.json cognee/api/v1/cognify/code_graph_pipeline.py
# Run profiler on head branch
- name: Run profiler on head branch
env:
HEAD_SHA: ${{ env.HEAD_SHA }}
run: |
echo "Profiling the head branch for code_graph_pipeline.py"
echo "Checking out head SHA: $HEAD_SHA"
git checkout $HEAD_SHA
echo "This is the working directory: $PWD"
# Ensure the script is executable
chmod +x cognee/api/v1/cognify/code_graph_pipeline.py
# Run Scalene
poetry run pyinstrument --renderer json -o head_results.json cognee/api/v1/cognify/code_graph_pipeline.py
# # Compare profiling results
# - name: Compare profiling results
# run: |
# python -c '
# import json
# try:
# with open("base_results.json") as f:
# base = json.load(f)
# with open("head_results.json") as f:
# head = json.load(f)
# cpu_diff = head.get("total_cpu_samples_python", 0) - base.get("total_cpu_samples_python", 0)
# memory_diff = head.get("malloc_samples", 0) - base.get("malloc_samples", 0)
# results = [
# f"CPU Usage Difference: {cpu_diff}",
# f"Memory Usage Difference: {memory_diff} bytes"
# ]
# with open("profiling_diff.txt", "w") as f:
# f.write("\\n".join(results) + "\\n")
# print("\\n".join(results)) # Print results to terminal
# except Exception as e:
# error_message = f"Error comparing profiling results: {e}"
# with open("profiling_diff.txt", "w") as f:
# f.write(error_message + "\\n")
# print(error_message) # Print error to terminal
# '
#
# - name: Upload profiling diff artifact
# uses: actions/upload-artifact@v3
# with:
# name: profiling-diff
# path: profiling_diff.txt
# Post results to the pull request
# - name: Post profiling results to PR
# uses: actions/github-script@v6
# with:
# script: |
# const fs = require('fs');
# const diff = fs.readFileSync('profiling_diff.txt', 'utf-8');
# github.rest.issues.createComment({
# issue_number: context.issue.number,
# owner: context.repo.owner,
# repo: context.repo.repo,
# body: `### Profiling Results for code_graph_pipeline.py\n\`\`\`\n${diff || 'No differences found.'}\n\`\`\``
# });

40
.github/workflows/upgrade_deps.yml vendored Normal file
View file

@ -0,0 +1,40 @@
name: Update Poetry Dependencies
on:
schedule:
- cron: '0 3 * * 0'
workflow_dispatch:
jobs:
update-dependencies:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.9'
cache: 'poetry'
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python3 -
poetry config virtualenvs.create false
- name: Update dependencies
run: poetry update
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "chore: Update Poetry dependencies"
title: "chore: Update Poetry dependencies"
body: "Automated Poetry dependency updates"
base: "dev"
branch: "chore/poetry-updates"
delete-branch: true