Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: 'Get Previous tag'
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v2"
- name: Set version
run: |
export VERSION=${{ steps.previoustag.outputs.tag }}
with:
fetch-depth: 0
- name: Setup tools
run: sudo apt-get install pandoc
- name: Set up Go
Expand All @@ -22,6 +18,9 @@ jobs:
go-version-file: 'go.mod'
- name: Install just
uses: extractions/setup-just@v4
- name: Install goreleaser
uses: goreleaser/goreleaser-action@v6
with:
install-only: true
- name: Build
run: VERSION="${{ steps.previoustag.outputs.tag }}" just all

run: just build
32 changes: 9 additions & 23 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: 'Get Previous tag'
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v2"
with:
fetch-depth: 0
- name: Setup tools
run: sudo apt-get install pandoc
- name: Set up Go
Expand All @@ -24,24 +23,11 @@ jobs:
go-version-file: 'go.mod'
- name: Install just
uses: extractions/setup-just@v4
- name: Build
run: |
VERSION="${{ steps.previoustag.outputs.tag }}" just all
VERSION="${{ steps.previoustag.outputs.tag }}" just deb
- name: Release
uses: softprops/action-gh-release@v2
- name: Install goreleaser
uses: goreleaser/goreleaser-action@v6
with:
draft: true
prerelease: false
name: ${{ steps.previoustag.outputs.tag }}
tag_name: ${{ steps.previoustag.outputs.tag }}
files: |
mdview-${{ steps.previoustag.outputs.tag }}-linux-amd64.tar.gz
mdview-${{ steps.previoustag.outputs.tag }}-linux-i386.tar.gz
mdview-${{ steps.previoustag.outputs.tag }}-linux-arm64.tar.gz
mdview-${{ steps.previoustag.outputs.tag }}-darwin-amd64.tar.gz
mdview-${{ steps.previoustag.outputs.tag }}-darwin-arm64.tar.gz
mdview-${{ steps.previoustag.outputs.tag }}-windows-amd64.zip
mdview-${{ steps.previoustag.outputs.tag }}-freebsd-amd64.tar.gz
mdview_${{ steps.previoustag.outputs.tag }}_amd64.deb
mdview_${{ steps.previoustag.outputs.tag }}_arm64.deb
install-only: true
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: just release
6 changes: 2 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
bin/*
mdview
mdview.exe
dist/
*.tar.gz
freebsd-amd64.tar.gz
linux-amd64.tar.gz
*.zip
prime/
parts/
.snapcraft
*.snap
package/*
*.deb
*.rpm
mdview.1
mise.toml
78 changes: 78 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
version: 2

before:
hooks:
- just manpage

builds:
- id: mdview
main: .
binary: mdview
ldflags:
- -s -w -X main.appVersion={{.Version}}
goos:
- linux
- windows
- darwin
- freebsd
goarch:
- amd64
- arm64
ignore:
- goos: windows
goarch: arm64
- goos: freebsd
goarch: arm64

- id: mdview-linux-386
main: .
binary: mdview
ldflags:
- -s -w -X main.appVersion={{.Version}}
goos:
- linux
goarch:
- "386"

archives:
- id: mdview
ids:
- mdview
- mdview-linux-386
name_template: "mdview-{{.Version}}-{{.Os}}-{{.Arch}}"
formats:
- tar.gz
format_overrides:
- goos: windows
formats:
- zip
files:
- mdview.1

nfpms:
- id: mdview
ids:
- mdview
package_name: mdview
file_name_template: "mdview_{{.Version}}_{{.Arch}}"
vendor: bugzapperlabs.com
maintainer: bugzapperlabs.com
description: "Markdown View - Command line utility to format markdown and launch it in a browser."
section: custom
priority: optional
formats:
- deb
- rpm
bindir: /usr/bin
contents:
- src: mdview.1
dst: /usr/share/man/man1/mdview.1

checksum:
name_template: "checksums.txt"

release:
draft: true

changelog:
disable: true
36 changes: 22 additions & 14 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,21 @@ no other Go source files and no test files currently in the repo.

## Build & run

Requires Go (see `go.mod`/`mise.toml` for version) and, for packaging targets, `just` and `pandoc`.
Requires Go (see `go.mod`/`mise.toml` for version) and, for packaging, `just`, `pandoc`, and
[`goreleaser`](https://goreleaser.com/).

- Quick local build: `go build` (produces `./mdview`)
- Run directly without building: `go run . <filename.md>`
- Full cross-platform build via `just` (uses `justfile`, the project's task runner — replaced the old Makefile):
- `just` or `just linux` — Linux amd64/arm64/i386 builds
- `just all` — linux + windows + darwin + freebsd
- `just deb` — build `.deb` packages (requires a prior linux build)
- `just snap` — build snap package via `snapcraft`
- `just clean` — remove build artifacts
- Pass `VERSION=x.y.z` as an env var to any target to stamp the version (embedded via `-ldflags -X main.appVersion=...`); CI derives this from the previous git tag.
- `just manpage` regenerates `mdview.1` from `mdview.1.md` via pandoc.
- Full cross-platform build + packaging via `just` (uses `justfile`, which thinly wraps
`goreleaser`; config lives in `.goreleaser.yaml`):
- `just` or `just build` — cross-compiles all platform binaries via `goreleaser build --snapshot` (linux amd64/arm64/386, windows amd64, darwin amd64/arm64, freebsd amd64)
- `just release-snapshot` — full local dry run producing archives + `.deb`/`.rpm` packages in `dist/` without publishing
- `just release` — the real release (`goreleaser release --clean`); publishes a draft GitHub release, run from CI on tag push
- `just check` — validates `.goreleaser.yaml`
- `just snap` — build snap package via `snapcraft` (kept separate; goreleaser doesn't build snaps)
- `just clean` — remove build artifacts (`dist/`, `mdview.1`, `*.snap`)
- `just manpage` regenerates `mdview.1` from `mdview.1.md` via pandoc; goreleaser runs this automatically as a `before.hooks` step.
- Versioning is read directly from git tags by goreleaser (embedded via `-ldflags -X main.appVersion={{.Version}}`) — there's no `VERSION` env var to pass anymore.
- There is no test suite and no lint target configured; `go vet ./...` and `gofmt` are reasonable sanity checks before committing.

## Architecture
Expand All @@ -46,8 +49,13 @@ Output location resolution order: `MDVIEW_DIR` env var → (if running as a Snap

### Packaging

`justfile`, `control` (Debian control file template, `VERSION` substituted at build time), `mdview.1.md`
(man page source) and `snap/` all support the release pipeline in `.github/workflows/release.yml`,
which triggers on tag push, builds all platform targets + deb packages via `just`, and publishes a
draft GitHub release with `softprops/action-gh-release`. `.github/workflows/build.yml` runs the same
`just all` build on every push as a CI check (no tests to run).
`.goreleaser.yaml` drives cross-platform binary builds, archives (`.tar.gz`/`.zip`), and `.deb`/
`.rpm` packages (via goreleaser's built-in `nfpm` integration — no more hand-rolled `control` file
or `dpkg-deb` invocation). `justfile` wraps the `goreleaser` CLI so `just <target>` stays the single
local entry point. `mdview.1.md` (man page source) and `snap/` (built separately via `just snap`,
outside goreleaser) round out packaging.

`.github/workflows/release.yml` triggers on tag push, runs `just release`, and publishes a draft
GitHub release (goreleaser reads the version straight from the pushed git tag — no more
previous-tag lookup step). `.github/workflows/build.yml` runs `just build` (a `goreleaser build
--snapshot`) on every push as a CI sanity check (no tests to run).
24 changes: 22 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,25 @@ To remove the package:
sudo dpkg --remove mdview
```

### RPM Package

If you're running Fedora or another RPM-based distro, download the package and
install it from the [Releases](https://github.com/mapitman/mdview/releases) page.

```sh
curl -s https://api.github.com/repos/mapitman/mdview/releases/latest \
| grep "browser_download_url.*amd64.rpm" \
| cut -d '"' -f 4 \
| xargs curl -L -o mdview_lastest_amd64.rpm
sudo rpm -i mdview_lastest_amd64.rpm
```

To remove the package:

```sh
sudo rpm -e mdview
```

### Snap Package

_Update: The snap package has been fixed and the latest version is now available as a snap._ 🥳
Expand All @@ -121,13 +140,14 @@ Don't have snapd?
### Manual Download and Install

Grab the correct binary for your operating system
[here](https://github.com/mapitman/mdview/releases/).
[here](https://github.com/mapitman/mdview/releases/). Linux, macOS, Windows, and FreeBSD
binaries are all published with every release.

### Compile Yourself

If you have Golang installed...
```sh
go get github.com/mapitman/mdview
go install github.com/mapitman/mdview@latest
```

Don't have Golang? [Get it now](https://golang.org/doc/install).
Expand Down
10 changes: 0 additions & 10 deletions control

This file was deleted.

80 changes: 10 additions & 70 deletions justfile
Original file line number Diff line number Diff line change
@@ -1,84 +1,24 @@
set shell := ["/bin/bash", "-c"]

VERSION := env_var_or_default("VERSION", "")
default: build

MANSECTION := env_var_or_default("MANSECTION", "1")
check:
goreleaser check

default: linux
all: linux windows darwin freebsd
build:
goreleaser build --snapshot --clean

linux: bin-linux-amd64-mdview bin-linux-arm64-mdview bin-linux-i386-mdview
windows: bin-windows-amd64-mdview-exe
darwin: bin-darwin-amd64-mdview bin-darwin-arm64-mdview
freebsd: bin-freebsd-amd64-mdview
release-snapshot:
goreleaser release --snapshot --clean --skip=publish

deb: deb-linux-amd64 deb-linux-arm64

deb-linux-amd64: bin-linux-amd64-mdview
mkdir -p package/DEBIAN
mkdir -p package/usr/bin/
mkdir -p package/usr/share/man/man1/
cp control package/DEBIAN/
sed -i "s/VERSION/{{VERSION}}/g" package/DEBIAN/control
cp -r bin/linux-amd64/mdview package/usr/bin/mdview
cp mdview.1 package/usr/share/man/man1/
dpkg-deb --build package
mv package.deb mdview_{{VERSION}}_amd64.deb

deb-linux-arm64: bin-linux-arm64-mdview
mkdir -p package/DEBIAN
mkdir -p package/usr/bin/
mkdir -p package/usr/share/man/man1/
cp control package/DEBIAN/
sed -i "s/VERSION/{{VERSION}}/g" package/DEBIAN/control
cp -r bin/linux-arm64/mdview package/usr/bin/mdview
cp mdview.1 package/usr/share/man/man1/
dpkg-deb --build package
mv package.deb mdview_{{VERSION}}_arm64.deb
release:
goreleaser release --clean

snap:
snapcraft pack

bin-linux-amd64-mdview: manpage
env GOOS=linux GOARCH=amd64 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/linux-amd64/mdview
cp mdview.1 bin/linux-amd64/
tar czvf mdview-{{VERSION}}-linux-amd64.tar.gz --transform s/linux-amd64/mdview-{{VERSION}}/ -C bin linux-amd64

bin-linux-i386-mdview:
env GOOS=linux GOARCH=386 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/linux-i386/mdview
cp mdview.1 bin/linux-i386/
tar czvf mdview-{{VERSION}}-linux-i386.tar.gz --transform s/linux-i386/mdview-{{VERSION}}/ -C bin linux-i386

bin-linux-arm64-mdview:
env GOOS=linux GOARCH=arm64 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/linux-arm64/mdview
cp mdview.1 bin/linux-arm64/
tar czvf mdview-{{VERSION}}-linux-arm64.tar.gz --transform s/linux-arm64/mdview-{{VERSION}}/ -C bin linux-arm64

bin-windows-amd64-mdview-exe:
env GOOS=windows GOARCH=amd64 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/windows-amd64/mdview.exe
zip -j mdview-{{VERSION}}-windows-amd64.zip bin/windows-amd64/mdview.exe

bin-darwin-amd64-mdview:
env GOOS=darwin GOARCH=amd64 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/darwin-amd64/mdview
cp mdview.1 bin/darwin-amd64/
tar czvf mdview-{{VERSION}}-darwin-amd64.tar.gz --transform s/darwin-amd64/mdview-{{VERSION}}/ -C bin darwin-amd64

bin-darwin-arm64-mdview:
env GOOS=darwin GOARCH=arm64 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/darwin-arm64/mdview
cp mdview.1 bin/darwin-arm64/
tar czvf mdview-{{VERSION}}-darwin-arm64.tar.gz --transform s/darwin-arm64/mdview-{{VERSION}}/ -C bin darwin-arm64

bin-freebsd-amd64-mdview:
env GOOS=freebsd GOARCH=amd64 go build -ldflags "-X main.appVersion={{VERSION}}" -o ./bin/freebsd-amd64/mdview
cp mdview.1 bin/freebsd-amd64/mdview
tar czvf mdview-{{VERSION}}-freebsd-amd64.tar.gz --transform s/freebsd-amd64/mdview-{{VERSION}}/ -C bin freebsd-amd64

clean:
rm -rf bin
rm -rf package
rm -f *.tar.gz
rm -f *.zip
rm -f *.deb
rm -rf dist
rm -f mdview.1
rm -f *.snap

Expand Down
Loading