devspec 0.1.0__tar.gz → 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- devspec-0.1.1/.github/workflows/homebrew-package-publish.yml +54 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/workflows/winget-package-publish.yml +3 -2
- {devspec-0.1.0 → devspec-0.1.1}/PKG-INFO +1 -1
- {devspec-0.1.0 → devspec-0.1.1}/docs/how-to/README.md +33 -6
- {devspec-0.1.0 → devspec-0.1.1}/docs/how-to/setup/homebrew.md +7 -5
- devspec-0.1.1/packaging/homebrew/devspec.rb +44 -0
- devspec-0.1.1/packaging/homebrew/tap/Formula/devspec.rb +44 -0
- devspec-0.1.1/packaging/homebrew/tap/README.md +53 -0
- {devspec-0.1.0/packaging/winget/manifests/s/SpecLabs/Devspec/0.1.0 → devspec-0.1.1/packaging/winget/manifests/s/SpecLabs/Devspec/0.1.1}/SpecLabs.Devspec.installer.yaml +2 -2
- {devspec-0.1.0/packaging/winget/manifests/s/SpecLabs/Devspec/0.1.0 → devspec-0.1.1/packaging/winget/manifests/s/SpecLabs/Devspec/0.1.1}/SpecLabs.Devspec.locale.en-US.yaml +1 -1
- {devspec-0.1.0/packaging/winget/manifests/s/SpecLabs/Devspec/0.1.0 → devspec-0.1.1/packaging/winget/manifests/s/SpecLabs/Devspec/0.1.1}/SpecLabs.Devspec.yaml +1 -1
- {devspec-0.1.0 → devspec-0.1.1}/pyproject.toml +1 -1
- {devspec-0.1.0 → devspec-0.1.1}/src/devspec_installer/__init__.py +1 -1
- devspec-0.1.0/packaging/homebrew/devspec.rb +0 -19
- {devspec-0.1.0 → devspec-0.1.1}/.agents/rules/devspec-workflow.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-clarify.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-codebase-structure.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-coding-standards.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-diagram.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-extract.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-finalize.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-implement.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-projectcontext.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-review.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-rules.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-story.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-tasks.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.agents/skills/devspec-techstack.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-clarify/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-codebase-structure/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-coding-standards/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-diagram/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-extract/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-finalize/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-implement/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-projectcontext/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-review/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-rules/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-story/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-tasks/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.claude/skills/devspec-techstack/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.cursor/rules/devspec-workflow.mdc +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/clarify.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/codebase-structure.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/coding-standards.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/diagram.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/extract.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/finalize.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/implement.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/projectcontext.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/review.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/rules.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/story.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/tasks.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gemini/commands/devspec/techstack.toml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.clarify.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.codebase-structure.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.coding-standards.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.diagram.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.extract.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.finalize.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.implement-task.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.projectcontext.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.review.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.rules.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.story.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.tasks.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/agents/devspec.techstack.agent.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/PATTERNS.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/README.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.clarify.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.codebase-structure.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.coding-standards.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.diagram.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.extract.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.finalize.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.implement.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.projectcontext.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.review.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.rules.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.story.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.tasks.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/prompts/devspec.techstack.prompt.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/skills/exploration-recovery/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/workflows/python-package-ci.yml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.github/workflows/python-package-publish.yml +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/.gitignore +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/AGENTS.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/GEMINI.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/LICENSE +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/README.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/README.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/antigravity.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/claude-code.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/codex-skills/devspec-workflow/SKILL.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/codex.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/command-registry.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/compatibility-matrix.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/copilot.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/cursor.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/enterprise-governance.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/gemini-cli.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/adapters/validation-flows.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/_template/artifact-queue.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/_template/decision.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/_template/diagram.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/_template/overview.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/artifact-queue.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/diagrams/README.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/architecture/overview.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/constitution.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/codebase-structure.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/coding-standards.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/discovery-exclusions.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/exploration-state.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/extraction-state.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/project-context.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/provider-integrations.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/rules.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/_template/tech-stack.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/codebase-structure.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/coding-standards.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/discovery-exclusions.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/extraction-state.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/project-context.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/provider-integrations.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/rules.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/foundation/tech-stack.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/glossary.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/clarify.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/decisions.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/diagrams.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/finalize.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/implement.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/meta.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/notes.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/review.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/story.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/devspec/work-items/_template/tasks.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/docs/how-to/setup/README.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/docs/how-to/setup/manual-copy.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/docs/how-to/setup/uv.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/docs/how-to/setup/winget.md +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/packaging/devspec-profiles.json +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/scripts/test-local-install.ps1 +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/scripts/test-local-install.sh +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/src/devspec_installer/__main__.py +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/src/devspec_installer/cli.py +0 -0
- {devspec-0.1.0 → devspec-0.1.1}/tests/test_cli.py +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Homebrew Package Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version:
|
|
7
|
+
description: "Release version without the leading v"
|
|
8
|
+
required: true
|
|
9
|
+
default: "0.1.1"
|
|
10
|
+
push:
|
|
11
|
+
tags:
|
|
12
|
+
- "v*"
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
homebrew-package:
|
|
19
|
+
name: Generate Homebrew formula artifact
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Generate Homebrew formula
|
|
25
|
+
shell: bash
|
|
26
|
+
run: |
|
|
27
|
+
set -euo pipefail
|
|
28
|
+
|
|
29
|
+
version="${GITHUB_REF_NAME#v}"
|
|
30
|
+
if [[ "${GITHUB_REF_TYPE:-}" != "tag" ]]; then
|
|
31
|
+
version="${{ github.event.inputs.version }}"
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
tarball_url="https://github.com/speclabs/devspec/archive/refs/tags/v${version}.tar.gz"
|
|
35
|
+
sha256="$(curl -fsSL "${tarball_url}" | sha256sum | awk '{print $1}')"
|
|
36
|
+
|
|
37
|
+
mkdir -p "dist/homebrew/Formula"
|
|
38
|
+
cp packaging/homebrew/devspec.rb "dist/homebrew/Formula/devspec.rb"
|
|
39
|
+
sed -i \
|
|
40
|
+
-e "s#https://github.com/speclabs/devspec/archive/refs/tags/v[0-9][0-9.]*.tar.gz#${tarball_url}#g" \
|
|
41
|
+
-e "s#REPLACE_WITH_V[0-9_]*_RELEASE_SHA256#${sha256}#g" \
|
|
42
|
+
"dist/homebrew/Formula/devspec.rb"
|
|
43
|
+
|
|
44
|
+
echo "${sha256} devspec-v${version}.tar.gz" > "dist/homebrew/devspec-v${version}.tar.gz.sha256"
|
|
45
|
+
echo "Homebrew formula: dist/homebrew/Formula/devspec.rb"
|
|
46
|
+
echo "Source tarball SHA256: ${sha256}"
|
|
47
|
+
|
|
48
|
+
- name: Upload Homebrew package artifacts
|
|
49
|
+
uses: actions/upload-artifact@v4
|
|
50
|
+
with:
|
|
51
|
+
name: devspec-homebrew-package
|
|
52
|
+
path: |
|
|
53
|
+
dist/homebrew/Formula/devspec.rb
|
|
54
|
+
dist/homebrew/*.sha256
|
|
@@ -75,11 +75,12 @@ jobs:
|
|
|
75
75
|
shell: pwsh
|
|
76
76
|
run: |
|
|
77
77
|
$ErrorActionPreference = "Stop"
|
|
78
|
+
$version = if ($env:GITHUB_REF_NAME -match "^v(.+)$") { $Matches[1] } else { "0.1.1" }
|
|
78
79
|
$hash = (Get-FileHash dist\winget\devspec.exe -Algorithm SHA256).Hash.ToLowerInvariant()
|
|
79
80
|
"$hash devspec.exe" | Set-Content -Path dist\winget\devspec.exe.sha256 -Encoding ASCII
|
|
80
81
|
|
|
81
|
-
$sourceRoot = "packaging\winget\manifests\s\SpecLabs\Devspec
|
|
82
|
-
$manifestRoot = "dist\winget\manifests\s\SpecLabs\Devspec
|
|
82
|
+
$sourceRoot = "packaging\winget\manifests\s\SpecLabs\Devspec\$version"
|
|
83
|
+
$manifestRoot = "dist\winget\manifests\s\SpecLabs\Devspec\$version"
|
|
83
84
|
New-Item -ItemType Directory -Force -Path $manifestRoot | Out-Null
|
|
84
85
|
Copy-Item -Path "$sourceRoot\*.yaml" -Destination $manifestRoot
|
|
85
86
|
|
|
@@ -439,7 +439,7 @@ devspec sync --target . --profile all
|
|
|
439
439
|
`diff` and `sync --dry-run` report version context before the file report:
|
|
440
440
|
|
|
441
441
|
```text
|
|
442
|
-
Installed version: 0.1.
|
|
442
|
+
Installed version: 0.1.1
|
|
443
443
|
Package version: 0.2.0
|
|
444
444
|
Version status: upgrade available
|
|
445
445
|
```
|
|
@@ -511,26 +511,53 @@ Use provider-specific GitHub workflow filenames and display names. The current p
|
|
|
511
511
|
```text
|
|
512
512
|
.github/workflows/python-package-ci.yml
|
|
513
513
|
.github/workflows/python-package-publish.yml
|
|
514
|
+
.github/workflows/homebrew-package-publish.yml
|
|
514
515
|
.github/workflows/winget-package-publish.yml
|
|
515
516
|
```
|
|
516
517
|
|
|
517
518
|
Future package-provider workflows should follow the same pattern, such as `homebrew-package-publish.yml` or `npm-package-publish.yml`.
|
|
518
519
|
|
|
520
|
+
For Homebrew releases, publish the source formula through `speclabs/homebrew-tap` first. The tap-ready template files live in:
|
|
521
|
+
|
|
522
|
+
```text
|
|
523
|
+
packaging/homebrew/tap/Formula/devspec.rb
|
|
524
|
+
packaging/homebrew/tap/README.md
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
On `v*` tags, `.github/workflows/homebrew-package-publish.yml` generates `dist/homebrew/Formula/devspec.rb` with the tag-specific tarball URL and SHA256. Copy that generated formula to `Formula/devspec.rb` in the tap repository, then validate it from the tap checkout:
|
|
528
|
+
|
|
529
|
+
```text
|
|
530
|
+
brew audit --new --formula Formula/devspec.rb
|
|
531
|
+
brew install --build-from-source Formula/devspec.rb
|
|
532
|
+
brew test devspec
|
|
533
|
+
devspec version
|
|
534
|
+
devspec init --target "$(mktemp -d)" --profile core --repo-state existing
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
After pushing the tap, verify the public install path:
|
|
538
|
+
|
|
539
|
+
```text
|
|
540
|
+
brew install speclabs/tap/devspec
|
|
541
|
+
devspec doctor --target . --profile core
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
The first Homebrew release is source-only. Add bottles later after macOS and Linux source installs are stable.
|
|
545
|
+
|
|
519
546
|
For WinGet releases, publish the Windows portable executable from GitHub Releases and submit the generated manifest to `microsoft/winget-pkgs`:
|
|
520
547
|
|
|
521
548
|
```text
|
|
522
549
|
dist/winget/devspec.exe
|
|
523
550
|
dist/winget/devspec.exe.sha256
|
|
524
|
-
dist/winget/manifests/s/SpecLabs/Devspec/0.1.
|
|
525
|
-
dist/winget/manifests/s/SpecLabs/Devspec/0.1.
|
|
526
|
-
dist/winget/manifests/s/SpecLabs/Devspec/0.1.
|
|
551
|
+
dist/winget/manifests/s/SpecLabs/Devspec/0.1.1/SpecLabs.Devspec.yaml
|
|
552
|
+
dist/winget/manifests/s/SpecLabs/Devspec/0.1.1/SpecLabs.Devspec.locale.en-US.yaml
|
|
553
|
+
dist/winget/manifests/s/SpecLabs/Devspec/0.1.1/SpecLabs.Devspec.installer.yaml
|
|
527
554
|
```
|
|
528
555
|
|
|
529
556
|
The manifest path is case-sensitive and must match `PackageIdentifier: SpecLabs.Devspec`. Validate the generated manifest directory on Windows before submission:
|
|
530
557
|
|
|
531
558
|
```text
|
|
532
|
-
winget validate dist/winget/manifests/s/SpecLabs/Devspec/0.1.
|
|
533
|
-
winget install --manifest dist/winget/manifests/s/SpecLabs/Devspec/0.1.
|
|
559
|
+
winget validate dist/winget/manifests/s/SpecLabs/Devspec/0.1.1
|
|
560
|
+
winget install --manifest dist/winget/manifests/s/SpecLabs/Devspec/0.1.1
|
|
534
561
|
```
|
|
535
562
|
|
|
536
563
|
When adapter files are added, removed, or moved, update:
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Use this guide when your macOS or Linux team already uses Homebrew. Homebrew is a developer package manager: it installs command-line tools and can update them later.
|
|
4
4
|
|
|
5
|
-
The Homebrew package
|
|
5
|
+
The initial Homebrew package is published through the SpecLabs tap as a source formula. Bottled packages may be added after source installs are stable on macOS and Linux.
|
|
6
6
|
|
|
7
7
|
## Before You Start
|
|
8
8
|
|
|
9
9
|
- Homebrew must be installed. Use the official site: [Install Homebrew](https://brew.sh/).
|
|
10
|
-
- The
|
|
10
|
+
- The SpecLabs Homebrew tap must be reachable from your machine.
|
|
11
11
|
- Open your target repository in a terminal.
|
|
12
12
|
|
|
13
13
|
## Open A Terminal
|
|
@@ -25,9 +25,11 @@ cd /Users/me/code/my-app
|
|
|
25
25
|
Install the CLI:
|
|
26
26
|
|
|
27
27
|
```text
|
|
28
|
-
brew install
|
|
28
|
+
brew install speclabs/tap/devspec
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
If your environment cannot use the Homebrew tap yet, use [uv and uvx](uv.md) as the fallback.
|
|
32
|
+
|
|
31
33
|
Install devspec files into your repository:
|
|
32
34
|
|
|
33
35
|
```text
|
|
@@ -115,7 +117,7 @@ devspec init --target /Users/me/code/my-app --profile all --repo-state existing
|
|
|
115
117
|
|
|
116
118
|
| Argument | Meaning | Beginner explanation |
|
|
117
119
|
| --- | --- | --- |
|
|
118
|
-
| `brew install
|
|
120
|
+
| `brew install speclabs/tap/devspec` | Install the devspec CLI. | Installs from the public SpecLabs tap. Initial releases build from source. |
|
|
119
121
|
| `brew upgrade devspec` | Update the devspec CLI. | Updates the command-line tool. Run `devspec sync --dry-run` afterward to preview framework file changes. |
|
|
120
122
|
| `version` | Print the devspec CLI version. | Use this to confirm the command runs. It does not change files. |
|
|
121
123
|
| `init` | Install devspec files. | Copies framework files into your repo. |
|
|
@@ -133,6 +135,6 @@ devspec init --target /Users/me/code/my-app --profile all --repo-state existing
|
|
|
133
135
|
| Problem | What to try |
|
|
134
136
|
| --- | --- |
|
|
135
137
|
| `brew` is not found. | Install Homebrew, or use [uv and uvx](uv.md). |
|
|
136
|
-
|
|
|
138
|
+
| `brew install speclabs/tap/devspec` fails. | Confirm the tap is reachable and Homebrew can access GitHub. Use `uvx devspec ...` as the fallback. |
|
|
137
139
|
| `devspec` is not found after install. | Run `brew doctor`, then close and reopen your terminal. |
|
|
138
140
|
| Your team does not use Homebrew. | Use [uv and uvx](uv.md) instead. |
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Devspec < Formula
|
|
2
|
+
include Language::Python::Virtualenv
|
|
3
|
+
|
|
4
|
+
desc "Installer and synchronizer CLI for the devspec workflow framework"
|
|
5
|
+
homepage "https://github.com/speclabs/devspec"
|
|
6
|
+
url "https://github.com/speclabs/devspec/archive/refs/tags/v0.1.1.tar.gz"
|
|
7
|
+
sha256 "REPLACE_WITH_V0_1_1_RELEASE_SHA256"
|
|
8
|
+
license "Apache-2.0"
|
|
9
|
+
|
|
10
|
+
depends_on "python@3.12"
|
|
11
|
+
|
|
12
|
+
resource "hatchling" do
|
|
13
|
+
url "https://files.pythonhosted.org/packages/63/4c/8717ccb844b4fa5a5ba6352e97d743ed24e9a22cf90b7c109c17030a46a1/hatchling-1.30.1.tar.gz"
|
|
14
|
+
sha256 "eee4fd45357f72ebb3d7a42e5d72cfb5e29ed426d79e8836288926c4258d5f2e"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
resource "packaging" do
|
|
18
|
+
url "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz"
|
|
19
|
+
sha256 "ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
resource "pathspec" do
|
|
23
|
+
url "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz"
|
|
24
|
+
sha256 "17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
resource "pluggy" do
|
|
28
|
+
url "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz"
|
|
29
|
+
sha256 "7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
resource "trove-classifiers" do
|
|
33
|
+
url "https://files.pythonhosted.org/packages/c2/e3/7ca82ee24c82d344584abd5b8637b3bd056f2900226e8d82fc22f1184b92/trove_classifiers-2026.6.1.19.tar.gz"
|
|
34
|
+
sha256 "c5132b4b61a829d11cfbd2d72e97f20a45ed6edb95e45c5efdeb5e00836b2745"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def install
|
|
38
|
+
virtualenv_install_with_resources
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test do
|
|
42
|
+
assert_match version.to_s, shell_output("#{bin}/devspec version")
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Devspec < Formula
|
|
2
|
+
include Language::Python::Virtualenv
|
|
3
|
+
|
|
4
|
+
desc "Installer and synchronizer CLI for the devspec workflow framework"
|
|
5
|
+
homepage "https://github.com/speclabs/devspec"
|
|
6
|
+
url "https://github.com/speclabs/devspec/archive/refs/tags/v0.1.1.tar.gz"
|
|
7
|
+
sha256 "REPLACE_WITH_V0_1_1_RELEASE_SHA256"
|
|
8
|
+
license "Apache-2.0"
|
|
9
|
+
|
|
10
|
+
depends_on "python@3.12"
|
|
11
|
+
|
|
12
|
+
resource "hatchling" do
|
|
13
|
+
url "https://files.pythonhosted.org/packages/63/4c/8717ccb844b4fa5a5ba6352e97d743ed24e9a22cf90b7c109c17030a46a1/hatchling-1.30.1.tar.gz"
|
|
14
|
+
sha256 "eee4fd45357f72ebb3d7a42e5d72cfb5e29ed426d79e8836288926c4258d5f2e"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
resource "packaging" do
|
|
18
|
+
url "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz"
|
|
19
|
+
sha256 "ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
resource "pathspec" do
|
|
23
|
+
url "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz"
|
|
24
|
+
sha256 "17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
resource "pluggy" do
|
|
28
|
+
url "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz"
|
|
29
|
+
sha256 "7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
resource "trove-classifiers" do
|
|
33
|
+
url "https://files.pythonhosted.org/packages/c2/e3/7ca82ee24c82d344584abd5b8637b3bd056f2900226e8d82fc22f1184b92/trove_classifiers-2026.6.1.19.tar.gz"
|
|
34
|
+
sha256 "c5132b4b61a829d11cfbd2d72e97f20a45ed6edb95e45c5efdeb5e00836b2745"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def install
|
|
38
|
+
virtualenv_install_with_resources
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test do
|
|
42
|
+
assert_match version.to_s, shell_output("#{bin}/devspec version")
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SpecLabs Homebrew Tap Package
|
|
2
|
+
|
|
3
|
+
This directory contains the tap-ready files for `speclabs/homebrew-tap`.
|
|
4
|
+
|
|
5
|
+
Initial deployment is source-only. Bottles should be added after the formula has passed source install validation on macOS and Linux.
|
|
6
|
+
|
|
7
|
+
## Publish
|
|
8
|
+
|
|
9
|
+
Create or update the public tap repository:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
brew tap-new speclabs/tap
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
For release publishing, use the generated formula from the `Homebrew Package Publish` workflow. Copy `dist/homebrew/Formula/devspec.rb` into the tap repository so it lands at:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
Formula/devspec.rb
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Commit and push the tap. Users can then install with:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
brew install speclabs/tap/devspec
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Validate
|
|
28
|
+
|
|
29
|
+
Run these checks from the tap repository:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
brew audit --new --formula Formula/devspec.rb
|
|
33
|
+
brew install --build-from-source Formula/devspec.rb
|
|
34
|
+
brew test devspec
|
|
35
|
+
devspec version
|
|
36
|
+
devspec init --target "$(mktemp -d)" --profile core --repo-state existing
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
After the public tap is pushed, verify a clean install:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
brew install speclabs/tap/devspec
|
|
43
|
+
devspec doctor --target . --profile core
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Update A Release
|
|
47
|
+
|
|
48
|
+
For each new `devspec` tag:
|
|
49
|
+
|
|
50
|
+
1. Update `url` to the new GitHub tag tarball.
|
|
51
|
+
2. Use the `Homebrew Package Publish` workflow artifact to get the tag tarball checksum.
|
|
52
|
+
3. Run `brew update-python-resources --print-only devspec` from the tap when dependencies change.
|
|
53
|
+
4. Re-run the validation checks.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.12.0.schema.json
|
|
2
2
|
PackageIdentifier: SpecLabs.Devspec
|
|
3
|
-
PackageVersion: 0.1.
|
|
3
|
+
PackageVersion: 0.1.1
|
|
4
4
|
InstallerType: portable
|
|
5
5
|
Commands:
|
|
6
6
|
- devspec
|
|
7
7
|
Installers:
|
|
8
8
|
- Architecture: x64
|
|
9
|
-
InstallerUrl: https://github.com/speclabs/devspec/releases/download/v0.1.
|
|
9
|
+
InstallerUrl: https://github.com/speclabs/devspec/releases/download/v0.1.1/devspec.exe
|
|
10
10
|
InstallerSha256: REPLACE_WITH_RELEASE_SHA256
|
|
11
11
|
ManifestType: installer
|
|
12
12
|
ManifestVersion: 1.12.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.12.0.schema.json
|
|
2
2
|
PackageIdentifier: SpecLabs.Devspec
|
|
3
|
-
PackageVersion: 0.1.
|
|
3
|
+
PackageVersion: 0.1.1
|
|
4
4
|
PackageLocale: en-US
|
|
5
5
|
Publisher: SpecLabs
|
|
6
6
|
PublisherUrl: https://github.com/speclabs
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
class Devspec < Formula
|
|
2
|
-
include Language::Python::Virtualenv
|
|
3
|
-
|
|
4
|
-
desc "Installer and synchronizer CLI for the devspec workflow framework"
|
|
5
|
-
homepage "https://github.com/OWNER/devspec"
|
|
6
|
-
url "https://github.com/OWNER/devspec/archive/refs/tags/v0.1.0.tar.gz"
|
|
7
|
-
sha256 "REPLACE_WITH_RELEASE_SHA256"
|
|
8
|
-
license "Apache-2.0"
|
|
9
|
-
|
|
10
|
-
depends_on "python@3.12"
|
|
11
|
-
|
|
12
|
-
def install
|
|
13
|
-
virtualenv_install_with_resources
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
test do
|
|
17
|
-
assert_match version.to_s, shell_output("#{bin}/devspec version")
|
|
18
|
-
end
|
|
19
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|