{"id":29142375,"url":"https://github.com/buildkite/backstage-plugin","last_synced_at":"2025-06-30T19:37:32.590Z","repository":{"id":266387393,"uuid":"826016662","full_name":"buildkite/backstage-plugin","owner":"buildkite","description":"A repo for the development of a Buildkite plugin for Backstage","archived":false,"fork":false,"pushed_at":"2025-06-27T10:56:19.000Z","size":2204,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-06-27T11:46:14.667Z","etag":null,"topics":["backstage-plugin"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/buildkite.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-09T00:34:50.000Z","updated_at":"2025-06-27T10:56:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"9966c4ea-c58d-4d45-95eb-bcdc12501ee8","html_url":"https://github.com/buildkite/backstage-plugin","commit_stats":null,"previous_names":["buildkite/backstage-plugin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/buildkite/backstage-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildkite%2Fbackstage-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildkite%2Fbackstage-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildkite%2Fbackstage-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildkite%2Fbackstage-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buildkite","download_url":"https://codeload.github.com/buildkite/backstage-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buildkite%2Fbackstage-plugin/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262839750,"owners_count":23372780,"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":["backstage-plugin"],"created_at":"2025-06-30T19:37:27.102Z","updated_at":"2025-06-30T19:37:32.571Z","avatar_url":"https://github.com/buildkite.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Buildkite Backstage Plugin\n\nA Buildkite plugin for Backstage that provides deep integration with your Buildkite CI/CD pipelines.\n\n## ✨ Features\n\n🔍 **Enhanced Pipeline Visibility**\n- Real-time build status monitoring with automatic updates\n- Hierarchical branch-based organization of builds\n- Detailed step-by-step build progress tracking\n- Comprehensive build logs with syntax highlighting\n\n⚡ **Powerful Filtering \u0026 Search**\n- Full-text search across builds, messages, authors, branches, and commit IDs\n- Smart date range filtering with preset options (Today, Yesterday, Last 7 days, Last 30 days)\n- Multi-criteria filtering by branch, creator, and build status\n- Automatic status-based grouping and organization\n\n📖 **Rich Build Information**\n- Detailed build status with step-by-step progress\n- Build timing and duration tracking\n- Commit and branch context\n- Author information with avatars\n- Build trigger information\n\n🛠️ **Interactive Build Management**\n- One-click rebuild functionality\n- Expandable/collapsible build details\n- Interactive build step inspection\n- Direct links to Buildkite\n\n⚙️ **Advanced Customization**\n- UTC/Local time toggle with persistent preferences\n- Branch-level collapsing\n- Automatic expansion of running builds\n- Custom pipeline styling with avatars\n\n## Prerequisites\n\n- Buildkite account with API access\n- Required API token permissions:\n  - `read_pipelines`\n  - `read_builds`\n  - `read_user`\n  - `write_builds` (for rebuild functionality)\n\n## Installation\n\n### Plugin Installation\n\nIf the plugin is in your project's plugins directory:\n\n```bash\nyarn workspace app add @buildkite/backstage-plugin-buildkite\n```\n\nIf you're installing from an external package:\n\n```bash\nyarn workspace app add @buildkite/backstage-plugin-buildkite\n```\n\n### Configuration\n\n1. Add the proxy configuration to your `app-config.yaml`:\n\n```yaml\nproxy:\n  endpoints:\n    '/buildkite/api':\n      target: https://api.buildkite.com/v2\n      headers:\n        Authorization: Bearer ${BUILDKITE_API_TOKEN}\n        Accept: application/json\n      allowedHeaders: ['Authorization']\n\nbuildkite:\n  apiToken: ${BUILDKITE_API_TOKEN}\n  organization: ${BUILDKITE_ORGANIZATION}\n```\n\n2. Create or update `packages/app/src/plugins.ts` to register the plugin:\n\n```typescript\n// Import plugins that you want to be included in your app\nexport { buildkitePlugin } from '@buildkite/backstage-plugin-buildkite';\n```\n\n3. Make sure to import the plugins file in your `packages/app/src/App.tsx`:\n\n```typescript\n// Import plugins\nimport './plugins';\n```\n\n4. Add the API factory in `packages/app/src/apis.ts`:\n\n```typescript\nimport { buildkiteAPIRef, BuildkiteClient } from '@buildkite/backstage-plugin-buildkite';\n\nexport const apis: AnyApiFactory[] = [\n  createApiFactory({\n    api: buildkiteAPIRef,\n    deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef, configApi: configApiRef },\n    factory: ({ discoveryApi, fetchApi, configApi }) =\u003e {\n      const buildkiteConfig = configApi.getOptionalConfig('buildkite');\n      return new BuildkiteClient({\n        discoveryAPI: discoveryApi,\n        fetchAPI: fetchApi,\n        config: {\n          organization: buildkiteConfig?.getOptionalString('organization') ?? 'default-org',\n          defaultPageSize: buildkiteConfig?.getOptionalNumber('defaultPageSize') ?? 25,\n          apiBaseUrl: buildkiteConfig?.getOptionalString('apiBaseUrl') ?? 'https://api.buildkite.com/v2',\n        },\n      });\n    },\n  }),\n];\n```\n\n5. Add routes in `packages/app/src/App.tsx`:\n\n```typescript\nimport { PipelinePage } from '@buildkite/backstage-plugin-buildkite';\n\nconst routes = (\n  \u003cFlatRoutes\u003e\n    {/* Other routes... */}\n\n    {/* Buildkite Plugin Routes */}\n    \u003cRoute path=\"/buildkite\" element={\u003cPipelinePage /\u003e} /\u003e\n    \u003cRoute path=\"/buildkite/pipeline/:orgSlug/:pipelineSlug\" element={\u003cPipelinePage /\u003e} /\u003e\n  \u003c/FlatRoutes\u003e\n);\n```\n\n6. Add to your Entity Page in `packages/app/src/components/catalog/EntityPage.tsx`:\n\n```typescript\nimport { isBuildkiteAvailable, BuildkiteWrapper } from '@buildkite/backstage-plugin-buildkite';\n\nconst cicdContent = (\n  \u003cEntitySwitch\u003e\n    \u003cEntitySwitch.Case if={isBuildkiteAvailable}\u003e\n      \u003cBuildkiteWrapper /\u003e\n    \u003c/EntitySwitch.Case\u003e\n    \u003cEntitySwitch.Case\u003e\n      \u003cEmptyState\n        title=\"No CI/CD available for this entity\"\n        missing=\"info\"\n        description=\"Add a Buildkite annotation to enable CI/CD visualization\"\n      /\u003e\n    \u003c/EntitySwitch.Case\u003e\n  \u003c/EntitySwitch\u003e\n);\n\nconst defaultEntityPage = (\n  \u003cEntityLayout\u003e\n    {/* Other routes... */}\n\n    \u003cEntityLayout.Route path=\"/ci-cd\" title=\"CI/CD\"\u003e\n      {cicdContent}\n    \u003c/EntityLayout.Route\u003e\n  \u003c/EntityLayout\u003e\n);\n```\n\n### Component Configuration\n\nAdd the Buildkite annotation to your component's `catalog-info.yaml`:\n\n```yaml\nmetadata:\n  annotations:\n    buildkite.com/pipeline-slug: organization-slug/pipeline-slug\n```\n\n## Documentation\n\n- [Deployment Tracking](docs/DEPLOYMENT.md)\n- [Troubleshooting](docs/TROUBLESHOOTING.md)\n- [Contributing/Development Guide](docs/CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuildkite%2Fbackstage-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuildkite%2Fbackstage-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuildkite%2Fbackstage-plugin/lists"}