Skip to content

Commit 75b87b4

Browse files
authored
Merge pull request #1 from jezdez/ci/dogfood-conda-tasks
2 parents 8ec831e + c8c1478 commit 75b87b4

File tree

8 files changed

+137
-415
lines changed

8 files changed

+137
-415
lines changed

.github/workflows/docs.yml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,39 @@ concurrency:
1818
jobs:
1919
build:
2020
runs-on: ubuntu-latest
21+
defaults:
22+
run:
23+
shell: bash -el {0}
2124
steps:
2225
- uses: actions/checkout@v4
2326

24-
- uses: prefix-dev/setup-pixi@v0.8.1
27+
- uses: conda-incubator/setup-miniconda@v3
2528
with:
26-
environments: docs
29+
python-version: "3.12"
30+
activate-environment: docs
31+
channels: conda-forge
32+
33+
- name: Install conda-pypi and conda-tasks deps in base
34+
run: |
35+
conda install -n base -y -c conda-forge \
36+
"conda>=26.1" "conda-pypi>=0.4" \
37+
jinja2 platformdirs tomlkit
38+
39+
- name: Install docs dependencies
40+
run: |
41+
conda install -y \
42+
conda jinja2 platformdirs tomlkit \
43+
conda-sphinx-theme linkify-it-py myst-parser sphinx \
44+
sphinx-argparse sphinx-copybutton sphinx-design \
45+
sphinx-reredirects sphinx-sitemap
46+
47+
- name: Install conda-tasks (editable)
48+
run: |
49+
conda pypi install -e .
50+
conda run -n base conda pypi install -e .
2751
2852
- name: Build docs
29-
run: pixi run -e docs docs
53+
run: conda task run docs
3054

3155
- uses: actions/upload-pages-artifact@v3
3256
if: github.ref == 'refs/heads/main'

.github/workflows/test.yml

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,32 @@ jobs:
1313
fail-fast: false
1414
matrix:
1515
os: [ubuntu-latest, macos-latest, windows-latest]
16-
python: ["test-py310", "test-py311", "test-py312", "test-py313", "test-py314"]
16+
python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
17+
defaults:
18+
run:
19+
shell: bash -el {0}
1720
steps:
1821
- uses: actions/checkout@v4
1922

20-
- uses: prefix-dev/setup-pixi@v0.8.1
23+
- uses: conda-incubator/setup-miniconda@v3
2124
with:
22-
environments: ${{ matrix.python }}
25+
python-version: ${{ matrix.python }}
26+
activate-environment: test
27+
channels: conda-forge
28+
29+
- name: Install conda-pypi and conda-tasks deps in base
30+
run: |
31+
conda install -n base -y -c conda-forge \
32+
"conda>=26.1" "conda-pypi>=0.4" \
33+
jinja2 platformdirs tomlkit
34+
35+
- name: Install test dependencies
36+
run: conda install -y pytest pytest-cov conda jinja2 platformdirs tomlkit
37+
38+
- name: Install conda-tasks (editable)
39+
run: |
40+
conda pypi install -e .
41+
conda run -n base conda pypi install -e .
2342
2443
- name: Run tests
25-
run: pixi run -e ${{ matrix.python }} test
44+
run: conda task run test

conda_tasks/parsers/condarc.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313

1414
from typing import TYPE_CHECKING
1515

16-
import yaml
16+
from conda.common.serialize.yaml import YAMLError
17+
from conda.common.serialize.yaml import dumps as yaml_dumps
18+
from conda.common.serialize.yaml import loads as yaml_loads
1719

1820
from ..exceptions import TaskNotFoundError, TaskParseError
1921
from .base import TaskFileParser
@@ -64,8 +66,8 @@ def can_handle(self, path: Path) -> bool:
6466
if path.name not in self.filenames:
6567
return False
6668
try:
67-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
68-
except yaml.YAMLError:
69+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
70+
except YAMLError:
6971
return False
7072
plugins = data.get("plugins", {})
7173
if not isinstance(plugins, dict):
@@ -78,8 +80,8 @@ def parse(self, path: Path) -> dict[str, Task]:
7880
raw_tasks = _raw_tasks_from_condarc()
7981
if not raw_tasks:
8082
try:
81-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
82-
except yaml.YAMLError as exc:
83+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
84+
except YAMLError as exc:
8385
raise TaskParseError(str(path), str(exc)) from exc
8486
plugins = data.get("plugins", {})
8587
section = plugins.get("conda_tasks") or plugins.get("conda-tasks") or {}
@@ -93,7 +95,7 @@ def parse(self, path: Path) -> dict[str, Task]:
9395
def add_task(self, path: Path, name: str, task: Task) -> None:
9496
"""Add or update a task under ``plugins.conda_tasks.tasks`` in ``.condarc``."""
9597
if path.exists():
96-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
98+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
9799
else:
98100
data = {}
99101

