Skip to content
Open
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
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ jobs:
with:
go-version: '1.21'
- name: Build
run: VERSION="${{ steps.version.outputs.VERSION }}" make all
run: BUILDVCS_FLAG=-buildvcs=false VERSION="${{ steps.version.outputs.VERSION }}" make all


4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
go-version: '1.21'

- name: Build all binaries
run: VERSION=${{ steps.version.outputs.VERSION }} make all deb
run: BUILDVCS_FLAG=-buildvcs=false VERSION=${{ steps.version.outputs.VERSION }} make all deb

- name: Upload artifacts
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -76,7 +76,7 @@ jobs:
echo "Resolved VERSION=${{ steps.version.outputs.VERSION }}"

- name: Build RPM package
run: VERSION=${{ steps.version.outputs.VERSION }} make rpm
run: BUILDVCS_FLAG=-buildvcs=false VERSION=${{ steps.version.outputs.VERSION }} make rpm

- name: Copy RPMs to workspace
run: |
Expand Down
39 changes: 24 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
MANSECTION ?= 1
SHELL=/bin/bash
# Sanitize VERSION for use in filenames and tar transform expressions
# Replace forward slashes with dashes to avoid issues with tar --transform

# Conditionally disable VCS info embedding in Go builds
# Set BUILDVCS_FLAG=-buildvcs=false when:
# - Building in CI environments where .git may not be accessible
# - Building in containers/chroots where git metadata is unavailable
# - VCS info is not needed (default: embed VCS info if available)
BUILDVCS_FLAG ?=

# Sanitize VERSION for use in filenames and directories
# Replace forward slashes with dashes to avoid issues with directory and filename creation
VERSION_SAFE = $(subst /,-,$(VERSION))

.PHONY: clean snap rpm rpm-setup rpm-local rpm-clean ci-sim-ubuntu ci-sim-fedora ci-sim
default: linux
all: linux windows darwin freebsd
Expand Down Expand Up @@ -40,38 +49,38 @@ snap:
snapcraft pack

