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
89 changes: 89 additions & 0 deletions .github/workflows/release-py.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# PyPI 배포: Repository Settings → Secrets and variables → Actions 에서 PYPI_TOKEN (PyPI API token) 등록 필요.
name: Release Python packages

on:
push:
tags:
- "v*"
workflow_dispatch:

permissions:
contents: read

jobs:
publish-planforge-core:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"

- name: Install build tools
run: pip install build twine

- name: Verify tag version matches planforge-core version
if: github.event_name == 'push'
working-directory: packages/core
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
CORE_VERSION=$(grep -E '^version\s*=' pyproject.toml | sed 's/.*=\s*"\(.*\)".*/\1/')
echo "Tag version: ${TAG_VERSION}"
echo "planforge-core version: ${CORE_VERSION}"
if [[ "${TAG_VERSION}" != "${CORE_VERSION}" ]]; then
echo "Tag version and planforge-core version must match."
exit 1
fi

- name: Build planforge-core
working-directory: packages/core
run: python -m build

- name: Publish planforge-core to PyPI
working-directory: packages/core
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: twine upload dist/*

publish-planforge-cli:
runs-on: ubuntu-latest
needs: publish-planforge-core
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"

- name: Install build tools
run: pip install build twine

- name: Verify tag version matches planforge (CLI) version
if: github.event_name == 'push'
working-directory: packages/cli-py
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
CLI_VERSION=$(grep -E '^version\s*=' pyproject.toml | sed 's/.*=\s*"\(.*\)".*/\1/')
echo "Tag version: ${TAG_VERSION}"
echo "planforge (CLI) version: ${CLI_VERSION}"
if [[ "${TAG_VERSION}" != "${CLI_VERSION}" ]]; then
echo "Tag version and planforge CLI version must match."
exit 1
fi

- name: Build planforge CLI
working-directory: packages/cli-py
run: python -m build

- name: Publish planforge CLI to PyPI
working-directory: packages/cli-py
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: twine upload dist/*
2 changes: 1 addition & 1 deletion packages/cli-js/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "planforge",
"version": "0.1.4",
"version": "0.1.5",
"type": "module",
"description": "PlanForge CLI - Bring your own AI to Cursor",
"keywords": ["cursor", "claude", "codex", "ai", "cli", "planning", "planforge"],
Expand Down
2 changes: 1 addition & 1 deletion packages/cli-py/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "planforge"
version = "0.1.0"
version = "0.1.5"
description = "PlanForge CLI - Bring your own AI to Cursor"
requires-python = ">=3.10"
dependencies = [
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@planforge/core",
"version": "0.1.4",
"version": "0.1.5",
"description": "PlanForge shared prompts",
"license": "MIT",
"files": ["prompts", "models.json"]
Expand Down
2 changes: 1 addition & 1 deletion packages/core/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "planforge-core"
version = "0.1.4"
version = "0.1.5"
description = "PlanForge shared prompts"
requires-python = ">=3.10"

Expand Down