366 lines
7.8 KiB
Markdown
366 lines
7.8 KiB
Markdown
# Publishing Guide for finish.sh
|
|
|
|
This guide explains how to publish and distribute finish.sh through various channels.
|
|
|
|
## Overview
|
|
|
|
finish.sh can be distributed through multiple channels:
|
|
1. **Direct installation script** - One-line curl install
|
|
2. **Debian/Ubuntu packages** - APT repository
|
|
3. **Homebrew** - macOS package manager
|
|
4. **Docker** - Container images
|
|
5. **GitHub Releases** - Direct downloads
|
|
|
|
## Prerequisites
|
|
|
|
Before publishing, ensure:
|
|
- [ ] All tests pass (`./run_tests.sh`)
|
|
- [ ] Version numbers are updated in all files
|
|
- [ ] CHANGELOG.md is updated
|
|
- [ ] Documentation is complete and accurate
|
|
|
|
## Version Management
|
|
|
|
Update version numbers in these files:
|
|
1. `finish.sh` - Line 34: `export ACSH_VERSION=0.5.0`
|
|
2. `debian/changelog` - Add new entry
|
|
3. `homebrew/finish.rb` - Line 6: `version "0.5.0"`
|
|
4. `docs/install.sh` - Line 7: `ACSH_VERSION="v0.5.0"`
|
|
5. `Dockerfile` - Line 6: `LABEL version="0.5.0"`
|
|
|
|
## 1. Direct Installation Script
|
|
|
|
The install script at `docs/install.sh` enables one-line installation:
|
|
|
|
```bash
|
|
curl -sSL https://git.appmodel.nl/Tour/finish/raw/branch/main/docs/install.sh | bash
|
|
```
|
|
|
|
### Setup:
|
|
- Host the script on a reliable server or GitHub/GitLab
|
|
- Ensure the URL is accessible and supports HTTPS
|
|
- Test the installation on clean systems
|
|
|
|
### Testing:
|
|
```bash
|
|
# Test in Docker
|
|
docker run --rm -it ubuntu:22.04 bash
|
|
curl -sSL YOUR_URL/install.sh | bash
|
|
```
|
|
|
|
## 2. Debian/Ubuntu Packages
|
|
|
|
### Building the Package
|
|
|
|
```bash
|
|
# Install build tools
|
|
sudo apt-get install debhelper devscripts
|
|
|
|
# Build the package
|
|
dpkg-buildpackage -us -uc -b
|
|
|
|
# This creates:
|
|
# ../finish_0.5.0-1_all.deb
|
|
```
|
|
|
|
### Testing the Package
|
|
|
|
```bash
|
|
# Install locally
|
|
sudo dpkg -i ../finish_*.deb
|
|
sudo apt-get install -f # Fix dependencies
|
|
|
|
# Test installation
|
|
finish --help
|
|
finish install
|
|
```
|
|
|
|
### Creating an APT Repository
|
|
|
|
#### Option A: Using Packagecloud (Recommended for beginners)
|
|
|
|
1. Sign up at https://packagecloud.io
|
|
2. Create a repository
|
|
3. Upload your .deb file:
|
|
```bash
|
|
gem install package_cloud
|
|
package_cloud push yourname/finish/ubuntu/jammy ../finish_*.deb
|
|
```
|
|
|
|
Users install with:
|
|
```bash
|
|
curl -s https://packagecloud.io/install/repositories/yourname/finish/script.deb.sh | sudo bash
|
|
sudo apt-get install finish
|
|
```
|
|
|
|
#### Option B: Using GitHub Pages + reprepro
|
|
|
|
1. Create a repository structure:
|
|
```bash
|
|
mkdir -p apt-repo/{conf,pool,dists}
|
|
```
|
|
|
|
2. Create `apt-repo/conf/distributions`:
|
|
```
|
|
Origin: finish.sh
|
|
Label: finish
|
|
Codename: stable
|
|
Architectures: all
|
|
Components: main
|
|
Description: APT repository for finish.sh
|
|
```
|
|
|
|
3. Add packages:
|
|
```bash
|
|
reprepro -b apt-repo includedeb stable ../finish_*.deb
|
|
```
|
|
|
|
4. Host on GitHub Pages or your server
|
|
|
|
Users install with:
|
|
```bash
|
|
echo "deb https://your-domain.com/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/finish.list
|
|
curl -fsSL https://your-domain.com/apt-repo/key.gpg | sudo apt-key add -
|
|
sudo apt-get update
|
|
sudo apt-get install finish
|
|
```
|
|
|
|
## 3. Homebrew Formula
|
|
|
|
### Creating a Homebrew Tap
|
|
|
|
1. Create a GitHub repository: `homebrew-finish`
|
|
|
|
2. Add the formula to `Formula/finish.rb`
|
|
|
|
3. Create a release tarball and calculate SHA256:
|
|
```bash
|
|
git archive --format=tar.gz --prefix=finish-0.5.0/ v0.5.0 > finish-0.5.0.tar.gz
|
|
sha256sum finish-0.5.0.tar.gz
|
|
```
|
|
|
|
4. Update the formula with the correct URL and SHA256
|
|
|
|
5. Test the formula:
|
|
```bash
|
|
brew install --build-from-source ./homebrew/finish.rb
|
|
brew test finish
|
|
brew audit --strict finish
|
|
```
|
|
|
|
### Publishing the Tap
|
|
|
|
Users can install with:
|
|
```bash
|
|
brew tap yourname/finish
|
|
brew install finish
|
|
```
|
|
|
|
Or directly:
|
|
```bash
|
|
brew install yourname/finish/finish
|
|
```
|
|
|
|
## 4. Docker Images
|
|
|
|
### Building Images
|
|
|
|
```bash
|
|
# Production image
|
|
docker build -t finish:0.5.0 -t finish:latest .
|
|
|
|
# Test image
|
|
docker build -f Dockerfile.test -t finish:test .
|
|
```
|
|
|
|
### Publishing to GitHub Container Registry
|
|
|
|
The GitHub Actions workflow automatically publishes Docker images when you push a tag:
|
|
|
|
```bash
|
|
git tag -a v0.5.0 -m "Release v0.5.0"
|
|
git push origin v0.5.0
|
|
```
|
|
|
|
Images will be available at:
|
|
```
|
|
ghcr.io/appmodel/finish:0.5.0
|
|
ghcr.io/appmodel/finish:latest
|
|
```
|
|
|
|
### Publishing to Docker Hub
|
|
|
|
```bash
|
|
# Login
|
|
docker login
|
|
|
|
# Tag and push
|
|
docker tag finish:latest yourname/finish:0.5.0
|
|
docker tag finish:latest yourname/finish:latest
|
|
docker push yourname/finish:0.5.0
|
|
docker push yourname/finish:latest
|
|
```
|
|
|
|
## 5. GitHub Releases
|
|
|
|
### Automated Release Process
|
|
|
|
The `.github/workflows/release.yml` workflow automatically:
|
|
1. Creates release artifacts when you push a tag
|
|
2. Builds Debian packages
|
|
3. Publishes Docker images
|
|
4. Creates a GitHub release with downloads
|
|
|
|
### Manual Release Process
|
|
|
|
1. Create a release tarball:
|
|
```bash
|
|
git archive --format=tar.gz --prefix=finish-0.5.0/ v0.5.0 > finish-0.5.0.tar.gz
|
|
```
|
|
|
|
2. Create release on GitHub:
|
|
- Go to Releases → Draft a new release
|
|
- Tag: `v0.5.0`
|
|
- Title: `finish.sh v0.5.0`
|
|
- Upload: tarball and .deb file
|
|
- Write release notes
|
|
|
|
## Release Checklist
|
|
|
|
Before releasing a new version:
|
|
|
|
- [ ] Update all version numbers
|
|
- [ ] Update CHANGELOG.md
|
|
- [ ] Run all tests
|
|
- [ ] Test installation script
|
|
- [ ] Build and test Debian package
|
|
- [ ] Test Docker images
|
|
- [ ] Update documentation
|
|
- [ ] Create git tag
|
|
- [ ] Push tag to trigger CI/CD
|
|
- [ ] Verify GitHub release created
|
|
- [ ] Verify Docker images published
|
|
- [ ] Update Homebrew formula with new SHA256
|
|
- [ ] Test installation from all sources
|
|
- [ ] Announce release (if applicable)
|
|
|
|
## Distribution URLs
|
|
|
|
After publishing, users can install from:
|
|
|
|
**Quick Install:**
|
|
```bash
|
|
curl -sSL https://git.appmodel.nl/Tour/finish/raw/branch/main/docs/install.sh | bash
|
|
```
|
|
|
|
**Homebrew:**
|
|
```bash
|
|
brew tap appmodel/finish
|
|
brew install finish
|
|
```
|
|
|
|
**APT (if configured):**
|
|
```bash
|
|
sudo apt-get install finish
|
|
```
|
|
|
|
**Docker:**
|
|
```bash
|
|
docker pull ghcr.io/appmodel/finish:latest
|
|
```
|
|
|
|
**Direct Download:**
|
|
```
|
|
https://git.appmodel.nl/Tour/finish/releases/latest
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Debian Package Issues
|
|
|
|
**Problem:** Package won't install
|
|
```bash
|
|
# Check dependencies
|
|
dpkg-deb -I finish_*.deb
|
|
# Test installation
|
|
sudo dpkg -i finish_*.deb
|
|
sudo apt-get install -f
|
|
```
|
|
|
|
**Problem:** Lintian warnings
|
|
```bash
|
|
lintian finish_*.deb
|
|
# Fix issues in debian/ files
|
|
```
|
|
|
|
### Homebrew Issues
|
|
|
|
**Problem:** Formula audit fails
|
|
```bash
|
|
brew audit --strict ./homebrew/finish.rb
|
|
# Fix issues reported
|
|
```
|
|
|
|
**Problem:** Installation fails
|
|
```bash
|
|
brew install --verbose --debug ./homebrew/finish.rb
|
|
```
|
|
|
|
### Docker Issues
|
|
|
|
**Problem:** Build fails
|
|
```bash
|
|
docker build --no-cache -t finish:test .
|
|
```
|
|
|
|
**Problem:** Image too large
|
|
```bash
|
|
# Use multi-stage builds
|
|
# Remove unnecessary files
|
|
# Combine RUN commands
|
|
```
|
|
|
|
## Continuous Integration
|
|
|
|
The project includes three GitHub Actions workflows:
|
|
|
|
1. **test.yml** - Runs on every push/PR
|
|
- Runs BATS tests
|
|
- Tests installation
|
|
- Runs shellcheck
|
|
- Tests Docker builds
|
|
|
|
2. **docker.yml** - Builds and publishes Docker images
|
|
- Triggered by tags and main branch
|
|
- Publishes to GitHub Container Registry
|
|
|
|
3. **release.yml** - Creates releases
|
|
- Triggered by version tags
|
|
- Builds all artifacts
|
|
- Creates GitHub release
|
|
- Publishes packages
|
|
|
|
## Support and Documentation
|
|
|
|
- Update the README.md with installation instructions
|
|
- Maintain CHANGELOG.md with version history
|
|
- Create issue templates for bug reports and feature requests
|
|
- Set up discussions for community support
|
|
|
|
## Security Considerations
|
|
|
|
- Always use HTTPS for installation scripts
|
|
- Sign Debian packages with GPG
|
|
- Use checksums for release artifacts
|
|
- Regularly update dependencies
|
|
- Monitor for security vulnerabilities
|
|
|
|
## Next Steps
|
|
|
|
After initial publication:
|
|
1. Monitor GitHub issues for user feedback
|
|
2. Set up analytics if desired
|
|
3. Create documentation site
|
|
4. Announce on relevant forums/communities
|
|
5. Consider submitting to package manager directories
|