django-slack-tools 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.
Files changed (147) hide show
  1. django_slack_tools-0.2.0/.devcontainer/devcontainer.json +36 -0
  2. django_slack_tools-0.2.0/.devcontainer/onCreateCommand.sh +10 -0
  3. django_slack_tools-0.2.0/.editorconfig +27 -0
  4. django_slack_tools-0.2.0/.gitattributes +124 -0
  5. django_slack_tools-0.2.0/.github/dependabot.yaml +24 -0
  6. django_slack_tools-0.2.0/.github/workflows/ci.yaml +97 -0
  7. django_slack_tools-0.2.0/.github/workflows/docs.yaml +50 -0
  8. django_slack_tools-0.2.0/.github/workflows/release.yaml +58 -0
  9. django_slack_tools-0.2.0/.gitignore +378 -0
  10. django_slack_tools-0.2.0/.pre-commit-config.yaml +56 -0
  11. django_slack_tools-0.2.0/.python-version +1 -0
  12. django_slack_tools-0.2.0/.vscode/extensions.json +18 -0
  13. django_slack_tools-0.2.0/.vscode/launch.json +18 -0
  14. django_slack_tools-0.2.0/.vscode/settings.json +47 -0
  15. django_slack_tools-0.2.0/CONTRIBUTING.md +48 -0
  16. django_slack_tools-0.2.0/Makefile +92 -0
  17. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/PKG-INFO +39 -21
  18. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/README.md +10 -4
  19. django_slack_tools-0.2.0/django_slack_tools/__init__.py +1 -0
  20. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/app_settings.py +29 -4
  21. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/admin/message.py +1 -1
  22. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/apps.py +9 -0
  23. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/backends/__init__.py +2 -2
  24. django_slack_tools-0.2.0/django_slack_tools/slack_messages/backends/base.py +229 -0
  25. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/backends/dummy.py +8 -9
  26. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/backends/slack.py +29 -91
  27. django_slack_tools-0.2.0/django_slack_tools/slack_messages/message.py +110 -0
  28. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/migrations/0001_initial.py +0 -2
  29. django_slack_tools-0.2.0/django_slack_tools/slack_messages/migrations/0002_default_policy.py +35 -0
  30. django_slack_tools-0.2.0/django_slack_tools/slack_messages/migrations/0003_default_recipient.py +35 -0
  31. django_slack_tools-0.2.0/django_slack_tools/slack_messages/migrations/0004_slackmessagingpolicy_template_type.py +23 -0
  32. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/models/messaging_policy.py +29 -3
  33. django_slack_tools-0.2.0/django_slack_tools/slack_messages/tasks.py +112 -0
  34. django_slack_tools-0.2.0/django_slack_tools/utils/slack/django.py +29 -0
  35. django_slack_tools-0.2.0/django_slack_tools/utils/slack/message.py +93 -0
  36. django_slack_tools-0.2.0/django_slack_tools/utils/template/__init__.py +5 -0
  37. django_slack_tools-0.2.0/django_slack_tools/utils/template/base.py +17 -0
  38. django_slack_tools-0.2.0/django_slack_tools/utils/template/dict.py +52 -0
  39. django_slack_tools-0.2.0/django_slack_tools/utils/template/django.py +140 -0
  40. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/views.py +1 -1
  41. django_slack_tools-0.2.0/docs/api-references/slack-messages/celery.md +3 -0
  42. django_slack_tools-0.2.0/docs/api-references/slack-messages/messaging-backends.md +3 -0
  43. django_slack_tools-0.2.0/docs/api-references/slack-messages/models.md +3 -0
  44. django_slack_tools-0.2.0/docs/api-references/slack-messages/sending-messages.md +3 -0
  45. django_slack_tools-0.2.0/docs/index.md +33 -0
  46. django_slack_tools-0.2.0/docs/tutorials/quick-start.md +51 -0
  47. django_slack_tools-0.2.0/examples/todo/.python-version +1 -0
  48. django_slack_tools-0.2.0/examples/todo/Makefile +61 -0
  49. django_slack_tools-0.2.0/examples/todo/README.md +69 -0
  50. django_slack_tools-0.2.0/examples/todo/docker-compose.yaml +17 -0
  51. django_slack_tools-0.2.0/examples/todo/manage.py +23 -0
  52. django_slack_tools-0.2.0/examples/todo/pyproject.toml +22 -0
  53. django_slack_tools-0.2.0/examples/todo/todo/__init__.py +3 -0
  54. django_slack_tools-0.2.0/examples/todo/todo/celery.py +29 -0
  55. django_slack_tools-0.2.0/examples/todo/todo/settings.py +150 -0
  56. django_slack_tools-0.2.0/examples/todo/todo/slack_app.py +8 -0
  57. django_slack_tools-0.2.0/examples/todo/todo/urls.py +10 -0
  58. django_slack_tools-0.2.0/examples/todo/todo/wsgi.py +7 -0
  59. django_slack_tools-0.2.0/examples/todo/todo_app/__init__.py +0 -0
  60. django_slack_tools-0.2.0/examples/todo/todo_app/admin.py +0 -0
  61. django_slack_tools-0.2.0/examples/todo/todo_app/apps.py +9 -0
  62. django_slack_tools-0.2.0/examples/todo/todo_app/migrations/0001_initial.py +67 -0
  63. django_slack_tools-0.2.0/examples/todo/todo_app/migrations/__init__.py +0 -0
  64. django_slack_tools-0.2.0/examples/todo/todo_app/models.py +34 -0
  65. django_slack_tools-0.2.0/examples/todo/todo_app/services.py +18 -0
  66. django_slack_tools-0.2.0/examples/todo/todo_app/signals.py +32 -0
  67. django_slack_tools-0.2.0/examples/todo/todo_app/slack_listeners.py +217 -0
  68. django_slack_tools-0.2.0/examples/todo/uv.lock +468 -0
  69. django_slack_tools-0.2.0/manage.py +1 -0
  70. django_slack_tools-0.2.0/mkdocs.yaml +35 -0
  71. django_slack_tools-0.2.0/pyproject.toml +109 -0
  72. django_slack_tools-0.2.0/testproj/__init__.py +0 -0
  73. django_slack_tools-0.2.0/testproj/config/__init__.py +0 -0
  74. django_slack_tools-0.2.0/testproj/config/settings.py +182 -0
  75. django_slack_tools-0.2.0/testproj/config/slack_app.py +8 -0
  76. django_slack_tools-0.2.0/testproj/config/urls.py +11 -0
  77. django_slack_tools-0.2.0/testproj/config/wsgi.py +15 -0
  78. django_slack_tools-0.2.0/testproj/manage.py +23 -0
  79. django_slack_tools-0.2.0/testproj/templates/001-template.xml +43 -0
  80. django_slack_tools-0.2.0/testproj/templates/greet.xml +7 -0
  81. django_slack_tools-0.2.0/tests/__init__.py +0 -0
  82. django_slack_tools-0.2.0/tests/_factories.py +28 -0
  83. django_slack_tools-0.2.0/tests/_helpers.py +103 -0
  84. django_slack_tools-0.2.0/tests/conftest.py +24 -0
  85. django_slack_tools-0.2.0/tests/slack_messages/__init__.py +0 -0
  86. django_slack_tools-0.2.0/tests/slack_messages/_factories.py +52 -0
  87. django_slack_tools-0.2.0/tests/slack_messages/admin/__init__.py +0 -0
  88. django_slack_tools-0.2.0/tests/slack_messages/admin/test_mention.py +175 -0
  89. django_slack_tools-0.2.0/tests/slack_messages/admin/test_message.py +120 -0
  90. django_slack_tools-0.2.0/tests/slack_messages/admin/test_message_recipient.py +121 -0
  91. django_slack_tools-0.2.0/tests/slack_messages/admin/test_messaging_policy.py +41 -0
  92. django_slack_tools-0.2.0/tests/slack_messages/backends/__init__.py +0 -0
  93. django_slack_tools-0.2.0/tests/slack_messages/backends/test_base.py +3 -0
  94. django_slack_tools-0.2.0/tests/slack_messages/backends/test_dummy.py +19 -0
  95. django_slack_tools-0.2.0/tests/slack_messages/backends/test_logging.py +19 -0
  96. django_slack_tools-0.2.0/tests/slack_messages/backends/test_slack.py +190 -0
  97. django_slack_tools-0.2.0/tests/slack_messages/models/__init__.py +0 -0
  98. django_slack_tools-0.2.0/tests/slack_messages/models/_factories.py +110 -0
  99. django_slack_tools-0.2.0/tests/slack_messages/models/test_mention.py +59 -0
  100. django_slack_tools-0.2.0/tests/slack_messages/models/test_message.py +28 -0
  101. django_slack_tools-0.2.0/tests/slack_messages/models/test_message_recipient.py +17 -0
  102. django_slack_tools-0.2.0/tests/slack_messages/models/test_messaging_policy.py +20 -0
  103. django_slack_tools-0.2.0/tests/slack_messages/test_apps.py +1 -0
  104. django_slack_tools-0.2.0/tests/slack_messages/test_message.py +233 -0
  105. django_slack_tools-0.2.0/tests/slack_messages/test_tasks.py +90 -0
  106. django_slack_tools-0.2.0/tests/test_app_settings.py +130 -0
  107. django_slack_tools-0.2.0/tests/test_views.py +1 -0
  108. django_slack_tools-0.2.0/tests/utils/__init__.py +0 -0
  109. django_slack_tools-0.2.0/tests/utils/slack/__init__.py +0 -0
  110. django_slack_tools-0.2.0/tests/utils/slack/test_django.py +24 -0
  111. django_slack_tools-0.2.0/tests/utils/slack/test_message.py +27 -0
  112. django_slack_tools-0.2.0/tests/utils/slack/test_misc.py +47 -0
  113. django_slack_tools-0.2.0/tests/utils/template/__init__.py +0 -0
  114. django_slack_tools-0.2.0/tests/utils/template/test_base.py +0 -0
  115. django_slack_tools-0.2.0/tests/utils/template/test_dict.py +32 -0
  116. django_slack_tools-0.2.0/tests/utils/template/test_django.py +102 -0
  117. django_slack_tools-0.2.0/tests/utils/template/testcases/001.json +87 -0
  118. django_slack_tools-0.2.0/tests/utils/template/testcases/001.png +0 -0
  119. django_slack_tools-0.2.0/tests/utils/template/testcases/001.xml +69 -0
  120. django_slack_tools-0.2.0/tests/utils/test_model_mixins.py +1 -0
  121. django_slack_tools-0.2.0/tests/utils/test_widgets.py +17 -0
  122. django_slack_tools-0.2.0/uv.lock +1966 -0
  123. django_slack_tools-0.1.0/django_slack_tools/__init__.py +0 -1
  124. django_slack_tools-0.1.0/django_slack_tools/slack_messages/backends/base.py +0 -94
  125. django_slack_tools-0.1.0/django_slack_tools/slack_messages/message.py +0 -128
  126. django_slack_tools-0.1.0/django_slack_tools/utils/dict_template.py +0 -55
  127. django_slack_tools-0.1.0/django_slack_tools/utils/slack/django.py +0 -45
  128. django_slack_tools-0.1.0/django_slack_tools/utils/slack/message.py +0 -44
  129. django_slack_tools-0.1.0/pyproject.toml +0 -110
  130. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/LICENSE +0 -0
  131. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/locale/ko_KR/LC_MESSAGES/django.po +0 -0
  132. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/__init__.py +0 -0
  133. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/admin/__init__.py +0 -0
  134. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/admin/mention.py +0 -0
  135. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/admin/message_recipient.py +0 -0
  136. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/admin/messaging_policy.py +0 -0
  137. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/backends/logging.py +0 -0
  138. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/migrations/__init__.py +0 -0
  139. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/models/__init__.py +0 -0
  140. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/models/mention.py +0 -0
  141. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/models/message.py +0 -0
  142. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/slack_messages/models/message_recipient.py +0 -0
  143. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/utils/__init__.py +0 -0
  144. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/utils/model_mixins.py +0 -0
  145. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/utils/slack/__init__.py +0 -0
  146. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/utils/slack/misc.py +0 -0
  147. {django_slack_tools-0.1.0 → django_slack_tools-0.2.0}/django_slack_tools/utils/widgets.py +0 -0
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "lasuillard/django-slack-tools",
3
+ "image": "mcr.microsoft.com/devcontainers/base:1-bookworm",
4
+ "features": {
5
+ "ghcr.io/devcontainers-contrib/features/pre-commit:2": {},
6
+ "ghcr.io/devcontainers-contrib/features/apt-get-packages:1": {
7
+ "packages": "gettext"
8
+ },
9
+ "ghcr.io/devcontainers/features/docker-in-docker:2": {}
10
+ },
11
+ "onCreateCommand": "./.devcontainer/onCreateCommand.sh",
12
+ "updateContentCommand": "make install",
13
+ "customizations": {
14
+ "vscode": {
15
+ "extensions": [
16
+ "ms-python.python",
17
+ "ms-python.vscode-pylance",
18
+ "batisteo.vscode-django",
19
+ "ldez.ignore-files",
20
+ "redhat.vscode-yaml",
21
+ "tamasfe.even-better-toml",
22
+ "streetsidesoftware.code-spell-checker",
23
+ "EditorConfig.EditorConfig",
24
+ "VisualStudioExptTeam.vscodeintellicode",
25
+ "charliermarsh.ruff",
26
+ "ms-python.mypy-type-checker",
27
+ "njpwerner.autodocstring",
28
+ "ms-toolsai.jupyter",
29
+ "ms-python.debugpy"
30
+ ]
31
+ }
32
+ },
33
+ "containerEnv": {
34
+ "PYTHONPATH": "${containerWorkspaceFolder}"
35
+ }
36
+ }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Add ngrok key
4
+ curl -fsSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc \
5
+ && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
6
+
7
+ sudo apt-get update && sudo apt-get install -y \
8
+ ngrok
9
+
10
+ pipx install uv
@@ -0,0 +1,27 @@
1
+ # http://editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ charset = utf-8
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.{py,rst,ini}]
12
+ indent_style = space
13
+ indent_size = 4
14
+
15
+ [*.{html,css,scss,json,yaml,yml}]
16
+ indent_style = space
17
+ indent_size = 2
18
+
19
+ [*.md]
20
+ trim_trailing_whitespace = false
21
+
22
+ [Dockerfile]
23
+ indent_style = space
24
+ indent_size = 4
25
+
26
+ [Makefile]
27
+ indent_style = tab
@@ -0,0 +1,124 @@
1
+ # https://gitattributes.io/api/common%2Cmarkdown%2Cpython%2Csql%2Cdevcontainer%2Cvisualstudiocode
2
+ # Common settings that generally should always be used with your language specific settings
3
+
4
+ # Auto detect text files and perform LF normalization
5
+ * text=auto
6
+
7
+ #
8
+ # The above will handle all files NOT found below
9
+ #
10
+
11
+ # Documents
12
+ *.bibtex text diff=bibtex
13
+ *.doc diff=astextplain
14
+ *.DOC diff=astextplain
15
+ *.docx diff=astextplain
16
+ *.DOCX diff=astextplain
17
+ *.dot diff=astextplain
18
+ *.DOT diff=astextplain
19
+ *.pdf diff=astextplain
20
+ *.PDF diff=astextplain
21
+ *.rtf diff=astextplain
22
+ *.RTF diff=astextplain
23
+ *.md text diff=markdown
24
+ *.mdx text diff=markdown
25
+ *.tex text diff=tex
26
+ *.adoc text
27
+ *.textile text
28
+ *.mustache text
29
+ *.csv text eol=crlf
30
+ *.tab text
31
+ *.tsv text
32
+ *.txt text
33
+ *.sql text
34
+ *.epub diff=astextplain
35
+
36
+ # Graphics
37
+ *.png binary
38
+ *.jpg binary
39
+ *.jpeg binary
40
+ *.gif binary
41
+ *.tif binary
42
+ *.tiff binary
43
+ *.ico binary
44
+ # SVG treated as text by default.
45
+ *.svg text
46
+ # If you want to treat it as binary,
47
+ # use the following line instead.
48
+ # *.svg binary
49
+ *.eps binary
50
+
51
+ # Scripts
52
+ *.bash text eol=lf
53
+ *.fish text eol=lf
54
+ *.sh text eol=lf
55
+ *.zsh text eol=lf
56
+ # These are explicitly windows files and should use crlf
57
+ *.bat text eol=crlf
58
+ *.cmd text eol=crlf
59
+ *.ps1 text eol=crlf
60
+
61
+ # Serialisation
62
+ *.json text
63
+ *.toml text
64
+ *.xml text
65
+ *.yaml text
66
+ *.yml text
67
+
68
+ # Archives
69
+ *.7z binary
70
+ *.gz binary
71
+ *.tar binary
72
+ *.tgz binary
73
+ *.zip binary
74
+
75
+ # Text files where line endings should be preserved
76
+ *.patch -text
77
+
78
+ #
79
+ # Exclude files from exporting
80
+ #
81
+
82
+ .gitattributes export-ignore
83
+ .gitignore export-ignore
84
+ .gitkeep export-ignore
85
+ # Fix syntax highlighting on GitHub to allow comments
86
+ .devcontainer.json linguist-language=JSON-with-Comments
87
+ devcontainer.json linguist-language=JSON-with-Comments
88
+ # Apply override to all files in the directory
89
+ *.md linguist-detectable
90
+ # Basic .gitattributes for a python repo.
91
+
92
+ # Source files
93
+ # ============
94
+ *.pxd text diff=python
95
+ *.py text diff=python
96
+ *.py3 text diff=python
97
+ *.pyw text diff=python
98
+ *.pyx text diff=python
99
+ *.pyz text diff=python
100
+ *.pyi text diff=python
101
+
102
+ # Binary files
103
+ # ============
104
+ *.db binary
105
+ *.p binary
106
+ *.pkl binary
107
+ *.pickle binary
108
+ *.pyc binary export-ignore
109
+ *.pyo binary export-ignore
110
+ *.pyd binary
111
+
112
+ # Jupyter notebook
113
+ *.ipynb text eol=lf
114
+
115
+ # Note: .db, .p, and .pkl files are associated
116
+ # with the python modules ``pickle``, ``dbm.*``,
117
+ # ``shelve``, ``marshal``, ``anydbm``, & ``bsddb``
118
+ # (among others).
119
+ # Basic .gitattributes for sql files
120
+
121
+ *.sql linguist-detectable=true
122
+ *.sql linguist-language=sql
123
+ # Fix syntax highlighting on GitHub to allow comments
124
+ .vscode/*.json linguist-language=JSON-with-Comments
@@ -0,0 +1,24 @@
1
+ # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
2
+ version: 2
3
+ updates:
4
+ - package-ecosystem: github-actions
5
+ directory: /
6
+ schedule:
7
+ interval: monthly
8
+
9
+ - package-ecosystem: pip
10
+ directory: /
11
+ schedule:
12
+ interval: monthly
13
+ ignore:
14
+ - dependency-name: "*"
15
+ update-types: ["version-update:semver-patch"]
16
+ groups:
17
+ dev-dependencies:
18
+ applies-to: version-updates
19
+ dependency-type: development
20
+
21
+ - package-ecosystem: "devcontainers"
22
+ directory: "/"
23
+ schedule:
24
+ interval: monthly
@@ -0,0 +1,97 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions: read-all
10
+
11
+ jobs:
12
+ lint:
13
+ name: Lint
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Checkout
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up uv
20
+ uses: astral-sh/setup-uv@v3
21
+ with:
22
+ version: latest
23
+ enable-cache: true
24
+
25
+ - name: Install deps
26
+ run: uv sync --frozen --all-extras
27
+
28
+ - uses: pre-commit/action@v3.0.1
29
+ env:
30
+ SKIP: pytest
31
+
32
+ - uses: pre-commit-ci/lite-action@v1.1.0
33
+ if: always()
34
+
35
+ test:
36
+ name: Test (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }})
37
+ runs-on: ubuntu-latest
38
+ strategy:
39
+ fail-fast: false
40
+ matrix:
41
+ python-version: ["3.10", "3.11", "3.12"]
42
+ django-version: ["4.2", "5.0", "5.1"]
43
+ include:
44
+ - python-version: "3.8"
45
+ django-version: "4.2"
46
+
47
+ - python-version: "3.9"
48
+ django-version: "4.2"
49
+
50
+ - python-version: "3.13"
51
+ django-version: "5.1"
52
+
53
+ steps:
54
+ - name: Checkout
55
+ uses: actions/checkout@v4
56
+
57
+ - name: Set up uv
58
+ uses: astral-sh/setup-uv@v3
59
+ with:
60
+ version: latest
61
+ enable-cache: true
62
+
63
+ - name: Set Python version
64
+ run: uv python pin "${{ matrix.python-version }}"
65
+
66
+ - name: Install deps
67
+ run: uv sync --frozen --all-extras
68
+
69
+ - name: Install Django
70
+ run: uv pip install Django=="${{ matrix.django-version }}.*"
71
+
72
+ - name: Run tests
73
+ run: uv run --frozen pytest
74
+
75
+ - name: Upload test results to Codecov
76
+ uses: codecov/test-results-action@v1
77
+ with:
78
+ token: ${{ secrets.CODECOV_TOKEN }}
79
+ fail_ci_if_error: false
80
+ files: junit.xml
81
+ flags: >-
82
+ python-${{ matrix.python-version }},
83
+ django-${{ matrix.django-version }}
84
+
85
+ - name: Upload coverage report
86
+ uses: codecov/codecov-action@v4
87
+ env:
88
+ PYTHON: ${{ matrix.python-version }}
89
+ DJANGO: ${{ matrix.django-version }}
90
+ with:
91
+ token: ${{ secrets.CODECOV_TOKEN }}
92
+ fail_ci_if_error: false
93
+ files: coverage.xml
94
+ env_vars: PYTHON,DJANGO
95
+ flags: >-
96
+ python-${{ matrix.python-version }},
97
+ django-${{ matrix.django-version }}
@@ -0,0 +1,50 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ tags: [v*]
6
+
7
+ permissions: read-all
8
+
9
+ jobs:
10
+ build-docs:
11
+ name: Build Docs
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Set up uv
18
+ uses: astral-sh/setup-uv@v3
19
+ with:
20
+ version: latest
21
+ enable-cache: true
22
+
23
+ - name: Install deps
24
+ run: uv sync --frozen --all-extras
25
+
26
+ - name: Generate API docs
27
+ run: make docs
28
+
29
+ - name: Upload docs artifact
30
+ uses: actions/upload-pages-artifact@v3
31
+ with:
32
+ path: site/
33
+
34
+ deploy-docs:
35
+ name: Deploy Docs
36
+ needs: build-docs
37
+ runs-on: ubuntu-latest
38
+ permissions:
39
+ pages: write
40
+ id-token: write
41
+ environment:
42
+ name: github-pages
43
+ url: ${{ steps.deployment.outputs.page_url }}
44
+ concurrency:
45
+ group: pages
46
+ cancel-in-progress: false
47
+ steps:
48
+ - name: Publish API docs to GitHub Pages
49
+ id: deployment
50
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,58 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: [v*]
6
+
7
+ permissions: read-all
8
+
9
+ jobs:
10
+ release:
11
+ name: Release
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ contents: write
15
+ steps:
16
+ - name: Checkout
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up uv
20
+ uses: astral-sh/setup-uv@v3
21
+ with:
22
+ version: latest
23
+ enable-cache: true
24
+
25
+ - name: Install deps
26
+ run: uv sync --frozen --all-extras
27
+
28
+ - name: Build package
29
+ run: uv build
30
+
31
+ - name: Create release
32
+ uses: softprops/action-gh-release@v2
33
+ with:
34
+ generate_release_notes: true
35
+ files: dist/*
36
+
37
+ - name: Upload release distributions
38
+ uses: actions/upload-artifact@v4
39
+ with:
40
+ name: release-dists
41
+ path: dist/
42
+
43
+ publish-pypi:
44
+ name: Publish to PyPI
45
+ runs-on: ubuntu-latest
46
+ needs:
47
+ - release
48
+ permissions:
49
+ id-token: write
50
+ steps:
51
+ - name: Retrieve release distributions
52
+ uses: actions/download-artifact@v4
53
+ with:
54
+ name: release-dists
55
+ path: dist/
56
+
57
+ - name: Publish release distributions to PyPI
58
+ uses: pypa/gh-action-pypi-publish@release/v1