{"id":15138202,"url":"https://github.com/lukehsiao/linear-reminder","last_synced_at":"2025-10-23T13:31:10.791Z","repository":{"id":230347752,"uuid":"778097231","full_name":"lukehsiao/linear-reminder","owner":"lukehsiao","description":"A toy webhook server for automating sending Linear reminders","archived":true,"fork":false,"pushed_at":"2025-01-01T03:19:24.000Z","size":354,"stargazers_count":2,"open_issues_count":5,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-30T18:52:02.113Z","etag":null,"topics":["linear","rocket","rust","shuttle","webhooks"],"latest_commit_sha":null,"homepage":"https://luke.hsiao.dev/blog/linear-reminders/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukehsiao.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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":"2024-03-27T04:18:35.000Z","updated_at":"2025-01-08T07:06:08.000Z","dependencies_parsed_at":"2024-04-07T00:22:00.537Z","dependency_job_id":"7a0bbd3d-5cf8-4ad1-872c-96e5add6cf62","html_url":"https://github.com/lukehsiao/linear-reminder","commit_stats":{"total_commits":54,"total_committers":3,"mean_commits":18.0,"dds":"0.14814814814814814","last_synced_commit":"d6c3e843dc28ca6592a32601f687ec038498a5be"},"previous_names":["lukehsiao/linear-reminder"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehsiao%2Flinear-reminder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehsiao%2Flinear-reminder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehsiao%2Flinear-reminder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehsiao%2Flinear-reminder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukehsiao","download_url":"https://codeload.github.com/lukehsiao/linear-reminder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237834752,"owners_count":19373785,"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":["linear","rocket","rust","shuttle","webhooks"],"created_at":"2024-09-26T07:21:09.968Z","updated_at":"2025-10-23T13:31:10.346Z","avatar_url":"https://github.com/lukehsiao.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    🤖\u003cbr\u003e\n    linear-reminder\n\u003c/h1\u003e\n\u003cdiv align=\"center\"\u003e\n    \u003cstrong\u003eA webhook server for automating Linear reminders written in Rust and served with \u003ca href=\"https://www.shuttle.rs\"\u003eShuttle\u003c/a\u003e.\u003c/strong\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/lukehsiao/linear-reminder/actions/workflows/general.yml\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/lukehsiao/linear-reminder/general.yml\" alt=\"Build Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/lukehsiao/linear-reminder/blob/main/LICENSE.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-BlueOak--1.0.0-blue\" alt=\"License\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n`linear-reminder` is a simple demo webhook server written using [Rocket](https://rocket.rs) for automating a specific workflow of reminders in [Linear](https://linear.app).\n\n## The workflow\n\nSuppose you have an intermediate status that your devs tickets go to.\nFor example, maybe you have a `Merged` state tickets go to as soon as their associated pull requests merge.\nHowever, `Merged` is not the final desired state.\nPerhaps these tickets need to move from `Merged` to either `QA Ready` or `Done`.\n\n```mermaid\nstateDiagram-v2\n    qa: QA Ready\n    Merged --\u003e Done\n    Merged --\u003e qa\n    qa --\u003e Done\n```\n\nBut, it's easy to forget that, so you want some way to remind people to move the ticket along by posting a comment on tickets which are sitting in `Merged` for some amount of time.\n\n`linear-reminder` is a webhook server to accomplish that.\n\n## Configuration\n\nThis server can be configured using standard [Rocket configuration](https://rocket.rs/guide/v0.5/configuration/).\nSpecifically, we add the following configuration options.\n\n```toml\n# Rocket.toml\n[default]\n# The amount of time to wait between an issue hiting the `target_status` and a reminder being sent.\n# This is provided in \"humantime\" format (e.g, 15days 3hr 3min)\ntime_to_remind = '30min'\n\n[default.linear]\n# Your Linear personal api Key\napi_key = 'insert-here'\n# Your Linear webhook signing key\nsigning_key = 'insert-here'\n# The target status to send reminders for\ntarget_status = 'Merged'\n# The content of the comment to send as the reminder.\n# Must be a single line.\nmessage = 'If this issue is QA-able, please write instructions and move to `QA Ready`. If not, mark it as `Done`. Thanks!\\n\\n*This is an automated message.*'\n```\n\nThese can be overridden using [Shuttle Secrets](https://docs.shuttle.rs/resources/shuttle-secrets) when deployed.\n```toml\n# Secrets.toml\n'ROCKET_LINEAR.API_KEY' = 'lin_api_fillinyourkey'\n'ROCKET_LINEAR.SIGNING_KEY' = 'lin_wh_fillinyourotherkey'\n'ROCKET_LINEAR.TARGET_STATUS' = 'Limbo'\n'ROCKET_LINEAR.MESSAGE' = 'Get out of Limbo.'\n'ROCKET_TIME_TO_REMIND' = '10min'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukehsiao%2Flinear-reminder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukehsiao%2Flinear-reminder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukehsiao%2Flinear-reminder/lists"}