{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":827590,"defaultBranch":"master","name":"beets","ownerLogin":"beetbox","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-08-09T23:17:20.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/15920313?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1726922117.0","currentOid":""},"activityList":{"items":[{"before":"9518b5ddccc3730b2d716faa4edf000e3e1549cf","after":"27453e3457c2df8925edae58b19b5d1858c77f7f","ref":"refs/heads/fix-lrclib-lyrics","pushedAt":"2024-09-21T12:48:17.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Add types to lyrics fetch methods","shortMessageHtmlLink":"Add types to lyrics fetch methods"}},{"before":"11fa6c7b3f9cb033ff3a2b25356fdf38bc5794a4","after":null,"ref":"refs/heads/configure-ruff","pushedAt":"2024-09-21T12:35:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"}},{"before":"9f29c364396f66b49e88fa2459af4d5fd81aafdb","after":"88d3f040e158703ae0c6499bb3b217a1e4c455a4","ref":"refs/heads/master","pushedAt":"2024-09-21T12:35:14.000Z","pushType":"pr_merge","commitsCount":10,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Migrate from isort/Black/Flake8 to Ruff for Code Formatting and Linting (#5424)\n\n#### Context\r\nI noticed one of recently merged PRs used `unittest` assertions that we\r\nare migrating from. Thus, I thought it would be a good idea to configure\r\nour linting to catch such issues in the future. Since I was here, I\r\nreplaced our multiple linting and formatting tools with a single tool,\r\nRuff, to simplify and speed up our development workflow.\r\n\r\n#### Summary\r\nThis PR migrates the codebase from using isort, Black and Flake8 to Ruff\r\nfor code formatting and linting. The changes include updates to the\r\nGitHub Actions workflow, pre-commit configuration, and documentation to\r\nreflect the new tooling.\r\n\r\n#### Changes\r\n1. **GitHub Actions Workflow**\r\n- Updated `.github/workflows/lint.yml` to use `poetry install\r\n--only=lint` and `poe lint --output-format=github`.\r\n\r\n2. **Pre-commit Configuration**\r\n - Replaced Black and Isort with Ruff in `.pre-commit-config.yaml`.\r\n\r\n3. **Documentation**\r\n- Updated `CONTRIBUTING.rst` to reflect the use of Ruff for formatting\r\nand linting.\r\n- Modified instructions for running tests and handling external API\r\nrequests.\r\n\r\n4. **Poetry Configuration**\r\n- Removed Black, Isort, Flake8, and related dependencies from\r\n`poetry.lock` and `pyproject.toml`.\r\n - Added Ruff as the new linter and formatter in `pyproject.toml`.\r\n\r\n5. **Setup Configuration**\r\n - Removed Flake8 configuration from `setup.cfg`.\r\n\r\n6. **Git blame**\r\n- Introduced `.git-blame-ignore-revs` file to keep git blame clean from\r\nformatting\r\nchanges. Configure your local `beets` repository to use this file by\r\nrunning:\r\n ```fish\r\n $ git config --local blame.ignoreRevsFile .git-blame-ignore-revs\r\n ```\r\n\r\n#### Benefits\r\n- **Performance**: Ruff is known for its speed and efficiency, which\r\nshould improve the developer experience.\r\n- **Consolidation**: Using a single tool for both formatting and linting\r\nsimplifies the development workflow.\r\n\r\n#### How to Test\r\n1. **Linting and Formatting**\r\n - Run `poe check-format` to check for formatting issues.\r\n - Run `poe format` to format the codebase.\r\n - Run `poe lint` to check for linting issues.\r\n\r\n2. **Pre-commit Hooks**\r\n- Ensure pre-commit hooks are working correctly by running `pre-commit\r\nrun --all-files`.\r\n\r\n3. **CI Pipeline**\r\n - Verify that the GitHub Actions workflow completes successfully.\r\n\r\n#### Notes\r\n- Contributions migrating existing tests from `unittest` to `pytest` are\r\nwelcome.\r\n- External API requests should be mocked using `requests_mock` and\r\ntested weekly in the integration test suite.\r\n\r\n#### References\r\n- [Ruff Documentation](https://docs.astral.sh/ruff/)\r\n- [Pre-commit Hooks](https://pre-commit.com/hooks.html)\r\n\r\n---\r\n\r\nThis PR aims to streamline our development process by adopting Ruff, a\r\nmodern and efficient tool for Python code formatting and linting.","shortMessageHtmlLink":"Migrate from isort/Black/Flake8 to Ruff for Code Formatting and Linti…"}},{"before":"8e8f77d1ea086744096c69da0fd20d2a227a78fc","after":"11fa6c7b3f9cb033ff3a2b25356fdf38bc5794a4","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-21T12:26:08.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Introduce integration_test marker and update testing docs","shortMessageHtmlLink":"Introduce integration_test marker and update testing docs"}},{"before":"66bbd67486c9962eff90721af4ceefe3adcfc387","after":"8e8f77d1ea086744096c69da0fd20d2a227a78fc","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-21T11:09:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Introduce integration_test marker and update testing docs","shortMessageHtmlLink":"Introduce integration_test marker and update testing docs"}},{"before":"cd360b6a99bef5f8b5e4ffce334e89b580bbd652","after":"9f29c364396f66b49e88fa2459af4d5fd81aafdb","ref":"refs/heads/master","pushedAt":"2024-09-21T07:38:07.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"JOJ0","name":"J0J0 Todos","path":"/JOJ0","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2733783?s=80&v=4"},"commit":{"message":"Fix missing keep_in_artist option in ftintitle plugin (introduced in #5356) (#5433)","shortMessageHtmlLink":"Fix missing keep_in_artist option in ftintitle plugin (introduced in #…"}},{"before":"796c9addfb66ec98408ad022aeb2dc48b12e4788","after":"cd360b6a99bef5f8b5e4ffce334e89b580bbd652","ref":"refs/heads/master","pushedAt":"2024-09-20T21:27:37.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"bal-e","name":"arya dradjica","path":"/bal-e","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/131501786?s=80&v=4"},"commit":{"message":"[beets/library] Simplify directory logic","shortMessageHtmlLink":"[beets/library] Simplify directory logic"}},{"before":"d7c656bca61da5853182d106df7a04991f971c76","after":"66bbd67486c9962eff90721af4ceefe3adcfc387","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-20T14:50:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Update testing documentation","shortMessageHtmlLink":"Update testing documentation"}},{"before":"9b6b1e983ae3a119f8e8c2968b92e9d93d5c70e3","after":"d7c656bca61da5853182d106df7a04991f971c76","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-20T14:46:02.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Update testing documentation","shortMessageHtmlLink":"Update testing documentation"}},{"before":"4d481d783b0b504eed29ebbb38b3a660d7a134bb","after":"9518b5ddccc3730b2d716faa4edf000e3e1549cf","ref":"refs/heads/fix-lrclib-lyrics","pushedAt":"2024-09-20T12:56:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Add types to lyrics fetch methods","shortMessageHtmlLink":"Add types to lyrics fetch methods"}},{"before":"1ff3ff2309f91e0782a47d621017c53656e2accc","after":"4d481d783b0b504eed29ebbb38b3a660d7a134bb","ref":"refs/heads/fix-lrclib-lyrics","pushedAt":"2024-09-20T11:17:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Add missing types to BackendType","shortMessageHtmlLink":"Add missing types to BackendType"}},{"before":"4d481d783b0b504eed29ebbb38b3a660d7a134bb","after":"1ff3ff2309f91e0782a47d621017c53656e2accc","ref":"refs/heads/fix-lrclib-lyrics","pushedAt":"2024-09-20T11:11:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Accept item in Backend.fetch method\n\nLet backends to pick the attributes they need: for example, `album` and\n`duration` is only relevant for the LRCLib backend.","shortMessageHtmlLink":"Accept item in Backend.fetch method"}},{"before":"3eb04bab767f101613fb0e6b305f412bbc48d32c","after":"4d481d783b0b504eed29ebbb38b3a660d7a134bb","ref":"refs/heads/fix-lrclib-lyrics","pushedAt":"2024-09-19T22:14:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Add missing types to BackendType","shortMessageHtmlLink":"Add missing types to BackendType"}},{"before":"d3c62968d53ed40907df7751ff2424077343c7f4","after":"796c9addfb66ec98408ad022aeb2dc48b12e4788","ref":"refs/heads/master","pushedAt":"2024-09-19T20:27:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Fixes TypeError in the Discogs plugin (#5415)\n\nHandles the case when discogs return `None` for format descriptions.\r\n\r\n---------\r\n\r\nCo-authored-by: Šarūnas Nejus ","shortMessageHtmlLink":"Fixes TypeError in the Discogs plugin (#5415)"}},{"before":"ef832640bf523d3b5fdb7de710a030c00eee9a7d","after":"9b6b1e983ae3a119f8e8c2968b92e9d93d5c70e3","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-19T04:03:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Update testing documentation","shortMessageHtmlLink":"Update testing documentation"}},{"before":"3cbecf25c4b80047e3618720c2b5b0af6974e546","after":"ef832640bf523d3b5fdb7de710a030c00eee9a7d","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-19T04:02:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"fixup! Add .git-blame-ignore-revs file to ignore specific commits in git blame","shortMessageHtmlLink":"fixup! Add .git-blame-ignore-revs file to ignore specific commits in …"}},{"before":"52507cffad7441f5cbdebdaca5d98b3eba5240d4","after":"3cbecf25c4b80047e3618720c2b5b0af6974e546","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-19T00:06:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Update testing documentation","shortMessageHtmlLink":"Update testing documentation"}},{"before":"622ed3c7191e20072234748f4584a2f42dc4c460","after":"3eb04bab767f101613fb0e6b305f412bbc48d32c","ref":"refs/heads/fix-lrclib-lyrics","pushedAt":"2024-09-19T00:06:15.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Use a single slug implementation\n\nTidy up 'Google.is_page_candidate' method and remove 'Google.sluggify'\nmethod which was a duplicate of 'slug'.\n\nSince 'GeniusFetchTest' only tested whether the artist name is cleaned\nup (the rest of the functionality is patched), remove it and move its\ntest cases to the 'test_slug' test.","shortMessageHtmlLink":"Use a single slug implementation"}},{"before":"292996f9822326394b865debac7f622e969a7b6b","after":"52507cffad7441f5cbdebdaca5d98b3eba5240d4","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-19T00:00:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Update testing documentation","shortMessageHtmlLink":"Update testing documentation"}},{"before":"976ef63e84b2c3ceef2746ace19dc0701648a265","after":"292996f9822326394b865debac7f622e969a7b6b","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T22:52:18.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Remove some lint exclusions and fix the issues","shortMessageHtmlLink":"Remove some lint exclusions and fix the issues"}},{"before":"d086754a24843cf15b7c3a11ec6b44bb877ba333","after":"976ef63e84b2c3ceef2746ace19dc0701648a265","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T22:21:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Try removing ntpath","shortMessageHtmlLink":"Try removing ntpath"}},{"before":"24fdae01431812d4f6ba4ca6677ad9da3728ea5c","after":"d086754a24843cf15b7c3a11ec6b44bb877ba333","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T22:16:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Try removing ntpath","shortMessageHtmlLink":"Try removing ntpath"}},{"before":"dd1b850b34e68bbd93118e319a920370f7779fb0","after":"24fdae01431812d4f6ba4ca6677ad9da3728ea5c","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T21:56:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Try removing ntpath","shortMessageHtmlLink":"Try removing ntpath"}},{"before":"5e0a3c15274608a43bed01e75e7737fec81db78f","after":"dd1b850b34e68bbd93118e319a920370f7779fb0","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T15:56:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Try removing ntpath","shortMessageHtmlLink":"Try removing ntpath"}},{"before":"0f19fb3545c12ee87f809a258e057493f22e19c5","after":"5e0a3c15274608a43bed01e75e7737fec81db78f","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T15:38:07.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Remove some lint exclusions and fix the issues","shortMessageHtmlLink":"Remove some lint exclusions and fix the issues"}},{"before":"ccf8700ad52cbff8d7efdb277b6997e9242780c2","after":"0f19fb3545c12ee87f809a258e057493f22e19c5","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T15:33:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Remove some lint exclusions and fix the issues","shortMessageHtmlLink":"Remove some lint exclusions and fix the issues"}},{"before":"d117633a3bf8c5f36cc56017f83d8fd576572ca2","after":"ccf8700ad52cbff8d7efdb277b6997e9242780c2","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T15:29:59.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Remove some lint exclusions and fix the issues","shortMessageHtmlLink":"Remove some lint exclusions and fix the issues"}},{"before":"22566b7c7e2d6c95c98b552385656170185a68d9","after":"d117633a3bf8c5f36cc56017f83d8fd576572ca2","ref":"refs/heads/configure-ruff","pushedAt":"2024-09-18T12:48:56.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Remove some lint exclusions and fix the issues","shortMessageHtmlLink":"Remove some lint exclusions and fix the issues"}},{"before":"860daa9e923465f9e1d0d98d92bec056be5f9bb7","after":null,"ref":"refs/heads/fix-most-types-in-util-init","pushedAt":"2024-09-18T12:40:16.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"}},{"before":"c13f0f2f6e86d71f19bd4a890c8a79196e6f3c73","after":"d3c62968d53ed40907df7751ff2424077343c7f4","ref":"refs/heads/master","pushedAt":"2024-09-18T12:40:11.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"snejus","name":"Šarūnas Nejus","path":"/snejus","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16212750?s=80&v=4"},"commit":{"message":"Fix most types in beets.util.__init__ (#5223)\n\nThis PR is Part 1 of the work #5215 that fixes typing issues in\r\n`beets.util.__init__` module.\r\n\r\nIt addresses simple-to-fix / most of the issues in this module.","shortMessageHtmlLink":"Fix most types in beets.util.__init__ (#5223)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yMVQxMjo0ODoxNy4wMDAwMDBazwAAAAS8tANq","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0yMVQxMjo0ODoxNy4wMDAwMDBazwAAAAS8tANq","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQxMjo0MDoxMS4wMDAwMDBazwAAAAS5q0-H"}},"title":"Activity · beetbox/beets"}