{"id":11772167,"name":"lfreleng-actions/python-build-action","ecosystem":"actions","description":"Builds a Python Project","homepage":"","licenses":"other","normalized_licenses":["Other"],"repository_url":"https://github.com/lfreleng-actions/python-build-action","keywords_array":["build","python"],"namespace":"lfreleng-actions","versions_count":26,"first_release_published_at":"2025-03-24T16:41:24.000Z","latest_release_published_at":"2025-12-31T11:51:24.000Z","latest_release_number":"v1.0.2","last_synced_at":"2026-04-15T01:19:22.017Z","created_at":"2025-06-07T21:17:10.350Z","updated_at":"2026-04-15T01:19:22.017Z","registry_url":"https://github.com/lfreleng-actions/python-build-action","install_command":null,"documentation_url":null,"metadata":{"name":"🐍 Build Python Project","description":"Builds a Python Project","inputs":{"artefact_name":{"description":"Custom name for uploaded artefacts (defaults to project name)","required":false},"artefact_path":{"description":"Build artefacts will be output to this folder/directory","required":false,"default":"dist"},"artefact_upload":{"description":"Upload artefacts to GitHub once build completed","required":false,"default":"true"},"purge_artefact_path":{"description":"Purge artefact path prior to performing build","required":false,"default":"false"},"tag":{"description":"Explicit tag/version for this build (semantic)","required":false},"skip_version_patch":{"description":"Skip version patching (support dynamic versioning)","required":false,"default":"false"},"attestations":{"description":"Apply GitHub attestations to artefacts","required":false,"default":"false"},"sigstore_sign":{"description":"Sign build artefacts with Sigstore","required":false,"default":"false"},"path_prefix":{"description":"Directory location containing project code","required":false,"default":"."},"tox_build":{"description":"Attempt to use TOX to perform build","required":false,"default":"false"},"clear_cache":{"description":"Clear all Python dependency caches for this repository","required":false,"default":"false"},"python_version":{"description":"Override Python version for build (uses metadata detection if not set)","required":false},"build_formats":{"description":"Build formats: wheel, sdist, or both (default: both)","required":false,"default":"both"},"auditwheel":{"description":"Run auditwheel to repair wheels for manylinux compatibility","required":false,"default":"false"},"manylinux_version":{"description":"Target manylinux version for auditwheel","required":false,"default":"manylinux_2_34"},"make":{"description":"Run make before building","required":false,"default":"false"},"make_args":{"description":"Arguments/flags sent to make command","required":false,"default":""}},"outputs":{"build_python_version":{"description":"Python version used to perform build (create artefacts)","value":"${{ steps.python_version.outputs.python_version }}"},"matrix_json":{"description":"Project supported Python versions as JSON","value":"${{ steps.metadata.outputs.python_matrix_json }}"},"artefact_name":{"description":"Project name used for build artefacts","value":"${{ steps.build_summary.outputs.artefact_name }}"},"artefact_path":{"description":"Full path to build artefacts directory","value":"${{ steps.build_summary.outputs.artefact_path }}"}},"runs":{"using":"composite","steps":[{"name":"Setup action/environment","shell":"bash","run":"set -euo pipefail\n# Setup action/environment\n\n# Set input variables\npath_prefix=\"${{ inputs.path_prefix }}\"\nartefact_path=\"${{ inputs.artefact_path }}\"\npurge_artefact_path=\"${{ inputs.purge_artefact_path }}\"\n\n# Verify path_prefix a valid directory path\nif [ ! -d \"$path_prefix\" ]; then\n  echo 'Error: invalid path/prefix to project directory ❌'; exit 1\nfi\n\n# Output build heading\necho '# 🐍 Python Build' \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\n\n# Set build parameters/variables\necho \"Action triggered by: ${GITHUB_TRIGGERING_ACTOR}\"\ndatetime=$(date +'%Y-%m-%d-%H%M')\necho \"Build date and time stamp: $datetime\"\necho \"datetime=$datetime\" \u003e\u003e \"$GITHUB_ENV\"\necho \"datetime=${datetime}\" \u003e\u003e \"$GITHUB_OUTPUT\"\n\nif [ \"$purge_artefact_path\" != \"false\" ] \u0026\u0026 \\\n  [ -n \"$purge_artefact_path\" ] \u0026\u0026 \\\n  [ -d \"$path_prefix/$artefact_path\" ]; then\n  echo \"Purging artefact output path prior to build ⚠️\"\n  echo \"Path: $path_prefix/$artefact_path\"\n  rm -Rf \"$path_prefix/$artefact_path\"/*\nfi\n"},{"name":"Gather Python project metadata","id":"metadata","uses":"lfreleng-actions/build-metadata-action@c8d6f8396301edd325ac90db463850048f5fe20c","with":{"path_prefix":"${{ inputs.path_prefix }}","output_format":"summary","include_environment":true,"use_version_extract":true,"verbose":true}},{"name":"Check project version matches pushed tags","if":"github.ref_type == 'tag' \u0026\u0026 steps.metadata.outputs.python_versioning_type != 'dynamic'","uses":"lfreleng-actions/python-project-tag-push-verify-action@f38729e7497f1a86e2f2e034321ec162ddee1843","with":{"path_prefix":"${{ inputs.path_prefix }}"}},{"name":"Fetch tags to support dynamic versioning","if":"github.ref_type != 'tag' \u0026\u0026 steps.metadata.outputs.python_versioning_type == 'dynamic'","shell":"bash","run":"set -euo pipefail\n# Fetch tags to support dynamic versioning\n# ...but NOT when a tag push triggered the build\npath_prefix=\"${{ inputs.path_prefix }}\"\ngit -C \"$path_prefix\" fetch --unshallow\ngit -C \"$path_prefix\" fetch --tags origin ||\\\n{ echo \"Error: git fetch --tags failed\" \u003e\u00262; exit 1; }\necho \"Dynamic versioning: fetched repository tags 💬\" \\\n  \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\n"},{"name":"Explicit build versioning","if":"inputs.tag != ''","shell":"bash","run":"set -euo pipefail\n# Explicit build versioning\necho \"Explicit build versioning: ${{ inputs.tag }} 💬\" \\\n  \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\n"},{"name":"Patch project versioning metadata","if":"inputs.skip_version_patch != 'true' \u0026\u0026 inputs.tag != '' \u0026\u0026 steps.metadata.outputs.project_version != inputs.tag \u0026\u0026 steps.metadata.outputs.python_versioning_type != 'dynamic'","uses":"lfreleng-actions/python-project-version-patch-action@00abe0079fb90e4dbec00e2bb1ad97407170fe7d","with":{"replacement_version":"${{ inputs.tag }}","path_prefix":"${{ inputs.path_prefix }}"}},{"name":"Determine Python version for build","id":"python_version","shell":"bash","run":"set -euo pipefail\n# Determine Python version for build\nif [ -n \"${{ inputs.python_version }}\" ]; then\n  python_version=\"${{ inputs.python_version }}\"\n  echo \"Using override Python version: $python_version 🔧\"\nelse\n  python_version=\"${{ steps.metadata.outputs.python_build_version }}\"\n  if [ -z \"$python_version\" ]; then\n    echo \"Error: Python version not available ❌\" \u003e\u00262\n    echo \"Could not determine Python version from metadata or input\" \u003e\u00262\n    exit 1\n  fi\n  echo \"Using Python version from metadata: $python_version 💬\"\nfi\necho \"python_version=$python_version\" \u003e\u003e \"$GITHUB_OUTPUT\"\n"},{"name":"Setup Python","uses":"actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548","with":{"python-version":"${{ steps.python_version.outputs.python_version }}"}},{"name":"Clear Python dependency caches","if":"inputs.clear_cache == 'true'","shell":"bash","env":{"GH_TOKEN":"${{ github.token }}"},"run":"# Clear Python dependency caches\necho \"Clearing Python dependency caches 🗑️\"\noutput=\"$(gh cache delete --all 2\u003e\u00261)\" || exit_code=$?\nif [ -z \"${exit_code:-}\" ]; then\n  echo \"Cache clearing completed ✅\" \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\nelse\n  # Cache clearing should not be fatal; minimal output to summary\n  echo \"Cache clearing was not successful 💬\" \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\n  # More detailed information goes to the console/log output\n  echo \"gh cache exit code: ${exit_code} 💬\"\n  echo \"$output\"\nfi\n"},{"name":"Cache Python dependencies","uses":"actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb","with":{"path":"~/.cache/pip\n~/.cache/pypoetry\n~/.cache/pipenv\n.venv\n.tox\n","key":"python-${{ runner.os }}-${{ steps.python_version.outputs.python_version }}- ${{ hashFiles('**/requirements*.txt', '**/pyproject.toml', '**/poetry.lock', '**/Pipfile*', '**/setup.py', '**/setup.cfg') }}","restore-keys":"python-${{ runner.os }}-${{ steps.python_version.outputs.python_version }}-\npython-${{ runner.os }}-\n"}},{"name":"Install build dependencies","shell":"bash","run":"set -euo pipefail\n# Install build dependencies\necho 'Installing Python build dependencies...'\npython -m pip install --disable-pip-version-check \\\n  -q --upgrade build packaging\necho 'Build dependencies installed ✅'\n"},{"name":"Prepare make arguments","if":"inputs.make == 'true'","id":"make_prep","shell":"bash","run":"# Prepare make arguments\nargs=\"${{ inputs.make_args }}\"\nif [ -n \"${{ inputs.path_prefix }}\" ] \u0026\u0026 \\\n   [ \"${{ inputs.path_prefix }}\" != '.' ]; then\n  args=\"-C \\\"${{ inputs.path_prefix }}\\\" $args\"\nfi\necho \"make_args=$args\" \u003e\u003e \"$GITHUB_OUTPUT\"\n"},{"name":"Conditionally run make","if":"inputs.make == 'true'","uses":"lfreleng-actions/make-action@e07201ee8e3d1f34800f1c63f58415624a8c054c","with":{"make_args":"${{ steps.make_prep.outputs.make_args }}"}},{"name":"Build with TOX","if":"inputs.tox_build == 'true'","shell":"bash","run":"# Build with TOX\nset -euo pipefail\necho \"Building with tox: some inputs/options may be disregarded ⚠️\"\n\npath_prefix=\"${{ inputs.path_prefix }}\"\nif [ -f \"$path_prefix/tox.ini\" ]; then\n  echo \"TOX configuration file: $path_prefix/tox.ini\"\n  python -m pip install --disable-pip-version-check \\\n    -q --upgrade tox tox-gh-actions\n  echo \"Building with: tox --root \\\"$path_prefix\\\" -c \\\"$path_prefix\\\"/tox.ini -e build\"\n  if (tox --root \"$path_prefix\" -c \"$path_prefix/tox.ini\" -e build); then\n    echo 'Build with TOX successful ✅'\n  else\n    echo 'Build with TOX failed ❌'; exit 1\n  fi\nelse\n  echo 'Error: TOX configuration not found ❌'; exit 1\nfi\n"},{"name":"Build Python project","if":"inputs.tox_build != 'true'","shell":"bash","run":"set -euo pipefail\n# Build Python project\npath_prefix=\"${{ inputs.path_prefix }}\"\nartefact_path=\"${{ inputs.artefact_path }}\"\nbuild_formats=\"${{ inputs.build_formats }}\"\n\n# Validate build_formats input\ncase \"$build_formats\" in\n  wheel|sdist|both)\n    # Valid\n    ;;\n  *)\n    echo \"Error: Invalid build_formats value: '$build_formats' ❌\"\n    echo \"Valid values are: 'wheel', 'sdist', or 'both'\"\n    exit 1\n    ;;\nesac\n\n# Determine build flags\nbuild_flags=\"\"\nif [ \"$build_formats\" = \"wheel\" ]; then\n  build_flags=\"--wheel\"\nelif [ \"$build_formats\" = \"sdist\" ]; then\n  build_flags=\"--sdist\"\nfi\n\nif [ -f \"$path_prefix/pyproject.toml\" ] || \\\n[ -f \"$path_prefix/setup.py\" ]; then\n  if (python -m build $build_flags --outdir \\\n    \"$path_prefix/$artefact_path\" \\\n    \"$path_prefix\"); then\n    echo 'Build with Python module successful ✅'\n  else\n    echo 'Build with Python module failed ❌'; exit 1\n  fi\nelse\n  echo 'Error: project definition file not found ❌'; exit 1\nfi\n"},{"name":"Repair wheels with auditwheel","if":"inputs.auditwheel == 'true' \u0026\u0026 inputs.build_formats != 'sdist'","shell":"bash","run":"set -euo pipefail\n# Repair wheels to manylinux format for PyPI compatibility\npath_prefix=\"${{ inputs.path_prefix }}\"\nartefact_path=\"${{ inputs.artefact_path }}\"\n\n# Check if there are any wheels to repair\nif ls \"$path_prefix/$artefact_path\"/*.whl 1\u003e /dev/null 2\u003e\u00261; then\n  echo \"Installing auditwheel...\"\n  python -m pip install auditwheel\n\n  # Create temp directory for repaired wheels\n  mkdir -p \"$path_prefix/$artefact_path/wheelhouse\"\n\n  # Repair each wheel\n  manylinux_version=\"${{ inputs.manylinux_version }}\"\n  echo \"Using manylinux version: $manylinux_version\"\n\n  # Detect architecture for platform tag\n  arch=$(uname -m)\n  if [ \"$arch\" = \"x86_64\" ]; then\n    platform_tag=\"${manylinux_version}_x86_64\"\n  elif [ \"$arch\" = \"aarch64\" ]; then\n    platform_tag=\"${manylinux_version}_aarch64\"\n  else\n    echo \"⚠️ Unsupported architecture: $arch\"\n    echo \"Supported architectures: x86_64, aarch64\"\n    echo \"Attempting to use platform tag: ${manylinux_version}_${arch}.\"\n    platform_tag=\"${manylinux_version}_${arch}\"\n  fi\n  echo \"Platform tag: $platform_tag\"\n\n  for wheel in \"$path_prefix/$artefact_path\"/*.whl; do\n    echo \"Repairing wheel: $(basename \"$wheel\")\"\n\n    # Show wheel info (informational only, don't fail on errors)\n    auditwheel show \"$wheel\" || \\\n      echo \"Note: auditwheel show failed for $(basename \"$wheel\")\"\n\n    # Attempt repair\n    if auditwheel repair \"$wheel\" --plat \"$platform_tag\" \\\n        -w \"$path_prefix/$artefact_path/wheelhouse\"; then\n      echo \"✅ Successfully repaired $(basename \"$wheel\")\"\n    else\n      echo \"⚠️ auditwheel repair failed for $(basename \"$wheel\")\"\n      echo \"Will keep original build artefact unmodified\"\n      cp \"$wheel\" \"$path_prefix/$artefact_path/wheelhouse/\"\n    fi\n  done\n\n  # Replace original wheels with repaired ones\n  rm -f \"$path_prefix/$artefact_path\"/*.whl\n  mv \"$path_prefix/$artefact_path/wheelhouse\"/*.whl \\\n    \"$path_prefix/$artefact_path/\"\n  rmdir \"$path_prefix/$artefact_path/wheelhouse\"\n\n  echo \"Wheel repair completed ✅\"\nelse\n  echo \"No wheels found to repair\"\nfi\n"},{"name":"Build outputs/summary","id":"build_summary","shell":"bash","run":"set -euo pipefail\n# Build outputs/summary\npath_prefix=\"${{ inputs.path_prefix }}\"\nartefact_path=\"${{ inputs.artefact_path }}\"\nfull_artefact_path=\"$path_prefix/$artefact_path\"\n\n# Use custom artefact name if provided, otherwise use project name from\n# metadata, falling back to directory basename if that is unavailable\nartefact_name=\"${{ inputs.artefact_name }}\"\nif [ -z \"$artefact_name\" ]; then\n  project_name=\"${{ steps.metadata.outputs.project_name }}\"\n  if [ -z \"$project_name\" ]; then\n    project_name=$(basename \"$path_prefix\")\n    echo \"Warning: project_name not found in metadata, using: $project_name\" \u003e\u00262\n  fi\n  artefact_name=\"$project_name\"\nfi\n\necho \"artefact_name=$artefact_name\" \u003e\u003e \"$GITHUB_OUTPUT\"\necho \"artefact_path=$full_artefact_path\" \u003e\u003e \"$GITHUB_OUTPUT\"\necho \"Artefact name: $artefact_name\"\necho \"Artefact path: $full_artefact_path\"\npython_version=$(python --version)\necho \"Build with Python $python_version successful ✅\"\necho \"Build with $python_version successful ✅\" \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\n"},{"name":"Validate artefacts with Twine","uses":"lfreleng-actions/python-twine-check-action@514f458fad2cfe506da1e472d2a68c4297fcbf94","with":{"path_prefix":"${{ inputs.path_prefix }}","path":"${{ inputs.artefact_path }}"}},{"name":"Perform artefact attestations","uses":"actions/attest-build-provenance@00014ed6ed5efc5b1ab7f7f34a39eb55d41aa4f8","if":"inputs.attestations == 'true'","with":{"subject-path":"${{ inputs.path_prefix }}/${{ inputs.artefact_path }}/*"}},{"name":"Add heading to separate signing from attestations","if":"inputs.sigstore_sign == 'true'","shell":"bash","run":"set -euo pipefail\n# Add heading to separate signing from attestations\necho '### Sigstore Signing ✍🏼' \u003e\u003e \"$GITHUB_STEP_SUMMARY\"\n"},{"name":"Sign packages with SigStore","if":"inputs.sigstore_sign == 'true'","shell":"bash","run":"set -euo pipefail\n# Build list of files to sign based on build_formats\nfiles_to_sign=()\n\nif [ \"${{ inputs.build_formats }}\" = \"sdist\" ] || [ \"${{ inputs.build_formats }}\" = \"both\" ]; then\n  if ls \"${{ inputs.path_prefix }}/${{ inputs.artefact_path }}\"/*.tar.gz 1\u003e /dev/null 2\u003e\u00261; then\n    files_to_sign+=(\"${{ inputs.path_prefix }}/${{ inputs.artefact_path }}\"/*.tar.gz)\n  fi\nfi\n\nif [ \"${{ inputs.build_formats }}\" = \"wheel\" ] || [ \"${{ inputs.build_formats }}\" = \"both\" ]; then\n  if ls \"${{ inputs.path_prefix }}/${{ inputs.artefact_path }}\"/*.whl 1\u003e /dev/null 2\u003e\u00261; then\n    files_to_sign+=(\"${{ inputs.path_prefix }}/${{ inputs.artefact_path }}\"/*.whl)\n  fi\nfi\n\nif [ ${#files_to_sign[@]} -eq 0 ]; then\n  echo \"❌ No files found to sign\"\n  exit 1\nfi\n\necho \"SIGSTORE_FILES\u003c\u003cEOF\" \u003e\u003e \"$GITHUB_ENV\"\nprintf '%s\\n' \"${files_to_sign[@]}\" \u003e\u003e \"$GITHUB_ENV\"\necho \"EOF\" \u003e\u003e \"$GITHUB_ENV\"\n"},{"name":"Run SigStore signing","if":"inputs.sigstore_sign == 'true'","uses":"sigstore/gh-action-sigstore-python@a5caf349bc536fbef3668a10ed7f5cd309a4b53d","with":{"inputs":"${{ env.SIGSTORE_FILES }}"}},{"name":"Upload build artefacts","if":"inputs.artefact_upload == 'true'","uses":"actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f","with":{"name":"${{ steps.build_summary.outputs.artefact_name }}","path":"${{ inputs.path_prefix }}/${{ inputs.artefact_path }}","if-no-files-found":"error","overwrite":"${{ inputs.purge_artefact_path }}"}}]},"default_branch":"main","path":null},"repo_metadata":{"id":282945679,"uuid":"949508480","full_name":"lfreleng-actions/python-build-action","owner":"lfreleng-actions","description":"Performs a set of Python matrix build jobs","archived":false,"fork":false,"pushed_at":"2026-02-04T13:54:53.000Z","size":346,"stargazers_count":0,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-05T00:51:36.788Z","etag":null,"topics":["build","python"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lfreleng-actions.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-16T16:09:12.000Z","updated_at":"2026-02-04T13:57:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"0c73b484-4b02-4651-896b-637f62c78378","html_url":"https://github.com/lfreleng-actions/python-build-action","commit_stats":null,"previous_names":["lfreleng-actions/python-build-action"],"tags_count":26,"template":false,"template_full_name":"lfreleng-actions/actions-template","purl":"pkg:github/lfreleng-actions/python-build-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfreleng-actions%2Fpython-build-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfreleng-actions%2Fpython-build-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfreleng-actions%2Fpython-build-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfreleng-actions%2Fpython-build-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lfreleng-actions","download_url":"https://codeload.github.com/lfreleng-actions/python-build-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfreleng-actions%2Fpython-build-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29332659,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"tags":[]},"repo_metadata_updated_at":"2026-02-11T15:16:29.570Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":34.34343434343434,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":17.17171717171717},"purl":"pkg:githubactions/lfreleng-actions/python-build-action","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/lfreleng-actions/python-build-action","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/lfreleng-actions/python-build-action","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/lfreleng-actions/python-build-action/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-09-18T14:21:44.589Z","issues_count":0,"pull_requests_count":109,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":199417.1888888889,"issues_closed_count":0,"pull_requests_closed_count":90,"pull_request_authors_count":3,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":0.09174311926605505,"merged_pull_requests_count":85,"bot_issues_count":0,"bot_pull_requests_count":75,"past_year_issues_count":0,"past_year_pull_requests_count":109,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":199417.1888888889,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":90,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.09174311926605505,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":75,"past_year_merged_pull_requests_count":85,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfreleng-actions%2Fpython-build-action/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/lfreleng-actions%2Fpython-build-action/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/lfreleng-actions%2Fpython-build-action/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/lfreleng-actions%2Fpython-build-action/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/lfreleng-actions%2Fpython-build-action/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/lfreleng-actions%2Fpython-build-action/codemeta","maintainers":[]}