{"id":38044200,"url":"https://github.com/operate-first/probot-template","last_synced_at":"2026-01-16T19:56:49.143Z","repository":{"id":37839032,"uuid":"506220512","full_name":"operate-first/probot-template","owner":"operate-first","description":"Template for Probot on Kubernetes","archived":false,"fork":false,"pushed_at":"2026-01-04T16:52:57.000Z","size":1690,"stargazers_count":1,"open_issues_count":6,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-04T19:07:38.765Z","etag":null,"topics":["github","github-actions"],"latest_commit_sha":null,"homepage":null,"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/operate-first.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-22T11:37:30.000Z","updated_at":"2024-01-12T18:32:16.000Z","dependencies_parsed_at":"2024-01-27T09:20:05.620Z","dependency_job_id":"1cd1503e-a099-4857-8bf7-81e52e05621f","html_url":"https://github.com/operate-first/probot-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/operate-first/probot-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operate-first%2Fprobot-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operate-first%2Fprobot-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operate-first%2Fprobot-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operate-first%2Fprobot-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/operate-first","download_url":"https://codeload.github.com/operate-first/probot-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/operate-first%2Fprobot-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: 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":["github","github-actions"],"created_at":"2026-01-16T19:56:48.799Z","updated_at":"2026-01-16T19:56:49.136Z","avatar_url":"https://github.com/operate-first.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/operate-first/probot-template\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/operate-first/probot-template/main/static/robot.svg\" width=\"160\" alt=\"Probot's logo, a cartoon robot\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 align=\"center\"\u003e\u003ca href=\"https://github.com/operate-first/probot-template\"\u003eProbot on Kubernetes - template repository\u003c/a\u003e\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/operate-first/probot-template\"\u003e\n    \u003cimg alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/operate-first/probot-template\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/operate-first/probot-template/blob/main/LICENSE\"\u003e\n    \u003cimg alt=\"License\" src=\"https://img.shields.io/badge/license-MIT-blue.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/operate-first/probot-template/issues?q=is%3Aissue+is%3Aopen+label%3Akind%2Fbug\"\u003e\n    \u003cimg alt=\"Reported bugs\" src=\"https://img.shields.io/github/issues-search/operate-first/probot-template?color=red\u0026label=reported%20bugs\u0026query=is%3Aopen%20label%3Akind%2Fbug\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/operate-first/probot-template/issues?q=is%3Aissue+is%3Aopen+label%3Akind%2Fbug\"\u003e\n    \u003cimg alt=\"Feature requests\" src=\"https://img.shields.io/github/issues-search/operate-first/probot-template?label=feature%20requests\u0026query=is%3Aopen%20label%3Akind%2Ffeature\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## How to use\n\n1. Create a new repository from this template\n2. Follow a guide at Probot on [how to create and configure a GitHubApp](https://probot.github.io/docs/development/#manually-configuring-a-github-app)\n3. Create a Quay.io repository to host the controller container image\n   - Create a new Quay.io registry as an empty registry (go to [quay.io/new](https://quay.io/new/), select your namespace and mark the repository as _Public_)\n   - Create a robot account (go to Quay.io, in top right corner select _Account Settings_, then second tab from the top _Robot Accounts -\u003e Create Robot Account_)\n   - Grant this bot account __Write__ access to your new container repository\n   - Save robot credentials as `QUAY_USERNAME` and `QUAY_PASSWORD` in the repository secrets (on GitHub repository page open _Settings -\u003e Secrets -\u003e Actions -\u003e New repository secret_)\n   - In order to [properly expire container images](./.github/actions/set-expiration/action.yaml) we also need `QUAY_OAUTH_TOKEN`. You can either use your own account token or (better) create new Quay Application in your organization. To do so, go to `https://quay.io/organization/\u003corg_name\u003e`, then _Applications -\u003e Create New Application_. Copy the OAuth Token and save it as `QUAY_OAUTH_TOKEN` in the repository secrets\n4. Template all references (you can also do this manually, see [`./scripts/template.sh`](./scripts/template.sh) for list of files to adjust)\n\n    ```sh\n    go install github.com/cbroglie/mustache/cmd/mustache@latest\n\n    cat \u003c\u003cEOM \u003e /tmp/data.yaml\n    name: application-name\n    description: Some text\n    prod-namespace: namespaceA\n    stage-namespace: namespaceB\n    image: quay_image_name\n    quay_org: quay_org\n    org: github_org\n    team: team-name\n    repo: repo\n    email: some-contact@domain.com\n    EOM\n\n    ./scripts/template.sh /tmp/data.yaml\n    ```\n\n5. Create credentials secrets for deployment based on your GitHub app data\n\n    ```sh\n    # Copy secret from base\n    cp manifests/base/controller/secret.yaml manifests/overlays/stage/secret.enc.yaml\n    cp manifests/base/controller/secret.yaml manifests/overlays/prod/secret.enc.yaml\n\n    # edit manifests/overlays/*/secret.enc.yaml filling in all data\n    vim manifests/overlays/*/secret.enc.yaml\n\n    # Encrypt them via sops\n    sops -e -i --pgp=\"0508677DD04952D06A943D5B4DC4116D360E3276\" manifests/overlays/stage/secret.enc.yaml\n    sops -e -i --pgp=\"0508677DD04952D06A943D5B4DC4116D360E3276\" manifests/overlays/prod/secret.enc.yaml\n    ```\n\n6. Read [CONTRIBUTING.md](./CONTRIBUTING.md) and happily hack on `src/app.ts`.\n7. We recommend installing [DCO](https://probot.github.io/apps/dco/), [Renovate](https://www.mend.io/free-developer-tools/renovate/), [Semantic PRs](https://github.com/apps/semantic-prs) GitHub apps.\n\n## Template overview\n\n- `ACKNOWLEDGMENTS.md` - Recognize and credit project this tooling builds upon\n- `.aicoe-ci.yaml` - Config for [AI-CoE CI](https://github.com/AICoE/aicoe-ci) (disables default checks if the app is installed in organization, can be removed if AI-CoE CI is not used)\n- `app.yml` - GitHub app manifest which can be used for automated app creation, see GitHub documentation [here](https://docs.github.com/en/developers/apps/building-github-apps/creating-a-github-app-from-a-manifest) and Probot documentation [here](https://probot.github.io/docs/development/#configuring-a-github-app)\n- `CODE_OF_CONDUCT.md` - Code of conduct for contributors and users\n- `CONTRIBUTING.md` - Guidelines on contributing, expected workflows\n- `CONTRIBUTORS.md` - List of contributors\n- `.env.example` - Environment variables to set when running Probot locally\n- `jest.config.js` - Setup for tests\n- `.github` - Configuration for local repository\n  - `actions` - [Custom GitHub Actions](https://docs.github.com/en/actions/creating-actions/about-custom-actions)\n    - `build` - Builds a container image via [Source to Image](https://github.com/openshift/source-to-image)\n    - `check-maintainer-role` - Verifies user permissions (used to check if user is eligible to create a release for example)\n    - `set-expiration` - Sets container image tag expiration in Quay.io\n    - `test` - Runs tests against the controller\n  - `ISSUE_TEMPLATE` - Standard set of issue templates available in the repo\n    - `bug_report.md`\n    - `feature_request.md`\n    - `promote.md` - Triggers a workflow which promotes images used in `manifests/overlays/stage` to `manifests/overlays/prod` (creates a Pull Request, only maintainers are allowed)\n    - `release.md` - Triggers a workflow which releases from default main branch to GitHub releases and Quay.io\n    - `security.md` - Used by users to nofity maintainers about security vulnerabilities found in the service\n  - `renovate.json` - Config for [Renovate app](https://github.com/marketplace/renovate) to keep your dependencies (Node.js and Github Actions) up to date\n  - `workflows` - Github Actions workflows\n    - `promote.yaml` - Triggered by issues created by `promote.md` issue template. **Important:** make sure `kind/promote` and `bot` labels are present in the repo. Promotes images used in `manifests/overlays/stage` to `manifests/overlays/prod` (creates a Pull Request, only maintainers are allowed)\n    - `pr.yaml` - Runs tests and attempts to build a container image out of a Pull Request\n    - `push.yaml` - Runs tests, builds and pushes a container image to Quay.io on push events\n    - `release.yaml` - Triggered by issues created by `release.md` issue template. **Important:** make sure `kind/release` and `bot` labels are present in the repo. Releases from default main branch to GitHub releases and Quay.io\n- `.gitignore`\n- `.gitleaks.toml` - Exclude `test/fixtures/mock-cert.pem` from [Gitleaks](https://github.com/zricethezav/gitleaks) scans to save you a headache\n- `LICENSE` - License file\n- `manifests` - Folder contains all manifests structured for [Kustomize](https://kustomize.io/)\n  - `base`\n    - `controller` - Contains all manifests related to the controller deployment itself\n    - `tasks` - Tekton task manifests for heavy lifting on cluster, contains example task\n  - `overlays` - Overlay for each environment\n- `OWNERS` - Used if the repo is connected to Prow, see documentation [here](https://www.kubernetes.dev/docs/guide/owners/), can be removed if Prow is not used\n- `package.json` - Node.js package manifest\n- `package-lock.json` - Node.js package manifest lock file\n- `.pre-commit-config.yaml` - Configuration for [pre-commit](https://pre-commit.com/)\n- `.prow.yaml` - Configuration for Prow\n- `README.md` - This file, moved to `README.old.md` after the repo is templated\n- `README.template.md` - New README file after templating the repo\n- `.s2ibase` - Reference to the used Source to Image builder image\n- `scripts` - Hacks and helpers\n  - `build-image.sh` - Creates a local build of Source to Image container image\n  - `template.sh` - Templates the repository\n- `SECURITY.md` - Security policy, see GitHub documentation [here](https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository)\n- `src` - Source for the controller\n  - `app.ts` - Controller definition\n  - `index.ts` - Runner/entrypoint for the controller\n- `static/robot.svg` - Probot logo for you to customize\n- `SUPPORT.md` - Support process definition, how and where to ask for help\n- `test` - Store your controller tests here\n  - `app.test.ts` - Empty test suite\n  - `fixtures/mock-cert.pem` - Mock certificate\n- `.thoth.yaml` - Configuration file for [Thoth Station](https://thoth-station.ninja/) (disables default checks if the AI-CoE CI app is installed in organization, can be removed if AI-CoE CI is not used)\n- `tsconfig.json` - Typescript configuration file\n\n## Resources\n\n- [Probot documentation](https://probot.github.io/docs/)\n- [Probot extensions by Operate First](https://github.com/operate-first/probot-extensions)\n- Example: [Peribolos as a service](https://github.com/operate-first/peribolos-as-a-service)\n\n## Contributions\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) on how to contribute.\n\n---\n\n## Credit\n\nSee [`ACKNOWLEDGMENTS.md`](ACKNOWLEDGMENTS.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperate-first%2Fprobot-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foperate-first%2Fprobot-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foperate-first%2Fprobot-template/lists"}