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..0db587f 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 diff --git a/gitmetrics/main.py b/gitmetrics/main.py index 247da31..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 +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 @@ -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