{"id":14263174,"url":"https://github.com/crguezl/gh-org-members","last_synced_at":"2026-04-20T22:14:57.209Z","repository":{"id":46585083,"uuid":"424591419","full_name":"crguezl/gh-org-members","owner":"crguezl","description":"gh cli extension to obtain info about the members of a GitHub Organization","archived":false,"fork":false,"pushed_at":"2022-10-12T12:51:06.000Z","size":4820,"stargazers_count":7,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-14T20:32:29.921Z","etag":null,"topics":["gh-extension","ull"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/crguezl.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}},"created_at":"2021-11-04T12:42:27.000Z","updated_at":"2024-08-21T15:43:57.000Z","dependencies_parsed_at":"2022-08-23T23:50:40.107Z","dependency_job_id":null,"html_url":"https://github.com/crguezl/gh-org-members","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/crguezl/gh-org-members","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crguezl%2Fgh-org-members","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crguezl%2Fgh-org-members/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crguezl%2Fgh-org-members/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crguezl%2Fgh-org-members/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crguezl","download_url":"https://codeload.github.com/crguezl/gh-org-members/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crguezl%2Fgh-org-members/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["gh-extension","ull"],"created_at":"2024-08-22T13:03:03.280Z","updated_at":"2026-04-20T22:14:57.194Z","avatar_url":"https://github.com/crguezl.png","language":"JavaScript","funding_links":[],"categories":["gh-extension"],"sub_categories":[],"readme":"## Installation\n\n```\ngh extension install crguezl/gh-org-members\n```\n\nIt is convenient to have [fzf](https://github.com/junegunn/fzf) installed.\n\n## Help\n\n```\n✗ gh org-members                                                       \nUsage: gh org-members [options] [organization]\n\nOptions:\n  -V, --version             output the version number\n  -f, --fullname            show name of the user (if available)\n  -j, --json                returns the full json object\n  -r, --regexp \u003cregexp\u003e     Only members with some field matching \u003cregexp\u003e will be shown\n  -u, --url                 show github user url\n  -l, --login               show github user login\n  -w, --orgurl              show github user url as a member of the org\n  -s, --site                show url of the members github pages web sites\n  -c, --csv [field...]      shows the values of the fields of the organization csv\n  -p, --pathcsv \u003ccsv file\u003e  path to the csv file\n  -o --org \u003corg\u003e            default organization\n     --default              Set selected \"org\" as default organization for future uses\n  -h, --help                display help for command\n\n  - If the organization is not explicitly specified or there is a default org, \n    the selection will be done interactively among the list of your organizations using 'fzf'\n  - You can set the default organization through the \"--default\" option for future uses of this program\n  - When in 'fzf', use CTRL-A to select all, tab to select/deselect\n  - You can merge the results of the GitHub API info with info from info in a '.csv' file using the \"-c\" and \"-p\" options. For instance: \"gh org-members -jr sara -c -p ./ULL-MFP-AET-2122.csv\"\n  - If the option '-c' is used but the '.csv' file is not specified via the '-p' option, it will use the most recent '*.csv' file in your 'Downloads' folder mathching the regular expression pattern '/\u003corg\u003e.*.csv/' where 'org' refers to the specified or default organization  \n  - When using '-c' it can be followed by any list of field names in the '.csv' file. \n  - The '.csv' file has to have a column named 'login' having the Github login of the members\n```\n\n## Simple Examples\n\nUsing several options together and getting info about users matching `cas`:\n\n```\n➜  gh-org-members git:(main) gh org-members -fusr cas                 \n\"Casiano Rodriguez-Leon\",\"https://github.com/crguezl\",\"https://crguezl.github.io\"\n\"Casiano\",\"https://github.com/casiano\",\"https://casiano.github.io\"\n```\n\nThe same but the output is in json:\n\n```json\n✗ gh org-members -jr cas   \n[\n  {\n    \"login\": \"crguezl\",\n    \"name\": \"Casiano Rodriguez-Leon\",\n    \"url\": \"https://github.com/crguezl\",\n    \"role\": \"admin\",\n    \"site\": \"https://crguezl.github.io\",\n    \"orgurl\": \"https://github.com/orgs/ULL-MFP-AET-2122/people/crguezl\",\n    \"fullname\": \"Casiano Rodriguez-Leon\"\n  },\n  {\n    \"login\": \"casiano\",\n    \"name\": \"Casiano\",\n    \"url\": \"https://github.com/casiano\",\n    \"role\": \"member\",\n    \"site\": \"https://casiano.github.io\",\n    \"orgurl\": \"https://github.com/orgs/ULL-MFP-AET-2122/people/casiano\",\n    \"fullname\": \"Casiano\"\n  }\n]\n```\n\n## Adding info from a Spreadsheet \n\nGetting not only GitHub API info but also info (option `-c`) from a specified `.csv` file (option `-p`). \n\n⚠️ **The `.csv`file has to have a column `.login` with the GitHub logins of the members**. \n\nHere we search for student entries matching `sara`:\n\n```json\n✗ gh org-members -jr sara -c -p ./ULL-MFP-AET-2122.csv\n[\n  {\n    \"login\": \"Alex100260076\",\n    \"name\": \"Alejandro Glez. Sarasola\",\n    \"url\": \"https://github.com/Alex100260076\",\n    \"role\": \"member\",\n    \"site\": \"https://Alex100260076.github.io\",\n    \"orgurl\": \"https://github.com/orgs/ULL-MFP-AET-2122/people/Alex100260076\",\n    \"fullname\": \"Alejandro Glez. Sarasola\",\n    \"id\": \"alu0100260076\",\n    \"orden\": \"8\",\n    \"Marca temporal\": \"26/10/2021 18:16:30\",\n    \"Nombre 1\": \"Alejandro\",\n    \"Apellidos\": \"González Sarasola\",\n    \"Nombre\": \"Alejandro\",\n    \"Primer Apellido\": \"González\",\n    \"Segundo Apellido\": \"Sarasola\",\n    \"Grado desde el que accede\": \"Ingeniería industrial\",\n    \"Experiencia previa en la Enseñanza\": \"2\",\n    \"markdown\": \"APTO\",\n    \"profile\": \"APTO\",\n    \"web site\": \"APTO\",\n    \"pandoc\": \"APTO+\",\n    \"TFP DCP\": \"APTO\",\n    \"Calculada\": \"8,8\",\n    \"Calificador Propuesta\": \"9\",\n    \"Calificador propuesta\": \"\"\n  }\n]\n```\n\nIf the option `-c` is used, but the `.csv` file is not specified via the `-p` option, it will use the most recent \n`*.csv` file in your `Downloads` folder matching the regular expression pattern `/${org}.*\\.csv/` where `org` refers to the specified or default\norganization:\n\n```\n✗ ls -ltr ~/Downloads/ULL-MFP-AET-2122*                   \n-rw-r--r--@ 1 casianorodriguezleon  staff  3537 20 jul 10:40 /Users/casianorodriguezleon/Downloads/ULL-MFP-AET-2122 - Evaluacion.csv\n```\n\nIn this example, we don't specify the `.csv` file and it will use the file `/Users/casianorodriguezleon/Downloads/ULL-MFP-AET-2122 - Evaluacion.csv`:\n\n```json\n✗ gh org-members -jr sara -c   \n[\n  {\n    \"login\": \"Alex100260076\",\n    \"name\": \"Alejandro Glez. Sarasola\",\n    \"url\": \"https://github.com/Alex100260076\",\n    \"role\": \"member\",\n    \"site\": \"https://Alex100260076.github.io\",\n    \"orgurl\": \"https://github.com/orgs/ULL-MFP-AET-2122/people/Alex100260076\",\n    \"fullname\": \"Alejandro Glez. Sarasola\",\n    \"id\": \"alu0100260076\",\n    \"orden\": \"8\",\n    \"Marca temporal\": \"26/10/2021 18:16:30\",\n    \"Nombre 1\": \"Alejandro\",\n    \"Apellidos\": \"González Sarasola\",\n    \"Nombre\": \"Alejandro\",\n    \"Primer Apellido\": \"González\",\n    \"Segundo Apellido\": \"Sarasola\",\n    \"Grado desde el que accede\": \"Ingeniería industrial\",\n    \"Experiencia previa en la Enseñanza\": \"2\",\n    \"markdown\": \"APTO\",\n    \"profile\": \"APTO\",\n    \"web site\": \"APTO\",\n    \"pandoc\": \"APTO+\",\n    \"TFP DCP\": \"APTO\",\n    \"Calculada\": \"8,8\",\n    \"Calificador Propuesta\": \"9\",\n    \"Calificador propuesta\": \"\"\n  }\n]\n```\n\nWhen using `-c` it can be followed by any list of field names in the `.csv` file. \nfor instance:\n\n```\n✗ gh org-members -r sara -c  Apellidos 'Grado desde el que accede'\n\"González Sarasola\",\"Ingeniería industrial\"\n```\n\nHere is an example that give us the marks for a given exercise (the `markdown` exercise):\n\n```\n✗ gh org-members  -c Apellidos markdown -l | egrep -v 'casiano|crguezl' |  sort -f | cat -n\n     1  \"BOISTEL PÉREZ\",\"APTO\",\"ChloeBoistel\"\n     2  \"CABRERA GARCIA\",\"APTO\",\"Juacabga87\"\n     3  \"COELLO PÉREZ\",\"APTO\",\"AnabelCP\"\n     4  \"EXPÓSITO GARCÍA\",\"APTO\",\"alu0100951844\"\n     5  \"GARCÍA BULLEJOS\",\"APTO\",\"Jaimetaks\"\n     6  \"GONZALEZ AGUIAR\",\"APTO\",\"ivan-ga\"\n     7  \"GONZÁLEZ GONZÁLEZ\",\"APTO\",\"alu0100879902\"\n     8  \"González López\",\"APTO\",\"alu0100108859\"\n     9  \"González Maury\",\"APTO\",\"AdelaGM\"\n    10  \"González Sarasola\",\"APTO\",\"Alex100260076\"\n    11  \"GUERRA OLIVERA\",\"APTO\",\"CGuerra2021\"\n    12  \"ManCurTru\"\n    13  \"Marrero Díaz\",\"APTO+\",\"amarrerod\"\n    14  \"PRIETO CURBELO\",\"APTO\",\"alu0100948387\"\n    15  \"RAMALLO BENÍTEZ\",\"APTO\",\"Ramallin\"\n    16  \"RODRIGUEZ HERNANDEZ\",\"APTO\",\"NoeliaRguezHdez\"\n    17  \"Van Hoye\",\"APTO\",\"magodelnorte\"\n```\n\nThere will be error messages for entries in the spreadsheet file that do not have a login in the GitHub organization:\n\n```\nSpreadsheet entry:\n\"{\"orden\":\"1\",\"Marca temporal\":\"29/10/2021 0:24:32\",\"Nombre 1\":\"MANUEL\",\"Apellidos\":\"CURBELO TRUJILLO\",\"Nombre\":\"Manuel\",\"Primer Apellido\":\"Curbelo\",\"Segundo Apellido\":\"Trujillo\",\"id\":\"alu0100045130\",\"login\":\"mancurtru\",\"Grado desde el que accede\":\"Tecnologías Marinas\",\"Experiencia previa en la Enseñanza\":\"3\",\"markdown\":\"APTO\",\"profile\":\"APTO\",\"web site\":\"APTO\",\"pandoc\":\"\",\"TFP DCP\":\"APTO\",\"Calculada\":\"6,8\",\"Calificador Propuesta\":\"7\",\"Calificador propuesta\":\"\"}\"\nnot found in GitHub organization ULL-MFP-AET-2122!\n```\nThe error is due to a misspelling `mancurtru` in the spreadsheet. The actual login is `ManCurTru`.\nOnce is fixed, we get the correct ouput row: `\"CURBELO TRUJILLO\",\"APTO\",\"ManCurTru\"`\n\n\n## Default Organization and Aliases\n\nIt helps to have these `gh` aliases `gh pwd` and `gh cd` to get and define the default organization\n\nHere is an example of use:\n\n```\n➜  gh-org-members git:(main) ✗ gh cd ULL-MFP-AET-2122\n➜  gh-org-members git:(main) ✗ gh pwd\nULL-MFP-AET-2122\n```\n\n```\n➜  gh-org-members git:(main) ✗ gh cd ULL-ESIT-PL-2122\n➜  gh-org-members git:(main) ✗ gh pwd\nULL-ESIT-PL-2122\n```\n\nThis is a definition for the `cd` alias:\n\n```\n➜  gh-org-members git:(main) gh alias list | grep cd\ncd:     !gh config set current-org \"$1\" 2\u003e/dev/null\n```\n\nThis is a definition for the `pwd` alias:\n\n```\n➜  gh-org-members git:(main) gh alias list | grep pwd\npwd:    !gh config get current-org\n```\n\nHere is another alias that uses the program [yq](https://github.com/mikefarah/yq) to query the `gh` yml configuration file:\n\n```\n➜  gh-org-members git:(develop) ✗ gh alias list | grep getc\ngetc:   !yq \"$1\" ~/.config/gh/config.yml\n```\n\nIt is used this way:\n\n```\n✗ gh getc '.\"current-org\"'\n\"ULL-MFP-AET-2122\"\n✗ gh getc '.aliases.cd'  \n\"!gh config set current-org \\\"$1\\\" 2\u003e/dev/null\"\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrguezl%2Fgh-org-members","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrguezl%2Fgh-org-members","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrguezl%2Fgh-org-members/lists"}