feat: EPUPlayer release workflow with PyPI publishing#120
Conversation
Move fsrecorder from tools/fsrecorder/ to packages/smartem-fsrecorder/ with proper package structure: - pyproject.toml with hatchling build backend - Modular code: models, recorder, replayer, cli - Entry point: fsrecorder command - Tests with pytest - README with installation and usage docs Package name: smartem-fsrecorder Initial version: 1.0.0
Add release-fsrecorder.yml workflow: - Tag fsrecorder-v* triggers stable release to GitHub + PyPI - Push to main triggers RC pre-release to GitHub only - PR triggers build + test only - Tests on Linux and Windows - PyInstaller Windows exe build with smoke tests - PyPI Trusted Publisher publishing Add PR automation: - pr-admin.yml for auto-labeling and project board integration - labeler.yml with component labels for monorepo
Document key decisions for fsrecorder release workflow: - Dual distribution: Windows exe + Python package - Semantic versioning with fsrecorder-v* tags - RC releases on push to main, stable on tag - PyPI for stable releases only - Hybrid release notes generation
Delete tools/fsrecorder/ directory (code moved to packages/) Delete build_win_fsrecorder.yml (replaced by release-fsrecorder.yml)
Comprehensive rename of fsrecorder to epuplayer including: Package and module: - smartem-fsrecorder -> smartem-epuplayer - smartem_fsrecorder -> smartem_epuplayer Classes: - FSRecorder -> EPURecorder - FSReplayer -> EPUReplayer - FSEvent -> EPUEvent CLI and executables: - fsrecorder -> epuplayer - fsrecorder.exe -> epuplayer.exe CI/CD: - release-fsrecorder.yml -> release-epuplayer.yml - Tag pattern: fsrecorder-v* -> epuplayer-v* - Label: component:fsrecorder -> component:epuplayer Documentation: - ADR 0013 renamed and updated - e2e-simulation.md updated - deployment.md updated - smartem-agent-design.md updated - CLAUDE.md and ARCHITECTURE.md updated Tools: - E2E test scripts updated to use epuplayer CLI - Workspace pyproject.toml optional dep renamed
- Fix remaining documentation references to fsrecorder - Update recording filenames from _fsrecord to _epurecording - Add component:epuplayer label to GitHub labels config - Sync labels (deletes old component:fsrecorder, updates epuplayer)
|
CI Failures
PyPI Configuration Needed Yes, before the first publish you need to configure Trusted Publishers on PyPI:
This enables OIDC-based publishing (no API tokens needed). |
EPURecorder.watch_dir is intentionally resolved for consistent path handling. Test now compares against resolved fixture path to handle Windows short path forms (e.g., RUNNER~1 vs runneradmin).
|
Step 1: Create a PAT with project access
Step 2: Add secret to repo
Alternatively, if you have the token already, you can add it via CLI: |
- Update labeler.yml to use labels from github-labels-config.ts - Map docs → documentation, ci → devops, webui → smartem-devtools:webui, etc. - Add component:smartem-workspace to labels config - Sync labels (delete orphaned labels, create missing ones) This prevents github-actions bot from recreating unofficial labels that were deleted by the label sync script.
Summary
Implements GitHub Releases and PyPI publishing for EPUPlayer tool with:
epuplayer-v*)Closes #117
Changes
Package Restructuring
tools/fsrecorder/topackages/smartem-epuplayer/epuplayercommandRelease Workflow
release-epuplayer.yml: Tag → stable release (GitHub + PyPI), main push → RC (GitHub only)PR Automation
pr-admin.ymlfor auto-labeling and project board integrationlabeler.ymlwithcomponent:epuplayerlabel for monorepoDocumentation
E2E Test Scripts
epuplayerCLISetup Required After Merge
smartem-epuplayerPROJECT_TOKENsecret for project board automation (or use org-level permissions)pypiTest plan
epuplayer-v1.0.0pip install smartem-epuplayerepuplayer.exe --help