{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":17872111,"defaultBranch":"master","name":"gush","ownerLogin":"chaps-io","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2014-03-18T15:59:18.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/11925359?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1709193283.0","currentOid":""},"activityList":{"items":[{"before":"7997911d944cabdbd45d6270d2d8913138c9ce22","after":"bcaae819fbae9d6be27360a305c33b6f4a579c9e","ref":"refs/heads/master","pushedAt":"2024-08-19T21:02:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Improved redis performance in large keyspace, added pagination, and auto-expiration (#119)\n\nThis commit makes several interrelated changes:\r\n\r\n1. Replaced the redis key scan to find job keys in `Client#find_workflow` with\r\n job class name persistence in `Workflow#to_hash`. This significantly improves\r\n performance when loading many workflows because it avoids n key scans.\r\n\r\n2. Added `Client#workflow_ids` with sorting by creation timestamp and pagination\r\n as an alternative to `Client#all_workflows`, which has performance issues in\r\n large keyspaces and returns unwieldy amounts of data given a large number of\r\n workflows.\r\n\r\n3. Added workflow and job indexes by `created_at` and `expires_at` timestamps.\r\n The former is necessary for paging through sorted workflow ids, and the latter\r\n is necessary to remove data on expiration.\r\n\r\n4. Replace use of redis key TTL with explicit expiration via `Client#expire_workflows`,\r\n since there's no other way to remove data from the indexes.\r\n\r\n5. Added a migration file (and infrastructure) to migrate to the new indexes\r\n and expiration format.\r\n\r\n6. Added `Client#workflows_count` to get a count of all workflows, which is\r\n helpful for pagination.\r\n\r\nGiven a redis instance with 10,000 workflows, this set of changes allows a page\r\nof the most recent 100 workflows to be loaded in 0.1 seconds, whereas previously\r\n`all_workflows` would take hours to return data.\r\n\r\n(Or, for a less extreme example of 1000 workflows, we can load 100 workflows in\r\n0.1 seconds compared to `all_workflows` taking 42 seconds).","shortMessageHtmlLink":"Improved redis performance in large keyspace, added pagination, and a…"}},{"before":"f06f85f866fc080aa3be6f1d61aaef525588299c","after":"7997911d944cabdbd45d6270d2d8913138c9ce22","ref":"refs/heads/master","pushedAt":"2024-08-12T13:51:36.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Added rubocop for code style consistency (#115)\n\n* Added rubocop (and rubocop-rspec, rubocop-rake) for code style consistency\r\n\r\nAuto-generated the `.rubocop.yml' file to follow existing styles with:\r\n\r\n rubocop --auto-gen-config --exclude-limit 0\r\n\r\nAdded running rubocop to github action script.\r\n\r\n* Manually disabled a few rubocop cops that depend on arbitrarily chosen lengths\r\n\r\n* Enabled some rubocop cops and fixed related warnings\r\n\r\nChose cops that were very easy to update the code to adhere to and, in some cases,\r\nrelate to preventing bugs. Mostly avoided cops that involve more person code style\r\npreferences (e.g. spacing, alignment, naming).","shortMessageHtmlLink":"Added rubocop for code style consistency (#115)"}},{"before":"aa0a8a13e8ce2307dd277f7d36fa91e8baf56756","after":"f06f85f866fc080aa3be6f1d61aaef525588299c","ref":"refs/heads/master","pushedAt":"2024-08-08T08:47:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Fix workflow status when the workflow is pending to start (#116)","shortMessageHtmlLink":"Fix workflow status when the workflow is pending to start (#116)"}},{"before":"407578e4dabf344e12f1521966eeba2a54e37e12","after":"aa0a8a13e8ce2307dd277f7d36fa91e8baf56756","ref":"refs/heads/master","pushedAt":"2024-08-08T08:47:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"`Gush::Client` now delegates the `ActiveJob.perform_later` call to `Gush::Job` (#117)\n\nThis delegation allows for Gush users to easily override the enqueing behavior\r\nto their custom job class, e.g. to support additional ActiveJob options or\r\nenqueing behaviors (e.g synchronous with `perform_now`).","shortMessageHtmlLink":"Gush::Client now delegates the ActiveJob.perform_later call to `G…"}},{"before":"bf3cc614b81f97b66b296b67a8cd257d501be504","after":"407578e4dabf344e12f1521966eeba2a54e37e12","ref":"refs/heads/master","pushedAt":"2024-08-08T07:50:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Fixed the workflow redis key format used in `Client#next_free_workflow_id` (#120)\n\nPreviously, the wrong key prefix was used, which means that this method\r\nwas not actually checking whether a workflow id was already in use.","shortMessageHtmlLink":"Fixed the workflow redis key format used in `Client#next_free_workflo…"}},{"before":"68bc23f1d9876a312ef35d2078bf1af4a228080b","after":"bf3cc614b81f97b66b296b67a8cd257d501be504","ref":"refs/heads/master","pushedAt":"2024-07-27T14:07:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Persist dependencies so that `Workflow#configure` is not required on load (#118)\n\nPreviously, `Workflow#configure` was called every time a Workflow was\r\ninstantiated. This could create broken dependency graphs, e.g. if a\r\nconfigure method sets up job dependencies based on some mutable data like\r\na timestamp argument or a database value.\r\n\r\nInstead, serialize workflow dependencies along with the rest of a workflow's\r\ndata and reload it via `Client#workflow_from_hash` and tell `Workflow#initialize`\r\nnot to run setup/configure.\r\n\r\nNote that for backwards compatibility with workflows persisted before this\r\nchange, the setup method will still be called if dependencies in the\r\ndeserialized hash are nil.","shortMessageHtmlLink":"Persist dependencies so that Workflow#configure is not required on …"}},{"before":"6e87f60e1cc1fb4a5d6e0bdc6f7afb14c727967e","after":"68bc23f1d9876a312ef35d2078bf1af4a228080b","ref":"refs/heads/master","pushedAt":"2024-07-17T12:28:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Add globals and kwargs to Workflow and Job (#113)\n\n* Add globals to Workflow and Job\r\n\r\nFor shared functionality across Workflow classes that depends on some variable\r\ndata, it's useful to have named parameters for the Workflow that are\r\nautomatically forwarded to all Job instances.\r\n\r\nThis commit adds a `globals` keyword arg to the Workflow initializer, which\r\nshould be a hash that is then stored in a `globals` hash attribute, is\r\npersisted, and is merged into the `params` sent to each Job instance.\r\n\r\n* Add kwargs to Workflow\r\n\r\nFor workflows that take a larger number of parameters or optional parameters,\r\nit's useful to specify these as keyword arguments rather than positional ones.\r\n\r\nThis commit adds support to `Workflow#initialize` for kwargs, and stores them\r\nin a new `kwargs` attribute.\r\n\r\n---------\r\n\r\nCo-authored-by: Noah Harrison ","shortMessageHtmlLink":"Add globals and kwargs to Workflow and Job (#113)"}},{"before":"d49e6bbb8aeea3238f94cf1d74598721ae4e2a14","after":"6e87f60e1cc1fb4a5d6e0bdc6f7afb14c727967e","ref":"refs/heads/master","pushedAt":"2024-07-17T12:26:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"pokonski","name":null,"path":"/pokonski","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/135402?s=80&v=4"},"commit":{"message":"Correctly persist :wait attribute for Gush::Job (#114)","shortMessageHtmlLink":"Correctly persist :wait attribute for Gush::Job (#114)"}},{"before":"00d0bc5ebd7d8dc8d7b14010c04e047b151e0da1","after":"d49e6bbb8aeea3238f94cf1d74598721ae4e2a14","ref":"refs/heads/master","pushedAt":"2024-02-29T07:34:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"Add badges to Readme; update version","shortMessageHtmlLink":"Add badges to Readme; update version"}},{"before":"fdcae5960f57314da65dc67eb9a6ba047e68bf25","after":"ac941a21e188bcbff26157b44665c7c4235d7000","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-29T07:27:48.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"Merge pull request #108 from chaps-io/update-redis-configuration\n\nAllow setting redis options","shortMessageHtmlLink":"Merge pull request #108 from chaps-io/update-redis-configuration"}},{"before":"e218ea183e2470bcdb4b9831228ab18c8ee2540f","after":"00d0bc5ebd7d8dc8d7b14010c04e047b151e0da1","ref":"refs/heads/master","pushedAt":"2024-02-29T07:27:44.000Z","pushType":"pr_merge","commitsCount":12,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"Merge pull request #107 from chaps-io/bump-gush-dependencies\n\nUpdate gush dependencies","shortMessageHtmlLink":"Merge pull request #107 from chaps-io/bump-gush-dependencies"}},{"before":"3b47b5a694d08678199daa1abb9626fb39963903","after":"fdcae5960f57314da65dc67eb9a6ba047e68bf25","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-29T07:12:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"bump version to 3.0.0","shortMessageHtmlLink":"bump version to 3.0.0"}},{"before":null,"after":"a4354dc398fb9a402a4e867d410a698ad30827f8","ref":"refs/heads/update-redis-configuration","pushedAt":"2024-02-28T22:05:08.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"Allow setting redis options","shortMessageHtmlLink":"Allow setting redis options"}},{"before":"d287190bb280f9316a7beeb328ec4e29dd75ab43","after":"3b47b5a694d08678199daa1abb9626fb39963903","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T21:28:58.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"bump version","shortMessageHtmlLink":"bump version"}},{"before":"b310bb54942c11d0a167b2d1a4cd0cddf08472df","after":"d287190bb280f9316a7beeb328ec4e29dd75ab43","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T21:12:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"use checkout@v4","shortMessageHtmlLink":"use checkout@v4"}},{"before":"810d20ff67be5857a2c313be43bd857c83c42c7a","after":"b310bb54942c11d0a167b2d1a4cd0cddf08472df","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T21:10:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"support all 7.1.X releases","shortMessageHtmlLink":"support all 7.1.X releases"}},{"before":"5f537bbf8675328b98cab2dbac2057d6dde16fad","after":"810d20ff67be5857a2c313be43bd857c83c42c7a","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T21:02:46.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"bump dependencies","shortMessageHtmlLink":"bump dependencies"}},{"before":"a3f58f7d24128590e014c9f9c53143b58d542e5e","after":"5f537bbf8675328b98cab2dbac2057d6dde16fad","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T20:43:08.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"perform job","shortMessageHtmlLink":"perform job"}},{"before":"0fa9766e195a3843490df916a910e7a38c081c9f","after":"a3f58f7d24128590e014c9f9c53143b58d542e5e","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T14:29:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"require active support to fix deprecator issue","shortMessageHtmlLink":"require active support to fix deprecator issue"}},{"before":null,"after":"0fa9766e195a3843490df916a910e7a38c081c9f","ref":"refs/heads/bump-gush-dependencies","pushedAt":"2024-02-28T14:19:31.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"krzyzak","name":"Michał Krzyżanowski","path":"/krzyzak","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/185015?s=80&v=4"},"commit":{"message":"drop support for EOL rails/ruby versions","shortMessageHtmlLink":"drop support for EOL rails/ruby versions"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0xOVQyMTowMjowMi4wMDAwMDBazwAAAASecjck","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOC0xOVQyMTowMjowMi4wMDAwMDBazwAAAASecjck","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMi0yOFQxNDoxOTozMS4wMDAwMDBazwAAAAQHtftC"}},"title":"Activity · chaps-io/gush"}