Files
pymc_console-dist/RELEASE.md
GitHub Actions Bot 8c377634aa Sync build v0.6.79
Automated sync from private repository.
Commit: b73bd1649d6337a28052f0e296c9d09fa9f03641
2025-12-28 06:04:05 +00:00

314 lines
7.2 KiB
Markdown

# pyMC UI Release Guide
Complete guide for developers to create and publish new releases of the pyMC UI.
## Table of Contents
- [Quick Release Steps](#quick-release-steps)
- [Understanding the Release Process](#understanding-the-release-process)
- [Manual Build Process](#manual-build-process)
- [Troubleshooting](#troubleshooting)
- [Version Numbering](#version-numbering)
---
## Quick Release Steps
For experienced developers, here's the TL;DR:
```bash
cd pymc_console/frontend
# 1. Update version (creates git tag automatically if configured)
npm version patch
# 2. Push changes and tag
git push origin main
git push origin --tags
# Done! Check GitHub Actions for build status
```
---
## Understanding the Release Process
### What Happens Automatically
This project uses **GitHub Actions** for continuous integration and deployment:
#### On Every Push to `main` or `dev`:
- ✅ Installs dependencies
- ✅ Builds static files (`npm run build:static`)
- ✅ Creates versioned `.tar.gz` and `.zip` archives
- ✅ Uploads build artifacts to GitHub (available for 30 days)
- ❌ Does NOT create a GitHub Release
#### On Version Tag Push (e.g., `v0.1.1`):
- ✅ Everything above, PLUS
- ✅ Creates a GitHub Release
- ✅ Attaches downloadable archives to the release
- ✅ Generates automatic release notes from commits
### The Workflow File
Located at: `.github/workflows/build-ui.yml`
This workflow has two jobs:
1. **build** - Runs on all pushes and PRs
2. **release** - Only runs when a tag starting with `v` is pushed
---
## Detailed Release Steps
### Step 1: Make Your Changes
Work on your feature branch as normal:
```bash
git checkout -b feature/my-new-feature
# ... make changes ...
git add .
git commit -m "feat: add awesome new feature"
git push origin feature/my-new-feature
```
Create a PR, get it reviewed, and merge to `main`.
### Step 2: Decide on Version Number
Use [Semantic Versioning](https://semver.org/):
- **MAJOR** (`1.0.0``2.0.0`) - Breaking changes
- **MINOR** (`0.1.0``0.2.0`) - New features, backwards compatible
- **PATCH** (`0.1.1``0.1.2`) - Bug fixes only
### Step 3: Update Version
Navigate to the frontend directory:
```bash
cd pymc_console/frontend
```
Run the appropriate npm version command:
```bash
# For bug fixes
npm version patch
# For new features
npm version minor
# For breaking changes
npm version major
# For pre-releases
npm version prerelease --preid=beta
```
**What this does:**
- Updates `version` in `package.json` and `package-lock.json`
- Creates a git commit with message like "0.1.2"
- Creates a git tag like `v0.1.2` (if git is configured properly)
### Step 4: Push Changes and Tags
Push your version commit:
```bash
git push origin main
```
Push the tag to trigger the release:
```bash
git push origin --tags
```
Or push a specific tag:
```bash
git push origin v0.1.2
```
### Step 5: Monitor the Release
1. Go to your repository on GitHub
2. Click the **Actions** tab
3. You should see a workflow running for your tag
4. Wait for both jobs (build and release) to complete
### Step 6: Verify the Release
Once the workflow completes:
1. Go to the **Releases** section of your GitHub repo
2. You should see your new release (e.g., `v0.1.2`)
3. It should have two attached files:
- `pymc-ui-v0.1.2.tar.gz`
- `pymc-ui-v0.1.2.zip`
4. Release notes are auto-generated from commit messages
---
## Manual Build Process
If you need to build locally without creating a release:
```bash
cd pymc_console/frontend
# Install dependencies (first time only)
npm install
# Build static files
npm run build:static
```
The output will be in `frontend/dist/` directory.
### What the Build Does
1. `vite build` - Compiles React app to static HTML/CSS/JS
2. Outputs to `frontend/out/`
3. Copies `out/` contents to `frontend/dist/`
---
## Troubleshooting
### "Release job was skipped"
**Problem:** You pushed code but no GitHub Release was created.
**Solution:** The release job only runs for version tags. Make sure you:
1. Created a tag with `npm version` or `git tag v0.1.x`
2. Pushed the tag with `git push origin --tags`
3. The tag name starts with `v` (e.g., `v0.1.2`, not `0.1.2`)
### "Build failed: npm ERR! code ELIFECYCLE"
**Problem:** The build process failed.
**Solution:**
1. Pull the latest code: `git pull origin main`
2. Clean install locally: `cd frontend && rm -rf node_modules package-lock.json && npm install`
3. Test build locally: `npm run build:static`
4. Fix any errors before pushing
### "Tag already exists"
**Problem:** You tried to create a tag that already exists.
**Solution:**
```bash
# Delete local tag
git tag -d v0.1.2
# Delete remote tag (if already pushed)
git push origin :refs/tags/v0.1.2
# Create new tag
npm version patch
git push origin --tags
```
### "Permission denied" when creating release
**Problem:** GitHub Actions doesn't have permission to create releases.
**Solution:** The workflow already has `permissions: contents: write` set. Check your repository settings:
1. Go to Settings → Actions → General
2. Under "Workflow permissions", ensure "Read and write permissions" is selected
---
## Version Numbering
### Semantic Versioning Format
`MAJOR.MINOR.PATCH` (e.g., `0.1.2`)
### When to Increment Each Part
| Change Type | Example | Command | Version Change |
|-------------|---------|---------|----------------|
| Bug fix | Fix broken map display | `npm version patch` | `0.1.1``0.1.2` |
| New feature | Add dark mode | `npm version minor` | `0.1.2``0.2.0` |
| Breaking change | Require new API version | `npm version major` | `0.2.0``1.0.0` |
| Pre-release | Beta testing | `npm version prerelease --preid=beta` | `0.1.2``0.1.3-beta.0` |
### Pre-release Tags
For alpha, beta, or release candidate versions:
```bash
# First beta
npm version 0.2.0-beta.1
# Subsequent betas
npm version prerelease --preid=beta # 0.2.0-beta.2
# Release candidate
npm version 0.2.0-rc.1
# Final release
npm version 0.2.0
```
Pre-releases are automatically marked as "Pre-release" on GitHub.
---
## End User Deployment
Once a release is published, end users can deploy it:
### Download and Extract
```bash
# Download latest release
wget https://github.com/dmduran12/pymc_console/releases/download/v0.2.0/pymc-ui-v0.2.0.tar.gz
# Extract to pyMC_Repeater's web directory
tar -xzf pymc-ui-v0.2.0.tar.gz -C /opt/pymc_repeater/repeater/web/html/
# Or use zip
unzip pymc-ui-v0.2.0.zip -d /opt/pymc_repeater/repeater/web/html/
```
### Configure Backend
The backend (pyMC_API) should be configured to serve these static files. Users control where they deploy the UI files.
---
## Quick Reference Commands
```bash
# View current version
cat frontend/package.json | grep version
# List all tags
git tag --list
# View latest tag
git describe --tags --abbrev=0
# Delete local tag
git tag -d v0.1.2
# Delete remote tag
git push origin :refs/tags/v0.1.2
# Create tag manually (if npm version didn't work)
git tag v0.1.2
git push origin v0.1.2
# Check GitHub Actions status
# Visit: https://github.com/dmduran12/pymc_console/actions
```
---
## Need Help?
- Check GitHub Actions logs for detailed error messages
- Review commit messages to ensure they follow conventions
- Test builds locally before pushing tags
- Ask in the project's discussion forum or issues section