devboard 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- devboard-0.2.0/AI_POLICY.md +15 -0
- {devboard-0.1.0 → devboard-0.2.0}/CHANGELOG.md +15 -0
- {devboard-0.1.0 → devboard-0.2.0}/CONTRIBUTING.md +6 -16
- {devboard-0.1.0 → devboard-0.2.0}/LICENSE +1 -1
- {devboard-0.1.0 → devboard-0.2.0}/PKG-INFO +2 -3
- {devboard-0.1.0 → devboard-0.2.0}/README.md +1 -2
- {devboard-0.1.0 → devboard-0.2.0}/config/git-changelog.toml +1 -1
- {devboard-0.1.0 → devboard-0.2.0}/config/ruff.toml +8 -23
- devboard-0.2.0/config/ty.toml +6 -0
- {devboard-0.1.0 → devboard-0.2.0}/config/vscode/launch.json +1 -2
- {devboard-0.1.0 → devboard-0.2.0}/config/vscode/settings.json +1 -3
- devboard-0.2.0/config/zed/debug.json +44 -0
- devboard-0.2.0/config/zed/settings.json +43 -0
- devboard-0.2.0/config/zed/tasks.json +72 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/.overrides/main.html +5 -1
- {devboard-0.1.0 → devboard-0.2.0}/docs/.overrides/partials/comments.html +1 -1
- devboard-0.2.0/docs/css/apidocs.css +21 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/tutorial.md +21 -8
- {devboard-0.1.0 → devboard-0.2.0}/duties.py +72 -44
- {devboard-0.1.0 → devboard-0.2.0}/pyproject.toml +9 -14
- {devboard-0.1.0 → devboard-0.2.0}/scripts/gen_credits.py +32 -15
- {devboard-0.1.0 → devboard-0.2.0}/scripts/get_version.py +18 -0
- {devboard-0.1.0 → devboard-0.2.0}/scripts/make.py +34 -8
- devboard-0.2.0/src/devboard/__init__.py +49 -0
- devboard-0.2.0/src/devboard/__main__.py +32 -0
- devboard-0.2.0/src/devboard/_internal/__init__.py +17 -0
- devboard-0.2.0/src/devboard/_internal/app.py +320 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/board.py +63 -46
- devboard-0.2.0/src/devboard/_internal/cache.py +87 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/cli.py +18 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/datatable.py +18 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/debug.py +19 -1
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/default_board.py +27 -7
- devboard-0.2.0/src/devboard/_internal/modal.py +70 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/notifications.py +18 -0
- devboard-0.2.0/src/devboard/_internal/projects.py +269 -0
- devboard-0.2.0/tests/__init__.py +25 -0
- devboard-0.2.0/tests/conftest.py +19 -0
- {devboard-0.1.0 → devboard-0.2.0}/tests/test_api.py +23 -5
- {devboard-0.1.0 → devboard-0.2.0}/tests/test_cli.py +18 -0
- devboard-0.2.0/tests/test_modal.py +67 -0
- devboard-0.2.0/zensical.toml +192 -0
- devboard-0.1.0/config/mypy.ini +0 -5
- devboard-0.1.0/docs/.overrides/partials/path-item.html +0 -22
- devboard-0.1.0/docs/css/material.css +0 -4
- devboard-0.1.0/docs/css/mkdocstrings.css +0 -72
- devboard-0.1.0/mkdocs.yml +0 -177
- devboard-0.1.0/src/devboard/__init__.py +0 -31
- devboard-0.1.0/src/devboard/__main__.py +0 -14
- devboard-0.1.0/src/devboard/_internal/__init__.py +0 -0
- devboard-0.1.0/src/devboard/_internal/app.py +0 -152
- devboard-0.1.0/src/devboard/_internal/modal.py +0 -45
- devboard-0.1.0/src/devboard/_internal/projects.py +0 -203
- devboard-0.1.0/tests/__init__.py +0 -7
- devboard-0.1.0/tests/conftest.py +0 -1
- {devboard-0.1.0 → devboard-0.2.0}/CODE_OF_CONDUCT.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/config/coverage.ini +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/config/pytest.ini +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/config/vscode/tasks.json +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/changelog.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/code_of_conduct.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/contributing.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/credits.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/commit.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/commit_pull.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/commit_pull_push.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/commit_pull_push_release.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/notify.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/pull.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/push.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/columns/release.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/repositories.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/examples/screenshot.py +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/index.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/js/feedback.js +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/license.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/docs/reference/api.md +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/scripts/make +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/_internal/devboard.tcss +0 -0
- {devboard-0.1.0 → devboard-0.2.0}/src/devboard/py.typed +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# AI Contribution Policy
|
|
2
|
+
|
|
3
|
+
We accept AI-*assisted* contributions, both for code and documentation, with the following expectations:
|
|
4
|
+
|
|
5
|
+
- AI-assisted contributions must disclaim their use of AI.
|
|
6
|
+
- Contributors must fully understand the proposed changes and be able to explain why they are the correct approach.
|
|
7
|
+
- Issues must be created before creating pull requests (unless there is already a relevant issue).
|
|
8
|
+
- Issue and pull request templates must be followed.
|
|
9
|
+
- Comments (including bodies) in issues and pull requests must be written by humans. If you use LLMs to translate from one language to another, please include your original comment and the translated one.
|
|
10
|
+
- Git commits must be authored by humans, not AI/bot accounts or identities.
|
|
11
|
+
- Git commit messages must be written by humans, in English. If you cannot write English, please state so in the pull request body and we will write the commit messages ourselves.
|
|
12
|
+
|
|
13
|
+
Failure to comply with any of these requirements will result in issues or pull requests being closed immediately without comment. Repeated violations of this policy will result in a ban of the offending accounts/identities from contributing to this project and any related project from the same author/organization.
|
|
14
|
+
|
|
15
|
+
We do not accept AI-generated content in community spaces we maintain or moderate, such as GitHub discussions or Matrix rooms.
|
|
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
<!-- insertion marker -->
|
|
9
|
+
## [0.2.0](https://github.com/pawamoy/devboard/releases/tag/0.2.0) - 2026-09-10
|
|
10
|
+
|
|
11
|
+
<small>[Compare with 0.1.0](https://github.com/pawamoy/devboard/compare/0.1.0...0.2.0)</small>
|
|
12
|
+
|
|
13
|
+
The project is update to support latest version of Textual.
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Prevent event propagation from modal ([e61eadd](https://github.com/pawamoy/devboard/commit/e61eaddaca58f91c02150c2f11465fcb82d576d1) by Timothée Mazzucotelli).
|
|
18
|
+
- Fix script entrypoint ([acb054d](https://github.com/pawamoy/devboard/commit/acb054d11395861c34a60e2a60711379a3b48019) by Timothée Mazzucotelli).
|
|
19
|
+
|
|
20
|
+
### Performance Improvements
|
|
21
|
+
|
|
22
|
+
- Start faster (cache), scan faster ([9a740e5](https://github.com/pawamoy/devboard/commit/9a740e55aff8add3016b438d1b0912376a5552aa) by Timothée Mazzucotelli).
|
|
23
|
+
|
|
9
24
|
## [0.1.0](https://github.com/pawamoy/devboard/releases/tag/0.1.0) - 2025-11-08
|
|
10
25
|
|
|
11
26
|
<small>[Compare with first commit](https://github.com/pawamoy/devboard/compare/286120e957168a9162d5a8dc19c7dd72fb0a6d65...0.1.0)</small>
|
|
@@ -1,28 +1,19 @@
|
|
|
1
1
|
# Contributing
|
|
2
2
|
|
|
3
|
-
Contributions are welcome, and they are greatly appreciated
|
|
3
|
+
Contributions are welcome, and they are greatly appreciated. Every little bit helps, and credit will always be given.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Please always create an issue before working on a new feature or a bug fix, so that we can discuss the implementation and make sure that your work will be merged.**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Environment setup
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Install [uv](https://github.com/astral-sh/uv) and [direnv](https://direnv.net/), fork and clone the repository, then:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
cd devboard
|
|
13
|
+
direnv allow
|
|
13
14
|
make setup
|
|
14
15
|
```
|
|
15
16
|
|
|
16
|
-
> NOTE: If it fails for some reason, you'll need to install [uv](https://github.com/astral-sh/uv) manually.
|
|
17
|
-
>
|
|
18
|
-
> You can install it with:
|
|
19
|
-
>
|
|
20
|
-
> ```bash
|
|
21
|
-
> curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
22
|
-
> ```
|
|
23
|
-
>
|
|
24
|
-
> Now you can try running `make setup` again, or simply `uv sync`.
|
|
25
|
-
|
|
26
17
|
You now have the dependencies installed.
|
|
27
18
|
|
|
28
19
|
You can run the application with `make run devboard [ARGS...]`.
|
|
@@ -31,8 +22,7 @@ Run `make help` to see all the available actions!
|
|
|
31
22
|
|
|
32
23
|
## Tasks
|
|
33
24
|
|
|
34
|
-
The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed,
|
|
35
|
-
while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
|
|
25
|
+
The entry-point to run commands and tasks is the `make` Python script, located in the `scripts` directory. Try running `make` to show the available commands and tasks. The *commands* do not need the Python dependencies to be installed, while the *tasks* do. The cross-platform tasks are written in Python, thanks to [duty](https://github.com/pawamoy/duty).
|
|
36
26
|
|
|
37
27
|
If you work in VSCode, we provide [an action to configure VSCode](https://pawamoy.github.io/copier-uv/work/#vscode-setup) for the project.
|
|
38
28
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ISC License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2023, Timothée Mazzucotelli
|
|
3
|
+
Copyright (c) 2023, Timothée Mazzucotelli and contributors
|
|
4
4
|
|
|
5
5
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
6
|
purpose with or without fee is hereby granted, provided that the above
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devboard
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: A development dashboard for your projects.
|
|
5
5
|
Author-Email: =?utf-8?q?Timoth=C3=A9e_Mazzucotelli?= <dev@pawamoy.fr>
|
|
6
6
|
License-Expression: ISC
|
|
@@ -37,7 +37,7 @@ Description-Content-Type: text/markdown
|
|
|
37
37
|
# Devboard
|
|
38
38
|
|
|
39
39
|
[](https://github.com/pawamoy/devboard/actions?query=workflow%3Aci)
|
|
40
|
-
[](https://pawamoy.github.io/devboard/)
|
|
41
41
|
[](https://pypi.org/project/devboard/)
|
|
42
42
|
[](https://app.gitter.im/#/room/#devboard:gitter.im)
|
|
43
43
|
|
|
@@ -59,4 +59,3 @@ uv tool install devboard
|
|
|
59
59
|
|
|
60
60
|
<!-- sponsors-start -->
|
|
61
61
|
<!-- sponsors-end -->
|
|
62
|
-
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Devboard
|
|
2
2
|
|
|
3
3
|
[](https://github.com/pawamoy/devboard/actions?query=workflow%3Aci)
|
|
4
|
-
[](https://pawamoy.github.io/devboard/)
|
|
5
5
|
[](https://pypi.org/project/devboard/)
|
|
6
6
|
[](https://app.gitter.im/#/room/#devboard:gitter.im)
|
|
7
7
|
|
|
@@ -23,4 +23,3 @@ uv tool install devboard
|
|
|
23
23
|
|
|
24
24
|
<!-- sponsors-start -->
|
|
25
25
|
<!-- sponsors-end -->
|
|
26
|
-
|
|
@@ -1,34 +1,14 @@
|
|
|
1
|
-
target-version = "
|
|
1
|
+
target-version = "py310"
|
|
2
2
|
line-length = 120
|
|
3
|
+
output-format = "concise"
|
|
3
4
|
|
|
4
5
|
[lint]
|
|
5
6
|
exclude = [
|
|
6
7
|
"tests/fixtures/*.py",
|
|
7
8
|
]
|
|
8
|
-
select = [
|
|
9
|
-
"A", "ANN", "ARG",
|
|
10
|
-
"B", "BLE",
|
|
11
|
-
"C", "C4",
|
|
12
|
-
"COM",
|
|
13
|
-
"D", "DTZ",
|
|
14
|
-
"E", "ERA", "EXE",
|
|
15
|
-
"F", "FBT",
|
|
16
|
-
"G",
|
|
17
|
-
"I", "ICN", "INP", "ISC",
|
|
18
|
-
"N",
|
|
19
|
-
"PGH", "PIE", "PL", "PLC", "PLE", "PLR", "PLW", "PT", "PYI",
|
|
20
|
-
"Q",
|
|
21
|
-
"RUF", "RSE", "RET",
|
|
22
|
-
"S", "SIM", "SLF",
|
|
23
|
-
"T", "T10", "T20", "TCH", "TID", "TRY",
|
|
24
|
-
"UP",
|
|
25
|
-
"W",
|
|
26
|
-
"YTT",
|
|
27
|
-
]
|
|
9
|
+
select = ["ALL"]
|
|
28
10
|
ignore = [
|
|
29
11
|
"A001", # Variable is shadowing a Python builtin
|
|
30
|
-
"ANN101", # Missing type annotation for self
|
|
31
|
-
"ANN102", # Missing type annotation for cls
|
|
32
12
|
"ANN204", # Missing return type annotation for special method __str__
|
|
33
13
|
"ANN401", # Dynamically typed expressions (typing.Any) are disallowed
|
|
34
14
|
"ARG005", # Unused lambda argument
|
|
@@ -36,13 +16,18 @@ ignore = [
|
|
|
36
16
|
"D105", # Missing docstring in magic method
|
|
37
17
|
"D417", # Missing argument description in the docstring
|
|
38
18
|
"E501", # Line too long
|
|
19
|
+
"EM101", # String literal when raising exception
|
|
20
|
+
"EM102", # f-string when raising exception
|
|
39
21
|
"ERA001", # Commented out code
|
|
22
|
+
"FIX", # TODO, FIXME, etc.
|
|
40
23
|
"G004", # Logging statement uses f-string
|
|
41
24
|
"PLR0911", # Too many return statements
|
|
42
25
|
"PLR0912", # Too many branches
|
|
43
26
|
"PLR0913", # Too many arguments to function call
|
|
44
27
|
"PLR0915", # Too many statements
|
|
45
28
|
"SLF001", # Private member accessed
|
|
29
|
+
"TD002", # Missing author in TODO
|
|
30
|
+
"TD003", # Missing issue link for TODO
|
|
46
31
|
"TRY003", # Avoid specifying long messages outside the exception class
|
|
47
32
|
]
|
|
48
33
|
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
"**/.venvs*/**": true,
|
|
5
5
|
"**/venv*/**": true
|
|
6
6
|
},
|
|
7
|
-
"mypy-type-checker.args": [
|
|
8
|
-
"--config-file=config/mypy.ini"
|
|
9
|
-
],
|
|
10
7
|
"python.testing.unittestEnabled": false,
|
|
11
8
|
"python.testing.pytestEnabled": true,
|
|
12
9
|
"python.testing.pytestArgs": [
|
|
@@ -19,6 +16,7 @@
|
|
|
19
16
|
"ruff.lint.args": [
|
|
20
17
|
"--config=config/ruff.toml"
|
|
21
18
|
],
|
|
19
|
+
"ty.configurationFile": "config/ty.toml",
|
|
22
20
|
"yaml.schemas": {
|
|
23
21
|
"https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
|
|
24
22
|
},
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Project-local debug tasks
|
|
2
|
+
//
|
|
3
|
+
// For more documentation on how to configure debug tasks,
|
|
4
|
+
// see: https://zed.dev/docs/debugger
|
|
5
|
+
[
|
|
6
|
+
{
|
|
7
|
+
"label": "python (current file)",
|
|
8
|
+
"adapter": "Debugpy",
|
|
9
|
+
"request": "launch",
|
|
10
|
+
"program": "$ZED_FILE",
|
|
11
|
+
"justMyCode": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"label": "run",
|
|
15
|
+
"adapter": "Debugpy",
|
|
16
|
+
"request": "launch",
|
|
17
|
+
"module": "devboard",
|
|
18
|
+
"justMyCode": false
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"label": "docs",
|
|
22
|
+
"adapter": "Debugpy",
|
|
23
|
+
"request": "launch",
|
|
24
|
+
"module": "zensical",
|
|
25
|
+
"args": [
|
|
26
|
+
"serve"
|
|
27
|
+
],
|
|
28
|
+
"justMyCode": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"label": "test",
|
|
32
|
+
"adapter": "Debugpy",
|
|
33
|
+
"request": "launch",
|
|
34
|
+
"module": "pytest",
|
|
35
|
+
"args": [
|
|
36
|
+
"-c=config/pytest.ini",
|
|
37
|
+
"-vvv",
|
|
38
|
+
"--no-cov",
|
|
39
|
+
"--dist=no",
|
|
40
|
+
"tests"
|
|
41
|
+
],
|
|
42
|
+
"justMyCode": false
|
|
43
|
+
}
|
|
44
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Zed settings
|
|
2
|
+
//
|
|
3
|
+
// For information on how to configure Zed, see the Zed
|
|
4
|
+
// documentation: https://zed.dev/docs/configuring-zed
|
|
5
|
+
//
|
|
6
|
+
// To see all of Zed's default settings without changing your
|
|
7
|
+
// custom settings, run `zed: open default settings` from the
|
|
8
|
+
// command palette (cmd-shift-p / ctrl-shift-p)
|
|
9
|
+
{
|
|
10
|
+
"languages": {
|
|
11
|
+
"YAML": {
|
|
12
|
+
"auto_indent_on_paste": false,
|
|
13
|
+
"auto_indent": "preserve_indent",
|
|
14
|
+
"format_on_save": "off"
|
|
15
|
+
},
|
|
16
|
+
"Python": {
|
|
17
|
+
"language_servers": ["ty", "ruff"],
|
|
18
|
+
"code_actions_on_format": {
|
|
19
|
+
"source.organizeImports.ruff": true
|
|
20
|
+
},
|
|
21
|
+
"formatter": {
|
|
22
|
+
"language_server": {
|
|
23
|
+
"name": "ruff"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"lsp": {
|
|
29
|
+
"ty": {
|
|
30
|
+
"settings": {
|
|
31
|
+
"configurationFile": "config/ty.toml"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"ruff": {
|
|
35
|
+
"initialization_options": {
|
|
36
|
+
"settings": {
|
|
37
|
+
"configurationPreference": "filesystemFirst",
|
|
38
|
+
"configuration": "config/ruff.toml"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"label": "changelog",
|
|
4
|
+
"command": "scripts/make",
|
|
5
|
+
"args": ["changelog"]
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"label": "check",
|
|
9
|
+
"command": "scripts/make",
|
|
10
|
+
"args": ["check"]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"label": "check-quality",
|
|
14
|
+
"command": "scripts/make",
|
|
15
|
+
"args": ["check-quality"]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"label": "check-types",
|
|
19
|
+
"command": "scripts/make",
|
|
20
|
+
"args": ["check-types"]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"label": "check-docs",
|
|
24
|
+
"command": "scripts/make",
|
|
25
|
+
"args": ["check-docs"]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"label": "check-api",
|
|
29
|
+
"command": "scripts/make",
|
|
30
|
+
"args": ["check-api"]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"label": "clean",
|
|
34
|
+
"command": "scripts/make",
|
|
35
|
+
"args": ["clean"]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"label": "docs",
|
|
39
|
+
"command": "scripts/make",
|
|
40
|
+
"args": ["docs"]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"label": "docs-deploy",
|
|
44
|
+
"command": "scripts/make",
|
|
45
|
+
"args": ["docs-deploy"]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"label": "format",
|
|
49
|
+
"command": "scripts/make",
|
|
50
|
+
"args": ["format"]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"label": "release",
|
|
54
|
+
"command": "scripts/make",
|
|
55
|
+
"args": ["release"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"label": "setup",
|
|
59
|
+
"command": "scripts/make",
|
|
60
|
+
"args": ["setup"]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"label": "test",
|
|
64
|
+
"command": "scripts/make",
|
|
65
|
+
"args": ["test", "coverage"]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"label": "vscode",
|
|
69
|
+
"command": "scripts/make",
|
|
70
|
+
"args": ["vscode"]
|
|
71
|
+
}
|
|
72
|
+
]
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{% extends "base.html" %}
|
|
2
2
|
|
|
3
3
|
{% block announce %}
|
|
4
|
-
|
|
4
|
+
<strong>Fund this project</strong> through
|
|
5
|
+
<a href="https://github.com/sponsors/pawamoy"><strong>sponsorship</strong></a>
|
|
6
|
+
<span class="twemoji heart pulse">
|
|
7
|
+
{% include ".icons/octicons/heart-fill-16.svg" %}
|
|
8
|
+
</span> —
|
|
5
9
|
Follow
|
|
6
10
|
<strong>@pawamoy</strong> on
|
|
7
11
|
<a rel="me" href="https://fosstodon.org/@pawamoy">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- Giscus -->
|
|
2
|
-
<!-- https://
|
|
2
|
+
<!-- https://zensical.org/docs/setup/comment-system/#giscus-integration -->
|
|
3
3
|
<div id="feedback" style="display: none;">
|
|
4
4
|
<h2 id="__comments">Feedback</h2>
|
|
5
5
|
<script src="https://giscus.app/client.js"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* Mark external links as such. */
|
|
2
|
+
a.external::after,
|
|
3
|
+
a.autorefs-external::after {
|
|
4
|
+
/* https://primer.style/octicons/arrow-up-right-24 */
|
|
5
|
+
mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.25 15.5a.75.75 0 00.75-.75v-9a.75.75 0 00-.75-.75h-9a.75.75 0 000 1.5h7.19L6.22 16.72a.75.75 0 101.06 1.06L17.5 7.56v7.19c0 .414.336.75.75.75z"></path></svg>');
|
|
6
|
+
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.25 15.5a.75.75 0 00.75-.75v-9a.75.75 0 00-.75-.75h-9a.75.75 0 000 1.5h7.19L6.22 16.72a.75.75 0 101.06 1.06L17.5 7.56v7.19c0 .414.336.75.75.75z"></path></svg>');
|
|
7
|
+
content: ' ';
|
|
8
|
+
|
|
9
|
+
display: inline-block;
|
|
10
|
+
vertical-align: middle;
|
|
11
|
+
position: relative;
|
|
12
|
+
|
|
13
|
+
height: 1em;
|
|
14
|
+
width: 1em;
|
|
15
|
+
background-color: currentColor;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
a.external:hover::after,
|
|
19
|
+
a.autorefs-external:hover::after {
|
|
20
|
+
background-color: var(--md-accent-fg-color);
|
|
21
|
+
}
|
|
@@ -67,6 +67,16 @@ and change the board value to "tutorial":
|
|
|
67
67
|
board = "tutorial"
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
The configuration file supports one more setting: `workers`,
|
|
71
|
+
the number of projects Devboard scans concurrently (4 by default).
|
|
72
|
+
Raise it if your repositories live on a fast SSD,
|
|
73
|
+
lower it if they live on a spinning disk and cold starts feel slow:
|
|
74
|
+
|
|
75
|
+
```toml
|
|
76
|
+
board = "tutorial"
|
|
77
|
+
workers = 4
|
|
78
|
+
```
|
|
79
|
+
|
|
70
80
|
Now open the `tutorial.py` file in your favorite editor,
|
|
71
81
|
and you'll be ready to start building.
|
|
72
82
|
|
|
@@ -150,7 +160,7 @@ Of course, it doesn't know what to do with these projects.
|
|
|
150
160
|
We will tell it how to scan a project to add rows to our table
|
|
151
161
|
by implementing the `populate_rows` method.
|
|
152
162
|
|
|
153
|
-
```python hl_lines="7 15-
|
|
163
|
+
```python hl_lines="7 15-18"
|
|
154
164
|
from pathlib import Path
|
|
155
165
|
from devboard import Column, Project
|
|
156
166
|
|
|
@@ -167,7 +177,8 @@ class ToCommit(Column):
|
|
|
167
177
|
|
|
168
178
|
@staticmethod
|
|
169
179
|
def populate_rows(project):
|
|
170
|
-
|
|
180
|
+
status_line = project.status_line
|
|
181
|
+
return [(project, status_line)] if status_line else []
|
|
171
182
|
|
|
172
183
|
|
|
173
184
|
columns = [
|
|
@@ -180,8 +191,8 @@ We declare the table headers with the `HEADERS` class variable.
|
|
|
180
191
|
Then we build and return rows in the `populate_rows` method.
|
|
181
192
|
The number of element in each row must be equal to the number of headers.
|
|
182
193
|
Fortunately, the status line functionality is built into [`devboard.Project`][],
|
|
183
|
-
so we can use it directly.
|
|
184
|
-
|
|
194
|
+
so we can use it directly. An empty status line means the project is clean
|
|
195
|
+
(no current modifications), in which case we don't add any row.
|
|
185
196
|
|
|
186
197
|
You may have noticed that the method is a `staticmethod`.
|
|
187
198
|
This is required by Devboard for technical reasons that are beyond this tutorial's scope.
|
|
@@ -199,7 +210,7 @@ and the output of `git diff` when hitting ++d++.
|
|
|
199
210
|
We do that by declaring the `BINDINGS` class variable,
|
|
200
211
|
and by implementing the `apply` method:
|
|
201
212
|
|
|
202
|
-
```python hl_lines="2 8-12
|
|
213
|
+
```python hl_lines="2 8-12 26-32"
|
|
203
214
|
from pathlib import Path
|
|
204
215
|
from devboard import Column, Project, Row
|
|
205
216
|
|
|
@@ -221,14 +232,16 @@ class ToCommit(Column):
|
|
|
221
232
|
|
|
222
233
|
@staticmethod
|
|
223
234
|
def populate_rows(project):
|
|
224
|
-
|
|
235
|
+
status_line = project.status_line
|
|
236
|
+
return [(project, status_line)] if status_line else []
|
|
225
237
|
|
|
226
238
|
def apply(self, action, row):
|
|
227
239
|
if action == "status":
|
|
228
240
|
self.modal(text=row.project.repo.git(c="color.status=always").status())
|
|
229
|
-
|
|
241
|
+
elif action == "diff":
|
|
230
242
|
self.modal(text=row.project.repo.git(c="color.ui=always").diff())
|
|
231
|
-
|
|
243
|
+
else:
|
|
244
|
+
raise ValueError(f"Unknown action '{action}'")
|
|
232
245
|
|
|
233
246
|
|
|
234
247
|
columns = [
|