Skip to content

Commit 3e51d2d

Browse files
committed
fix: build names
1 parent 5206282 commit 3e51d2d

File tree

6 files changed

+245
-34
lines changed

6 files changed

+245
-34
lines changed

.goreleaser.yml

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,34 @@ before:
33
- go mod tidy
44

55
builds:
6-
- id: linux-amd64
6+
- id: pdf-joiner
7+
main: .
8+
binary: pdf-joiner
79
env:
810
- CGO_ENABLED=0
911
goos:
1012
- linux
11-
goarch:
12-
- amd64
13-
binary: "pdf-joiner-linux-amd64"
14-
ldflags:
15-
- -s -w
16-
17-
- id: linux-arm64
18-
env:
19-
- CGO_ENABLED=0
20-
goos:
21-
- linux
22-
goarch:
23-
- arm64
24-
binary: "pdf-joiner-linux-arm64"
25-
ldflags:
26-
- -s -w
27-
28-
- id: darwin-amd64
29-
env:
30-
- CGO_ENABLED=0
31-
goos:
3213
- darwin
3314
goarch:
3415
- amd64
35-
binary: "pdf-joiner-darwin-amd64"
36-
ldflags:
37-
- -s -w
38-
39-
- id: darwin-arm64
40-
env:
41-
- CGO_ENABLED=0
42-
goos:
43-
- darwin
44-
goarch:
4516
- arm64
46-
binary: "pdf-joiner-darwin-arm64"
4717
ldflags:
4818
- -s -w
19+
mod_timestamp: "{{ .CommitTimestamp }}"
20+
no_unique_dist_dir: false
21+
overrides:
22+
- goos: linux
23+
goarch: amd64
24+
binary: pdf-joiner-linux-amd64
25+
- goos: linux
26+
goarch: arm64
27+
binary: pdf-joiner-linux-arm64
28+
- goos: darwin
29+
goarch: amd64
30+
binary: pdf-joiner-darwin-amd64
31+
- goos: darwin
32+
goarch: arm64
33+
binary: pdf-joiner-darwin-arm64
4934

5035
archives:
5136
- format: tar.gz
@@ -61,4 +46,4 @@ snapshot:
6146

6247
release:
6348
draft: false
64-
prerelease: false
49+
prerelease: false

