diff --git a/.devcontainer.json b/.devcontainer.json index 951b7b4bc..d939b02ec 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -19,5 +19,6 @@ "EditorConfig.EditorConfig", "paulvarache.vscode-taskfile", "stardog-union.vscode-stardog-languages" - ] + ], + "postCreateCommand": "poetry install --all-extras" } diff --git a/.github/workflows/validate.yaml b/.github/workflows/validate.yaml index ea568ad42..fb9ea9717 100644 --- a/.github/workflows/validate.yaml +++ b/.github/workflows/validate.yaml @@ -8,9 +8,9 @@ on: env: FORCE_COLOR: 1 - XDG_CACHE_HOME: ${{ github.workspace }}/.cache - POETRY_CACHE_DIR: ${{ github.workspace }}/.cache/pypoetry - PIP_CACHE_DIR: ${{ github.workspace }}/.cache/pip + XDG_CACHE_HOME: ${{ github.workspace }}/.var/cache + POETRY_CACHE_DIR: ${{ github.workspace }}/.var/cache/pypoetry + PIP_CACHE_DIR: ${{ github.workspace }}/.var/cache/pip concurrency: @@ -121,7 +121,7 @@ jobs: - name: Cache XDG_CACHE_HOME uses: actions/cache@v3 with: - path: ~/.cache + path: ${{ env.XDG_CACHE_HOME }} key: ${{ github.job }}-xdg-v1-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml', '**/poetry.lock', '**/with-fuseki.sh', '**/*requirements*.txt') }} restore-keys: | ${{ github.job }}-xdg-v1-${{ matrix.os }}-${{ matrix.python-version }}- diff --git a/.var/.gitignore b/.var/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/.var/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Dockerfile.devcontainer b/Dockerfile.devcontainer index 77ace7f37..07ce3ca3d 100644 --- a/Dockerfile.devcontainer +++ b/Dockerfile.devcontainer @@ -46,6 +46,9 @@ COPY devtools/requirements-poetry.in /var/tmp/ RUN \ python -m pip install --upgrade \ tox \ + pre-commit \ -r /var/tmp/requirements-poetry.in \ && \ true + +RUN git config --system --add safe.directory /srv/workspace diff --git a/Taskfile.yml b/Taskfile.yml index b1c6cc0f4..9ee289348 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -216,6 +216,8 @@ tasks: - task: clean:tox - task: clean:mypy - task: venv:clean + - task: _rimraf + vars: { RIMRAF_TARGET: ".var/devcontainer" } test:data:fetch: desc: Fetch test data. diff --git a/docker-compose.yml b/docker-compose.yml index 3e6377b72..c8c19e0d0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,23 +7,32 @@ services: dockerfile: Dockerfile.devcontainer working_dir: /srv/workspace environment: - - POETRY_VIRTUALENVS_IN_PROJECT=1 + - XDG_CACHE_HOME=/srv/workspace/.var/devcontainer/cache + - MYPY_CACHE_DIR=/srv/workspace/.var/devcontainer/mypy_cache + - TOX_WORK_DIR=/srv/workspace/.var/devcontainer/tox + - PYTEST_ADDOPTS=-o cache_dir=/srv/workspace/.var/devcontainer/pytest_cache + - PRE_COMMIT_HOME=/srv/workspace/.var/devcontainer/pre-commit volumes: - .:/srv/workspace:z,cached - - xdg-cache-home:/root/.cache - - dot-venv:/srv/workspace/.venv - - dot-tox:/srv/workspace/.tox - - dot-mypy-cache:/srv/workspace/.mypy_cache - - dot-pytest-cache:/srv/workspace/.pytest_cache command: - /bin/sh - -c - | echo Waiting for shutdown... override the command if this is not what you want. 1>&2 while sleep 1000; do :; done + run: + build: + context: . + dockerfile: Dockerfile.devcontainer + working_dir: /srv/workspace + environment: + - XDG_CACHE_HOME=/srv/workspace-var/cache + - MYPY_CACHE_DIR=/srv/workspace-var/mypy_cache + - TOX_WORK_DIR=/srv/workspace-var/tox + - PYTEST_ADDOPTS=-o cache_dir=/srv/workspace-var/pytest_cache + - PRE_COMMIT_HOME=/srv/workspace-var/pre-commit + volumes: + - .:/srv/workspace:z,cached + - workspace-var:/srv/workspace-var volumes: - xdg-cache-home: {} - dot-venv: {} - dot-tox: {} - dot-mypy-cache: {} - dot-pytest-cache: {} + workspace-var: {} diff --git a/docs/developers.rst b/docs/developers.rst index befb84644..89fedb339 100644 --- a/docs/developers.rst +++ b/docs/developers.rst @@ -297,16 +297,16 @@ To use the development container directly: docker-compose build # Configure the system for development. - docker-compose run --rm devcontainer task configure + docker-compose run --rm run task configure # Run the validate task inside the devtools container. - docker-compose run --rm devcontainer task validate + docker-compose run --rm run task validate # Run extensive tests inside the devtools container. - docker-compose run --rm devcontainer task EXTENSIVE=true test + docker-compose run --rm run task EXTENSIVE=true test # To get a shell into the devcontainer docker image. - docker-compose run --rm devcontainer bash + docker-compose run --rm run bash The devcontainer also works with `Podman Compose `_. diff --git a/pyproject.toml b/pyproject.toml index a2ff4e700..8d621bb5a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -122,7 +122,7 @@ exclude = ''' | \.pytest_cache | \.tox | \.venv - | \.cache + | \.var | \.github | _build | htmlcov @@ -175,7 +175,7 @@ skip = [ '.pytest_cache', '.tox', '.venv', - '.cache,', + '.var', '.github', '_build', 'htmlcov', diff --git a/setup.cfg b/setup.cfg index 53b58fb6f..dd7baf900 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,7 +7,7 @@ exclude = .git, __pycache__, .venv, - .cache, + .var, .tox, var, .mypy_cache, diff --git a/tox.ini b/tox.ini index ea294b696..87d89d028 100644 --- a/tox.ini +++ b/tox.ini @@ -4,6 +4,7 @@ envlist = flake8,py3{7,8,9,10,11},covreport,docs,precommit isolated_build = True +toxworkdir={env:TOX_WORK_DIR:{tox_root}/.tox} [testenv] passenv = @@ -81,6 +82,8 @@ skip_install = true deps = pre-commit passenv = HOMEPATH # needed on Windows + PRE_COMMIT_HOME # so that users can configure it + XDG_CACHE_HOME # so that pre-commit won't use the default commands = precommit: pre-commit run precommitall: pre-commit run --all-files