{"id":18626149,"url":"https://github.com/specterops/.github","last_synced_at":"2025-11-03T21:30:23.123Z","repository":{"id":162265108,"uuid":"629633813","full_name":"SpecterOps/.github","owner":"SpecterOps","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-14T18:09:49.000Z","size":2073,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-14T19:23:01.539Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SpecterOps.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":"2023-04-18T17:56:54.000Z","updated_at":"2025-02-14T18:09:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"c42e04d4-b169-480a-8207-0ea757a1cb4c","html_url":"https://github.com/SpecterOps/.github","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/SpecterOps%2F.github","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpecterOps%2F.github/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpecterOps%2F.github/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SpecterOps%2F.github/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SpecterOps","download_url":"https://codeload.github.com/SpecterOps/.github/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239418961,"owners_count":19635299,"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-11-07T04:37:04.160Z","updated_at":"2025-11-03T21:30:23.092Z","avatar_url":"https://github.com/SpecterOps.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"SpecterOps Organization Builder\n===============================\n  \n![SpecterOps](img/specterops-banner.jpg)  \n  \n[![Slack](https://img.shields.io/badge/Slack-SpecterOps-02B36C)](https://join.slack.com/t/bloodhoundhq/shared_invite/zt-1tgq6ojd2-ixpx5nz9Wjtbhc3i8AVAWw) [![Slack](https://img.shields.io/twitter/follow/specterops?style=social)](https://twitter.com/specterops) [![Slack](https://img.shields.io/mastodon/follow/109314317500800201?domain=https%3A%2F%2Finfosec.exchange\u0026style=social)](https://infosec.exchange/@specterops)  \n\nWelcome! You're looking at the \"secret\" repository that builds the SpecterOps organization's profile page. You can view the output of this repository at [https://github.com/specterops](https://github.com/specterops).\n\nRead on if you want to learn how it works:\n\n# How it Works\n\nThis codebase can be run from a local system, but it is designed to be run by GitHub workflows. The workflows will run the code, and then commit the results to the `main` branch. That is what you see when you visit the main profile page.\n\nThe GitHub GraphQL API provides all the repository data for the projects.\n\n## Initial Setup \u0026 Making Changes\n\nThe only file that should be modified to update the _README.md_ (that's the profile page) is the _config.yml_ file. This file controls which projects are shown on the page, and the order in which they are shown. It also controls details like the page title and introduction text.\n\nThe comments in the file explain how to use and update each section.\n\n### Managing Projects\n\nFollow the _config.yaml_ file's comments to add, remove, or adjust projects. There are a few important keys to note.\n\nUnder `projects`:\n\n* `profile`: This is the name of the GitHub profile. Make sure it matches the name of the profile exactly.\n* `org`: Flags the profile as an organization (not a personal profile). This is not used right now, but it is a placeholder for future features. Organizations are different from profiles in that they can have multiple owners and different details.\n\nUnder `featured`:\n\n* `img`: This is the name of the image file that will be used for the project. The image file should be placed in the `img` directory. The image should be 320x320 pixels. The size is not critical, but it should be square and consistent across all images. \n\n## Kicking Off Updates\n\nAs mentioned above, GitHub workflows manage the updates. To kick off an update, push a commit to the `main` branch. The workflow will run, and then commit the results to the `main` branch. The details of the projects change frequently, so the workflows also run on a schedule to keep the page updated.\n\nThe workflows run `run.py` with the necessary commands to update the page. The `run.py` file is the main entry point for the code. The workflows run when:\n\n* New changes are committed to the `main` branch\n* The cron schedule is triggered (e.g., `0 18 * * 5` runs every Friday at 6pm)\n* An admin triggers a manual run (under the _Actions_ tab on GitHub)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecterops%2F.github","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspecterops%2F.github","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecterops%2F.github/lists"}