From 023171a2838abe1ef0875395e7c90447ea00d98d Mon Sep 17 00:00:00 2001 From: Plamen Valentinov Kolev Date: Fri, 24 Jul 2026 16:09:09 +0200 Subject: [PATCH 1/2] Add manual workflow to run one or multiple repositories on demand --- .github/workflows/manual.yaml | 42 +++++++++++++++++++++++++++++++++++ gitmetrics/__main__.py | 13 +++++++++-- gitmetrics/main.py | 11 +++++++-- 3 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/manual.yaml diff --git a/.github/workflows/manual.yaml b/.github/workflows/manual.yaml new file mode 100644 index 0000000..6b4c7d6 --- /dev/null +++ b/.github/workflows/manual.yaml @@ -0,0 +1,42 @@ +name: Manual collection + +on: + workflow_dispatch: + inputs: + project: + description: 'Name of the project to collect' + required: true + default: '' + repositories: + description: 'List of repositories to collect, separated by spaces' + required: false + default: '' + extras: + description: 'Extra arguments to pass (e.g. --not-incremental --add-metrics)' + required: false + default: '--not-incremental --add-metrics' + +jobs: + collect: + runs-on: ubuntu-latest + timeout-minutes: 120 + steps: + - uses: actions/checkout@v6 + - name: Install uv + uses: astral-sh/setup-uv@v7 + with: + enable-cache: true + activate-environment: true + - name: Install dependencies + run: | + uv pip install . + - name: Collect Github Data + run: | + uv run gitmetrics collect -v -q \ + -t ${{ secrets.GITHUB_TOKEN }} \ + -p ${{ github.event.inputs.project }} \ + -r ${{ github.event.inputs.repositories }} \ + -o gdrive://${{ secrets.MANUAL_OUTPUT_FOLDER }} \ + ${{ github.event.inputs.extras }} + env: + PYDRIVE_CREDENTIALS: ${{ secrets.PYDRIVE_CREDENTIALS }} diff --git a/gitmetrics/__main__.py b/gitmetrics/__main__.py index 72c6f39..c135d07 100644 --- a/gitmetrics/__main__.py +++ b/gitmetrics/__main__.py @@ -67,7 +67,11 @@ def _collect(args, parser): elif len(args.projects) > 1: parser.error('If repositories are given, only one project name must be provided.') - projects = {args.projects[0]: args.repositories} + projects = { + args.projects[0]: [ + f'{args.projects[0]}/{repository}' for repository in args.repositories + ] + } elif not args.projects: projects = config_projects @@ -208,7 +212,12 @@ def _get_parser(): collect.add_argument( '-m', '--add-metrics', action='store_true', help='Whether to add a metrics tab.' ) - collect.add_argument('-r', '--repositories', nargs='*', help='List of repositories to add.') + collect.add_argument( + '-r', + '--repositories', + nargs='*', + help='List of repositories to add.' + ) collect.add_argument( '-n', '--not-incremental', diff --git a/gitmetrics/main.py b/gitmetrics/main.py index 247da31..1bafb59 100644 --- a/gitmetrics/main.py +++ b/gitmetrics/main.py @@ -8,7 +8,7 @@ from gitmetrics.constants import METRICS_SHEET_NAME from gitmetrics.drive import get_or_create_gdrive_folder -from gitmetrics.github.repository import RepositoryClient +from gitmetrics.github.repository import RepositoryClient, STARGAZERS_COLUMNS from gitmetrics.github.repository_owner import RepositoryOwnerClient from gitmetrics.github.traffic import TrafficClient from gitmetrics.github.users import UsersClient @@ -61,7 +61,14 @@ def _get_repository_data(token, repository, previous=None, quiet=False): pull_requests = repo_client.get_pull_requests() pull_requests.insert(1, 'repository', repository) - stargazers = repo_client.get_stargazers() + try: + stargazers = repo_client.get_stargazers() + except Exception: + # Stargazer information is available only for repositories that we own + # In order to continue with the flow without breaking we create an empty + # dataframe with the expected columns. + stargazers = pd.DataFrame(columns=STARGAZERS_COLUMNS) + stargazers.insert(1, 'repository', repository) return issues, pull_requests, stargazers From 8d18fe36929967dad3d18a7f5d08e4acfd943386 Mon Sep 17 00:00:00 2001 From: Plamen Valentinov Kolev Date: Fri, 24 Jul 2026 16:11:25 +0200 Subject: [PATCH 2/2] Fix lint --- gitmetrics/__main__.py | 7 +------ gitmetrics/main.py | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/gitmetrics/__main__.py b/gitmetrics/__main__.py index c135d07..0db587f 100644 --- a/gitmetrics/__main__.py +++ b/gitmetrics/__main__.py @@ -212,12 +212,7 @@ def _get_parser(): collect.add_argument( '-m', '--add-metrics', action='store_true', help='Whether to add a metrics tab.' ) - collect.add_argument( - '-r', - '--repositories', - nargs='*', - help='List of repositories to add.' - ) + collect.add_argument('-r', '--repositories', nargs='*', help='List of repositories to add.') collect.add_argument( '-n', '--not-incremental', diff --git a/gitmetrics/main.py b/gitmetrics/main.py index 1bafb59..17c6293 100644 --- a/gitmetrics/main.py +++ b/gitmetrics/main.py @@ -8,7 +8,7 @@ from gitmetrics.constants import METRICS_SHEET_NAME from gitmetrics.drive import get_or_create_gdrive_folder -from gitmetrics.github.repository import RepositoryClient, STARGAZERS_COLUMNS +from gitmetrics.github.repository import STARGAZERS_COLUMNS, RepositoryClient from gitmetrics.github.repository_owner import RepositoryOwnerClient from gitmetrics.github.traffic import TrafficClient from gitmetrics.github.users import UsersClient