{"id":22725460,"url":"https://github.com/ovotech/pm-timeline-generator","last_synced_at":"2025-09-29T08:59:40.840Z","repository":{"id":54202441,"uuid":"207807587","full_name":"ovotech/pm-timeline-generator","owner":"ovotech","description":"Post-mortem Timeline Generator - Export reacted messages from Slack via a DM to a Slackbot.","archived":false,"fork":false,"pushed_at":"2021-10-28T10:08:08.000Z","size":2100,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-09-16T10:38:03.839Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","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/ovotech.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}},"created_at":"2019-09-11T12:31:29.000Z","updated_at":"2025-02-07T10:04:12.000Z","dependencies_parsed_at":"2022-08-13T09:10:17.825Z","dependency_job_id":null,"html_url":"https://github.com/ovotech/pm-timeline-generator","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ovotech/pm-timeline-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovotech%2Fpm-timeline-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovotech%2Fpm-timeline-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovotech%2Fpm-timeline-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovotech%2Fpm-timeline-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ovotech","download_url":"https://codeload.github.com/ovotech/pm-timeline-generator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ovotech%2Fpm-timeline-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277489035,"owners_count":25826633,"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","status":"online","status_checked_at":"2025-09-29T02:00:09.175Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-12-10T16:11:18.544Z","updated_at":"2025-09-29T08:59:40.808Z","avatar_url":"https://github.com/ovotech.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Post-mortem Timeline Generator\n\nMark messages in a public slack channel with a reaction emoji such as\n`:small_blue_diamond:` and export them to a file sent via DM.\n\nTrigger with: `/timeline :small_blue_diamond:`\n\nHere's what it looks like when used:\n\n![ux](/images/timeline-ux.jpg)\n\nand here's the backend:\n\n![architecture](/images/architecture.jpg)\n## To deploy:\n### Set up pre-requisites\n* Python3\n* `pip install --user awscli aws-sam-cli pipenv`\n* Valid AWS credentials\n* Slack permission to create a Slack application.\n\n### Create a Slack App\n* Start here: https://api.slack.com/apps and create an App.\n\n* add a Bot user, and hit Install App. Customise the name and preference :)\n\n* Note down the App and Bot OAuth tokens, and the Signing Secret to set\nas variables later.\n\n* In OAuth and Permissions, add these:\n    - channels:history (to parse the channel’s messages for reactions)\n    - chat:write:bot (to message the user as the bot)\n    - chat:write:user (to write ephemeral user-only messages to the user)\n    - im:read (to handle the slash command and fail gracefully in dm’s)\n    - files:write:user (to send the file)\n    - users:read (to read the user directory and work out username to user id\n     to make the output legible).\n\n* You'll need your API Gateway URL to enable the slash command: we'll come back\nto this.\n\n### Set AWS parameters\nCreate S3 bucket if required:\n```\naws s3 mb s3://deploy-timeline-\u003cuniquename\u003e\n```\n\nSet:\n```\nBUCKET='deploy-timeline' # Bucket to hold .yml in AWS for SAM\nSTACK_NAME='timeline-tool' # CF stack name\nBOT_TOKEN=\u003cslack bot token\u003e # From slack app\nSLACK_TOKEN=\u003cslack app token\u003e # From slack app\nSIGNING_SECRET=\u003cslack signing secret\u003e # From slack app\nLOGGING_DESTINATION=\u003carn of logging resource\u003e\nLOGGING_FORMAT=\u003cdesired logging format\u003e\n```\n\n## Deploy\n\nFrom this repo's directory, deploy `deploy.yml` using SAM CLI (a Cloudformation\ntransform) to create the AWS resources required. The below will upload \nrequirements to S3, create a new .yml, push to AWS then clean up after itself.\n\nRun:\n```\n./package.sh\nsam package --template-file deploy.yml \\\n --s3-bucket $BUCKET --output-template-file packaged.yml --region eu-west-1\nsam deploy --template-file packaged.yml \\\n --stack-name $STACK_NAME --capabilities CAPABILITY_NAMED_IAM \\\n --region eu-west-1 --parameter-overrides SigningSecret=$SIGNING_SECRET \\\n SlackBotToken=$BOT_TOKEN SlackAppToken=$SLACK_TOKEN \\\n LoggingDestinationArn=$LOGGING_DESTINATION LoggingFormat=$LOGGING_FORMAT \\\n --confirm-changeset\n./package_cleanup.sh\n\n```\n\nYou can now create your Slack App's slash command (I went with `/timeline`) \nand add the created API Gateway's URL to it! 🎉\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovotech%2Fpm-timeline-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovotech%2Fpm-timeline-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovotech%2Fpm-timeline-generator/lists"}