BLOG_POST_LINUX_SUPPORT.md

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
# 🐧 PDF Joiner Now Supports Linux: A Cross-Platform Success Story
2+
3+
*Published on June 25, 2025*
4+
5+
## Introduction
6+
7+
The PDF Joiner tool has just received a major update that brings full Linux support to this previously macOS-only utility. This enhancement transforms a simple PDF joining tool into a truly cross-platform solution, making it accessible to a much broader user base.
8+
9+
## What Changed?
10+
11+
The latest commit (`f6f5e17`) introduces comprehensive Linux support with intelligent tool detection and automatic installation capabilities. Here's what was added:
12+
13+
### 🎯 Key Features Added
14+
15+
1. **Automatic Linux Distribution Detection**
16+
- Detects Ubuntu, Debian, Fedora, RHEL/CentOS, and Arch Linux
17+
- Reads `/etc/os-release` and other distribution-specific files
18+
- Falls back to Debian-based systems if detection fails
19+
20+
2. **Multiple PDF Tool Backends**
21+
- **pdfunite** (poppler-utils) - Primary choice, fastest and most reliable
22+
- **ghostscript (gs)** - Widely available fallback option
23+
- **qpdf** - Alternative modern PDF tool
24+
25+
3. **Automatic Tool Installation**
26+
- Detects missing PDF tools and offers to install them
27+
- Uses appropriate package managers for each distribution
28+
- Provides clear feedback during installation process
29+
30+
## How It Works
31+
32+
### Smart Backend Selection
33+
34+
The tool now implements a priority-based approach for Linux PDF joining:
35+
36+
```go
37+
// Priority order of backends to try
38+
backends := []string{"pdfunite", "gs", "qpdf"}
39+
40+
for _, backend := range backends {
41+
if _, err := exec.LookPath(backend); err == nil {
42+
return &LinuxJoiner{backend: backend, command: backend}, nil
43+
}
44+
}
45+
```
46+
47+
### Distribution-Aware Installation
48+
49+
When no PDF tools are found, the tool automatically detects your Linux distribution and installs the necessary packages:
50+
51+
```bash
52+
# Ubuntu/Debian
53+
sudo apt-get install poppler-utils ghostscript
54+
55+
# Fedora
56+
sudo dnf install poppler-utils ghostscript
57+
58+
# RHEL/CentOS
59+
sudo yum install poppler-utils ghostscript
60+
61+
# Arch Linux
62+
sudo pacman -S poppler ghostscript
63+
```
64+
65+
## Usage Examples
66+
67+
### Basic Usage (Same Across Platforms)
68+
69+
```bash
70+
# Join multiple PDFs with automatic output naming
71+
./pdf-joiner file1.pdf file2.pdf file3.pdf
72+
73+
# Specify custom output filename
74+
./pdf-joiner -o combined_document.pdf file1.pdf file2.pdf file3.pdf
75+
```
76+
77+
### Linux-Specific Features
78+
79+
The tool now provides helpful feedback when setting up on Linux:
80+
81+
```bash
82+
$ ./pdf-joiner file1.pdf file2.pdf
83+
No PDF joining tools found. Attempting to install them...
84+
Detected Linux distribution: debian
85+
Installing PDF tools for Debian/Ubuntu...
86+
PDF tools installed successfully!
87+
Successfully joined PDFs into: combined_20250625_143812.pdf
88+
```
89+
90+
## Technical Implementation
91+
92+
### Cross-Platform Architecture
93+
94+
The implementation uses a clean interface-based design:
95+
96+
```go
97+
type PDFJoiner interface {
98+
Join(inputFiles []string, outputPath string) error
99+
IsAvailable() bool
100+
GetName() string
101+
}
102+
103+
type MacOSJoiner struct{}
104+
type LinuxJoiner struct {
105+
backend string
106+
command string
107+
}
108+
```
109+
110+
### OS Detection and Backend Selection
111+
112+
```go
113+
func NewPDFJoiner() (PDFJoiner, error) {
114+
switch runtime.GOOS {
115+
case "darwin":
116+
return &MacOSJoiner{}, nil
117+
case "linux":
118+
return NewLinuxJoiner()
119+
default:
120+
return nil, fmt.Errorf("unsupported operating system: %s", runtime.GOOS)
121+
}
122+
}
123+
```
124+
125+
## Benefits for Users
126+
127+
### 🔄 Seamless Cross-Platform Experience
128+
- Same command-line interface on macOS and Linux
129+
- Automatic platform detection
130+
- Consistent output formatting
131+
132+
### 🚀 Zero-Configuration Setup
133+
- Automatically detects available PDF tools
134+
- Installs missing dependencies when needed
135+
- Provides clear error messages and solutions
136+
137+
### 🛡️ Robust Fallback System
138+
- Multiple PDF tool options ensure compatibility
139+
- Graceful degradation if preferred tools aren't available
140+
- Clear feedback about which backend is being used
141+
142+
## Supported Linux Distributions
143+
144+
The tool now supports all major Linux distributions:
145+
146+
| Distribution | Package Manager | PDF Tools |
147+
|--------------|----------------|-----------|
148+
| Ubuntu/Debian | apt-get | poppler-utils, ghostscript |
149+
| Fedora | dnf | poppler-utils, ghostscript |
150+
| RHEL/CentOS | yum | poppler-utils, ghostscript |
151+
| Arch Linux | pacman | poppler, ghostscript |
152+
153+
## Installation and Setup
154+
155+
### Quick Start
156+
157+
1. **Download the latest release** from the [GitHub releases page](https://github.com/vinitkumar/pdf-joiner/releases)
158+
2. **Make it executable**: `chmod +x pdf-joiner`
159+
3. **Run it**: The tool will automatically detect your system and install any missing dependencies
160+
161+
### From Source
162+
163+
```bash
164+
git clone https://github.com/vinitkumar/pdf-joiner.git
165+
cd pdf-joiner
166+
go build -o pdf-joiner
167+
./pdf-joiner file1.pdf file2.pdf
168+
```
169+
170+
## Testing and Quality Assurance
171+
172+
The implementation includes comprehensive tests that verify:
173+
174+
- ✅ Cross-platform compatibility
175+
- ✅ Backend detection and selection
176+
- ✅ Error handling for missing tools
177+
- ✅ Distribution detection accuracy
178+
- ✅ Installation process reliability
179+
180+
## Performance Comparison
181+
182+
| Backend | Speed | Reliability | Availability |
183+
|---------|-------|-------------|--------------|
184+
| pdfunite | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
185+
| ghostscript | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
186+
| qpdf | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
187+
188+
## Future Roadmap
189+
190+
This Linux support addition opens up several exciting possibilities:
191+
192+
- **Windows Support**: Extend to Windows using tools like PDFtk or Ghostscript
193+
- **Docker Support**: Containerized versions for CI/CD pipelines
194+
- **GUI Interface**: Web-based or native GUI for non-technical users
195+
- **Batch Processing**: Support for processing multiple PDF sets
196+
- **Cloud Integration**: Direct integration with cloud storage services
197+
198+
## Community Impact
199+
200+
This enhancement demonstrates the power of open-source collaboration:
201+
202+
- **Increased Accessibility**: Linux users can now benefit from this tool
203+
- **Cross-Platform Standards**: Sets a precedent for Go-based cross-platform tools
204+
- **Community-Driven**: Built based on community feedback and requirements
205+
206+
## Conclusion
207+
208+
The addition of Linux support to PDF Joiner represents a significant milestone in making this tool truly cross-platform. The intelligent detection, automatic installation, and robust fallback system ensure that users across different Linux distributions can seamlessly join PDF files without worrying about dependencies or compatibility issues.
209+
210+
This implementation serves as an excellent example of how to build cross-platform Go applications that provide a consistent user experience while leveraging platform-specific optimizations.
211+
212+
### Get Started Today
213+
214+
```bash
215+
# Download and try it out
216+
curl -L https://github.com/vinitkumar/pdf-joiner/releases/latest/download/pdf-joiner-linux-amd64 -o pdf-joiner
217+
chmod +x pdf-joiner
218+
./pdf-joiner your-file1.pdf your-file2.pdf
219+
```
220+
221+
---
222+
223+
*The PDF Joiner tool is now truly cross-platform, bringing the same reliable PDF joining capabilities to Linux users that macOS users have enjoyed. This update exemplifies the best practices in cross-platform Go development and user experience design.*
224+
225+
**GitHub Repository**: [vinitkumar/pdf-joiner](https://github.com/vinitkumar/pdf-joiner)
226+
**Latest Release**: [v1.2.3](https://github.com/vinitkumar/pdf-joiner/releases/tag/v1.2.3)
1.73 MB
Binary file not shown.
1.73 MB
Binary file not shown.
1.75 MB
Binary file not shown.
1.75 MB
Binary file not shown.

0 commit comments

Comments
 (0)