Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/homebrew-package-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
version:
description: "Release version without the leading v"
required: true
default: "0.1.2"
default: "0.1.3"
push:
tags:
- "v*"
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/python-package-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ jobs:
- name: Build devspec framework payload zip
run: |
zip -r "dist/devspec-framework-payload-${GITHUB_REF_NAME:-local}.zip" \
AGENTS.md GEMINI.md README.md devspec .github .claude .cursor .gemini .agents packaging/devspec-profiles.json
AGENTS.md GEMINI.md README.md devspec \
.github/prompts .github/agents .github/skills \
.claude .cursor .gemini .agents packaging/devspec-profiles.json
find dist -maxdepth 1 -type f ! -name devspec-python-package-checksums.txt -print0 \
| sort -z \
| xargs -0 sha256sum > dist/devspec-python-package-checksums.txt
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/winget-package-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ jobs:
shell: pwsh
run: |
$ErrorActionPreference = "Stop"
$version = if ($env:GITHUB_REF_NAME -match "^v(.+)$") { $Matches[1] } else { "0.1.2" }
$version = if ($env:GITHUB_REF_NAME -match "^v(.+)$") { $Matches[1] } else { "0.1.3" }
$hash = (Get-FileHash dist\winget\devspec.exe -Algorithm SHA256).Hash.ToLowerInvariant()
"$hash devspec.exe" | Set-Content -Path dist\winget\devspec.exe.sha256 -Encoding ASCII

Expand Down
10 changes: 5 additions & 5 deletions docs/how-to/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -767,16 +767,16 @@ For WinGet releases, publish the Windows portable executable from GitHub Release
```text
dist/winget/devspec.exe
dist/winget/devspec.exe.sha256
dist/winget/manifests/s/SpecLabs/Devspec/0.1.2/SpecLabs.Devspec.yaml
dist/winget/manifests/s/SpecLabs/Devspec/0.1.2/SpecLabs.Devspec.locale.en-US.yaml
dist/winget/manifests/s/SpecLabs/Devspec/0.1.2/SpecLabs.Devspec.installer.yaml
dist/winget/manifests/s/SpecLabs/Devspec/0.1.3/SpecLabs.Devspec.yaml
dist/winget/manifests/s/SpecLabs/Devspec/0.1.3/SpecLabs.Devspec.locale.en-US.yaml
dist/winget/manifests/s/SpecLabs/Devspec/0.1.3/SpecLabs.Devspec.installer.yaml
```

The manifest path is case-sensitive and must match `PackageIdentifier: SpecLabs.Devspec`. Validate the generated manifest directory on Windows before submission:

```text
winget validate dist/winget/manifests/s/SpecLabs/Devspec/0.1.2
winget install --manifest dist/winget/manifests/s/SpecLabs/Devspec/0.1.2
winget validate dist/winget/manifests/s/SpecLabs/Devspec/0.1.3
winget install --manifest dist/winget/manifests/s/SpecLabs/Devspec/0.1.3
```

When adapter files are added, removed, or moved, update:
Expand Down
4 changes: 2 additions & 2 deletions packaging/homebrew/devspec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ class Devspec < Formula

desc "Installer and synchronizer CLI for the devspec workflow framework"
homepage "https://github.com/speclabs/devspec"
url "https://github.com/speclabs/devspec/archive/refs/tags/v0.1.2.tar.gz"
sha256 "REPLACE_WITH_V0_1_2_RELEASE_SHA256"
url "https://github.com/speclabs/devspec/archive/refs/tags/v0.1.3.tar.gz"
sha256 "REPLACE_WITH_V0_1_3_RELEASE_SHA256"
license "Apache-2.0"

depends_on "python@3.12"
Expand Down
4 changes: 2 additions & 2 deletions packaging/homebrew/tap/Formula/devspec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ class Devspec < Formula

desc "Installer and synchronizer CLI for the devspec workflow framework"
homepage "https://github.com/speclabs/devspec"
url "https://github.com/speclabs/devspec/archive/refs/tags/v0.1.2.tar.gz"
sha256 "REPLACE_WITH_V0_1_2_RELEASE_SHA256"
url "https://github.com/speclabs/devspec/archive/refs/tags/v0.1.3.tar.gz"
sha256 "REPLACE_WITH_V0_1_3_RELEASE_SHA256"
license "Apache-2.0"

depends_on "python@3.12"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.12.0.schema.json
PackageIdentifier: SpecLabs.Devspec
PackageVersion: 0.1.3
InstallerType: portable
Commands:
- devspec
Installers:
- Architecture: x64
InstallerUrl: https://github.com/speclabs/devspec/releases/download/v0.1.3/devspec.exe
InstallerSha256: REPLACE_WITH_RELEASE_SHA256
ManifestType: installer
ManifestVersion: 1.12.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.12.0.schema.json
PackageIdentifier: SpecLabs.Devspec
PackageVersion: 0.1.3
PackageLocale: en-US
Publisher: SpecLabs
PublisherUrl: https://github.com/speclabs
PublisherSupportUrl: https://github.com/speclabs/devspec/issues
PackageName: devspec
PackageUrl: https://github.com/speclabs/devspec
License: Apache-2.0
LicenseUrl: https://github.com/speclabs/devspec/blob/main/LICENSE
ShortDescription: Installer and synchronizer CLI for the devspec workflow framework.
Description: devspec installs and synchronizes spec-driven development framework files for supported coding agents and IDE adapters.
Moniker: devspec
Tags:
- ai
- cli
- developer-tools
- spec-driven-development
- workflow
ManifestType: defaultLocale
ManifestVersion: 1.12.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.12.0.schema.json
PackageIdentifier: SpecLabs.Devspec
PackageVersion: 0.1.3
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.12.0
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "devspec"
version = "0.1.2"
version = "0.1.3"
description = "Installer and synchronizer CLI for the devspec workflow framework."
readme = "README.md"
requires-python = ">=3.10"
Expand Down
2 changes: 1 addition & 1 deletion src/devspec_installer/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Installer CLI for the devspec framework."""

__version__ = "0.1.2"
__version__ = "0.1.3"
12 changes: 6 additions & 6 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,12 @@ def test_ownership_classification_preserves_project_artifacts() -> None:


def test_svg_diagram_templates_are_standalone_xml() -> None:
templates = [
Path("devspec/architecture/_template/architecture-diagram.svg"),
Path("devspec/architecture/_template/process-flow-diagram.svg"),
]
templates = sorted(Path("devspec/architecture/_template").glob("*.svg"))
assert templates

for template in templates:
text = template.read_text(encoding="utf-8")
lowered = text.lower()
root = ET.fromstring(text)

assert root.tag.endswith("svg")
Expand All @@ -88,8 +87,9 @@ def test_svg_diagram_templates_are_standalone_xml() -> None:
assert "http://www.w3.org/2000/svg" in root.tag
assert root.find("{http://www.w3.org/2000/svg}title") is not None
assert root.find("{http://www.w3.org/2000/svg}desc") is not None
for forbidden in ("<script", "<iframe", "<foreignObject"):
assert forbidden.lower() not in text.lower()
assert text.isascii()
for forbidden in ("<script", "<iframe", "<foreignobject", "<image", "@import", "href=\"http", "href='http"):
assert forbidden not in lowered


def test_html_diagram_template_is_standalone_static_html() -> None:
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading