{"id":21306983,"url":"https://github.com/metabronx/sdcli","last_synced_at":"2026-04-18T01:37:56.838Z","repository":{"id":41257998,"uuid":"389822433","full_name":"metabronx/sdcli","owner":"metabronx","description":"CLI scripts for automating important grunt work.","archived":false,"fork":false,"pushed_at":"2023-08-07T16:57:51.000Z","size":149,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-10-24T16:56:23.521Z","etag":null,"topics":["github","python","skunkworks","tools"],"latest_commit_sha":null,"homepage":"","language":"Python","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/metabronx.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2021-07-27T02:14:16.000Z","updated_at":"2023-07-24T19:26:10.000Z","dependencies_parsed_at":"2024-11-21T16:36:44.688Z","dependency_job_id":"b2fa7a8c-65a5-42a5-af6d-8f21f0f23c34","html_url":"https://github.com/metabronx/sdcli","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/metabronx/sdcli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabronx%2Fsdcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabronx%2Fsdcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabronx%2Fsdcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabronx%2Fsdcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metabronx","download_url":"https://codeload.github.com/metabronx/sdcli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metabronx%2Fsdcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"ssl_error","status_checked_at":"2026-04-18T00:39:20.671Z","response_time":62,"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"}},"keywords":["github","python","skunkworks","tools"],"created_at":"2024-11-21T16:29:12.160Z","updated_at":"2026-04-18T01:37:56.802Z","avatar_url":"https://github.com/metabronx.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sdcli\n\n![GitHub Workflow Status](https://raster.shields.io/github/actions/workflow/status/metabronx/sdcli/ci.yaml?label=tests\u0026style=flat-square)\n![code coverage](https://raster.shields.io/endpoint?color=lightblue\u0026label=code%20coverage\u0026style=flat-square\u0026url=https%3A%2F%2Fopenendpoint.tools%2Fmetrics%2Fgeneric%2Fsdcli)\n\nA command-line utility for executing essential but laborious tasks.\n\nTested support on Python 3.7, 3.8, 3.9, 3.10, and 3.11 on macOS, Windows, and Linux. 100% code coverage.  \nOperating system versions are supplied by [GitHub Actions](https://docs.github.com/en/actions/using-jobs/choosing-the-runner-for-a-job#choosing-github-hosted-runners).\n\n## Installation\n\nYou can install this package via pip:\n\n```sh\n$ pip install git+https://github.com/metabronx/sdcli.git\n$ sdcli --help\n```\n\n## Usage\n\nsdcli's commands are organized by the application with which the tool interfaces.\n\n### `sdcli gh`\n\nThis does things with GitHub's v3 REST API via the following subcommands:\n\n- `auth`: Authenticates your machine with GitHub.\n- `invite`: Invites the given email(s) to the metabronx organization.\n- `assign-teams`: Assigns users to their metabronx organization team.\n- `remove`: Removes the given username(s) from the metabronx organization.\n\n#### `sdcli gh auth`\n\nAuthenticates your machine with GitHub so any future requests are executed as yourself. To avoid saving your credentials on your host machine, you may export the `GH_USERNAME` and `GH_TOKEN` environment variable or pass them to every command.\n\nCredentials are stored in plain-text at `~/.sdcli/credentials`.\n\n**Usage**:\n\n```console\n$ sdcli gh auth\n```\n\n#### `sdcli gh assign-teams`\n\nAssigns each user to their metabronx GitHub organization team using the provided CSV.\n\nIf the authenticated user is an organization Owner, and the users to assign are not already a part of the organization, they will also receive invites. Upon acceptance, they will be assigned to the team in the CSV.\n\n**Usage**:\n\n```console\n$ sdcli gh assign-teams DATA\n```\n\n**Arguments**:\n\n- `DATA`: The path to a CSV text file of usernames and team memberships in the format `username,team`. For example:\n\n  ```csv\n  NakoTo7,members\n  Shreyaaashetty,members\n  sultanax,members\n  tanvircode,members\n  ```\n\n### `sdcli gh invite`\n\nInvites the given email or list of emails to the metabronx GitHub organization. A list of emails must be a UTF-8 text file, where each email is on a separate line. Invited users are automatically added to the \"members\" team, unless other options are given.\n\n**Usage**:\n\n```console\n$ sdcli gh invite [OPTIONS] [EMAIL]\n```\n\n**Arguments**:\n\n- `[EMAIL]`: The email address of the person to invite. This option is mutually exclusive with `--from-file`.\n\n**Options**:\n\n- `--from-file FILENAME`: A line-delimited text file of email address to invite. This option is mutually exclusive with supplying a single email address.\n- `--team TEXT`: The organization teams to which to invite the person(s). Pass this option multiple times to include more than one team. Defaults to 'members'.\n\n### `sdcli gh remove`\n\nRemoves the given username or list of usernames from the metabronx GitHub organization. A list of usernames must be a text file, where each username is on a separate line.\n\n**Usage**:\n\n```console\n$ sdcli gh remove [OPTIONS] [USERNAME]\n```\n\n**Arguments**:\n\n- `[USERNAME]`: The username of the person to remove. This option is mutually exclusive with `--from-file`.\n\n**Options**:\n\n- `--from-file FILENAME`: A line-delimited text file of usernames to remove. This option is mutually exclusive with supplying a single username.\n\n### `sdcli s3` [🏴‍☠️]\n\nThis does things with Amazon AWS S3 via the following subcommands:\n\n- `bridge`: Exposes S3 via a local SFTP connection (a \"bridge\").\n- `stop-bridge`: Shuts down a bridge.\n- `remove-bridge`: Shuts down and removes all data for a bridge.\n\n#### `sdcli s3 bridge`\n\nBridges an S3 object store (bucket) to an SFTP-accessible file system.\n\n**Usage**:\n\n```console\n$ sdcli s3 bridge [OPTIONS]\n```\n\n**Options**:\n\n* `--fingerprint TEXT`: The fingerprint associated with an existing SFTP-bucket bridge. This option is mutually exclusive with all other options.\n* `--bucket TEXT`: The bucket to expose via SFTP. When you supply this for the first time, you must also supply access credentials.\n* `--access-key-id TEXT`: Your AWS Access Key ID. This must be supplied when first connecting to a bucket.\n* `--secret-access-key TEXT`: Your AWS Secret Access Key. This must be supplied when first connecting to a bucket.\n* `--force-restart`: By default, existing S3 bridges will not be restarted if they're already running. Specify this flag to override this behavior. This is equivalent to the `--force-recreate` flag provided Docker Compose.\n\n#### `sdcli s3 stop-bridge`\n\nShuts down an existing S3 bridge.\n\n**Usage**:\n\n```console\n$ sdcli s3 stop-bridge FINGERPRINT\n```\n\n**Arguments**:\n\n* `FINGERPRINT`: The fingerprint associated with an existing SFTP-bucket bridge.  [required]\n\n#### `sdcli s3 delete-bridge`\n\nShuts down and removes an existing S3 bridge.\n\n**Usage**:\n\n```console\n$ sdcli s3 delete-bridge FINGERPRINT\n```\n\n**Arguments**:\n\n* `FINGERPRINT`: The fingerprint associated with an existing SFTP-bucket bridge.  [required]\n\n## License\n\nElias\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetabronx%2Fsdcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetabronx%2Fsdcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetabronx%2Fsdcli/lists"}