{"id":15221621,"url":"https://github.com/googlecloudplatform/google-cloud-gemserver","last_synced_at":"2025-10-20T00:32:35.083Z","repository":{"id":56874858,"uuid":"97137586","full_name":"GoogleCloudPlatform/google-cloud-gemserver","owner":"GoogleCloudPlatform","description":"CLI to deploy a private gem server to Google App Engine Flex","archived":false,"fork":false,"pushed_at":"2024-04-24T05:54:28.000Z","size":146,"stargazers_count":46,"open_issues_count":9,"forks_count":14,"subscribers_count":28,"default_branch":"master","last_synced_at":"2025-10-07T19:06:13.738Z","etag":null,"topics":["gcp","gemserver","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/GoogleCloudPlatform.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2017-07-13T15:21:38.000Z","updated_at":"2024-05-29T18:51:30.000Z","dependencies_parsed_at":"2024-09-28T15:06:31.123Z","dependency_job_id":"ffdfe565-6baf-46ef-af5b-e504052f8c3d","html_url":"https://github.com/GoogleCloudPlatform/google-cloud-gemserver","commit_stats":{"total_commits":21,"total_committers":2,"mean_commits":10.5,"dds":"0.33333333333333337","last_synced_commit":"7a246a68405fb28056a75d76130adb8d35b5236d"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/GoogleCloudPlatform/google-cloud-gemserver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoogleCloudPlatform%2Fgoogle-cloud-gemserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoogleCloudPlatform%2Fgoogle-cloud-gemserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoogleCloudPlatform%2Fgoogle-cloud-gemserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoogleCloudPlatform%2Fgoogle-cloud-gemserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GoogleCloudPlatform","download_url":"https://codeload.github.com/GoogleCloudPlatform/google-cloud-gemserver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GoogleCloudPlatform%2Fgoogle-cloud-gemserver/sbom","scorecard":{"id":58144,"data":{"date":"2025-08-11","repo":{"name":"github.com/GoogleCloudPlatform/google-cloud-gemserver","commit":"7a246a68405fb28056a75d76130adb8d35b5236d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Code-Review","score":8,"reason":"Found 14/16 approved changesets -- score normalized to 8","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":"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":"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":-1,"reason":"no dependencies found","details":null,"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":"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 20 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-15T01:09:50.940Z","repository_id":56874858,"created_at":"2025-08-15T01:09:50.940Z","updated_at":"2025-08-15T01:09:50.940Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279955552,"owners_count":26250520,"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-10-19T02:00:07.647Z","response_time":64,"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":["gcp","gemserver","ruby"],"created_at":"2024-09-28T15:06:29.141Z","updated_at":"2025-10-20T00:32:34.739Z","avatar_url":"https://github.com/GoogleCloudPlatform.png","language":"Ruby","readme":"# Google::Cloud::Gemserver\n\n[![Build Status](https://travis-ci.org/GoogleCloudPlatform/google-cloud-gemserver.svg?branch=master)](https://travis-ci.org/GoogleCloudPlatform/google-cloud-gemserver)\n\nThis gem is a tool that lets you manage, interact with, and deploy a [private gem\nserver](https://github.com/bundler/gemstash) to a Google Cloud Platform project.\nThe gemserver acts as a private gem repository for your gems similar\nto how rubygems.org works with the exception that pushing and installing gems\nare protected operations.\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'google-cloud-gemserver'\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install google-cloud-gemserver\n\n## Usage\n\n### Basic Prerequisites\n  1) Create a Google Cloud Platform (GCP) project.\n  2) Install and setup the [gcloud SDK](https://cloud.google.com/sdk/downloads). Currently, versions 161+ are supported.\n  3) Authenticate gcloud by using a [service account](https://cloud.google.com/docs/authentication/getting-started) or [application default credentials](https://developers.google.com/identity/protocols/application-default-credentials).\n  Using a service account is the recommended method for authentication; application default credentials should only be used for development purporses. Read this [authentication guide](docs/authentication.md) for more information.\n  4) Running acceptance or performance tests requires you to have the Cloud SQL proxy running with your Cloud SQL instance. Visit this [link](https://cloud.google.com/sql/docs/mysql/connect-admin-proxy) to learn how to install and run it (steps 3 and 5 can be skipped).\n\n### Typical Workflow\n  1) Deploy a gemserver by running: `google-cloud-gemserver create --use-proj YOUR_PROJECT_ID`. This deploys the gemserver in a Google App Engine project as the default service. It also creates a new Cloud SQL instance with machine type db-f1-micro. Note that this machine type is only recommended for development / testing and is not under the Cloud SQL SLA coverage.\n  2) Generate a key (referred to as my-key) by running `google-cloud-gemserver create-key --use-proj YOUR_PROJECT_ID` for your gemserver. By default, this generates a key with both read and write permissions. For more information about keys, read [this](docs/key.md).\n  3) Add this key to your bundle config by running `bundle config http://gemserver-url.com/private/ my-key` where gemserver-url is the same as your project's url, e.g. http://my-project.appspot.com/private/. This is necessary to download gems.\n  4) Add this key to your gem credentials as my-key (in ~/.gem/credentials): `:my-key: [KEY]` This is necessary to push gems (if the key has write permission).\n  5) Push private gems to the gemserver as described [below](#pushing-gems).\n  6) Download private gems by modifying your Gemfile as described\n  [below](#fetching-gems).\n\n### Pushing gems\n  Note: ensure `my-key` has the read permission and is added in your gem\n  credentials file (~/.gem/credentials)\n  `gem push my-gem --key my-key --host http://my-gemserver.com/private/`\n\n### Fetching gems\n  Note: ensure `my-key` has the read permission and is set in your bundle\n  config by running `bundle config http://my-gemserver.com/private/ my-key`\n\n  1) Add `source \"http://my-gemserver.com\"` to the top of your Gemfile\n  2) Add the following to your Gemfile:\n      ```\n      source \"http://my-gemserver.com/private\" do\n        gem \"my-private-gem1\"\n        (other private gems here)\n      end\n      ```\n  3) Run `bundle install`\n\n### Yanking gems\n  Note: ensure `my-key` has the write permission and is added in your gem\n  credentials file (~/.gem/credentials)\n  `gem push my-gem --key my-key --host http://my-gemserver.com/private/`\n\n  1) Run `gem yank --key my-key [GEM_NAME] --host\n  http://my-gemserver.com/private`\n\n  Gems can not be \"unyanked\" so once a gem has been yanked it cannot be pushed\n  to the gemserver again with the same name and version. It can be pushed if the\n  version number is changed, however.\n\n\n### Gemserver commands\n  * `google-cloud-gemserver config`\n\n    Usage:\n    google-cloud-gemserver config\n\n    Displays the config the current deployed gemserver is using (if one is running)\n\n  * `google-cloud-gemserver create`\n\n    Usage:\n    google-cloud-gemserver create\n\n    Options:\n    *  -g, [--use-proj=USE_PROJ]        # Existing project to deploy gemserver to\n    *  -i, [--use-inst=USE_INST]        # Existing project to deploy gemserver to\n\n    Creates and deploys the gem server then starts it\n\n  * `google-cloud-gemserver create-key`\n\n    Usage:\n      google-cloud-gemserver create-key\n\n    Options:\n    *  -r, [--remote=REMOTE]            # The gemserver URL, i.e. gemserver.com\n    *  -p, [--permissions=PERMISSIONS]  # Options: write, read, both. Default is\n      both.\n    *  -g, [--use-proj=USE_PROJ]        # The GCP project the gemserver was\n       deployed to.\n\n      Creates an authentication key\n\n  * `google-cloud-gemserver delete-key`\n\n    Usage:\n      google-cloud-gemserver delete-key\n\n    Options:\n    *  -r, [--remote=REMOTE]            # The gemserver URL, i.e. gemserver.com\n    *  -k, [--key=KEY]                  # The key to delete\n    *  -g, [--use-proj=USE_PROJ]        # The GCP project the gemserver was\n       deployed to.\n\n      Deletes a given key\n\n  * `google-cloud-gemserver delete`\n\n    Usage:\n      google-cloud-gemserver delete\n\n    Options:\n    *  -g, [--use-proj=USE_PROJ]        # Project id of GCP project the gemserver was deployed to. Warning: parent project and CloudSQL instance will also be deleted\n\n      Delete a given gemserver\n\n  * `google-cloud-gemserver start`\n\n      Usage:\n        google-cloud-gemserver start\n\n      Starts the gem server. This will be run automatically after a deploy.\n      Running this locally will start the gemserver locally\n\n  * `google-cloud-gemserver stats`\n\n    Usage:\n      google-cloud-gemserver stats\n\n    Options:\n    *  -r, [--remote=REMOTE]            # The gemserver URL, i.e. gemserver.com\n    *  -g, [--use-proj=USE_PROJ]        # The GCP project the gemserver was\n       deployed to.\n\n    Displays statistics on the given gemserver\n\n  * `google-cloud-gemserver update`\n\n    Usage:\n      google-cloud-gemserver update\n\n    Redeploys the gemserver with the current config file and google-cloud-gemserver gem version (a deploy must have succeeded for 'update' to work)\n\n  * `google-cloud-gemserver gen-config`\n\n    Usage:\n      google-cloud-gemserver gen-config\n\n    Generates configuration files with default values\n\n  * `google-cloud-gemserver help`\n\n    Usage:\n      google-cloud-gemserver help [COMMAND]\n\n    Describe available commands or one specific command\n\nMore documentation can be found in the docs [directory](docs/).\n\n## Contributing\n\nDetailed information can be found in [CONTRIBUTING.md](CONTRIBUTING.md).\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglecloudplatform%2Fgoogle-cloud-gemserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgooglecloudplatform%2Fgoogle-cloud-gemserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgooglecloudplatform%2Fgoogle-cloud-gemserver/lists"}