From 11513f541b238890dbcb606efeb5a42a81edf889 Mon Sep 17 00:00:00 2001 From: Hein Date: Sat, 7 Dec 2024 11:46:52 +0200 Subject: [PATCH] Port from pv repo --- .github/workflows/ci.yaml | 31 ++++ .github/workflows/release.yml | 29 ++++ .goreleaser.yml | 0 README.md | 123 +++++++++++++- README.pdf | Bin 0 -> 42744 bytes examples/dot.git/hooks/pre-commit | 2 + go.mod | 8 + go.sum | 12 ++ main.go | 265 ++++++++++++++++++++++++++++++ 9 files changed, 469 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/release.yml create mode 100644 .goreleaser.yml create mode 100644 README.pdf create mode 100644 examples/dot.git/hooks/pre-commit create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..f8dc9e2 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,31 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + test: + name: Run Tests + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.21' + + - name: Install dependencies + run: go mod download + + - name: Run tests + run: go test -v ./... + + - name: Run linting + uses: golangci/golangci-lint-action@v4 + with: + version: latest \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0dbf766 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.21' + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v5 + with: + distribution: goreleaser + version: latest + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index a6cd044..4c9ecc7 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,123 @@ # go-mdtopdf-helper -MD to PDF helper in Go + +A command-line tool that automatically converts Markdown files to PDF using wkhtmltopdf. Perfect for maintaining PDF documentation alongside your Markdown files in Git repositories. + +## Features + +- Converts Markdown files to high-quality PDFs +- Can run as a Git pre-commit hook +- Recursive directory scanning +- Parallel file processing +- Cross-platform support (Windows, Linux, macOS) +- Automatic detection of wkhtmltopdf installation + +## Prerequisites + +This tool requires [wkhtmltopdf](https://wkhtmltopdf.org/) to be installed on your system. The application will check for its presence in standard installation locations: + +- Windows: `C:\Program Files\wkhtmltopdf\bin` +- Linux: `/usr/local/bin/wkhtmltopdf` or `/usr/bin/wkhtmltopdf` +- macOS: `/usr/local/bin/wkhtmltopdf` or via Homebrew + +If wkhtmltopdf is not found, you will be prompted to install it. + +## Installation + +```bash +go get github.com/Warky-Devs/go-mdtopdf-helper +``` + +## Usage + +### Basic Usage + +Convert Markdown files in the current directory: + +```bash +go-mdtopdf-helper +``` + +### Command Line Options + +```bash +go-mdtopdf-helper [options] + +Options: + -dir string + Directory to scan for markdown files (default ".") + -recursive + Scan directories recursively (default true) + -parallel + Convert files in parallel (default true) + -hook + Run as git pre-commit hook +``` + +### Git Pre-commit Hook + +To use as a Git pre-commit hook: + +1. Create a file named `pre-commit` in your repository's `.git/hooks/` directory +2. Add the following content: + +```bash +#!/bin/sh +go-mdtopdf-helper -hook +``` + +3. Make the hook executable: + +```bash +chmod +x .git/hooks/pre-commit +``` + +When enabled as a pre-commit hook, the tool will: +1. Detect staged Markdown files +2. Ask for confirmation before conversion +3. Convert files to PDF +4. Automatically stage the generated PDFs + +## PDF Output Configuration + +The generated PDFs are configured with: +- 300 DPI resolution +- 15mm margins on all sides +- Local file access enabled for images +- Support for common Markdown extensions + +## Contributing + +Contributions are welcome! Please feel free to submit a Pull Request. Here's how you can contribute: + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +### Development Setup + +1. Clone the repository +2. Install dependencies: + ```bash + go mod download + ``` +3. Make your changes +4. Run tests: + ```bash + go test ./... + ``` + +## Dependencies + +- [go-wkhtmltopdf](https://github.com/SebastiaanKlippert/go-wkhtmltopdf) - Go wrapper for wkhtmltopdf +- [gomarkdown](https://github.com/gomarkdown/markdown) - Markdown parser and HTML renderer + +## License + +This project is licensed under the MIT License - see the LICENSE file for details. + +## Acknowledgments + +- Thanks to [SebastiaanKlippert](https://github.com/SebastiaanKlippert) for the go-wkhtmltopdf library +- Thanks to the gomarkdown team for their Markdown parser \ No newline at end of file diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c56c33ee44896b6fc77d66b3e9746c5b680c3970 GIT binary patch literal 42744 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