bin/linux-amd64/mdview: manpage
env GOOS=linux GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview
env GOOS=linux GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-amd64/mdview
cp mdview.1 bin/linux-amd64/
tar czvf mdview-$(VERSION_SAFE)-linux-amd64.tar.gz --transform s/linux-amd64/mdview-$(VERSION_SAFE)/ -C bin linux-amd64
mkdir -p bin/mdview-$(VERSION_SAFE)-linux-amd64 && cp -r bin/linux-amd64/* bin/mdview-$(VERSION_SAFE)-linux-amd64/ && tar czvf mdview-$(VERSION_SAFE)-linux-amd64.tar.gz -C bin mdview-$(VERSION_SAFE)-linux-amd64 && rm -rf bin/mdview-$(VERSION_SAFE)-linux-amd64

bin/linux-i386/mdview:
env GOOS=linux GOARCH=386 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview
env GOOS=linux GOARCH=386 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-i386/mdview
cp mdview.1 bin/linux-i386/
tar czvf mdview-$(VERSION_SAFE)-linux-i386.tar.gz --transform s/linux-i386/mdview-$(VERSION_SAFE)/ -C bin linux-i386
mkdir -p bin/mdview-$(VERSION_SAFE)-linux-i386 && cp -r bin/linux-i386/* bin/mdview-$(VERSION_SAFE)-linux-i386/ && tar czvf mdview-$(VERSION_SAFE)-linux-i386.tar.gz -C bin mdview-$(VERSION_SAFE)-linux-i386 && rm -rf bin/mdview-$(VERSION_SAFE)-linux-i386

bin/linux-arm64/mdview:
env GOOS=linux GOARCH=arm64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview
env GOOS=linux GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/linux-arm64/mdview
cp mdview.1 bin/linux-arm64/
tar czvf mdview-$(VERSION_SAFE)-linux-arm64.tar.gz --transform s/linux-arm64/mdview-$(VERSION_SAFE)/ -C bin linux-arm64
mkdir -p bin/mdview-$(VERSION_SAFE)-linux-arm64 && cp -r bin/linux-arm64/* bin/mdview-$(VERSION_SAFE)-linux-arm64/ && tar czvf mdview-$(VERSION_SAFE)-linux-arm64.tar.gz -C bin mdview-$(VERSION_SAFE)-linux-arm64 && rm -rf bin/mdview-$(VERSION_SAFE)-linux-arm64

bin/windows-amd64/mdview.exe:
env GOOS=windows GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe
env GOOS=windows GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/windows-amd64/mdview.exe
zip -j mdview-$(VERSION_SAFE)-windows-amd64.zip bin/windows-amd64/mdview.exe

bin/darwin-amd64/mdview:
env GOOS=darwin GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview
env GOOS=darwin GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-amd64/mdview
cp mdview.1 bin/darwin-amd64/
tar czvf mdview-$(VERSION_SAFE)-darwin-amd64.tar.gz --transform s/darwin-amd64/mdview-$(VERSION_SAFE)/ -C bin darwin-amd64
mkdir -p bin/mdview-$(VERSION_SAFE)-darwin-amd64 && cp -r bin/darwin-amd64/* bin/mdview-$(VERSION_SAFE)-darwin-amd64/ && tar czvf mdview-$(VERSION_SAFE)-darwin-amd64.tar.gz -C bin mdview-$(VERSION_SAFE)-darwin-amd64 && rm -rf bin/mdview-$(VERSION_SAFE)-darwin-amd64

bin/darwin-arm64/mdview:
env GOOS=darwin GOARCH=arm64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview
env GOOS=darwin GOARCH=arm64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/darwin-arm64/mdview
cp mdview.1 bin/darwin-arm64/
tar czvf mdview-$(VERSION_SAFE)-darwin-arm64.tar.gz --transform s/darwin-arm64/mdview-$(VERSION_SAFE)/ -C bin darwin-arm64
mkdir -p bin/mdview-$(VERSION_SAFE)-darwin-arm64 && cp -r bin/darwin-arm64/* bin/mdview-$(VERSION_SAFE)-darwin-arm64/ && tar czvf mdview-$(VERSION_SAFE)-darwin-arm64.tar.gz -C bin mdview-$(VERSION_SAFE)-darwin-arm64 && rm -rf bin/mdview-$(VERSION_SAFE)-darwin-arm64

bin/freebsd-amd64/mdview:
env GOOS=freebsd GOARCH=amd64 go build -buildvcs=false -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview
env GOOS=freebsd GOARCH=amd64 go build $(BUILDVCS_FLAG) -ldflags "-X main.appVersion=$(VERSION)" -o ./bin/freebsd-amd64/mdview
cp mdview.1 bin/freebsd-amd64/mdview
tar czvf mdview-$(VERSION_SAFE)-freebsd-amd64.tar.gz --transform s/freebsd-amd64/mdview-$(VERSION_SAFE)/ -C bin freebsd-amd64
mkdir -p bin/mdview-$(VERSION_SAFE)-freebsd-amd64 && cp -r bin/freebsd-amd64/* bin/mdview-$(VERSION_SAFE)-freebsd-amd64/ && tar czvf mdview-$(VERSION_SAFE)-freebsd-amd64.tar.gz -C bin mdview-$(VERSION_SAFE)-freebsd-amd64 && rm -rf bin/mdview-$(VERSION_SAFE)-freebsd-amd64

clean:
rm -rf bin
Expand Down
25 changes: 25 additions & 0 deletions PACKAGING.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,30 @@ make rpm-local VERSION=1.6.4
| `make ci-sim-fedora` | Simulate Fedora CI build locally |
| `make ci-sim` | Run both CI simulations |

### VCS Information in Binaries

By default, Go embeds version control system (VCS) information into binaries when building from a git repository. This includes the commit hash, modification status, and timestamp.

The Makefile supports a `BUILDVCS_FLAG` variable to control this behavior:
- **Default (local builds)**: VCS info is embedded when available
- **CI/Container builds**: Use `BUILDVCS_FLAG=-buildvcs=false` to disable VCS embedding

**When to disable VCS embedding:**
- Building in CI environments where `.git` directory may not be accessible
- Building in containers/chroots where git metadata is unavailable
- Creating reproducible builds in containerized packaging systems

**Example:**
```bash
# Local build with VCS info (default)
make linux VERSION=1.6.4

# CI/container build without VCS info
BUILDVCS_FLAG=-buildvcs=false make linux VERSION=1.6.4
```

The CI workflows and simulation scripts automatically set this flag for reproducible builds.

## Installing Built Packages

### Debian
Expand Down Expand Up @@ -260,3 +284,4 @@ The project is already available via:
- Makefile VERSION parameter should use `X.Y.Z` (no `v` prefix)
- The build system automatically strips the `v` prefix where needed
- RPM VERSION is sanitized to replace invalid characters with dots

2 changes: 1 addition & 1 deletion scripts/ci-sim-ubuntu.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ if ! version_ge "$INSTALLED" "$GO_VERSION"; then
wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -O "$TARFILE"
wget -q "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz.sha256" -O "$CHECKSUM_FILE"
# Verify checksum
grep -oE '^[0-9a-f]+' "$CHECKSUM_FILE" | awk '{print $1 " " ENVIRON["TARFILE"]}' > "$CHECKSUM_FILE.checked"
grep -oE '^[0-9a-f]+' "$CHECKSUM_FILE" | awk -v tf="$TARFILE" '{print $1 " " tf}' > "$CHECKSUM_FILE.checked"
sha256sum -c "$CHECKSUM_FILE.checked"
rm -rf /usr/local/go
tar -C /usr/local -xzf "$TARFILE"
Expand Down
Loading