{"id":15567613,"url":"https://github.com/purehyperbole/catly","last_synced_at":"2025-03-29T05:35:52.191Z","repository":{"id":114512647,"uuid":"410553900","full_name":"purehyperbole/catly","owner":"purehyperbole","description":"A file hosting service for images","archived":false,"fork":false,"pushed_at":"2021-09-26T17:12:36.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-03T15:56:11.025Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/purehyperbole.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}},"created_at":"2021-09-26T13:03:23.000Z","updated_at":"2022-07-29T15:25:13.000Z","dependencies_parsed_at":"2023-05-17T14:30:39.236Z","dependency_job_id":null,"html_url":"https://github.com/purehyperbole/catly","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purehyperbole%2Fcatly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purehyperbole%2Fcatly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purehyperbole%2Fcatly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purehyperbole%2Fcatly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/purehyperbole","download_url":"https://codeload.github.com/purehyperbole/catly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246145017,"owners_count":20730494,"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","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":[],"created_at":"2024-10-02T17:12:01.241Z","updated_at":"2025-03-29T05:35:52.171Z","avatar_url":"https://github.com/purehyperbole.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catly [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Go Reference](https://pkg.go.dev/badge/github.com/joinself/catly.svg)](https://pkg.go.dev/github.com/joinself/catly) [![Go Report Card](https://goreportcard.com/badge/github.com/purehyperbole/catly)](https://goreportcard.com/report/github.com/purehyperbole/catly) ![example workflow](https://github.com/purehyperbole/catly/actions/workflows/main.yml/badge.svg)\n\nA file uploading service for your finest cat pictures 🐱\n\nIt currently supports the `jpeg`, `png` and `gif` image formats and has configurable storage backends.\n\n## Requirements\n\nTo run the client and server, you will first need to ensure that you have installed:\n\n1. [Golang 1.17](https://golang.org/doc/install)\n2. [Docker](https://docs.docker.com/get-docker/)\n3. [Protobuf Compiler](https://grpc.io/docs/protoc-installation/)\n\n## Usage\n\nTo get started you will need to build and run the client and server.\n\n### Server\n\nTo run the docker version of this server, run these commands in the root of this repo:\n\n```sh\nλ docker build -t catly-server .\nλ docker run -it -p \"8000:8000\" -p \"8080:8080\" catly-server\n```\n\n### Client\n\nTo compile the client, you will need to run:\n```sh\nλ go build -o grpc-upload cmd/client/main.go\n```\n\nYou can then test an upload with:\n\n```sh\nλ ./grpc-upload ./cat.jpg\n```\n\n## Configuration\n\nThere a number of different options that can be supplied when running the client and the server\n\n### Server\n\nWhen starting the container via docker, any of the following environment variables can be passed in:\n\n| Name                   | Description                                                                                                            | Default            |\n| ---------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------ |\n| CATLY_DOMAIN           | The domain that you are running the service under                                                                      | `http://127.0.0.1` |\n| CATLY_HTTP_PORT        | The port the HTTP service will run on                                                                                  | `8080`             |\n| CATLY_GRPC_PORT        | The port the gRPC upload service will run on                                                                           | `8000`             |\n| CATLY_STORAGE_PATH     | The storage path in the container you wish to use. By default, only in memory storage will be used                     | `:memory:`         |\n| CATLY_MAX_REQUEST_SIZE | The maximum request size in bytes the server will accept. This can be used to restrict large files from being uploaded | `8388608` (~ 8MB)  |\n\n### Client\n\nThe client supports the following flags:\n\n| Name    | Description                                | Default          |\n| ------- | ------------------------------------------ | ---------------- |\n| -server | Specifies the address for the catly server | `127.0.0.1:8000` |\n\n## Structure\n\nThe project is broken into the following components\n\n| Package    | Description                                                                                                                       |\n| ---------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| api        | Contains an implementation of an HTTP server for serving files and a gRPC server for handling uploads                             |\n| cmd/server | Contains the main setup logic for the gRPC/HTTP server                                                                            |\n| cmd/client | Contains the main setup logic for the gRPC upload client                                                                          |\n| protocol   | Contains the protobuf bindings and definitions for the object service                                                             |\n| storage    | Contains different storage implementations for catly server. Currently there is an in memory store, as well as a filesystem store |\n\n## Roadmap\n- [ ] Integration testing for client and server\n- [ ] CI stage for linting\n- [ ] Improved error messages in responses\n- [ ] Support for HTTP and secure gRPC\n- [ ] LRU cache for improving performance when serving popular images from file storage\n- [ ] Generate prebuilt server and client for github releases\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpurehyperbole%2Fcatly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpurehyperbole%2Fcatly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpurehyperbole%2Fcatly/lists"}