447 lines
8.5 KiB
Markdown
447 lines
8.5 KiB
Markdown
|
|
<div align="center">
|
||
|
|
<img src="../imgs/typedialog_logo_h_s.svg" alt="TypeDialog Logo" width="600" />
|
||
|
|
</div>
|
||
|
|
|
||
|
|
# Release Workflow
|
||
|
|
|
||
|
|
Guide for preparing and publishing TypeDialog releases.
|
||
|
|
|
||
|
|
## Release Stages
|
||
|
|
|
||
|
|
Complete release workflow has 4 stages:
|
||
|
|
|
||
|
|
1. **Build** - Compile binaries (see [BUILD.md](BUILD.md))
|
||
|
|
2. **Package** - Create distribution archives
|
||
|
|
3. **Prepare** - Generate checksums and release notes
|
||
|
|
4. **Publish** - Upload to GitHub
|
||
|
|
|
||
|
|
## Stage 1: Build Binaries
|
||
|
|
|
||
|
|
See [BUILD.md](BUILD.md#building-binaries) for complete build instructions.
|
||
|
|
|
||
|
|
Quick reference:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build release binaries
|
||
|
|
just distro::build-release
|
||
|
|
|
||
|
|
# Or cross-compile all platforms
|
||
|
|
just distro::cross
|
||
|
|
```
|
||
|
|
|
||
|
|
**Output**: Binaries in `target/release/`
|
||
|
|
|
||
|
|
## Stage 2: Create Distribution Package
|
||
|
|
|
||
|
|
Package includes binaries, configs, and installers:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create distribution
|
||
|
|
just distro::create-package
|
||
|
|
```
|
||
|
|
|
||
|
|
**Output:** `distribution/typedialog-0.1.0/`
|
||
|
|
|
||
|
|
Contains:
|
||
|
|
- `bin/` - Compiled binaries
|
||
|
|
- `config/` - Configuration templates
|
||
|
|
- `installers/` - Installation scripts
|
||
|
|
- `MANIFEST.json` - Package metadata
|
||
|
|
|
||
|
|
See [BUILD.md](BUILD.md#distribution-structure) for details.
|
||
|
|
|
||
|
|
## Stage 3: Prepare Release
|
||
|
|
|
||
|
|
Generate checksums and release notes:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Generate checksums
|
||
|
|
just distro::create-checksums
|
||
|
|
|
||
|
|
# Prepare release
|
||
|
|
just distro::package-release
|
||
|
|
```
|
||
|
|
|
||
|
|
**Output:** `release/`
|
||
|
|
|
||
|
|
```
|
||
|
|
release/
|
||
|
|
├── typedialog-0.1.0.tar.gz # Distribution package
|
||
|
|
├── SHA256SUMS # Checksums
|
||
|
|
└── RELEASE_NOTES.md # Release documentation
|
||
|
|
```
|
||
|
|
|
||
|
|
### Checksums
|
||
|
|
|
||
|
|
Verify package integrity:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# On your machine
|
||
|
|
sha256sum -c SHA256SUMS
|
||
|
|
|
||
|
|
# For users
|
||
|
|
sha256sum typedialog-0.1.0.tar.gz
|
||
|
|
# Compare with SHA256SUMS
|
||
|
|
```
|
||
|
|
|
||
|
|
### Release Notes
|
||
|
|
|
||
|
|
Auto-generated with:
|
||
|
|
- Installation instructions (all platforms)
|
||
|
|
- Verification steps
|
||
|
|
- Contents summary
|
||
|
|
- Platform support matrix
|
||
|
|
|
||
|
|
Edit `release/RELEASE_NOTES.md` if needed:
|
||
|
|
```bash
|
||
|
|
nano release/RELEASE_NOTES.md
|
||
|
|
```
|
||
|
|
|
||
|
|
## Stage 4: GitHub Release
|
||
|
|
|
||
|
|
### Create Release with GitHub CLI
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create release
|
||
|
|
gh release create v0.1.0 \
|
||
|
|
release/typedialog-0.1.0.tar.gz \
|
||
|
|
release/SHA256SUMS \
|
||
|
|
--title "TypeDialog 0.1.0" \
|
||
|
|
--notes-file release/RELEASE_NOTES.md
|
||
|
|
```
|
||
|
|
|
||
|
|
### Create Release via Web UI
|
||
|
|
|
||
|
|
1. Go to [GitHub Releases](https://github.com/anthropics/typedialog/releases)
|
||
|
|
2. Click "Draft a new release"
|
||
|
|
3. Fill in:
|
||
|
|
- **Tag version**: `v0.1.0`
|
||
|
|
- **Release title**: `TypeDialog 0.1.0`
|
||
|
|
- **Description**: Copy from `release/RELEASE_NOTES.md`
|
||
|
|
4. Upload files:
|
||
|
|
- `release/typedialog-0.1.0.tar.gz`
|
||
|
|
- `release/SHA256SUMS`
|
||
|
|
5. Publish
|
||
|
|
|
||
|
|
## Complete Release Example
|
||
|
|
|
||
|
|
Step-by-step release process:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. Update version in Cargo.toml
|
||
|
|
nano crates/typedialog-core/Cargo.toml
|
||
|
|
# Change version = "0.1.0" to new version
|
||
|
|
|
||
|
|
# 2. Commit version change
|
||
|
|
git add crates/typedialog-core/Cargo.toml
|
||
|
|
git commit -m "chore: bump version to 0.1.0"
|
||
|
|
|
||
|
|
# 3. Run full CI/CD
|
||
|
|
just ci-full
|
||
|
|
|
||
|
|
# 4. Build and package
|
||
|
|
just distro::build-release
|
||
|
|
just distro::create-package
|
||
|
|
just distro::create-checksums
|
||
|
|
|
||
|
|
# 5. Prepare release
|
||
|
|
just distro::package-release
|
||
|
|
|
||
|
|
# 6. Verify contents
|
||
|
|
just distro::list-packages
|
||
|
|
|
||
|
|
# 7. Review release notes
|
||
|
|
cat release/RELEASE_NOTES.md
|
||
|
|
|
||
|
|
# 8. Create git tag
|
||
|
|
git tag -a v0.1.0 -m "Release 0.1.0"
|
||
|
|
git push origin v0.1.0
|
||
|
|
|
||
|
|
# 9. Create GitHub release
|
||
|
|
gh release create v0.1.0 \
|
||
|
|
release/typedialog-0.1.0.tar.gz \
|
||
|
|
release/SHA256SUMS \
|
||
|
|
--title "TypeDialog 0.1.0" \
|
||
|
|
--notes-file release/RELEASE_NOTES.md
|
||
|
|
|
||
|
|
# 10. Verify installation works
|
||
|
|
curl -fsSL https://github.com/anthropics/typedialog/releases/download/v0.1.0/install.sh | bash
|
||
|
|
typedialog --version
|
||
|
|
```
|
||
|
|
|
||
|
|
## Installation Verification
|
||
|
|
|
||
|
|
After release, verify installation methods work:
|
||
|
|
|
||
|
|
### Linux/macOS
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Download and run installer
|
||
|
|
curl -fsSL https://github.com/anthropics/typedialog/releases/download/v0.1.0/install.sh | bash
|
||
|
|
|
||
|
|
# Verify
|
||
|
|
typedialog --version
|
||
|
|
typedialog-tui --version
|
||
|
|
typedialog-web --version
|
||
|
|
```
|
||
|
|
|
||
|
|
### Windows PowerShell
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
# Download and run installer
|
||
|
|
irm https://github.com/anthropics/typedialog/releases/download/v0.1.0/install.ps1 | iex
|
||
|
|
|
||
|
|
# Verify
|
||
|
|
typedialog --version
|
||
|
|
typedialog-tui --version
|
||
|
|
typedialog-web --version
|
||
|
|
```
|
||
|
|
|
||
|
|
### Manual Installation
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Extract distribution
|
||
|
|
tar -xzf typedialog-0.1.0.tar.gz
|
||
|
|
cd typedialog-0.1.0
|
||
|
|
|
||
|
|
# Install
|
||
|
|
bash installers/install.sh
|
||
|
|
|
||
|
|
# Verify
|
||
|
|
typedialog --version
|
||
|
|
```
|
||
|
|
|
||
|
|
## Distribution Structure
|
||
|
|
|
||
|
|
### Inside typedialog-0.1.0.tar.gz
|
||
|
|
|
||
|
|
```
|
||
|
|
typedialog-0.1.0/
|
||
|
|
├── bin/
|
||
|
|
│ ├── typedialog # CLI binary
|
||
|
|
│ ├── typedialog-tui # TUI binary
|
||
|
|
│ └── typedialog-web # Web binary
|
||
|
|
├── config/
|
||
|
|
│ ├── cli/
|
||
|
|
│ │ ├── default.toml
|
||
|
|
│ │ ├── dev.toml
|
||
|
|
│ │ └── production.toml
|
||
|
|
│ ├── tui/
|
||
|
|
│ │ ├── default.toml
|
||
|
|
│ │ ├── dev.toml
|
||
|
|
│ │ └── production.toml
|
||
|
|
│ └── web/
|
||
|
|
│ ├── default.toml
|
||
|
|
│ ├── dev.toml
|
||
|
|
│ └── production.toml
|
||
|
|
├── installers/
|
||
|
|
│ ├── install.sh # Linux/macOS
|
||
|
|
│ ├── install.ps1 # Windows
|
||
|
|
│ └── README.md # Instructions
|
||
|
|
└── MANIFEST.json # Metadata
|
||
|
|
```
|
||
|
|
|
||
|
|
### MANIFEST.json
|
||
|
|
|
||
|
|
Package metadata with structure and contents:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"name": "typedialog",
|
||
|
|
"version": "0.1.0",
|
||
|
|
"created": "2024-12-17T12:00:00Z",
|
||
|
|
"structure": {...},
|
||
|
|
"binaries": [...],
|
||
|
|
"configs": {...},
|
||
|
|
"installers": {...}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Security Considerations
|
||
|
|
|
||
|
|
### Checksums
|
||
|
|
|
||
|
|
Always provide checksums:
|
||
|
|
```bash
|
||
|
|
sha256sum typedialog-0.1.0.tar.gz > SHA256SUMS
|
||
|
|
```
|
||
|
|
|
||
|
|
Users verify with:
|
||
|
|
```bash
|
||
|
|
sha256sum -c SHA256SUMS
|
||
|
|
```
|
||
|
|
|
||
|
|
### Installation Scripts
|
||
|
|
|
||
|
|
Review before releasing:
|
||
|
|
```bash
|
||
|
|
# Linux/macOS
|
||
|
|
less installers/bootstrap/install.sh
|
||
|
|
|
||
|
|
# Windows
|
||
|
|
less installers/bootstrap/install.ps1
|
||
|
|
```
|
||
|
|
|
||
|
|
### Production Configurations
|
||
|
|
|
||
|
|
Verify security settings in production configs:
|
||
|
|
|
||
|
|
```toml
|
||
|
|
# config/web/production.toml
|
||
|
|
[security]
|
||
|
|
require_https = true
|
||
|
|
csrf_enabled = true
|
||
|
|
rate_limit = 100
|
||
|
|
add_security_headers = true
|
||
|
|
```
|
||
|
|
|
||
|
|
See [CONFIGURATION.md](CONFIGURATION.md) for all settings.
|
||
|
|
|
||
|
|
## Continuous Integration
|
||
|
|
|
||
|
|
### GitHub Actions
|
||
|
|
|
||
|
|
Example CI workflow for automated releases:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# .github/workflows/release.yml
|
||
|
|
on:
|
||
|
|
push:
|
||
|
|
tags:
|
||
|
|
- 'v*'
|
||
|
|
|
||
|
|
jobs:
|
||
|
|
release:
|
||
|
|
runs-on: ubuntu-latest
|
||
|
|
steps:
|
||
|
|
- uses: actions/checkout@v2
|
||
|
|
- uses: rust-lang/rust-action@v1
|
||
|
|
|
||
|
|
- name: Build release
|
||
|
|
run: just distro::build-release
|
||
|
|
|
||
|
|
- name: Create package
|
||
|
|
run: just distro::create-package
|
||
|
|
|
||
|
|
- name: Generate checksums
|
||
|
|
run: just distro::create-checksums
|
||
|
|
|
||
|
|
- name: Prepare release
|
||
|
|
run: just distro::package-release
|
||
|
|
|
||
|
|
- name: Create GitHub release
|
||
|
|
uses: softprops/action-gh-release@v1
|
||
|
|
with:
|
||
|
|
files: |
|
||
|
|
release/typedialog-*.tar.gz
|
||
|
|
release/SHA256SUMS
|
||
|
|
env:
|
||
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Release file not found
|
||
|
|
|
||
|
|
Ensure files exist in `release/`:
|
||
|
|
```bash
|
||
|
|
just distro::list-packages
|
||
|
|
ls -la release/
|
||
|
|
```
|
||
|
|
|
||
|
|
### Checksum mismatch
|
||
|
|
|
||
|
|
Regenerate checksums:
|
||
|
|
```bash
|
||
|
|
just distro::create-checksums
|
||
|
|
```
|
||
|
|
|
||
|
|
### Installation script fails
|
||
|
|
|
||
|
|
Test locally:
|
||
|
|
```bash
|
||
|
|
# macOS/Linux
|
||
|
|
bash installers/bootstrap/install.sh
|
||
|
|
|
||
|
|
# Windows
|
||
|
|
pwsh installers/bootstrap/install.ps1
|
||
|
|
```
|
||
|
|
|
||
|
|
### GitHub release failed
|
||
|
|
|
||
|
|
Check permissions:
|
||
|
|
```bash
|
||
|
|
gh auth status
|
||
|
|
gh release list
|
||
|
|
```
|
||
|
|
|
||
|
|
## Release Checklist
|
||
|
|
|
||
|
|
Before releasing:
|
||
|
|
|
||
|
|
- [ ] Version updated in `crates/typedialog-core/Cargo.toml`
|
||
|
|
- [ ] All tests passing: `just ci::full`
|
||
|
|
- [ ] Binaries built: `just distro::build-release`
|
||
|
|
- [ ] Package created: `just distro::create-package`
|
||
|
|
- [ ] Checksums verified: `just distro::create-checksums`
|
||
|
|
- [ ] Release notes generated: `just distro::package-release`
|
||
|
|
- [ ] Installation tested (at least one platform)
|
||
|
|
- [ ] GitHub tag created: `git tag v0.1.0`
|
||
|
|
- [ ] Release published to GitHub
|
||
|
|
- [ ] Documentation updated
|
||
|
|
|
||
|
|
## Release Notes Template
|
||
|
|
|
||
|
|
When editing `release/RELEASE_NOTES.md`:
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
# TypeDialog 0.1.0
|
||
|
|
|
||
|
|
## What's New
|
||
|
|
|
||
|
|
- Feature 1
|
||
|
|
- Feature 2
|
||
|
|
- Bug fix 1
|
||
|
|
|
||
|
|
## Installation
|
||
|
|
|
||
|
|
### Linux/macOS
|
||
|
|
\`\`\`bash
|
||
|
|
curl -fsSL https://github.com/.../install.sh | bash
|
||
|
|
\`\`\`
|
||
|
|
|
||
|
|
### Windows
|
||
|
|
\`\`\`powershell
|
||
|
|
irm https://github.com/.../install.ps1 | iex
|
||
|
|
\`\`\`
|
||
|
|
|
||
|
|
## Verification
|
||
|
|
|
||
|
|
\`\`\`bash
|
||
|
|
sha256sum -c SHA256SUMS
|
||
|
|
\`\`\`
|
||
|
|
|
||
|
|
## Downloads
|
||
|
|
|
||
|
|
- typedialog-0.1.0.tar.gz
|
||
|
|
- SHA256SUMS
|
||
|
|
|
||
|
|
## Platforms
|
||
|
|
|
||
|
|
- Linux x86_64, ARM64
|
||
|
|
- macOS Intel, Apple Silicon
|
||
|
|
- Windows x86_64
|
||
|
|
```
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
- [BUILD.md](BUILD.md) - Building binaries
|
||
|
|
- [CONFIGURATION.md](CONFIGURATION.md) - Configuration options
|
||
|
|
- [INSTALLATION.md](INSTALLATION.md) - User installation guide
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Release complete!** 🎉
|
||
|
|
|
||
|
|
Users can now install via automated installers.
|