{"id":28379200,"url":"https://github.com/qingstor/qsctl","last_synced_at":"2025-08-23T13:34:17.991Z","repository":{"id":42004676,"uuid":"62568896","full_name":"qingstor/qsctl","owner":"qingstor","description":"Advanced command line tool for QingStor Object Storage.","archived":false,"fork":false,"pushed_at":"2025-05-07T07:34:56.000Z","size":1026,"stargazers_count":24,"open_issues_count":13,"forks_count":13,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-08-14T04:31:10.850Z","etag":null,"topics":["cli","qingstor","qsctl"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qingstor.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-07-04T14:39:21.000Z","updated_at":"2025-05-07T07:34:23.000Z","dependencies_parsed_at":"2023-02-04T00:05:10.973Z","dependency_job_id":"ad62d4ac-4e1c-4de5-b5c6-c1e32ef45695","html_url":"https://github.com/qingstor/qsctl","commit_stats":null,"previous_names":["yunify/qsctl"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/qingstor/qsctl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingstor%2Fqsctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingstor%2Fqsctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingstor%2Fqsctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingstor%2Fqsctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qingstor","download_url":"https://codeload.github.com/qingstor/qsctl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingstor%2Fqsctl/sbom","scorecard":{"id":753525,"data":{"date":"2025-08-11","repo":{"name":"github.com/qingstor/qsctl","commit":"88f0c174a42c5679aa929ab6f96e59713cfc87b8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Code-Review","score":7,"reason":"Found 14/19 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yaml:9","Warn: no topLevel permission defined: .github/workflows/unit-test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:71: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/release.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/release.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/release.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/unit-test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-test.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/qingstor/qsctl/unit-test.yml/master?enable=pin","Warn: goCommand not pinned by hash: .github/workflows/unit-test.yml:29","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yaml:12"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.4.9 not signed: https://api.github.com/repos/qingstor/qsctl/releases/216948242","Warn: release artifact v2.4.8 not signed: https://api.github.com/repos/qingstor/qsctl/releases/214999339","Warn: release artifact v2.4.7 not signed: https://api.github.com/repos/qingstor/qsctl/releases/117980531","Warn: release artifact v2.4.6 not signed: https://api.github.com/repos/qingstor/qsctl/releases/112590982","Warn: release artifact v2.4.5 not signed: https://api.github.com/repos/qingstor/qsctl/releases/64703633","Warn: release artifact v2.4.9 does not have provenance: https://api.github.com/repos/qingstor/qsctl/releases/216948242","Warn: release artifact v2.4.8 does not have provenance: https://api.github.com/repos/qingstor/qsctl/releases/214999339","Warn: release artifact v2.4.7 does not have provenance: https://api.github.com/repos/qingstor/qsctl/releases/117980531","Warn: release artifact v2.4.6 does not have provenance: https://api.github.com/repos/qingstor/qsctl/releases/112590982","Warn: release artifact v2.4.5 does not have provenance: https://api.github.com/repos/qingstor/qsctl/releases/64703633"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2020-0012 / GHSA-ffhg-7mh4-33c4","Warn: Project is vulnerable to: GO-2021-0227 / GHSA-3vm4-22fp-5rfm","Warn: Project is vulnerable to: GO-2022-0968 / GHSA-gwc9-m7rh-j2ww","Warn: Project is vulnerable to: GO-2021-0356 / GHSA-8c26-wmh5-6g9v","Warn: Project is vulnerable to: GO-2024-2961","Warn: Project is vulnerable to: GO-2023-2402 / GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2021-0113 / GHSA-ppp9-7jff-5vj2","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T20:56:46.311Z","repository_id":42004676,"created_at":"2025-08-22T20:56:46.311Z","updated_at":"2025-08-22T20:56:46.311Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271749051,"owners_count":24814115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"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"}},"keywords":["cli","qingstor","qsctl"],"created_at":"2025-05-30T02:30:31.280Z","updated_at":"2025-08-23T13:34:17.983Z","avatar_url":"https://github.com/qingstor.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# qsctl\n\n[![Build Status](https://github.com/qingstor/qsctl/workflows/Unit%20Test/badge.svg?branch=master)](https://github.com/qingstor/qsctl/actions?query=workflow%3A%22Unit+Test%22)\n[![GoDoc](https://godoc.org/github.com/qingstor/qsctl?status.svg)](https://godoc.org/github.com/qingstor/qsctl)\n[![Go Report Card](https://goreportcard.com/badge/github.com/qingstor/qsctl)](https://goreportcard.com/report/github.com/qingstor/qsctl)\n[![codecov](https://codecov.io/gh/qingstor/qsctl/branch/master/graph/badge.svg)](https://codecov.io/gh/qingstor/qsctl)\n[![localized](https://badges.crowdin.net/qsctl/localized.svg)](https://crowdin.com/project/qsctl)\n[![License](https://img.shields.io/badge/license-apache%20v2-blue.svg)](https://github.com/qingstor/qsctl/blob/master/LICENSE)\n[![Join the Chat](https://img.shields.io/badge/chat-online-blue?style=flat\u0026logo=zulip)](https://qingstor.zulipchat.com/join/wiqqtnvhnux73i3q2qvep7ak/)\n\n[中文文档](./docs/README-zh_CN.md)\n\nqsctl is intended to be an advanced command line tool for QingStor, it provides\npowerful unix-like commands to let you manage QingStor resources just like files\non local machine.\n\n## Installation\n\n### Binary\n\nVisit \u003chttps://github.com/qingstor/qsctl/releases\u003e to get latest releases.\n\n## Getting Started\n\n### Configure via initialization wizard\n\n### Configure manually\n\nTo use qsctl, there must be a configuration file , for example\n\n```yaml\naccess_key_id: 'ACCESS_KEY_ID_EXAMPLE'\nsecret_access_key: 'SECRET_ACCESS_KEY_EXAMPLE'\n```\n\nThe configuration file is `~/.qingstor/config.yaml` by default, it also\ncan be specified by the option `-c /path/to/config`.\n\nYou can also config other option like `host` , `port` and so on, just\nadd lines below into configuration file, for example\n\n```yaml\nhost: 'qingstor.com'\nport: 443\nprotocol: 'https'\nconnection_retries: 3\nzone: 'zone_name'\n\n# By default, extra slashes in object key will be stripped from the path,\n# like `/a//b` become `a/b`, this option disable that behavior.\n# disable_uri_cleaning: true\n```\n\n~~You can also run qsctl command without config file, it will try to\nfind config file in specific directories, and if none of them contain\na config file, there will be an interactive setup to help you create\nthe config file, which will be created at `{$HOME}/.qingstor/config.yaml`.\n(PS: The specific config file path depends on your os, usually\n`~/.qingstor/config.yaml` in unix-like os, and\n`C:\\User\\{username}\\.qingstor\\config.yaml` in Windows.)~~\n```\ninteractive setup was removed from v2.2.0, and may be added in the future with an independent command.\n```\n\nSince v2.2.0, we moved all interactive operation into `qsctl shell`, in order that you can call commands in your\nscript without any interactive interruption.\nWe also removed progress bar rendering from all commands and added it into `qsctl shell`.\n\n## Qsctl Shell\n\nWe introduced interactive shell from v2.2.0, which contains more instruction and tips. It is highly recommended\nfor those who just start to use qsctl. You can just execute `qsctl shell` to enter the shell interface and run commands\naccording to the tips. We also support commands history and show tips and auto completion for:\n- available commands at the beginning of new line.\n- buckets after inputting `qs://`.\n- local files after inputting space.\n- available flags for current command.\n\n## Available Commands\n\nCommands supported by qsctl are listed below:\n\n- `cat`: Cat a remote object into stdout.\n- `cp`: Copy local file(s) to QingStor or QingStor key(s) to local.\n- `ls`: List buckets, or objects with given prefix.\n- `mb`: Make a new bucket.\n- `mv`: Move local file(s) to QingStor or QingStor key(s) to local\n- `presign`: Get the pre-signed URL by given object key.\n- `rb`: Delete a bucket.\n- `rm`: Remove remote object(s).\n- `shell`: start an interactive shell of qsctl.\n- `stat`: Stat a remote object.\n- `sync`: Sync between local directory and QS-Directory.\n- `tee`: Tee from stdin to a remote object. (NOTICE: qsctl will not tee the content to stdout like linux tee command does.)\n\nSee the detailed usage and examples with `qsctl --help` or `qsctl \u003ccommand\u003e --help`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqingstor%2Fqsctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqingstor%2Fqsctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqingstor%2Fqsctl/lists"}