Skip to content

Commit daf368f

Browse files
committed
Upgrade to Resonant v0.50.5
1 parent 252f89b commit daf368f

22 files changed

Lines changed: 436 additions & 149 deletions

.copier-answers.resonant.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
_commit: v0.48.1
1+
_commit: v0.50.5
22
_src_path: https://github.com/kitware-resonant/cookiecutter-resonant
33
core_app_name: core
44
include_example_code: false

.devcontainer/devcontainer.json

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
2+
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-docker-compose
3+
{
4+
"name": "GeoDatalytics",
5+
"dockerComposeFile": [
6+
"../docker-compose.yml",
7+
"../docker-compose.override.yml",
8+
"./docker-compose.devcontainer.yml"
9+
],
10+
"service": "django",
11+
"overrideCommand": true,
12+
// The "vscode" user and remoteUser are set by the base image label (devcontainers/base).
13+
"workspaceFolder": "/home/vscode/geodatalytics",
14+
"features": {
15+
"ghcr.io/devcontainers/features/git-lfs:1": {},
16+
"ghcr.io/devcontainers/features/node:1": {
17+
"version": "24",
18+
// Work around https://github.com/devcontainers/features/pull/1625
19+
"pnpmVersion": "none"
20+
},
21+
"ghcr.io/rails/devcontainer/features/postgres-client:1": {
22+
"version": 18
23+
},
24+
"ghcr.io/devcontainers/features/terraform:1": {},
25+
"ghcr.io/devcontainers/features/aws-cli:1": {},
26+
"ghcr.io/devcontainers/features/github-cli:1": {},
27+
"ghcr.io/devcontainers-extra/features/heroku-cli:1": {}
28+
},
29+
"customizations": {
30+
"vscode": {
31+
"extensions": [
32+
// Python
33+
"ms-python.python",
34+
"ms-python.vscode-pylance",
35+
"ms-python.debugpy",
36+
"ms-python.mypy-type-checker",
37+
"charliermarsh.ruff",
38+
// Django
39+
"batisteo.vscode-django",
40+
"augustocdias.tasks-shell-input",
41+
// Other file formats
42+
"editorconfig.editorconfig",
43+
"mikestead.dotenv",
44+
"tamasfe.even-better-toml",
45+
"timonwong.shellcheck",
46+
// Infrastructure
47+
"ms-azuretools.vscode-containers",
48+
"hashicorp.terraform",
49+
"github.vscode-github-actions",
50+
// Remove AWS extension, as only the CLI is wanted; see: https://github.com/devcontainers/features/issues/1228
51+
"-AmazonWebServices.aws-toolkit-vscode"
52+
],
53+
"settings": {
54+
"containers.containerClient": "com.microsoft.visualstudio.containers.docker",
55+
// Container-specific Python paths
56+
"python.defaultInterpreterPath": "/home/vscode/venv/bin/python",
57+
// Disable automatic Python venv activation in new terminals.
58+
"python-envs.terminal.autoActivationType": "off",
59+
// Ensure that `envFile` from any user settings is ignored; Docker Compose provides it.
60+
"python.envFile": "",
61+
// Reduce file watcher overhead for generated/cache directories.
62+
"files.watcherExclude": {
63+
"**/__pycache__/**": true,
64+
"**/.pytest_cache/**": true,
65+
"**/node_modules/**": true
66+
}
67+
}
68+
}
69+
},
70+
// Prevent a prompt every time the debugger opens a port or Django auto-restarts.
71+
"otherPortsAttributes": {
72+
"onAutoForward": "silent"
73+
},
74+
"portsAttributes": {
75+
"8000": {
76+
"label": "Django",
77+
// Show a dialog if the port isn't free.
78+
"requireLocalPort": true,
79+
"onAutoForward": "silent"
80+
},
81+
"8080": {
82+
"label": "Vite",
83+
"requireLocalPort": true,
84+
"onAutoForward": "silent"
85+
}
86+
},
87+
// Install a global Python and create a venv before VSCode extensions start,
88+
// to prevent prompts and ensure test discovery works on first load.
89+
"onCreateCommand": {
90+
"python": ["uv", "python", "install", "--default"],
91+
"venv": ["uv", "sync", "--all-extras", "--all-groups"],
92+
"npm": ["npm", "--prefix", "web", "install"]
93+
},
94+
// Ensure it is re-synced on restarts.
95+
"updateContentCommand": {
96+
"venv": ["uv", "sync", "--all-extras", "--all-groups"],
97+
"npm": ["npm", "--prefix", "web", "install"]
98+
}
99+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
services:
2+
django:
3+
# Don't expose ports, devcontainer forwarding is superior, since we can just bind to localhost.
4+
ports: !reset []
5+
# Don't auto-run the default command, launch.json or the terminal will be used.
6+
command: !reset []
7+
8+
celery:
9+
# Celery will be started via launch.json or the terminal.
10+
profiles: ["celery"]
11+
12+
web:
13+
# npm will be started via launch.json or the terminal.
14+
profiles: ["web"]

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ indent_size = 2
2727
indent_size = 4
2828
max_line_length = 100
2929

30+
[*.sh]
31+
indent_size = 2
32+
3033
[*.toml]
3134
indent_size = 2
3235

.github/workflows/ci.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ permissions:
88
contents: read
99
jobs:
1010
lint-client:
11-
runs-on: ubuntu-latest
11+
runs-on: ubuntu-24.04
1212
steps:
1313
- uses: actions/checkout@v6
1414
- name: Install npm
1515
uses: actions/setup-node@v6
1616
with:
17-
node-version: 24.14.0
17+
node-version: 24
1818
- run: |
1919
npm ci
2020
working-directory: web
@@ -23,7 +23,7 @@ jobs:
2323
working-directory: web
2424
2525
test-server:
26-
runs-on: ubuntu-latest
26+
runs-on: ubuntu-24.04
2727
services:
2828
postgres:
2929
image: postgis/postgis:18-3.6
@@ -37,7 +37,7 @@ jobs:
3737
ports:
3838
- 5432:5432
3939
rabbitmq:
40-
image: rabbitmq:management-alpine
40+
image: rabbitmq:4.2-management-alpine
4141
options: >-
4242
--health-cmd "rabbitmq-diagnostics ping"
4343
--health-start-period 30s
@@ -69,10 +69,10 @@ jobs:
6969
- name: Checkout repository
7070
uses: actions/checkout@v6
7171
- name: Install uv
72-
uses: astral-sh/setup-uv@v7
72+
uses: astral-sh/setup-uv@v8.1.0
7373
- name: Run tests
7474
run: |
75-
uv run tox
75+
uv run --locked tox
7676
env:
7777
DJANGO_DATABASE_URL: postgres://postgres:postgres@localhost:5432/django
7878
DJANGO_CELERY_BROKER_URL: amqp://localhost:5672/

.github/workflows/nightly_ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ permissions:
88
contents: read
99
jobs:
1010
test-server-slow:
11-
runs-on: ubuntu-latest
11+
runs-on: ubuntu-24.04
1212
services:
1313
postgres:
1414
image: postgis/postgis:18-3.6
@@ -22,7 +22,7 @@ jobs:
2222
ports:
2323
- 5432:5432
2424
rabbitmq:
25-
image: rabbitmq:management-alpine
25+
image: rabbitmq:4.2-management-alpine
2626
options: >-
2727
--health-cmd "rabbitmq-diagnostics ping"
2828
--health-start-period 30s
@@ -57,7 +57,7 @@ jobs:
5757
uses: astral-sh/setup-uv@v7
5858
- name: Run tests
5959
run: |
60-
uv run tox -e test -- -m slow
60+
uv run --locked tox -e test -- -m slow
6161
env:
6262
DJANGO_DATABASE_URL: postgres://postgres:postgres@localhost:5432/django
6363
DJANGO_CELERY_BROKER_URL: amqp://localhost:5672/

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ permissions:
88
contents: write
99
jobs:
1010
version-and-release:
11-
runs-on: ubuntu-latest
11+
runs-on: ubuntu-24.04
1212
steps:
1313
- name: Checkout repository
1414
uses: actions/checkout@v6
@@ -19,7 +19,7 @@ jobs:
1919
- name: Install npm
2020
uses: actions/setup-node@v6
2121
with:
22-
node-version: 24.14.0
22+
node-version: 24
2323
- name: Run Semantic Release
2424
run: |
2525
uvx python-semantic-release version

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
.vscode/
21
sample_data/downloads/*
32
jupyter/.ipynb_checkpoints
43
dev/.env.web

.vscode/launch.json

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Django: Server",
6+
"type": "debugpy",
7+
"request": "launch",
8+
"program": "${workspaceFolder}/manage.py",
9+
"args": ["runserver", "localhost:8000"],
10+
"django": true,
11+
"console": "integratedTerminal",
12+
"justMyCode": false,
13+
"presentation": {
14+
"group": "2-services",
15+
"order": 1
16+
}
17+
},
18+
{
19+
"name": "Django: Server (eager Celery)",
20+
"type": "debugpy",
21+
"request": "launch",
22+
"program": "${workspaceFolder}/manage.py",
23+
"args": ["runserver", "localhost:8000"],
24+
"env": {
25+
"DJANGO_CELERY_TASK_ALWAYS_EAGER": "true"
26+
},
27+
"django": true,
28+
"console": "integratedTerminal",
29+
"justMyCode": false,
30+
"presentation": {
31+
"group": "3-utilities",
32+
"order": 1
33+
}
34+
},
35+
{
36+
"name": "Django: Management Command",
37+
"type": "debugpy",
38+
"request": "launch",
39+
"program": "${workspaceFolder}/manage.py",
40+
"args": ["${input:managementCommand}"],
41+
"django": true,
42+
"console": "integratedTerminal",
43+
"justMyCode": false,
44+
"presentation": {
45+
"group": "3-utilities",
46+
"order": 2
47+
}
48+
},
49+
{
50+
"name": "Celery: Worker",
51+
"type": "debugpy",
52+
"request": "launch",
53+
"module": "celery",
54+
"args": [
55+
"--app",
56+
"uvdat.celery",
57+
"worker",
58+
"--loglevel",
59+
"INFO",
60+
"--pool",
61+
"solo",
62+
"--without-heartbeat"
63+
],
64+
"console": "integratedTerminal",
65+
"justMyCode": false,
66+
"presentation": {
67+
"group": "2-services",
68+
"order": 2
69+
}
70+
},
71+
{
72+
"name": "Pytest: Debug",
73+
"type": "debugpy",
74+
"request": "launch",
75+
"module": "pytest",
76+
"purpose": ["debug-test"],
77+
"console": "integratedTerminal",
78+
"django": true,
79+
"justMyCode": false,
80+
"presentation": {
81+
"hidden": true
82+
}
83+
},
84+
{
85+
"name": "Vite: Dev Server",
86+
"type": "node",
87+
"request": "launch",
88+
"cwd": "${workspaceFolder}/web",
89+
"runtimeExecutable": "npm",
90+
"runtimeArgs": ["run", "serve"],
91+
"console": "integratedTerminal",
92+
"presentation": {
93+
"group": "2-services",
94+
"order": 3
95+
}
96+
}
97+
],
98+
"compounds": [
99+
{
100+
"name": "Django + Celery + Vite",
101+
"configurations": ["Django: Server", "Celery: Worker", "Vite: Dev Server"],
102+
"stopAll": true,
103+
"presentation": {
104+
"group": "1-compound",
105+
"order": 1
106+
}
107+
}
108+
],
109+
"inputs": [
110+
{
111+
"id": "managementCommand",
112+
"type": "command",
113+
"command": "shellCommand.execute",
114+
"args": {
115+
"command": "./manage.py help --commands",
116+
"description": "Django management command",
117+
"allowCustomValues": true
118+
}
119+
}
120+
]
121+
}

.vscode/settings.json

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
// File cleanup
3+
"files.trimTrailingWhitespace": true,
4+
"files.insertFinalNewline": true,
5+
"files.trimFinalNewlines": true,
6+
7+
// Python
8+
"python.analysis.autoFormatStrings": true,
9+
"python.testing.pytestEnabled": true,
10+
"python.analysis.autoImportCompletions": true,
11+
"python.analysis.gotoDefinitionInStringLiteral": true,
12+
// Allow auto-importing from deeper symbols inside of Django.
13+
"python.analysis.packageIndexDepths": [
14+
{
15+
"name": "django",
16+
"depth": 6
17+
}
18+
],
19+
"python.analysis.inlayHints.pytestParameters": true,
20+
21+
// Django templates
22+
"emmet.includeLanguages": {
23+
"django-html": "html"
24+
},
25+
26+
// Type checking: Use Mypy and disable Pylance.
27+
"mypy-type-checker.importStrategy": "fromEnvironment",
28+
// Mypy daemon seems better, but is buggy in practice.
29+
"mypy-type-checker.preferDaemon": false,
30+
"mypy-type-checker.reportingScope": "file",
31+
"python.analysis.typeCheckingMode": "off",
32+
33+
// Ruff
34+
"[python]": {
35+
"editor.defaultFormatter": "charliermarsh.ruff"
36+
}
37+
}

0 commit comments

Comments
 (0)