{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":648862599,"defaultBranch":"main","name":"rss-shim","ownerLogin":"aphedges","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-06-03T03:01:08.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/14283972?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1713020635.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"2501b7a26eb1baecd11c235ca2a2d84447b39649","ref":"refs/heads/sync-example-repo","pushedAt":"2024-04-13T15:03:55.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"adjust dockerfile to use lockfile","shortMessageHtmlLink":"adjust dockerfile to use lockfile"}},{"before":"dd75673884d1689c438eb7f8adff3b8b03af1b02","after":"14c71ad2d46d203190ae18be746788e633d82634","ref":"refs/heads/main","pushedAt":"2024-04-12T23:31:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Remove Comics Kingdom shim\n\nThe shim broke a couple of months ago after a site redesign, and I\nswitched to using a publicly hosted instance of RSS-Bridge after their\nown shim was fixed. There is no point in me rewriting it in Python.","shortMessageHtmlLink":"Remove Comics Kingdom shim"}},{"before":"77780534513bd8a1dc9cecbfc5a0b29e7aba3ee3","after":"e9d16b2bb1a3fb9110b532e303358a2bc3c7a512","ref":"refs/heads/chainguard","pushedAt":"2023-11-27T20:05:02.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"another attempt at chainguard","shortMessageHtmlLink":"another attempt at chainguard"}},{"before":"a9d5f5be20dc783629b61ba6fa4e69c607e50cae","after":"4ae3b5ba078e540b8d8512ad892bbc038dd5ca6a","ref":"refs/heads/add-checks","pushedAt":"2023-11-27T20:04:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"add even more checks","shortMessageHtmlLink":"add even more checks"}},{"before":"d703914556d4c25554500b5bad52dbe540f05ad8","after":"dd75673884d1689c438eb7f8adff3b8b03af1b02","ref":"refs/heads/main","pushedAt":"2023-11-26T00:03:30.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Implement shim for Astral's blog\n\nCurrently, the blog is a single, static page, so parsing is relatively\neasy. I decided to skip caching because I always need to check the main\npage for new posts, so I need to reparse everything again, anyway.\n\nI plan to contact Astral and ask them to implement an RSS feed. They\nprobably won't, but if they do, then I will likely retire this shim.","shortMessageHtmlLink":"Implement shim for Astral's blog"}},{"before":"b5777a383a03745b1f85796c330d8e6768f3e753","after":"d703914556d4c25554500b5bad52dbe540f05ad8","ref":"refs/heads/main","pushedAt":"2023-11-25T23:19:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Move feed writing logic into `BaseShim`\n\nThis means the `main()` method now only instantiates shims and iterates\nover them, waiting periodically. Shim instantiation is still hard coded,\nbut it has been minimized to one line per shim.","shortMessageHtmlLink":"Move feed writing logic into BaseShim"}},{"before":"f9e866d4c75abb75f2649682a69844a2c009be96","after":"b5777a383a03745b1f85796c330d8e6768f3e753","ref":"refs/heads/main","pushedAt":"2023-11-25T23:10:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Factor out Comics Kingdom shim into its own path\n\nThis commit was much larger than I planned, but this *is* a major\narchitectural change. I created a shim ABC to define a common interface\n and moved as much logic into it as possible. The remaining logic was\nput in the Comics Kingdom shim, and that was genericized to work on\ncomics other than _Rae the Doe_.\n\nWith this commit, I can say that I am almost ready to start implementing\nother shims.","shortMessageHtmlLink":"Factor out Comics Kingdom shim into its own path"}},{"before":"f9a02e2338491488ef1fac3ed44d8020c8908241","after":"f9e866d4c75abb75f2649682a69844a2c009be96","ref":"refs/heads/main","pushedAt":"2023-11-25T20:25:12.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Raise exception if HTTP error status code returned\n\nThere is already top-level exception handling logic, so no special logic\nis needed to wrap the HTTP request.","shortMessageHtmlLink":"Raise exception if HTTP error status code returned"}},{"before":"ecdcd21c529ae15336b4c34aec209a466c4213df","after":"77780534513bd8a1dc9cecbfc5a0b29e7aba3ee3","ref":"refs/heads/chainguard","pushedAt":"2023-11-25T04:10:04.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"another attempt at chainguard","shortMessageHtmlLink":"another attempt at chainguard"}},{"before":"1d46eb89d07e8d1412321ae5669a86bfc1a566e9","after":"f9a02e2338491488ef1fac3ed44d8020c8908241","ref":"refs/heads/main","pushedAt":"2023-11-25T04:09:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Allow clearing of feed URL\n\n`` is optional, so it should be possible to skip generating\nit in cases that it would be incorrect, e.g., local testing. The default\nvalue is still `\"https://example.org\"`, but it can be cleared by setting\n`FEED_URL_ORIGIN=`.","shortMessageHtmlLink":"Allow clearing of feed URL"}},{"before":"266a2e293fa34e8b477491f21a5fa364d4345f56","after":"a9d5f5be20dc783629b61ba6fa4e69c607e50cae","ref":"refs/heads/add-checks","pushedAt":"2023-11-25T03:51:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"add even more checks","shortMessageHtmlLink":"add even more checks"}},{"before":"785616b4e826865f9a1da22952df37ee24d43d2d","after":null,"ref":"refs/heads/atom-link","pushedAt":"2023-11-25T03:51:20.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"}},{"before":"7d8d95083d79488004b015db2bac367173b4ff3f","after":"1d46eb89d07e8d1412321ae5669a86bfc1a566e9","ref":"refs/heads/main","pushedAt":"2023-11-25T03:46:55.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Reorganize `data` directory\n\nThe directory contained only two files, `cache.json` and `feed.rss`.\nThis is fine when there is only a single shim, but to handle multiple\nshims, more structure is needed. There are now separate directories for\ncache and feed files, and each shim has its own location within it.\n\nThis will require changes to my `docker-compose.yml` file to point to\nthe new feed directory. The cache files do not be publicly exposed, and\nhaving an extra `feeds/` component in the URL is redundant.","shortMessageHtmlLink":"Reorganize data directory"}},{"before":"a5a669014cd536b71cbdcd7c529a5ed22bbe7668","after":"7d8d95083d79488004b015db2bac367173b4ff3f","ref":"refs/heads/main","pushedAt":"2023-11-25T02:52:42.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Refactor RSS generation code\n\nMy original plan was to just switch from `dict`s to `dataclass`es, but\nmy changes were much more substantial. I moved logic that is usually the\nsame across feeds into the shared code while allowing most values to be\neasily overridden. The generation changes were purely internal: the\noutput file's contents is unchanged by this commit.\n\nI increased the minimum required Python version to 3.10 because using\nthe `|` operator for unions is more important to me than running on\nolder versions of Python.","shortMessageHtmlLink":"Refactor RSS generation code"}},{"before":"e52c17373d4907b6c19b4fac06ab06a66ca5bb3d","after":"a5a669014cd536b71cbdcd7c529a5ed22bbe7668","ref":"refs/heads/main","pushedAt":"2023-11-25T01:50:32.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Alphabetize XML elements for readability\n\nI re-ordered the elements of `` because the existing, arbitrary\norder was disorganized. I kept the required elements at the top because\nthey deserve to be separate.","shortMessageHtmlLink":"Alphabetize XML elements for readability"}},{"before":"fa9f5fe244d904b933325412664371ba77b50256","after":"e52c17373d4907b6c19b4fac06ab06a66ca5bb3d","ref":"refs/heads/main","pushedAt":"2023-11-25T01:20:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Install application with `--no-deps`\n\nThe dependencies are already installed by the time `rss-shim` is\ninstalled, so it is a waste of time to check if they need to be\ninstalled.","shortMessageHtmlLink":"Install application with --no-deps"}},{"before":"f23caeb8d241aef605660138875bb083e16a3618","after":"fa9f5fe244d904b933325412664371ba77b50256","ref":"refs/heads/main","pushedAt":"2023-11-25T01:17:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Improve RSS output\n\nAlthough the RSS was valid, it was including fields it shouldn't have,\nmissing fields that it should have, and using some fields incorrectly or\nsuboptimally. I went through the following documents and made changes to\nmatch their recommentations:\n\n- RSS 2.0 Specification: https://www.rssboard.org/rss-specification\n- RSS Best Practices Profile: https://www.rssboard.org/rss-profile\n- Creative Commons Namespace for RSS and Atom:\n https://www.rssboard.org/creative-commons","shortMessageHtmlLink":"Improve RSS output"}},{"before":"0a149e5bcf1618c6de8f065759a7e04f5244c418","after":"f23caeb8d241aef605660138875bb083e16a3618","ref":"refs/heads/main","pushedAt":"2023-11-23T04:36:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"improve rss output","shortMessageHtmlLink":"improve rss output"}},{"before":"9d621fb8d4fe24ddf6b2bf0fb99457d357950774","after":"0a149e5bcf1618c6de8f065759a7e04f5244c418","ref":"refs/heads/main","pushedAt":"2023-11-23T03:54:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Add `` element to provide feed's URL\n\nRSS does not have a way for a feed to store its own URL, but the\n\"atom:link\" section of the RSS Best Practices Profile[^1] recommends\nusing an element from Atom for that purpose.\n\nThis resolves the final recommendation from the W3C Feed Validation\nService.\n\nAs part of the implementation, I created a module to handle runtime\nconfiguration because I did not want to hardcode my personal feed URL in\na repo that will be public.\n\n[^1]: https://www.rssboard.org/rss-profile#namespace-elements-atom-link","shortMessageHtmlLink":"Add <atom:link> element to provide feed's URL"}},{"before":null,"after":"785616b4e826865f9a1da22952df37ee24d43d2d","ref":"refs/heads/atom-link","pushedAt":"2023-11-23T03:46:31.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"atom:link","shortMessageHtmlLink":"atom:link"}},{"before":"a10f392302446dada86d69691f88eafc7f8cf455","after":"9d621fb8d4fe24ddf6b2bf0fb99457d357950774","ref":"refs/heads/main","pushedAt":"2023-11-23T03:32:09.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Generate valid RSS\n\nThe output RSS now passes the W3C Feed Validation Service[^1] with no\nerrors and only one warning.\n\n[^1]: https://validator.w3.org/feed/","shortMessageHtmlLink":"Generate valid RSS"}},{"before":"9de70c6b2f0fdedd043b8e9d574626ef59e6c312","after":"a10f392302446dada86d69691f88eafc7f8cf455","ref":"refs/heads/main","pushedAt":"2023-11-20T00:36:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Construct XML using ElementTree module\n\nI have replaced the brittle f-string-based RSS generation with a module\ndesigned to work with XML. It is a little less readable, but it should\navoid problems related to character escaping and make changes to the\nformat easier.","shortMessageHtmlLink":"Construct XML using ElementTree module"}},{"before":"49c4c7adbe58afa175384f49420d2d42c6c7878a","after":"9de70c6b2f0fdedd043b8e9d574626ef59e6c312","ref":"refs/heads/main","pushedAt":"2023-11-20T00:20:27.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Pretty print RSS XML\n\nThe RSS output is currently constructed using f-strings, and I did not\nformat the markup nicely. I am using ElementTree to reformat the string\nI construct. It's not perfect, but it's *much* better than before. The\ndifferent quotes in the XML declaration are going to bother me\nimmensely.","shortMessageHtmlLink":"Pretty print RSS XML"}},{"before":"55ddb08e650f60d8631960dc5f800e31d21913da","after":"266a2e293fa34e8b477491f21a5fa364d4345f56","ref":"refs/heads/add-checks","pushedAt":"2023-11-19T23:05:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"add even more checks","shortMessageHtmlLink":"add even more checks"}},{"before":"2c67420b3a59a195096b76490e1fef6d1c47cfe7","after":"49c4c7adbe58afa175384f49420d2d42c6c7878a","ref":"refs/heads/main","pushedAt":"2023-11-19T23:05:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Convert to package that uses `setup.cfg`\n\nThis project will grow outside of its single script, so a better method\nof packaging is needed. Although `setup.cfg` isn't the preferred way to\ndefine build metadata, I am familiar with it. I will convert to a\n`pyproject.toml`-based build at a later date.\n\nAs part of this process, I converted to a src layout. This should make\neverything cleaner. I install `src/` in the Docker container after\ninitial dependency installation for quicker builds.","shortMessageHtmlLink":"Convert to package that uses setup.cfg"}},{"before":"ffba8c1e6cd7673e898562a9b11eb04659090273","after":"55ddb08e650f60d8631960dc5f800e31d21913da","ref":"refs/heads/add-checks","pushedAt":"2023-11-19T21:48:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"add preliminary setup","shortMessageHtmlLink":"add preliminary setup"}},{"before":"5abf7a030f54e5030c77a2065cef2a98d5683e4a","after":"ecdcd21c529ae15336b4c34aec209a466c4213df","ref":"refs/heads/chainguard","pushedAt":"2023-11-19T21:48:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"work around permissions issue for now","shortMessageHtmlLink":"work around permissions issue for now"}},{"before":"05a63303eaaf77c54f834465be8c0b3a87993d07","after":null,"ref":"refs/heads/nginx","pushedAt":"2023-11-19T21:48:26.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"}},{"before":"0f7a90fd9f35abdf7743a1b1ef78489beb3ac5f4","after":"2c67420b3a59a195096b76490e1fef6d1c47cfe7","ref":"refs/heads/main","pushedAt":"2023-11-19T21:48:22.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"Fix `mypy`, `pydocstyle`, and `pylint` errors\n\nAll checks in the repository now pass!","shortMessageHtmlLink":"Fix mypy, pydocstyle, and pylint errors"}},{"before":"eb89dd5112c947fb4920f21d7e2c64b6bee027fa","after":"5abf7a030f54e5030c77a2065cef2a98d5683e4a","ref":"refs/heads/chainguard","pushedAt":"2023-11-09T06:27:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"aphedges","name":"Alex Hedges","path":"/aphedges","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/14283972?s=80&v=4"},"commit":{"message":"work around permissions issue for now","shortMessageHtmlLink":"work around permissions issue for now"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEL9RXDQA","startCursor":null,"endCursor":null}},"title":"Activity ยท aphedges/rss-shim"}