{"id":16877179,"url":"https://github.com/rmacklin/team-sync","last_synced_at":"2025-10-30T05:19:45.320Z","repository":{"id":43966632,"uuid":"252090241","full_name":"rmacklin/team-sync","owner":"rmacklin","description":"A GitHub action to synchronize GitHub Teams with the contents of a teams document","archived":false,"fork":false,"pushed_at":"2023-07-19T04:00:22.000Z","size":741,"stargazers_count":10,"open_issues_count":10,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-21T15:47:02.043Z","etag":null,"topics":["github-actions","github-team","team-sync"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/rmacklin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null}},"created_at":"2020-04-01T06:25:05.000Z","updated_at":"2024-05-11T10:20:43.000Z","dependencies_parsed_at":"2025-04-11T11:39:39.367Z","dependency_job_id":"44d5906e-63a4-423a-babf-8551689886e8","html_url":"https://github.com/rmacklin/team-sync","commit_stats":{"total_commits":53,"total_committers":3,"mean_commits":"17.666666666666668","dds":0.2075471698113207,"last_synced_commit":"51102c729cfc2a68dbae1e745c7d596f1f3d8920"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/rmacklin/team-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmacklin%2Fteam-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmacklin%2Fteam-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmacklin%2Fteam-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmacklin%2Fteam-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rmacklin","download_url":"https://codeload.github.com/rmacklin/team-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmacklin%2Fteam-sync/sbom","scorecard":{"id":778767,"data":{"date":"2025-08-11","repo":{"name":"github.com/rmacklin/team-sync","commit":"e725966bbcfa64e1dbca600f7d584338b4113580"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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 21 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"}},{"name":"Vulnerabilities","score":0,"reason":"43 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-7r3h-m5j6-3q42","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-7gc6-qh9x-w6h8","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-w7rc-rwvf-8q5r","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T04:21:31.612Z","repository_id":43966632,"created_at":"2025-08-23T04:21:31.612Z","updated_at":"2025-08-23T04:21:31.612Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281748754,"owners_count":26554835,"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-30T02:00:06.501Z","response_time":61,"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":["github-actions","github-team","team-sync"],"created_at":"2024-10-13T15:42:01.321Z","updated_at":"2025-10-30T05:19:45.302Z","avatar_url":"https://github.com/rmacklin.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# team-sync\n\nThis is a GitHub action to synchronize GitHub Teams with the contents of a teams\ndocument in an organization repository.\n\n## Usage\n\n1. Choose or create a repository in your organization for this action. If your\n   organization is already using a `.github` repository to manage GitHub files\n   like Issue and PR templates across the organization, that's a good choice.\n\n2. Create a `.github/teams.yml` file in that repository with the following\n   format:\n   ```yml\n   designers:\n     description: The amazing design team\n     slack: \"#design-team\"\n     members:\n     - name: Alice Smith\n       github: alicesmith\n     - name: Bob Jones\n       github: bjonesdev\n   fighters:\n     members:\n     - name: Dave Grohl\n       github: dgrohl\n     - name: Taylor Hawkins\n       github: taylorhawk1\n   ```\n   For the team sync, what's important is that the outer object maps each team\n   name to an object with a `members` array of objects containing a `github`\n   key. Any other fields can be included in the `members` objects (e.g. `name`,\n   `email`, etc.) but `github` is the required one that declares which GitHub\n   users should be part of each team.\n\n   If you provide a `description` field alongside the `members` array, this\n   description will be synced to the GitHub Team's description. Any other fields\n   can be included alongside these two (e.g. Slack channel, Trello board URL,\n   etc.), though they will be ignored by the action.\n\n3. As an organization administrator, generate a [Personal Access Token] with the\n   `admin:org` scope. Enable SSO for the token if necessary for your\n   organization. (The `admin:org` scope is necessary to manage GitHub Teams.) If\n   your repository is private, you also need to include the `repo` scope.\n\n   [Personal Access Token]: https://github.com/settings/tokens\n\n4. In the repository settings, create a new Secret called\n   `ORG_ADMIN_ACCESS_TOKEN` to store the token. (The name of the secret is not\n   important, as long you use that name to configure the `repo-token` secret\n   below.)\n\n5. Create a `.github/workflows/team_sync.yml` file like this:\n   ```yml\n   name: 'Team Sync'\n   on:\n     push:\n       branches:\n         - main\n       paths:\n         - '.github/teams.yml'\n\n   jobs:\n     synchronize-teams:\n       runs-on: ubuntu-latest\n       steps:\n       - uses: rmacklin/team-sync@v0\n         with:\n           repo-token: \"${{ secrets.ORG_ADMIN_ACCESS_TOKEN }}\"\n   ```\n\nNow your team can create pull requests that update the `teams.yml` file and when\nthey are merged to `main`, the GitHub Teams in your organization will be\ncreated/updated according to those changes!\n\n## Additional Configuration\n\n### `prefix-teams-with`\n\nFor large organizations, it may be more appropriate/practical to manage teams\nwithin a subdivision of the larger organization. However, team names still have\nto be unique across the whole GitHub organization. To support this, you can\nspecify the `prefix-teams-with` attribute in the action configuration:\n\n`.github/workflows/team_sync.yml`:\n```yml\nname: 'Team Sync'\non:\n  push:\n    branches:\n      - main\n    paths:\n      - '.github/teams.yml'\n\njobs:\n  synchronize-teams:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: rmacklin/team-sync@v0\n      with:\n        repo-token: \"${{ secrets.ORG_ADMIN_ACCESS_TOKEN }}\"\n        prefix-teams-with: 'foo'\n```\n\n`.github/teams.yml`:\n```yml\ndesigners:\n  description: The amazing design team\n  members:\n  - name: Alice Smith\n    github: alicesmith\n  - name: Bob Jones\n    github: bjonesdev\nfighters:\n  members:\n  - name: Dave Grohl\n    github: dgrohl\n  - name: Taylor Hawkins\n    github: taylorhawk1\n```\nThis configuration would create the teams `foo designers` and `foo fighters`\n(rather than `designers` and `fighters`).\n\n### `team-data-path`\n\nBy default, the action looks for the team data in the `.github/teams.yml` file\nin your repository. You can specify the `team-data-path` option to change this.\n(Note that you'll also want to change the `paths` configuration specified in the\nworkflow definition.) For example, if you want to keep `teams.yml` in the root\nof your repository, you could use:\n```yml\nname: 'Team Sync'\non:\n  push:\n    branches:\n      - main\n    paths:\n      - 'teams.yml'\n\njobs:\n  synchronize-teams:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: rmacklin/team-sync@v0\n      with:\n        repo-token: \"${{ secrets.ORG_ADMIN_ACCESS_TOKEN }}\"\n        team-data-path: 'teams.yml'\n```\n\n### The `team_sync_ignored` property\n\nYou can add `\"team_sync_ignored\": true` to a team's properties to prevent that\nteam from being synchronized with a corresponding GitHub Team.\n\n## Fine print\n\nNote that if you rename a team (in a way that updates the team's computed slug),\nthis action will create a new team with the new name, rather than updating the\nold team. This action will *not* delete any teams since doing so is very\ndestructive and difficult to reverse. (Even if you are using this action to\nmanage GitHub teams, it still permits the existence of other teams in the\norganization that are managed elsewhere.) So, if you want to rename a team in a\nway that changes its slug, you should rename the GitHub Team before you update\nyour teams document with the new name. Otherwise you'll need to manually delete\nthe old GitHub Team after this action creates a new GitHub Team using the new\nname.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frmacklin%2Fteam-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frmacklin%2Fteam-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frmacklin%2Fteam-sync/lists"}