{"id":21820662,"url":"https://github.com/sue445/gitpanda","last_synced_at":"2026-02-13T12:20:38.804Z","repository":{"id":34956229,"uuid":"190015456","full_name":"sue445/gitpanda","owner":"sue445","description":"GitLab URL expander for Slack","archived":false,"fork":false,"pushed_at":"2025-07-09T22:59:28.000Z","size":4773,"stargazers_count":21,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-10T08:59:26.983Z","etag":null,"topics":["docker-image","gitlab","lambda","slack-webhook"],"latest_commit_sha":null,"homepage":"https://godoc.org/github.com/sue445/gitpanda","language":"Go","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/sue445.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":"2019-06-03T13:54:32.000Z","updated_at":"2025-07-09T22:59:30.000Z","dependencies_parsed_at":"2025-04-14T03:01:31.461Z","dependency_job_id":"5ea5559c-5be5-4a5b-af8c-5a7b083c159e","html_url":"https://github.com/sue445/gitpanda","commit_stats":null,"previous_names":[],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/sue445/gitpanda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sue445%2Fgitpanda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sue445%2Fgitpanda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sue445%2Fgitpanda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sue445%2Fgitpanda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sue445","download_url":"https://codeload.github.com/sue445/gitpanda/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sue445%2Fgitpanda/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265711173,"owners_count":23815486,"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":["docker-image","gitlab","lambda","slack-webhook"],"created_at":"2024-11-27T16:38:14.480Z","updated_at":"2026-02-11T07:17:46.453Z","avatar_url":"https://github.com/sue445.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gitpanda :panda_face:\n**Git**Lab URL ex**pande**r for Slack\n\n[![Latest Version](https://img.shields.io/github/v/release/sue445/gitpanda)](https://github.com/sue445/gitpanda/releases)\n[![test](https://github.com/sue445/gitpanda/actions/workflows/test.yml/badge.svg)](https://github.com/sue445/gitpanda/actions/workflows/test.yml)\n[![build](https://github.com/sue445/gitpanda/actions/workflows/build.yml/badge.svg)](https://github.com/sue445/gitpanda/actions/workflows/build.yml)\n[![docker-ghcr](https://github.com/sue445/gitpanda/actions/workflows/docker-ghcr.yml/badge.svg)](https://github.com/sue445/gitpanda/actions/workflows/docker-ghcr.yml)\n[![docker-gcp](https://github.com/sue445/gitpanda/actions/workflows/docker-gcp.yml/badge.svg)](https://github.com/sue445/gitpanda/actions/workflows/docker-gcp.yml)\n[![Maintainability](https://qlty.sh/gh/sue445/projects/gitpanda/maintainability.svg)](https://qlty.sh/gh/sue445/projects/gitpanda)\n[![Coverage Status](https://coveralls.io/repos/github/sue445/gitpanda/badge.svg)](https://coveralls.io/github/sue445/gitpanda)\n[![Go Report Card](https://goreportcard.com/badge/github.com/sue445/gitpanda)](https://goreportcard.com/report/github.com/sue445/gitpanda)\n\n## Example\n![example1](img/example1.png)\n\n![example2](img/example2.png)\n\n## Requirements\n* GitLab API v4\n* Slack app and OAuth Access Token\n  * see [CREATE_SLACK_APP.md](CREATE_SLACK_APP.md)\n\n## Supported URL format\n* User URL\n  * e.g. `${GITLAB_BASE_URL}/:username`\n* Group URL\n  * e.g. `${GITLAB_BASE_URL}/:groupname`\n* Project URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame`\n* Issue URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/issues/:iid`\n* MergeRequest URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/merge_requests/:iid`\n* Job URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/-/jobs/:id`\n* Pipeline URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/pipelines/:id`\n* Blob URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/blob/:sha1/:filename`\n* Commit URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/commit/:sha1`\n* Project snippet URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/snippets/:id`\n* Snippet URL\n  * e.g. `${GITLAB_BASE_URL}/snippets/:id`\n* Epic URL\n  * e.g. `${GITLAB_BASE_URL}/groups/:groupname/-/epics/:iid`\n* Work item URL\n  * e.g. `${GITLAB_BASE_URL}/:namespace/:reponame/-/work_items/:iid`\n\n## Running standalone\nDownload latest binary from https://github.com/sue445/gitpanda/releases\n\n```bash\nPORT=8000 \\\nGITLAB_API_ENDPOINT=https://your-gitlab.example.com/api/v4 \\\nGITLAB_BASE_URL=https://your-gitlab.example.com \\\nGITLAB_PRIVATE_TOKEN=xxxxxxxxxx \\\nSLACK_OAUTH_ACCESS_TOKEN=xoxp-0000000000-0000000000-000000000000-00000000000000000000000000000000 \\\nSLACK_VERIFICATION_TOKEN=xxxxxxxxx \\\nTRUNCATE_LINES=5 \\\n./gitpanda\n```\n\n### Environment variables\n* `PORT`\n  * default is `8000`\n* `GITLAB_API_ENDPOINT`\n  * e.g. `https://your-gitlab.example.com/api/v4`\n* `GITLAB_BASE_URL`\n  * e.g. `https://your-gitlab.example.com`\n* `GITLAB_PRIVATE_TOKEN`\n  * Generate a personal access token with `read_api` (recommended) or `api` scope\n* `SLACK_OAUTH_ACCESS_TOKEN`\n  * see [CREATE_SLACK_APP.md](CREATE_SLACK_APP.md)\n  * e.g. `xoxp-0000000000-0000000000-000000000000-00000000000000000000000000000000`\n* `SLACK_VERIFICATION_TOKEN`\n  * Token for verify slack requests. This is optional, but **recommended**\n  * see. https://api.slack.com/docs/verifying-requests-from-slack#app_management_updates\n* `TRUNCATE_LINES`\n  * Line count to truncate the text (default. no truncate)\n* `SENTRY_DSN`\n  * [Sentry](https://sentry.io/) DSN\n  * e.g. `https://xxxxxxxxxxxxx@sentry.example.com/0000000`\n* `DEBUG_LOGGING`\n  * Output debug log if non-empty character set\n  * e.g. `DEBUG_LOGGING=1`\n\n## Running with AWS (Lambda + API Gateway + Parameter Store)\nUse latest `gitpanda_linux_amd64` on https://github.com/sue445/gitpanda/releases\n\n### Environment variables\nOne of the following is required\n\n| Environment                | Key of Parameter Store         |\n| -------------------------- | ------------------------------ |\n| `GITLAB_API_ENDPOINT`      | `GITLAB_API_ENDPOINT_KEY`      |\n| `GITLAB_BASE_URL`          | `GITLAB_BASE_URL_KEY`          |\n| `GITLAB_PRIVATE_TOKEN`     | `GITLAB_PRIVATE_TOKEN_KEY`     |\n| `SLACK_OAUTH_ACCESS_TOKEN` | `SLACK_OAUTH_ACCESS_TOKEN_KEY` |\n| `SLACK_VERIFICATION_TOKEN` | `SLACK_VERIFICATION_TOKEN_KEY` |\n| `TRUNCATE_LINES`           |                                |\n\nWhen you want to store to Parameter Store, please store as `SecureString`\n\n![aws parameter_store](img/aws-parameter_store.png)\n\n### Example\n* [Example template for AWS SAM](examples/aws_sam_template.yaml)\n\n## Arguments\n```bash\n$ ./gitpanda --help\nUsage of ./gitpanda:\n  -version\n    \tWhether showing version\n```\n\n## Running with docker\nRun latest version\n\n```bash\ndocker run --rm -it ghcr.io/sue445/gitpanda\n```\n\nRun with specified version\n\n```bash\ndocker run --rm -it ghcr.io/sue445/gitpanda:vX.Y.Z\n```\n\n#### Images\n* [GitHub Container Registry](https://github.com/sue445/gitpanda/pkgs/container/gitpanda) **(Recommended)**\n  * `ghcr.io/sue445/gitpanda:latest`: Use latest version\n  * `ghcr.io/sue445/gitpanda:vX.Y.Z`: Use specified version\n* [Google Artifact Registry](https://console.cloud.google.com/artifacts/docker/gitpanda/us/gitpanda/app): If you want to run this app on [Cloud Run](https://cloud.google.com/run), use this image\n  * `us-docker.pkg.dev/gitpanda/gitpanda/app:latest`: Use latest version\n  * `us-docker.pkg.dev/gitpanda/gitpanda/app:vX.Y.Z`: Use specified version\n  * `us-docker.pkg.dev/gitpanda/gitpanda/app:edge`: The contents of the main branch are pushed to this tag\n\n## Running with Kubernetes\n### 1. [GKE] Create static IP and managed certificate if necessary\nc.f https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs\n\n### 2. Download and edit files in [examples/kubernetes_manifests/](examples/kubernetes_manifests/)\n\n### 3. Create secrets\ne.g.\n\n```bash\nkubectl create secret generic gitpanda-secret \\\n    --from-literal=gitlab_private_token=${GITLAB_PRIVATE_TOKEN} \\\n    --from-literal=slack_oauth_access_token=${SLACK_OAUTH_ACCESS_TOKEN} \\\n    --from-literal=slack_verification_token=${SLACK_VERIFICATION_TOKEN}\n```\n\n### 4. apply manifests\ne.g.\n\n```bash\nkubectl apply -f path/to/kubernetes_manifests/*.yaml\n```\n\n## Running with Cloud Run\nSee followings\n\n* [.github/workflows/docker-gcp.yml](.github/workflows/docker-gcp.yml) `deploy_to_cloud_run` job\n* [.github/cloud_run-service.yml](.github/cloud_run-service.yml)\n\n## Development\nRecommend to use https://github.com/direnv/direnv\n\n```bash\ncp .envrc.example .envrc\nvi .envrc\ndirenv allow\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsue445%2Fgitpanda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsue445%2Fgitpanda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsue445%2Fgitpanda/lists"}