{"id":28227531,"url":"https://github.com/groton-school/blackbaud-to-google-group-sync","last_synced_at":"2025-06-13T10:31:18.098Z","repository":{"id":145892803,"uuid":"555553090","full_name":"groton-school/blackbaud-to-google-group-sync","owner":"groton-school","description":"Sync entries in Blackbaud LMS Advanced Lists (potentially of community groups) to Google Groups","archived":false,"fork":false,"pushed_at":"2025-06-04T01:48:49.000Z","size":8337,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-04T08:00:22.460Z","etag":null,"topics":["advanced-list-view","blackbaud","google","google-groups","roles","sky-api"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/groton-school.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2022-10-21T20:16:36.000Z","updated_at":"2025-06-04T01:35:13.000Z","dependencies_parsed_at":"2024-01-11T16:14:54.408Z","dependency_job_id":"d2c216a7-87c6-4a08-93f8-7cb34917d72c","html_url":"https://github.com/groton-school/blackbaud-to-google-group-sync","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/groton-school/blackbaud-to-google-group-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groton-school%2Fblackbaud-to-google-group-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groton-school%2Fblackbaud-to-google-group-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groton-school%2Fblackbaud-to-google-group-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groton-school%2Fblackbaud-to-google-group-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/groton-school","download_url":"https://codeload.github.com/groton-school/blackbaud-to-google-group-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groton-school%2Fblackbaud-to-google-group-sync/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259627209,"owners_count":22886806,"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":["advanced-list-view","blackbaud","google","google-groups","roles","sky-api"],"created_at":"2025-05-18T13:16:00.643Z","updated_at":"2025-06-13T10:31:18.082Z","avatar_url":"https://github.com/groton-school.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blackbaud-to-Google Group Sync\n\nSync entries in Blackbaud LMS Advanced Lists (potentially of community groups) to Google Groups\n\nThe original idea of this tool was to try to directly sync membership in Blackbaud LMS community groups into Google Groups. When it became apparent that the strategy that would work for this was to create Advanced Lists of users with memberships in those community groups and to sync those advanced lists, the tool's purpose broadened somewhat. A description of setting up the advanced lists to sync a specific community group membership is described [here](./docs/group-roster-list.md),\n\nAt present we use this tool mostly _without_ matching community groups in our SIS, but instead syncing Advanced Lists that align with user Roles within the SIS (for example, all users who are Students, or Coaches, or members of a particular graduating class or in a particular department). Each of these synced roles just requires an Advanced List to select the users, with [some JSON-formatted comments](./docs/blackbaud-advanced-list-config.md) to direct it to a specific Google Group.\n\nThe app itself runs in a Google App Engine instance, and schedules itself to run nightly to automatically sync any advanced lists that it finds whose descriptions can a) be parsed as valid JSON and b) contain a field `bb2gg` set to `true` (`{\"bb2gg\": true}`) into specified Google Groups.\n\n## Caution\n\nObviously, when defining the Advanced Lists that will be synced into Google Groups, you want to examine your results carefully. One particular filter that we have found necessary to include in just about all lists is `User Login Security.Deny type` `any of` `Has Access` -- which seems like it would be redundant, but is good failsafe if an account is merely disabled, without changing any of the roles (yet).\n\n## Setup\n\nYou need to prep the repository from a development workstation. You will need the following tools installed:\n\n- [`git`](https://git-scm.com/) to pull the repository (or just download the zip file, I suppose)\n- [`composer`](https://pnpm.io/) to load PHP dependencies\n- [`npm`](nodejs.org) installed as part of `node.js` (optionally, my preferred alternative to `npm` is [`pnpm`](https://pnpm.io/installation)) to load Node dependencies (used for setup and deployment)\n- [`gcloud`](https://cloud.google.com/sdk/docs/install) which is invoked by the setup scripts to configure the Google Project for the App Engine instance.\n\nIn your shell:\n\n```bash\ngit clone https://github.com/groton-school/blackbaud-to-google-group-sync.git path/to/project\ncd path/to/project\ncomposer install\nnpm install\nnpm run setup\n```\n\nThe setup script will prompt you with a series of interactive questions to enter credentials from Blackbaud SKY and to make choices about configuration in Google Cloud, including [Google Workspace Admin delegation](./docs/google-workspace-admin.md).\n\nCalling the setup script with the `--help` flag describes its usage (which includes the ability to pass in all user-configurable values from the command line) -- although it will still confirm those values interactively as it runs.\n\n```bash\n./scripts/setup.js --help\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroton-school%2Fblackbaud-to-google-group-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgroton-school%2Fblackbaud-to-google-group-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroton-school%2Fblackbaud-to-google-group-sync/lists"}