diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 390411a..4e52245 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -14,17 +14,18 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: - go-version: '1.21' + go-version: '1.25' + cache: true - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: '3.12' - name: Install podman-compose run: pip install podman-compose diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2f2b5ea --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,117 @@ +name: Release +run-name: "Making Release" +on: + push: + tags: + - 'v*.*.*' + +jobs: + build-and-release: + name: Build and Release + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.25' + cache: true + + - name: Get version from tag + id: get_version + run: | + echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + echo "Version: ${GITHUB_REF#refs/tags/}" + + - name: Build binaries for multiple platforms + run: | + mkdir -p dist + + # Linux AMD64 + GOOS=linux GOARCH=amd64 go build -o dist/pgsql-broker-linux-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/broker + + # Linux ARM64 + GOOS=linux GOARCH=arm64 go build -o dist/pgsql-broker-linux-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/broker + + # macOS AMD64 + GOOS=darwin GOARCH=amd64 go build -o dist/pgsql-broker-darwin-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/broker + + # macOS ARM64 (Apple Silicon) + GOOS=darwin GOARCH=arm64 go build -o dist/pgsql-broker-darwin-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/broker + + # Windows AMD64 + GOOS=windows GOARCH=amd64 go build -o dist/pgsql-broker-windows-amd64.exe -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/broker + + # Create checksums + cd dist + sha256sum * > checksums.txt + cd .. + + - name: Generate release notes + id: release_notes + run: | + # Get the previous tag + previous_tag=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") + + if [ -z "$previous_tag" ]; then + # No previous tag, get all commits + commits=$(git log --pretty=format:"- %s (%h)" --no-merges) + else + # Get commits since the previous tag + commits=$(git log "${previous_tag}..HEAD" --pretty=format:"- %s (%h)" --no-merges) + fi + + # Create release notes + cat > release_notes.md << EOF + # Release ${{ steps.get_version.outputs.VERSION }} + + ## Changes + + ${commits} + + ## Installation + + Download the appropriate binary for your platform: + + - **Linux (AMD64)**: \`pgsql-broker-linux-amd64\` + - **Linux (ARM64)**: \`pgsql-broker-linux-arm64\` + - **macOS (Intel)**: \`pgsql-broker-darwin-amd64\` + - **macOS (Apple Silicon)**: \`pgsql-broker-darwin-arm64\` + - **Windows (AMD64)**: \`pgsql-broker-windows-amd64.exe\` + + Make the binary executable (Linux/macOS): + \`\`\`bash + chmod +x pgsql-broker-* + \`\`\` + + Verify the download with the provided checksums. + EOF + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + body_path: release_notes.md + files: | + dist/pgsql-broker-linux-amd64 + dist/pgsql-broker-linux-arm64 + dist/pgsql-broker-darwin-amd64 + dist/pgsql-broker-darwin-arm64 + dist/pgsql-broker-windows-amd64.exe + dist/checksums.txt + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Summary + run: | + echo "Release ${{ steps.get_version.outputs.VERSION }} created successfully!" + echo "Binaries built for:" + echo " - Linux (amd64, arm64)" + echo " - macOS (amd64, arm64)" + echo " - Windows (amd64)" diff --git a/Makefile b/Makefile index c3b144c..2f89dbd 100644 --- a/Makefile +++ b/Makefile @@ -172,6 +172,31 @@ docker-down: ## Stop PostgreSQL test database fi @echo "PostgreSQL stopped" +release: ## Create and push a new release tag (auto-increments patch version) + @echo "Creating new release..." + @latest_tag=$$(git describe --tags --abbrev=0 2>/dev/null || echo ""); \ + if [ -z "$$latest_tag" ]; then \ + version="v1.0.0"; \ + echo "No existing tags found. Creating first release: $$version"; \ + commit_logs=$$(git log --pretty=format:"- %s" --no-merges); \ + else \ + echo "Latest tag: $$latest_tag"; \ + version_number=$${latest_tag#v}; \ + IFS='.' read -r major minor patch <<< "$$version_number"; \ + patch=$$((patch + 1)); \ + version="v$$major.$$minor.$$patch"; \ + echo "Creating new release: $$version"; \ + commit_logs=$$(git log "$${latest_tag}..HEAD" --pretty=format:"- %s" --no-merges); \ + fi; \ + if [ -z "$$commit_logs" ]; then \ + tag_message="Release $$version"; \ + else \ + tag_message="Release $$version\n\n$$commit_logs"; \ + fi; \ + git tag -a "$$version" -m "$$tag_message"; \ + git push origin "$$version"; \ + echo "Tag $$version created and pushed to remote repository." + help: ## Show this help message @echo "Usage: make [target]"