{"id":12088836,"name":"ipfs/ipfs-deploy-action","ecosystem":"actions","description":"Merkleize and deploy static sites to IPFS with Storacha, with optional Pinata and Filebase pinning","homepage":"https://github.com/marketplace/actions/deploy-to-ipfs","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ipfs/ipfs-deploy-action","keywords_array":["actions","car-file","cid","deploy","github","ipfs","ipfs-cluster","kubo","pinata","storacha","upload"],"namespace":"ipfs","versions_count":30,"first_release_published_at":"2025-01-31T16:25:04.000Z","latest_release_published_at":"2025-08-25T16:01:41.000Z","latest_release_number":"v1.7.0","latest_published_release_number":null,"last_synced_at":"2026-10-04T02:37:33.377Z","created_at":"2025-09-09T21:35:39.842Z","updated_at":"2026-10-06T19:58:06.136Z","registry_url":"https://github.com/ipfs/ipfs-deploy-action","install_command":null,"documentation_url":null,"metadata":{"name":"Deploy to IPFS","description":"Merkleize and deploy static sites to IPFS with Storacha, with optional Pinata and Filebase pinning","branding":{"icon":"box","color":"blue"},"inputs":{"kubo-version":{"description":"Kubo version used to merkleize, create CAR file, and pin https://dist.ipfs.tech/kubo/versions","default":"v0.33.0","required":false},"path-to-deploy":{"description":"Path to the directory containing the frontend build to merkleize into a CAR file and deploy to IPFS","required":true},"ipfs-add-options":{"description":"Options to pass to `ipfs add` command of Kubo See https://docs.ipfs.tech/reference/kubo/cli/#ipfs-add","default":"--cid-version 1 --chunker size-1048576","required":false},"kubo-api-url":{"description":"Kubo RPC API URL to pass to `ipfs --api`, e.g. `/dns/YOUR_DOMAIN/tcp/443/https`","required":false},"kubo-api-auth":{"description":"Kubo RPC API auth secret to pass to `ipfs --api-auth`, e.g. `basic:hello:world` (defined as `AuthSecret` in `API.Authorizations` Kubo config)","required":false},"cluster-url":{"description":"IPFS Cluster URL to pass to ipfs-cluster-ctl --host, e.g. /dnsaddr/...","required":false},"cluster-user":{"description":"IPFS Cluster username used for basic http auth","required":false},"cluster-password":{"description":"IPFS Cluster password used for basic http auth","required":false},"cluster-retry-attempts":{"description":"Number of retry attempts for IPFS Cluster uploads","default":"3","required":false},"cluster-timeout-minutes":{"description":"Timeout in minutes for each IPFS Cluster upload attempt","default":"5","required":false},"ipfs-cluster-ctl-version":{"description":"IPFS Cluster CLI version to use","default":"v1.1.2","required":false},"cluster-pin-expire-in":{"description":"Time duration after which the pin will expire in IPFS Cluster (e.g. 720h for 30 days). Only supported by IPFS Cluster.","required":false},"pin-name":{"description":"Custom name for the pin. If unset, defaults to \"{repo-name}-{commit-sha-short}\"","required":false},"storacha-key":{"description":"Storacha base64 encoded key to use to sign UCAN invocations. Create one using `w3 key create --json`. See: https://github.com/storacha/w3cli#w3_principal","required":false},"storacha-proof":{"description":"Storacha Base64 encoded proof UCAN with capabilities for the space `w3 delegation create did:key:DID_OF_KEY -c space/blob/add -c space/index/add -c filecoin/offer -c upload/add --base64`","required":false},"pinata-pinning-url":{"description":"Pinata Pinning Service URL","default":"https://api.pinata.cloud/psa"},"pinata-jwt-token":{"description":"Pinata JWT token for authentication","required":false},"filebase-bucket":{"description":"Filebase bucket name","required":false},"filebase-access-key":{"description":"Filebase access key","required":false},"filebase-secret-key":{"description":"Filebase secret key","required":false},"github-token":{"description":"GitHub token for updating commit status and PR comments","required":true},"set-github-status":{"description":"Set GitHub commit status with build CID. Use \"true\" or \"false\" (as strings)","default":"true","required":false},"github-status-gw":{"description":"Gateway URL to use for the commit status target_url. Defaults to `inbrowser.link`","default":"inbrowser.link","required":false},"set-pr-comment":{"description":"Set PR comments with IPFS deployment information. Use \"true\" or \"false\" (as strings)","default":"true","required":false},"upload-car-artifact":{"description":"Upload the CAR file as a GitHub artifact","default":"true","required":false}},"outputs":{"cid":{"description":"The IPFS CID of the uploaded content","value":"${{ steps.merkleize.outputs.cid }}"}},"runs":{"using":"composite","steps":[{"name":"Validate action inputs","shell":"bash","run":"# This checks if neither Storacha, IPFS Cluster, nor Kubo credentials are provided\n# It validates that at least one of the three credential sets is complete:\n# 1. Storacha: both key and proof must be set\n# 2. IPFS Cluster: url, user and password must all be set\n# 3. Kubo: api url and auth must both be set\n# If all credential sets are incomplete/empty, it will error\nif [[ -z \"${{ inputs.storacha-key }}\" || -z \"${{ inputs.storacha-proof }}\" ]] \u0026\u0026 [[ -z \"${{ inputs.cluster-url }}\" || -z \"${{ inputs.cluster-user }}\" || -z \"${{ inputs.cluster-password }}\" ]] \u0026\u0026 [[ -z \"${{ inputs.kubo-api-url }}\" || -z \"${{ inputs.kubo-api-auth }}\" ]]; then\n  echo \"::error::Either Storacha credentials (`storacha-key` and `storacha-proof`) or IPFS Cluster credentials (`cluster-url`, `cluster-user`, and `cluster-password`) or Kubo credentials (`kubo-api-url` and `kubo-api-auth`) must be configured. Note that Pinata can only be used in addition to the above providers/nodes, but not exclusively.\"\n  exit 1\nfi\n"},{"name":"Setup Kubo CLI","uses":"ipfs/download-ipfs-distribution-action@v1","with":{"name":"kubo","version":"${{ inputs.kubo-version }}"}},{"name":"ipfs init","shell":"bash","run":"ipfs init\n"},{"name":"Merkleize into CAR file","id":"merkleize","shell":"bash","run":"echo \"ℹ️ Merkleizing ${{ inputs.path-to-deploy }} into CAR file\"\n\n# Verify the directory exists\nif [ ! -d \"${{ inputs.path-to-deploy }}\" ]; then\n  echo \"::error::Directory '${{ inputs.path-to-deploy }}' does not exist or is not accessible\"\n  exit 1\nfi\n\n# Verify the directory is not empty\nif [ -z \"$(ls -A ${{ inputs.path-to-deploy }})\" ]; then\n  echo \"::error::Directory '${{ inputs.path-to-deploy }}' is empty\"\n  exit 1\nfi\n\n# Merkleize the directory into a CAR file\nCID=$(ipfs add ${{ inputs.ipfs-add-options }} -Q -r ${{ inputs.path-to-deploy }})\nipfs dag export $CID \u003e build.car\n\n# Verify that we got a valid CID\nif [ -z \"$CID\" ]; then\n  echo \"::error::Failed to extract CID from ipfs add output\"\n  exit 1\nfi\n\necho \"cid=$CID\" \u003e\u003e \"$GITHUB_OUTPUT\"\necho $CID\necho \"✅ Merkleized path: \\`${{ inputs.path-to-deploy }}\\` into CAR file with root CID \\`$CID\\`\" \u003e\u003e $GITHUB_STEP_SUMMARY\n"},{"name":"CAR file artifact name","if":"${{ inputs.upload-car-artifact != 'false' }}","shell":"bash","run":"REPO_NAME=$(echo \"${{ github.repository }}\" | tr '/' '-')\nCOMMIT_SHA=\"${{ github.event.pull_request.head.sha || github.sha }}\"\nCOMMIT_SHA_SHORT=\"${COMMIT_SHA:0:7}\"\necho \"artifact_name=$REPO_NAME-$COMMIT_SHA_SHORT-${{ steps.merkleize.outputs.cid }}.car\" \u003e\u003e \"$GITHUB_ENV\"\n"},{"name":"CAR file artifact upload","if":"${{ inputs.upload-car-artifact != 'false' }}","uses":"actions/upload-artifact@v4","with":{"name":"${{ env.artifact_name }}","path":"build.car","retention-days":7,"if-no-files-found":"error"}},{"name":"Configure and upload CAR to Storacha","if":"${{ inputs.storacha-key != '' \u0026\u0026 inputs.storacha-proof != ''}}","shell":"bash","env":{"W3_PRINCIPAL":"${{ inputs.storacha-key }}"},"run":"npm install -g @web3-storage/w3cli\necho \"ℹ️ Uploading CAR with CID ${{ steps.merkleize.outputs.cid }} to Storacha\"\nw3 space add ${{ inputs.storacha-proof }}\nif ! w3 up --car build.car; then\n  echo \"::error::Failed to upload to Storacha\"\n  exit 1\nelse\n  echo \"✅ Uploaded CAR with CID \\`${{ steps.merkleize.outputs.cid }}\\` to Storacha\" \u003e\u003e $GITHUB_STEP_SUMMARY\n\n  echo \"### 🚀 Build Preview on IPFS ready\" \u003e\u003e $GITHUB_STEP_SUMMARY\n  echo \"- 🔎 Commit: ${{ github.event.pull_request.head.sha || github.sha }}\" \u003e\u003e $GITHUB_STEP_SUMMARY\n  echo \"- 🔏 CID: \\`${{ steps.merkleize.outputs.cid }}\\`\" \u003e\u003e $GITHUB_STEP_SUMMARY\n  echo \"- 📦 Preview:\" \u003e\u003e $GITHUB_STEP_SUMMARY\n  echo \"- [dweb.link](https://dweb.link/ipfs/${{ steps.merkleize.outputs.cid }})\" \u003e\u003e $GITHUB_STEP_SUMMARY\n  if [[ -n \"${{ inputs.storacha-key }}\" \u0026\u0026 -n \"${{ inputs.storacha-proof }}\" ]]; then\n    echo \"- [w3s.link](https://w3s.link/ipfs/${{ steps.merkleize.outputs.cid }})\" \u003e\u003e $GITHUB_STEP_SUMMARY\n  fi\n  echo \"- [inbrowser.link](https://inbrowser.link/ipfs/${{ steps.merkleize.outputs.cid }})\" \u003e\u003e $GITHUB_STEP_SUMMARY\nfi\n"},{"name":"Upload CAR to Kubo","if":"${{ inputs.kubo-api-url != '' \u0026\u0026 inputs.kubo-api-auth != ''}}","shell":"bash","env":{"KUBO_API_URL":"${{ inputs.kubo-api-url }}","KUBO_API_AUTH":"${{ inputs.kubo-api-auth }}"},"run":"echo \"ℹ️ Uploading CAR with CID ${{ steps.merkleize.outputs.cid }} to Kubo\"\nif [ -n \"${ACTIONS_RUNNER_DEBUG}\" ]; then\n  export GOLOG_LOG_LEVEL='debug'\nfi\nipfs dag import build.car --api ${KUBO_API_URL} --api-auth ${KUBO_API_AUTH}\n\necho \"✅ Uploaded CAR with CID ${{ steps.merkleize.outputs.cid }} to Kubo\" \u003e\u003e $GITHUB_STEP_SUMMARY\n"},{"name":"Setup IPFS Cluster CLI","if":"${{ inputs.cluster-url != ''}}","uses":"ipfs/download-ipfs-distribution-action@v1","with":{"name":"ipfs-cluster-ctl","version":"${{ inputs.ipfs-cluster-ctl-version }}"}},{"name":"Set pin name","id":"set-pin-name","shell":"bash","run":"REPO_NAME=$(echo \"${{ github.repository }}\" | tr '/' '-')\nCOMMIT_SHA=\"${{ github.event.pull_request.head.sha || github.sha }}\"\nCOMMIT_SHA_SHORT=\"${COMMIT_SHA:0:7}\"\n\n# Set the pin name - either use the input or default to repo-commit format\nif [ -n \"${{ inputs.pin-name }}\" ]; then\n  PIN_NAME=\"${{ inputs.pin-name }}\"\nelse\n  PIN_NAME=\"${REPO_NAME}-${COMMIT_SHA_SHORT}\"\nfi\n\necho \"pin_name=${PIN_NAME}\" \u003e\u003e \"$GITHUB_ENV\"\necho \"Using pin name: ${PIN_NAME}\"\n"},{"name":"Upload CAR to IPFS Cluster","if":"${{ inputs.cluster-url != '' \u0026\u0026 inputs.cluster-user != '' \u0026\u0026 inputs.cluster-password != '' }}","shell":"bash","env":{"IPFS_CLUSTER_URL":"${{ inputs.cluster-url }}","IPFS_CLUSTER_USER":"${{ inputs.cluster-user }}","IPFS_CLUSTER_PASSWORD":"${{ inputs.cluster-password }}"},"run":"echo \"ℹ️ Uploading CAR with CID ${{ steps.merkleize.outputs.cid }} to IPFS Cluster\"\n\n# run in a loop and retry\nattempt=1\nwhile true; do\n  echo \"Attempt #$attempt\"\n\n  # Make sure we don't loop forever\n  if [ $attempt -eq ${{ inputs.cluster-retry-attempts }} ]; then\n    echo \"❌ Failed to upload CAR with CID ${{ steps.merkleize.outputs.cid }} to IPFS Cluster\" \u003e\u003e $GITHUB_STEP_SUMMARY\n    exit 1\n  fi\n\n  if [[ -n \"${ACTIONS_RUNNER_DEBUG}\" || $attempt -ge 2 ]]; then\n    export GOLOG_LOG_LEVEL='debug'\n  fi\n\n  # the --local flag will add the CAR to the local IPFS daemon of the peer receiving the request, but not wait for it to be fully replicated.\n  timeout ${{ inputs.cluster-timeout-minutes }}m ipfs-cluster-ctl \\\n    --enc=json \\\n    --host ${IPFS_CLUSTER_URL} \\\n    --basic-auth ${IPFS_CLUSTER_USER}:${IPFS_CLUSTER_PASSWORD} \\\n    add --format=car \\\n    --local \\\n    --name \"${pin_name}\" \\\n    ${{ inputs.cluster-pin-expire-in != '' \u0026\u0026 format('--expire-in {0}', inputs.cluster-pin-expire-in) || '' }} \\\n    build.car \u0026\u0026 {\n      echo \"✅ Uploaded CAR with CID ${{ steps.merkleize.outputs.cid }} to IPFS Cluster\" \u003e\u003e $GITHUB_STEP_SUMMARY\n      if [[ -n \"${{ inputs.cluster-pin-expire-in }}\" ]]; then\n        echo \"⏰ IPFS Cluster Pin is set to expire in ${{ inputs.cluster-pin-expire-in }}\" \u003e\u003e $GITHUB_STEP_SUMMARY\n      fi\n      exit 0\n    }\n\n  echo \"Attempt #$attempt failed, retrying in 5 seconds...\"\n  attempt=$((attempt + 1))\n  sleep 5\ndone\n"},{"name":"Upload CAR to Filebase","if":"${{ inputs.filebase-access-key != '' }}","shell":"bash","env":{"AWS_ACCESS_KEY_ID":"${{ inputs.filebase-access-key }}","AWS_SECRET_ACCESS_KEY":"${{ inputs.filebase-secret-key }}","FILEBASE_BUCKET":"${{ inputs.filebase-bucket }}"},"run":"echo \"ℹ️ Uploading CAR with CID ${{ steps.merkleize.outputs.cid }} to Filebase\"\naws --endpoint https://s3.filebase.com s3 cp build.car s3://${FILEBASE_BUCKET} --metadata 'import=car'\nif [ $? -eq 0 ]; then\n  echo \"✅ Uploaded CAR with CID \\`${{ steps.merkleize.outputs.cid }}\\` to Filebase\" \u003e\u003e $GITHUB_STEP_SUMMARY\nelse\n  echo \"::error::Failed to upload to Filebase\"\n  exit 1\nfi\n"},{"name":"Pin CID to Pinata","if":"${{ inputs.pinata-jwt-token != ''}}","shell":"bash","run":"ipfs pin remote service add pinata \"${{ inputs.pinata-pinning-url }}\" ${{ inputs.pinata-jwt-token }}\nipfs pin remote add --service=pinata --background --name=\"${pin_name}\" ${{ steps.merkleize.outputs.cid }}\necho \"✅ Pinned CID \\`${{ steps.merkleize.outputs.cid }}\\` to Pinata\" \u003e\u003e $GITHUB_STEP_SUMMARY\n"},{"name":"Set GitHub commit status","if":"${{ inputs.set-github-status == 'true' }}","uses":"actions/github-script@v7","with":{"github-token":"${{ inputs.github-token }}","script":"const cid = '${{ steps.merkleize.outputs.cid }}';\n\n// Determine the correct SHA based on the event type\nlet sha;\nif (context.eventName === 'workflow_run') {\n  // For workflow_run events triggered by PRs, use the PR's head SHA\n  sha = context.payload.workflow_run.head_sha;\n} else if (context.eventName === 'pull_request' || context.eventName === 'pull_request_target') {\n  // For PR events, use the head SHA\n  sha = context.payload.pull_request.head.sha;\n} else {\n  // For push events, use the commit SHA\n  sha = context.sha;\n}\n\nawait github.rest.repos.createCommitStatus({\n  owner: context.repo.owner,\n  repo: context.repo.repo,\n  sha: sha,\n  state: 'success',\n  target_url: `https://${{ inputs.github-status-gw }}/ipfs/${cid}`,\n  description: `CID: ${cid}`,\n  context: 'IPFS'\n});\n"}},{"name":"Get PR number for workflow_run","if":"${{ inputs.set-pr-comment == 'true' \u0026\u0026 github.event_name == 'workflow_run' }}","id":"pr-number","uses":"actions/github-script@v7","with":{"github-token":"${{ inputs.github-token }}","script":"// For workflow_run events, we need to find the PR number from the workflow run\nif (context.payload.workflow_run.event === 'pull_request') {\n  const pulls = await github.rest.pulls.list({\n    owner: context.repo.owner,\n    repo: context.repo.repo,\n    head: `${context.payload.workflow_run.head_repository.owner.login}:${context.payload.workflow_run.head_branch}`,\n    state: 'open'\n  });\n  \n  if (pulls.data.length \u003e 0) {\n    // Try to find the PR whose head SHA matches the workflow run's head_sha\n    const matchingPr = pulls.data.find(pr =\u003e pr.head.sha === context.payload.workflow_run.head_sha);\n    \n    if (matchingPr) {\n      core.setOutput('number', matchingPr.number);\n      core.setOutput('sha', matchingPr.head.sha);\n    } else {\n      // Fallback: use the first PR, but warn in the summary\n      core.setOutput('number', pulls.data[0].number);\n      core.setOutput('sha', context.payload.workflow_run.head_sha);\n      core.warning(`Multiple PRs found for branch ${context.payload.workflow_run.head_branch}, but none matched head_sha. Using the first PR (#${pulls.data[0].number}).`);\n    }\n  } else {\n    core.warning(`No open PRs found for branch ${context.payload.workflow_run.head_branch} from ${context.payload.workflow_run.head_repository.owner.login}`);\n  }\n}\n"}},{"name":"Find Comment to update","if":"${{ inputs.set-pr-comment == 'true' \u0026\u0026 (github.event_name == 'pull_request' || github.event_name == 'pull_request_target' || (github.event_name == 'workflow_run' \u0026\u0026 steps.pr-number.outputs.number)) }}","uses":"peter-evans/find-comment@v3","id":"fc","with":{"issue-number":"${{ github.event.pull_request.number || steps.pr-number.outputs.number }}","comment-author":"github-actions[bot]","body-includes":"🚀 Build","token":"${{ inputs.github-token }}"}},{"name":"Create or update comment","if":"${{ inputs.set-pr-comment == 'true' \u0026\u0026 (github.event_name == 'pull_request' || github.event_name == 'pull_request_target' || (github.event_name == 'workflow_run' \u0026\u0026 steps.pr-number.outputs.number)) }}","uses":"peter-evans/create-or-update-comment@v4","with":{"token":"${{ inputs.github-token }}","comment-id":"${{ steps.fc.outputs.comment-id }}","issue-number":"${{ github.event.pull_request.number || steps.pr-number.outputs.number }}","body":"### 🚀 Build Preview on IPFS ready\n- 🔎 Commit: ${{ github.event.pull_request.head.sha || steps.pr-number.outputs.sha }}\n- 🔏 CID `${{ steps.merkleize.outputs.cid }}`\n- 📦 Preview:\n  - [dweb.link](https://dweb.link/ipfs/${{ steps.merkleize.outputs.cid }})\n  ${{ inputs.storacha-key \u0026\u0026 format('- [w3s.link](https://w3s.link/ipfs/{0})', steps.merkleize.outputs.cid) || '' }}\n  - [inbrowser.link](https://inbrowser.link/ipfs/${{ steps.merkleize.outputs.cid }})\n","edit-mode":"replace"}}]},"default_branch":"main","path":null},"repo_metadata":{"id":275173702,"uuid":"924776151","full_name":"ipshipyard/ipfs-deploy-action","owner":"ipshipyard","description":"Official IPFS GitHub Action for deploying static sites (or builds) to IPFS nodes/pinning services with CAR files, and addressing site builds with CIDs","archived":false,"fork":false,"pushed_at":"2026-09-27T21:45:37.000Z","size":299,"stargazers_count":66,"open_issues_count":1,"forks_count":24,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-10-06T12:49:23.254Z","etag":null,"topics":["actions","car-file","cid","deploy","github","ipfs","ipfs-cluster","kubo","pinata","storacha","upload"],"latest_commit_sha":null,"homepage":"https://github.com/marketplace/actions/deploy-to-ipfs","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipshipyard.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2025-01-30T16:26:10.000Z","updated_at":"2026-09-27T21:45:20.000Z","dependencies_parsed_at":"2026-10-01T17:25:38.031Z","dependency_job_id":null,"html_url":"https://github.com/ipshipyard/ipfs-deploy-action","commit_stats":null,"previous_names":["ipfs/ipfs-deploy-action","ipshipyard/ipfs-deploy-action"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/ipshipyard/ipfs-deploy-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipshipyard%2Fipfs-deploy-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipshipyard%2Fipfs-deploy-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipshipyard%2Fipfs-deploy-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipshipyard%2Fipfs-deploy-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipshipyard","download_url":"https://codeload.github.com/ipshipyard/ipfs-deploy-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipshipyard%2Fipfs-deploy-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":343170754,"owners_count":38099979,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-06T02:00:06.537Z","response_time":86,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"},"owner_record":{"login":"ipfs","name":"IPFS Project","uuid":"10536621","kind":"organization","description":"A peer-to-peer hypermedia protocol","email":"devrel@ipfs.tech","website":"https://ipfs.tech","location":"United States of America","twitter":"IPFS","company":null,"icon_url":"https://avatars.githubusercontent.com/u/10536621?v=4","repositories_count":226,"last_synced_at":"2026-10-02T22:38:06.656Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/ipfs","funding_links":[],"total_stars":78237,"followers":3181,"following":0,"created_at":"2022-11-02T16:38:45.989Z","updated_at":"2026-10-02T22:38:06.686Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs/repositories"},"tags":[]},"repo_metadata_updated_at":"2026-10-06T19:58:06.135Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":27.80521134196714,"dependent_packages_count":0.0,"stargazers_count":3.7299295009161777,"forks_count":5.674089257430355,"docker_downloads_count":null,"average":9.302307525078419},"purl":"pkg:githubactions/ipfs/ipfs-deploy-action","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/ipfs/ipfs-deploy-action","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/ipfs/ipfs-deploy-action","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/ipfs/ipfs-deploy-action/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-05-14T03:22:28.500Z","issues_count":3,"pull_requests_count":29,"avg_time_to_close_issue":4410876.0,"avg_time_to_close_pull_request":657239.48,"issues_closed_count":2,"pull_requests_closed_count":25,"pull_request_authors_count":5,"issue_authors_count":3,"avg_comments_per_issue":1.6666666666666667,"avg_comments_per_pull_request":0.9310344827586207,"merged_pull_requests_count":23,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":2,"past_year_pull_requests_count":10,"past_year_avg_time_to_close_issue":4410876.0,"past_year_avg_time_to_close_pull_request":2284386.3333333335,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":6,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":2.5,"past_year_avg_comments_per_pull_request":1.2,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipshipyard%2Fipfs-deploy-action/issues","maintainers":[{"login":"2color","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/2color"},{"login":"web3-bot","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/web3-bot"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/ipfs%2Fipfs-deploy-action/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/ipfs%2Fipfs-deploy-action/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/ipfs%2Fipfs-deploy-action/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/ipfs%2Fipfs-deploy-action/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/ipfs%2Fipfs-deploy-action/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/ipfs%2Fipfs-deploy-action/codemeta","maintainers":[]}