This document describes how to create releases for the pgEdge Natural Language Agent using GoReleaser.
- Go 1.24 or higher
- Node.js 20 or higher
- GoReleaser installed (
go install github.com/goreleaser/goreleaser@latest) - GitHub token with repo write permissions (for creating releases)
Each release creates the following artifacts:
- Linux: amd64, arm64
- macOS: amd64, arm64
- Windows: amd64
Architecture-specific archives containing:
pgedge-postgres-mcpbinary- Documentation (README.md, LICENSE.md, docs/)
- Example configuration files
- Linux: amd64, arm64
- macOS: amd64, arm64
- Windows: amd64
Architecture-specific archives containing:
pgedge-nla-clibinary- Documentation (README.md, LICENSE.md)
- CLI client usage guide
Platform-independent archive containing:
- Pre-built static web assets (from
web/dist/) - Web UI documentation
- License
This is a noarch package as it contains only static HTML/CSS/JS
files.
The KB Builder is no longer released from this repository. It now lives
in the standalone
pgEdge AI Knowledgebase Builder
project; releases there publish the pgedge-ai-kb-builder binary and
the kb.db database the MCP server consumes.
Before creating a release, test the build process locally:
# Run the test script
./test-goreleaser.shThis will:
- Build the Web UI
- Run all tests
- Create a snapshot build without publishing
- Generate all release artifacts in
dist/
Verify the generated archives:
# Extract and test server binary
tar -xzf dist/pgedge-nla-server_*_linux_x86_64.tar.gz
cd pgedge-nla-server_*_linux_x86_64
./pgedge-postgres-mcp --help
# Extract and test CLI binary
tar -xzf dist/pgedge-nla-cli_*_linux_x86_64.tar.gz
cd pgedge-nla-cli_*_linux_x86_64
./pgedge-nla-cli --help
# Extract and verify web UI
tar -xzf dist/pgedge-nla-web_*_noarch.tar.gz
ls -la web/dist/Update version information and changelog:
# Review changes since last release
git log $(git describe --tags --abbrev=0)..HEAD --oneline
# Update documentation if needed
vim README.md
vim docs/index.md# Create an annotated tag
git tag -a v1.0.0 -m "Release v1.0.0"
# Push the tag to trigger release workflow
git push origin v1.0.0When you push a tag starting with v, the GitHub Actions workflow
(.github/workflows/release.yml) will automatically:
- Check out the code
- Set up Go and Node.js
- Install dependencies
- Build the Web UI
- Run tests
- Execute GoReleaser to:
- Build binaries for all platforms
- Create archives
- Generate checksums
- Create GitHub release with changelog
- Upload all artifacts
Check the GitHub Actions workflow:
https://github.com/pgEdge/pgedge-postgres-mcp/actions
Once complete, verify the release:
https://github.com/pgEdge/pgedge-postgres-mcp/releases
The .github/workflows/release.yml workflow:
- Trigger: Push of tags matching
v* - Permissions: Writes to releases and packages
- Steps:
- Checkout with full history
- Set up Go 1.24
- Set up Node.js 20
- Build Web UI
- Run tests
- Execute GoReleaser
The .goreleaser.yaml configuration:
- Builds: Two separate binaries (server, CLI)
- Archives: Platform-specific tarballs/zips
- Checksums: SHA256 for all artifacts
- Changelog: Auto-generated from conventional commits
- Source: Includes source archive
Follow semantic versioning (semver):
- Major (v1.0.0 → v2.0.0): Breaking changes
- Minor (v1.0.0 → v1.1.0): New features, backwards-compatible
- Patch (v1.0.0 → v1.0.1): Bug fixes, backwards-compatible
Use conventional commit format for automatic changelog generation:
feat: Add new similarity search feature
fix: Resolve authentication token expiry issue
sec: Update dependencies to address CVE-2024-xxxxx
docs: Update deployment guide
test: Add integration tests for CLI client
chore: Update CI/CD configurationAfter a successful release:
- Verify Downloads: Test downloading and extracting artifacts
- Update Documentation: Ensure docs reflect the new version
- Announce: Update README badges, notify users
- Monitor: Watch for issues from users
- Check GitHub Actions logs
- Verify all tests pass locally
- Ensure Web UI builds successfully
# Validate configuration
goreleaser check
# Test locally first
./test-goreleaser.sh- Verify
.goreleaser.yamlincludes all necessary files - Check that Web UI
dist/directory exists - Ensure example configs are present
If automated release fails, you can release manually:
# Set GitHub token
export GITHUB_TOKEN="your-github-token"
# Run goreleaser manually
goreleaser release --clean