{"id":16771987,"url":"https://github.com/eddmann/step-function-secret-santa","last_synced_at":"2026-01-02T19:35:30.132Z","repository":{"id":141665469,"uuid":"557435057","full_name":"eddmann/step-function-secret-santa","owner":"eddmann","description":"Uses an AWS Step Function workflow and every Lambda runtime to allocate Secret Santa's","archived":false,"fork":false,"pushed_at":"2022-10-31T19:20:10.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-23T03:26:44.564Z","etag":null,"topics":["custom-runtime","lambda","step-function"],"latest_commit_sha":null,"homepage":"https://eddmann.com/posts/allocating-secret-santas-using-an-aws-step-function-workflow-and-every-available-lambda-runtime/","language":"Java","has_issues":false,"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/eddmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-10-25T17:26:05.000Z","updated_at":"2022-11-01T20:39:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"c411e9ce-18ae-4103-8fec-91d5eb6a85ec","html_url":"https://github.com/eddmann/step-function-secret-santa","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fstep-function-secret-santa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fstep-function-secret-santa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fstep-function-secret-santa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fstep-function-secret-santa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddmann","download_url":"https://codeload.github.com/eddmann/step-function-secret-santa/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243895826,"owners_count":20365279,"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":["custom-runtime","lambda","step-function"],"created_at":"2024-10-13T06:29:37.236Z","updated_at":"2026-01-02T19:35:30.127Z","avatar_url":"https://github.com/eddmann.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Step Function Secret Santa\n\nThis year (2022) I decided to over-engineer the problem of allocating Secret Santa's for my family, by building a AWS Step Function workflow which uses **every** available [Lambda runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) (managed and custom runtime).\n\nFor the custom runtime `provided.al2` I explored the ability of using [my own language](https://github.com/eddmann/santa-lang-prancer) which I have been developing throughout the year.\n\n## Getting Started\n\n```\nmake package\nmake deploy AWS_ACCESS_KEY_ID=ID AWS_SECRET_ACCESS_KEY=KEY\n```\n\n## The Workflow\n\n\u003cimg src=\"./workflow.svg\" width=\"300px\" /\u003e\n\n| Function                                              | Purpose                                                                                                           | Language                                                                                   |\n| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |\n| [Parse Participants](./src/parse-participants/)       | Converts the CSV input supplied by the clients API Gateway request into a JSON form used throughout the workflow. | C# `dotnet6`                                                                               |\n| [Validate Participants](./src/validate-participants/) | Ensures that all supplied participant data is present and valid.                                                  | JavaScript `nodejs16.x`                                                                    |\n| [Allocate](./src/allocate/)                           | Allocates each participant to a random recipient.                                                                 | [santa-lang](https://github.com/eddmann/santa-lang-prancer/tree/main/src/lambda) `provided.al2` |\n| [Validate Allocations](./src/validate-allocations/)   | Ensures that the supplied allocations are valid, taking into consideration participant exclusions.                | Java `java11`                                                                              |\n| [Store Allocations](./src/store-allocations/)         | Stores the allocations within an plain-text file S3 object for review.                                            | Go `go1.x`                                                                                 |\n| [Notify Email](./src/notify-email/)                   | Sends an email (via Mailgun) to the given participant with their allocated recipient name in.                     | Python `python3.9`                                                                         |\n| [Notify SMS](./src/notify-sms/)                       | Sends an SMS (via Twilio) to the given participant with their allocated recipient name in.                        | Ruby `ruby2.7`                                                                             |\n\n## Other Years\n\nInterested in seeing how I over-engineered the problem of allocating Secret Santa's in other years?\n\n- [2020 - Clojure Secret Santa](https://github.com/eddmann/clojure-secret-santa)\n- [2021 - Pico Secret Santa](https://github.com/eddmann/pico-secret-santa)\n- **2022 - Step Function Secret Santa** ⭐\n- [2023 - Secret Santa PWA](https://github.com/eddmann/secret-santa-pwa)\n- [2024 - Secret Santa Draw](https://github.com/eddmann/secret-santa-draw)\n- 2025 - [Secret Santa Draw Arcade](https://github.com/eddmann/secret-santa-draw-arcade) | [Secret Santa Draw GBC](https://github.com/eddmann/secret-santa-draw-gbc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Fstep-function-secret-santa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddmann%2Fstep-function-secret-santa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Fstep-function-secret-santa/lists"}