@@ -110,20 +112,16 @@ def add_task(self, path: Path, name: str, task: Task) -> None:
110112
if task.description:
111113
defn["description"] = task.description
112114
section[name] = defn if defn else task.cmd
113-
path.write_text(
114-
yaml.dump(data, default_flow_style=False, sort_keys=False), encoding="utf-8"
115-
)
115+
path.write_text(yaml_dumps(data), encoding="utf-8")
116116

117117
def remove_task(self, path: Path, name: str) -> None:
118118
"""Remove a task from the ``.condarc`` file by name."""
119-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
119+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
120120
plugins = data.get("plugins", {})
121121
section = plugins.get("conda_tasks", plugins.get("conda-tasks", {})).get(
122122
"tasks", {}
123123
)
124124
if name not in section:
125125
raise TaskNotFoundError(name, list(section.keys()))
126126
del section[name]
127-
path.write_text(
128-
yaml.dump(data, default_flow_style=False, sort_keys=False), encoding="utf-8"
129-
)
127+
path.write_text(yaml_dumps(data), encoding="utf-8")

conda_tasks/parsers/yaml.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
from typing import TYPE_CHECKING
66

7-
import yaml
7+
from conda.common.serialize.yaml import YAMLError
8+
from conda.common.serialize.yaml import dumps as yaml_dumps
9+
from conda.common.serialize.yaml import loads as yaml_loads
810

911
from ..exceptions import TaskNotFoundError, TaskParseError
1012
from .base import TaskFileParser
@@ -74,7 +76,7 @@ def tasks_to_yaml(tasks: dict[str, Task]) -> str:
7476
data: dict[str, object] = {
7577
"tasks": {name: task_to_yaml_dict(task) for name, task in tasks.items()}
7678
}
77-
return yaml.dump(data, default_flow_style=False, sort_keys=False)
79+
return yaml_dumps(data)
7880

7981

8082
class CondaTasksYAMLParser(TaskFileParser):
@@ -90,8 +92,8 @@ def can_handle(self, path: Path) -> bool:
9092
def parse(self, path: Path) -> dict[str, Task]:
9193
"""Parse a ``conda-tasks.yml`` file and return its task definitions."""
9294
try:
93-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
94-
except yaml.YAMLError as exc:
95+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
96+
except YAMLError as exc:
9597
raise TaskParseError(str(path), str(exc)) from exc
9698

9799
raw_tasks = data.get("tasks", {})
@@ -102,23 +104,19 @@ def parse(self, path: Path) -> dict[str, Task]:
102104
def add_task(self, path: Path, name: str, task: Task) -> None:
103105
"""Add or update a task in the YAML file, creating it if needed."""
104106
if path.exists():
105-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
107+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
106108
else:
107109
data = {}
108110

109111
tasks_section = data.setdefault("tasks", {})
110112
tasks_section[name] = task_to_yaml_dict(task)
111-
path.write_text(
112-
yaml.dump(data, default_flow_style=False, sort_keys=False), encoding="utf-8"
113-
)
113+
path.write_text(yaml_dumps(data), encoding="utf-8")
114114

115115
def remove_task(self, path: Path, name: str) -> None:
116116
"""Remove a task from the YAML file by name."""
117-
data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
117+
data = yaml_loads(path.read_text(encoding="utf-8")) or {}
118118
tasks_section = data.get("tasks", {})
119119
if name not in tasks_section:
120120
raise TaskNotFoundError(name, list(tasks_section.keys()))
121121
del tasks_section[name]
122-
path.write_text(
123-
yaml.dump(data, default_flow_style=False, sort_keys=False), encoding="utf-8"
124-
)
122+
path.write_text(yaml_dumps(data), encoding="utf-8")

0 commit comments

Comments
 (0)