chore: add workflow to find the python dependencies in repo #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check Python Dependencies | ||
on: | ||
pull_request: | ||
defaults: | ||
run: | ||
shell: bash # strict bash | ||
jobs: | ||
check_dependencies: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v3 | ||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.8' | ||
- name: Create Virtual Environment | ||
run: python -m venv .venv | ||
- name: Install Dependencies | ||
run: | | ||
source .venv/bin/activate # Activate the virtual environment | ||
pip install --upgrade pip | ||
pip install -r requirements.txt | ||
- name: List Installed Packages | ||
run: | | ||
source .venv/bin/activate # Activate the virtual environment | ||
pip list --format=columns # List installed packages in columns format | ||
- name: Find Source Repos for Dependencies | ||
id: find_source_repos | ||
run: | | ||
source .venv/bin/activate # Activate the virtual environment | ||
python - << EOF | ||
import subprocess | ||
import re | ||
# Define the first-party and second-party organizations | ||
FIRST_PARTY_ORGS = ["openedx"] | ||
SECOND_PARTY_ORGS = [ | ||
"edx", "edx-unsupported", "edx-solutions", | ||
"mitodl", | ||
"overhangio", | ||
"open-craft", "eduNEXT", "raccoongang", | ||
] | ||
# Get the output of 'pip list' command | ||
pip_list_output = subprocess.run(['pip', 'list'], capture_output=True, text=True).stdout | ||
# Find source repositories for each installed package | ||
first_party_repos = [] | ||
second_party_repos = [] | ||
for line in pip_list_output.split('\n'): | ||
match = re.match(r'([\w-]+) \(([\d.]+)\)', line) | ||
if match: | ||
package_name = match.group(1) | ||
# Assume the source repository URL can be extracted from the package name (modify this as per your project's conventions) | ||
# Here, we just append 'https://github.com/{package_name}' for demonstration purposes | ||
repo_url = f'https://github.com/{package_name}' | ||
if any(org in repo_url for org in FIRST_PARTY_ORGS): | ||
first_party_repos.append(repo_url) | ||
elif any(org in repo_url for org in SECOND_PARTY_ORGS): | ||
second_party_repos.append(repo_url) | ||
print("::set-output name=first_party_repos::{}".format(','.join(first_party_repos))) | ||
print("::set-output name=second_party_repos::{}".format(','.join(second_party_repos))) | ||
EOF | ||
- name: Display Source Repos | ||
run: | | ||
echo "First Party Repositories:" | ||
echo "${{ steps.find_source_repos.outputs.first_party_repos }}" | ||
echo "Second Party Repositories:" | ||
echo "${{ steps.find_source_repos.outputs.second_party_repos }}" |