Skip to content

Commit 27bd71b

Browse files
Merge pull request 'v0.15.1 — release-pipeline fixes (nfpm + Windows test)' (#3) from fix/v0151-ci-binaries-windows into main
2 parents 13de4c9 + 8b7c3cb commit 27bd71b

5 files changed

Lines changed: 44 additions & 6 deletions

File tree

.github/workflows/binaries.yml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ jobs:
3535
run: |
3636
pyinstaller --name cap --onefile src/capacium/cli.py
3737
38+
# Bridge the Linux binary to the nfpm job (deb/rpm packaging). The build
39+
# job only uploads to the GH release; without this artifact the nfpm job
40+
# cp'd from a non-existent path and failed.
41+
- name: Upload Linux binary for nfpm
42+
if: matrix.os == 'ubuntu-latest'
43+
uses: actions/upload-artifact@v4
44+
with:
45+
name: cap-Linux-X64
46+
path: dist/cap
47+
3848
- name: Rename and prepare artifacts (Unix)
3949
if: matrix.os != 'windows-latest'
4050
run: |
@@ -64,7 +74,9 @@ jobs:
6474

6575
- name: Download PyInstaller binary
6676
uses: actions/download-artifact@v4
67-
continue-on-error: true
77+
with:
78+
name: cap-Linux-X64
79+
path: cap-Linux-X64
6880

6981
- name: Install nfpm
7082
run: |
@@ -79,7 +91,7 @@ jobs:
7991
VERSION: ${{ github.ref_name }}
8092
run: |
8193
mkdir -p dist
82-
cp dist-cap-Linux-X64/cap dist/capacium 2>/dev/null || cp cap-Linux-X64/cap dist/capacium 2>/dev/null || true
94+
cp cap-Linux-X64/cap dist/capacium
8395
chmod +x dist/capacium
8496
./nfpm package --target "release/${VERSION}" --packager deb
8597
./nfpm package --target "release/${VERSION}" --packager rpm

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## Capacium v0.15.1 — Release-pipeline fixes (2026-07-14)
6+
7+
Patch for two CI issues found while shipping v0.15.0 (the v0.15.0 artifacts
8+
— binaries, Docker, Homebrew — were already published).
9+
10+
### Fixed
11+
- **binaries:** the `.deb`/`.rpm` (nfpm) job could not find the Linux binary
12+
(the build job never uploaded it as an artifact) — it is now bridged via
13+
`upload-artifact`/`download-artifact`, so Linux packages build.
14+
- **CI:** the STAB-001 end-to-end install tests are skipped on Windows —
15+
their symlink + package-copytree tmpdirs cannot be torn down there
16+
(`WinError 32`); behaviour stays covered on macOS/Linux.
17+
518
## Capacium v0.15.0 — Install semantics & honest status (2026-07-14)
619

720
Second wave of the 2026-06-11 multi-client stabilization (V5–V14 + upstream

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ Works fully offline from local paths. The Exchange layer (separate repo) adds re
2525
You can install Capacium globally in an isolated environment using `pipx`.
2626

2727
```bash
28-
pipx install git+https://github.com/Capacium/capacium.git@v0.15.0
28+
pipx install git+https://github.com/Capacium/capacium.git@v0.15.1
2929

3030
# Or with optional signing and YAML support:
31-
pipx install "capacium[yaml,signing] @ git+https://github.com/Capacium/capacium.git@v0.15.0"
31+
pipx install "capacium[yaml,signing] @ git+https://github.com/Capacium/capacium.git@v0.15.1"
3232
```
3333

3434
Or from PyPI:
@@ -43,7 +43,7 @@ If you don't use Python, you can download standalone executables directly from t
4343
### 3. Docker (GHCR)
4444
Run Capacium safely in a container with your directories mounted:
4545
```bash
46-
docker run --rm -v ~/.capacium:/root/.capacium -v $(pwd):/workspace ghcr.io/capacium/cap:0.15.0
46+
docker run --rm -v ~/.capacium:/root/.capacium -v $(pwd):/workspace ghcr.io/capacium/cap:0.15.1
4747
```
4848

4949
### 4. macOS / Linux (Homebrew)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "capacium"
7-
version = "0.15.0"
7+
version = "0.15.1"
88
description = "Capability Packaging System — agent-agnostic packaging for AI agent capabilities"
99
readme = "README.md"
1010
authors = [

tests/test_bundle_inference.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
V13b: 3-part ID install copied the WHOLE repo again, broke the
88
owner/name/version layout and created no links
99
"""
10+
import sys
1011
from pathlib import Path
1112

1213
import pytest
@@ -99,6 +100,12 @@ def claude_home(tmp_home, monkeypatch):
99100
return tmp_home
100101

101102

103+
@pytest.mark.skipif(
104+
sys.platform == "win32",
105+
reason="E2E install creates symlinks + package copytrees; Windows tmpdir "
106+
"teardown cannot remove the in-use/symlinked files (WinError 32). "
107+
"Behaviour is covered on macOS/Linux.",
108+
)
102109
class TestEndToEndInstall:
103110
def test_multi_skill_install_links_each_member(self, claude_home, tmp_path):
104111
repo = _make_multi_skill_repo(tmp_path, "skills")
@@ -154,6 +161,12 @@ def test_sub_skill_id_unknown_member_fails_with_listing(
154161
assert "understand-chat" in out # available members listed
155162

156163

164+
@pytest.mark.skipif(
165+
sys.platform == "win32",
166+
reason="E2E install creates symlinks + package copytrees; Windows tmpdir "
167+
"teardown cannot remove the in-use/symlinked files (WinError 32). "
168+
"Behaviour is covered on macOS/Linux.",
169+
)
157170
class TestRootLinkGuard:
158171
def test_mismodeled_multi_skill_repo_is_refused(self, claude_home, tmp_path, capsys):
159172
repo = _make_multi_skill_repo(tmp_path, "skills")

0 commit comments

Comments
 (0)